From ea709aab59f51a784b735299e1f0808fd30d9fad Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Tue, 4 Aug 2020 01:31:22 +0200 Subject: [PATCH 001/157] [libcalamaresui] Swap out unstructured string for structured data --- src/calamares/DebugWindow.cpp | 2 +- src/calamares/testmain.cpp | 2 +- src/libcalamaresui/modulesystem/ModuleManager.cpp | 6 +++--- src/libcalamaresui/modulesystem/ModuleManager.h | 2 +- src/libcalamaresui/viewpages/ExecutionViewStep.cpp | 4 ++-- src/libcalamaresui/viewpages/ExecutionViewStep.h | 5 +++-- 6 files changed, 11 insertions(+), 10 deletions(-) diff --git a/src/calamares/DebugWindow.cpp b/src/calamares/DebugWindow.cpp index 82533a648e..9e2bdc5016 100644 --- a/src/calamares/DebugWindow.cpp +++ b/src/calamares/DebugWindow.cpp @@ -193,7 +193,7 @@ DebugWindow::DebugWindow() #endif ] { QString moduleName = m_ui->modulesListView->currentIndex().data().toString(); - Module* module = ModuleManager::instance()->moduleInstance( moduleName ); + Module* module = ModuleManager::instance()->moduleInstance( ModuleSystem::InstanceKey::fromString( moduleName ) ); if ( module ) { m_module = module->configurationMap(); diff --git a/src/calamares/testmain.cpp b/src/calamares/testmain.cpp index a29c8ce913..c9ac00f2b2 100644 --- a/src/calamares/testmain.cpp +++ b/src/calamares/testmain.cpp @@ -217,7 +217,7 @@ ExecViewModule::loadSelf() auto* viewStep = new Calamares::ExecutionViewStep(); viewStep->setModuleInstanceKey( instanceKey() ); viewStep->setConfigurationMap( m_configurationMap ); - viewStep->appendJobModuleInstanceKey( instanceKey().toString() ); + viewStep->appendJobModuleInstanceKey( instanceKey() ); Calamares::ViewManager::instance()->addViewStep( viewStep ); m_loaded = true; } diff --git a/src/libcalamaresui/modulesystem/ModuleManager.cpp b/src/libcalamaresui/modulesystem/ModuleManager.cpp index 23df7ce8aa..c872bdaa4e 100644 --- a/src/libcalamaresui/modulesystem/ModuleManager.cpp +++ b/src/libcalamaresui/modulesystem/ModuleManager.cpp @@ -151,9 +151,9 @@ ModuleManager::moduleDescriptor( const QString& name ) } Module* -ModuleManager::moduleInstance( const QString& instanceKey ) +ModuleManager::moduleInstance( const ModuleSystem::InstanceKey& instanceKey ) { - return m_loadedModulesByInstanceKey.value( ModuleSystem::InstanceKey::fromString( instanceKey ) ); + return m_loadedModulesByInstanceKey.value( instanceKey ); } @@ -320,7 +320,7 @@ ModuleManager::loadModules() ViewManager::instance()->addViewStep( evs ); } - evs->appendJobModuleInstanceKey( instanceKey.toString() ); + evs->appendJobModuleInstanceKey( instanceKey ); } } } diff --git a/src/libcalamaresui/modulesystem/ModuleManager.h b/src/libcalamaresui/modulesystem/ModuleManager.h index bea8acf413..d079baee76 100644 --- a/src/libcalamaresui/modulesystem/ModuleManager.h +++ b/src/libcalamaresui/modulesystem/ModuleManager.h @@ -76,7 +76,7 @@ class ModuleManager : public QObject * @param instanceKey the instance key for a module instance. * @return a pointer to an object of a subtype of Module. */ - Module* moduleInstance( const QString& instanceKey ); + Module* moduleInstance( const ModuleSystem::InstanceKey& instanceKey ); /** * @brief loadModules does all of the module loading operation. diff --git a/src/libcalamaresui/viewpages/ExecutionViewStep.cpp b/src/libcalamaresui/viewpages/ExecutionViewStep.cpp index 2dd4b79dff..b2205d70e6 100644 --- a/src/libcalamaresui/viewpages/ExecutionViewStep.cpp +++ b/src/libcalamaresui/viewpages/ExecutionViewStep.cpp @@ -147,7 +147,7 @@ ExecutionViewStep::onActivate() m_slideshow->changeSlideShowState( Slideshow::Start ); JobQueue* queue = JobQueue::instance(); - foreach ( const QString& instanceKey, m_jobInstanceKeys ) + for( const auto& instanceKey : m_jobInstanceKeys ) { Calamares::Module* module = Calamares::ModuleManager::instance()->moduleInstance( instanceKey ); if ( module ) @@ -176,7 +176,7 @@ ExecutionViewStep::jobs() const void -ExecutionViewStep::appendJobModuleInstanceKey( const QString& instanceKey ) +ExecutionViewStep::appendJobModuleInstanceKey( const ModuleSystem::InstanceKey& instanceKey ) { m_jobInstanceKeys.append( instanceKey ); } diff --git a/src/libcalamaresui/viewpages/ExecutionViewStep.h b/src/libcalamaresui/viewpages/ExecutionViewStep.h index 48604fe93a..0edb965a13 100644 --- a/src/libcalamaresui/viewpages/ExecutionViewStep.h +++ b/src/libcalamaresui/viewpages/ExecutionViewStep.h @@ -21,6 +21,7 @@ #define EXECUTIONVIEWSTEP_H #include "ViewStep.h" +#include "modulesystem/InstanceKey.h" #include @@ -57,7 +58,7 @@ class ExecutionViewStep : public ViewStep JobList jobs() const override; - void appendJobModuleInstanceKey( const QString& instanceKey ); + void appendJobModuleInstanceKey( const ModuleSystem::InstanceKey& instanceKey ); private: QWidget* m_widget; @@ -65,7 +66,7 @@ class ExecutionViewStep : public ViewStep QLabel* m_label; Slideshow* m_slideshow; - QStringList m_jobInstanceKeys; + QList< ModuleSystem::InstanceKey > m_jobInstanceKeys; void updateFromJobQueue( qreal percent, const QString& message ); }; From 88e5e98d29207f6d011001b4aa25c36d1deec1e4 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Tue, 4 Aug 2020 10:19:40 +0200 Subject: [PATCH 002/157] [libcalamares] Use consistent type alias (Descriptor) --- src/libcalamares/modulesystem/Module.h | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/libcalamares/modulesystem/Module.h b/src/libcalamares/modulesystem/Module.h index 81737cf8f5..44e89fd759 100644 --- a/src/libcalamares/modulesystem/Module.h +++ b/src/libcalamares/modulesystem/Module.h @@ -1,7 +1,8 @@ /* === This file is part of Calamares - === - * + * * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac * SPDX-FileCopyrightText: 2017 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -16,9 +17,6 @@ * You should have received a copy of the GNU General Public License * along with Calamares. If not, see . * - * SPDX-License-Identifier: GPL-3.0-or-later - * License-Filename: LICENSE - * */ #ifndef CALAMARES_MODULE_H @@ -176,9 +174,9 @@ class DLLEXPORT Module explicit Module(); /// @brief For subclasses to read their part of the descriptor - virtual void initFrom( const QVariantMap& moduleDescriptor ) = 0; + virtual void initFrom( const ModuleSystem::Descriptor& moduleDescriptor ) = 0; /// @brief Generic part of descriptor reading (and instance id) - void initFrom( const QVariantMap& moduleDescriptor, const QString& id ); + void initFrom( const ModuleSystem::Descriptor& moduleDescriptor, const QString& id ); QVariantMap m_configurationMap; From 320779ccbe187e07535aab2617854ac37efff13c Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Tue, 4 Aug 2020 11:19:17 +0200 Subject: [PATCH 003/157] [libcalamares] Document Job::prettyDescription The TODO said it was unused: it **is** used, but only in a very limited scope. Drop it from jobs where it wasn't useful (e.g. those that just return prettyName(), outside of the partition module). --- src/libcalamares/Job.h | 16 +++++++++++----- src/modules/plasmalnf/PlasmaLnfJob.cpp | 6 ------ src/modules/plasmalnf/PlasmaLnfJob.h | 1 - src/modules/tracking/TrackingJobs.cpp | 18 ------------------ src/modules/tracking/TrackingJobs.h | 3 --- 5 files changed, 11 insertions(+), 33 deletions(-) diff --git a/src/libcalamares/Job.h b/src/libcalamares/Job.h index 18f11158f7..41674cfffc 100644 --- a/src/libcalamares/Job.h +++ b/src/libcalamares/Job.h @@ -1,6 +1,8 @@ /* === This file is part of Calamares - === - * + * * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -15,9 +17,6 @@ * You should have received a copy of the GNU General Public License * along with Calamares. If not, see . * - * SPDX-License-Identifier: GPL-3.0-or-later - * License-Filename: LICENSE - * */ #ifndef CALAMARES_JOB_H #define CALAMARES_JOB_H @@ -114,7 +113,14 @@ class DLLEXPORT Job : public QObject * For status and state information, see prettyStatusMessage(). */ virtual QString prettyName() const = 0; - // TODO: Unused + /** @brief a longer human-readable description of what the job will do + * + * This **may** be used by view steps to fill in the summary + * messages for the summary page; at present, only the *partition* + * module does so. + * + * The default implementation returns an empty string. + */ virtual QString prettyDescription() const; /** @brief A human-readable status for progress reporting * diff --git a/src/modules/plasmalnf/PlasmaLnfJob.cpp b/src/modules/plasmalnf/PlasmaLnfJob.cpp index d5db8ae4c0..44bdb5cc71 100644 --- a/src/modules/plasmalnf/PlasmaLnfJob.cpp +++ b/src/modules/plasmalnf/PlasmaLnfJob.cpp @@ -41,12 +41,6 @@ PlasmaLnfJob::prettyName() const return tr( "Plasma Look-and-Feel Job" ); } -QString -PlasmaLnfJob::prettyDescription() const -{ - return prettyName(); -} - QString PlasmaLnfJob::prettyStatusMessage() const { return prettyName(); diff --git a/src/modules/plasmalnf/PlasmaLnfJob.h b/src/modules/plasmalnf/PlasmaLnfJob.h index ef9ee1257e..9c52f2c8d3 100644 --- a/src/modules/plasmalnf/PlasmaLnfJob.h +++ b/src/modules/plasmalnf/PlasmaLnfJob.h @@ -33,7 +33,6 @@ class PlasmaLnfJob : public Calamares::Job virtual ~PlasmaLnfJob() override; QString prettyName() const override; - QString prettyDescription() const override; QString prettyStatusMessage() const override; Calamares::JobResult exec() override; diff --git a/src/modules/tracking/TrackingJobs.cpp b/src/modules/tracking/TrackingJobs.cpp index 00ef06e103..2df3a66a03 100644 --- a/src/modules/tracking/TrackingJobs.cpp +++ b/src/modules/tracking/TrackingJobs.cpp @@ -46,12 +46,6 @@ TrackingInstallJob::prettyName() const return tr( "Installation feedback" ); } -QString -TrackingInstallJob::prettyDescription() const -{ - return prettyName(); -} - QString TrackingInstallJob::prettyStatusMessage() const { @@ -86,12 +80,6 @@ TrackingMachineUpdateManagerJob::prettyName() const return tr( "Machine feedback" ); } -QString -TrackingMachineUpdateManagerJob::prettyDescription() const -{ - return prettyName(); -} - QString TrackingMachineUpdateManagerJob::prettyStatusMessage() const { @@ -143,12 +131,6 @@ TrackingKUserFeedbackJob::prettyName() const return tr( "KDE user feedback" ); } -QString -TrackingKUserFeedbackJob::prettyDescription() const -{ - return prettyName(); -} - QString TrackingKUserFeedbackJob::prettyStatusMessage() const { diff --git a/src/modules/tracking/TrackingJobs.h b/src/modules/tracking/TrackingJobs.h index 38349515ab..33b8eceb10 100644 --- a/src/modules/tracking/TrackingJobs.h +++ b/src/modules/tracking/TrackingJobs.h @@ -54,7 +54,6 @@ class TrackingInstallJob : public Calamares::Job ~TrackingInstallJob() override; QString prettyName() const override; - QString prettyDescription() const override; QString prettyStatusMessage() const override; Calamares::JobResult exec() override; @@ -75,7 +74,6 @@ class TrackingMachineUpdateManagerJob : public Calamares::Job ~TrackingMachineUpdateManagerJob() override; QString prettyName() const override; - QString prettyDescription() const override; QString prettyStatusMessage() const override; Calamares::JobResult exec() override; }; @@ -93,7 +91,6 @@ class TrackingKUserFeedbackJob : public Calamares::Job ~TrackingKUserFeedbackJob() override; QString prettyName() const override; - QString prettyDescription() const override; QString prettyStatusMessage() const override; Calamares::JobResult exec() override; From 21b4a36a912277237e30229f0060dc597474a8d7 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Mon, 10 Aug 2020 09:50:27 +0200 Subject: [PATCH 004/157] [libcalamares] Remove empty .cpp file - Requirement.cpp was there "just in case" the header grew functions that need an implementation, but that seems unlikely (the header is just a struct of POD). --- src/libcalamares/CMakeLists.txt | 1 - src/libcalamares/modulesystem/Requirement.cpp | 22 ------------------- 2 files changed, 23 deletions(-) delete mode 100644 src/libcalamares/modulesystem/Requirement.cpp diff --git a/src/libcalamares/CMakeLists.txt b/src/libcalamares/CMakeLists.txt index dc05270afc..3bfc8e4796 100644 --- a/src/libcalamares/CMakeLists.txt +++ b/src/libcalamares/CMakeLists.txt @@ -62,7 +62,6 @@ set( libSources # Modules modulesystem/InstanceKey.cpp modulesystem/Module.cpp - modulesystem/Requirement.cpp modulesystem/RequirementsChecker.cpp modulesystem/RequirementsModel.cpp diff --git a/src/libcalamares/modulesystem/Requirement.cpp b/src/libcalamares/modulesystem/Requirement.cpp deleted file mode 100644 index d5ba232826..0000000000 --- a/src/libcalamares/modulesystem/Requirement.cpp +++ /dev/null @@ -1,22 +0,0 @@ -/* === This file is part of Calamares - === - * - * SPDX-FileCopyrightText: 2017 Adriaan de Groot - * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . - * - * SPDX-License-Identifier: GPL-3.0-or-later - * License-Filename: LICENSE - * - */ -#include "Requirement.h" From 483c0a84f8729088e279fe7f11795826eec4cbdb Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Mon, 10 Aug 2020 09:53:05 +0200 Subject: [PATCH 005/157] [libcalamares] Update SPDX in modulesystem/ --- src/libcalamares/modulesystem/Actions.h | 6 ++---- src/libcalamares/modulesystem/Descriptor.h | 6 ++---- src/libcalamares/modulesystem/InstanceKey.cpp | 6 ++---- src/libcalamares/modulesystem/InstanceKey.h | 6 ++---- src/libcalamares/modulesystem/Module.cpp | 6 ++---- src/libcalamares/modulesystem/Requirement.h | 6 ++---- src/libcalamares/modulesystem/RequirementsChecker.cpp | 6 ++---- src/libcalamares/modulesystem/RequirementsChecker.h | 6 ++---- src/libcalamares/modulesystem/RequirementsModel.cpp | 4 +--- src/libcalamares/modulesystem/RequirementsModel.h | 6 ++---- src/libcalamares/modulesystem/Tests.cpp | 6 ++---- 11 files changed, 21 insertions(+), 43 deletions(-) diff --git a/src/libcalamares/modulesystem/Actions.h b/src/libcalamares/modulesystem/Actions.h index 0b7133f785..4376733a14 100644 --- a/src/libcalamares/modulesystem/Actions.h +++ b/src/libcalamares/modulesystem/Actions.h @@ -1,7 +1,8 @@ /* === This file is part of Calamares - === - * + * * SPDX-FileCopyrightText: 2014 Teo Mrnjavac * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -16,9 +17,6 @@ * You should have received a copy of the GNU General Public License * along with Calamares. If not, see . * - * SPDX-License-Identifier: GPL-3.0-or-later - * License-Filename: LICENSE - * */ #ifndef MODULESYSTEM_ACTIONS_H diff --git a/src/libcalamares/modulesystem/Descriptor.h b/src/libcalamares/modulesystem/Descriptor.h index b34f163ad7..c6b5ab5cfd 100644 --- a/src/libcalamares/modulesystem/Descriptor.h +++ b/src/libcalamares/modulesystem/Descriptor.h @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === - * + * * SPDX-FileCopyrightText: 2020 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -15,9 +16,6 @@ * You should have received a copy of the GNU General Public License * along with Calamares. If not, see . * - * SPDX-License-Identifier: GPL-3.0-or-later - * License-Filename: LICENSE - * */ #ifndef MODULESYSTEM_DESCRIPTOR_H diff --git a/src/libcalamares/modulesystem/InstanceKey.cpp b/src/libcalamares/modulesystem/InstanceKey.cpp index 82ccf78008..982b5f5326 100644 --- a/src/libcalamares/modulesystem/InstanceKey.cpp +++ b/src/libcalamares/modulesystem/InstanceKey.cpp @@ -1,7 +1,8 @@ /* === This file is part of Calamares - === - * + * * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac * SPDX-FileCopyrightText: 2018-2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -16,9 +17,6 @@ * You should have received a copy of the GNU General Public License * along with Calamares. If not, see . * - * SPDX-License-Identifier: GPL-3.0-or-later - * License-Filename: LICENSE - * */ #include "InstanceKey.h" diff --git a/src/libcalamares/modulesystem/InstanceKey.h b/src/libcalamares/modulesystem/InstanceKey.h index c81d83a75e..0bfa636f1c 100644 --- a/src/libcalamares/modulesystem/InstanceKey.h +++ b/src/libcalamares/modulesystem/InstanceKey.h @@ -1,7 +1,8 @@ /* === This file is part of Calamares - === - * + * * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac * SPDX-FileCopyrightText: 2018-2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -16,9 +17,6 @@ * You should have received a copy of the GNU General Public License * along with Calamares. If not, see . * - * SPDX-License-Identifier: GPL-3.0-or-later - * License-Filename: LICENSE - * */ #ifndef MODULESYSTEM_INSTANCEKEY_H #define MODULESYSTEM_INSTANCEKEY_H diff --git a/src/libcalamares/modulesystem/Module.cpp b/src/libcalamares/modulesystem/Module.cpp index 407a10205e..dae3c84aa6 100644 --- a/src/libcalamares/modulesystem/Module.cpp +++ b/src/libcalamares/modulesystem/Module.cpp @@ -1,7 +1,8 @@ /* === This file is part of Calamares - === - * + * * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac * SPDX-FileCopyrightText: 2017-2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -16,9 +17,6 @@ * You should have received a copy of the GNU General Public License * along with Calamares. If not, see . * - * SPDX-License-Identifier: GPL-3.0-or-later - * License-Filename: LICENSE - * */ #include "Module.h" diff --git a/src/libcalamares/modulesystem/Requirement.h b/src/libcalamares/modulesystem/Requirement.h index eb664d2a96..02e0a009a3 100644 --- a/src/libcalamares/modulesystem/Requirement.h +++ b/src/libcalamares/modulesystem/Requirement.h @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === - * + * * SPDX-FileCopyrightText: 2017 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -15,9 +16,6 @@ * You should have received a copy of the GNU General Public License * along with Calamares. If not, see . * - * SPDX-License-Identifier: GPL-3.0-or-later - * License-Filename: LICENSE - * */ #ifndef CALAMARES_REQUIREMENT_H #define CALAMARES_REQUIREMENT_H diff --git a/src/libcalamares/modulesystem/RequirementsChecker.cpp b/src/libcalamares/modulesystem/RequirementsChecker.cpp index 2dbaea8cf1..3256c460df 100644 --- a/src/libcalamares/modulesystem/RequirementsChecker.cpp +++ b/src/libcalamares/modulesystem/RequirementsChecker.cpp @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === - * + * * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -15,9 +16,6 @@ * You should have received a copy of the GNU General Public License * along with Calamares. If not, see . * - * SPDX-License-Identifier: GPL-3.0-or-later - * License-Filename: LICENSE - * */ #include "RequirementsChecker.h" diff --git a/src/libcalamares/modulesystem/RequirementsChecker.h b/src/libcalamares/modulesystem/RequirementsChecker.h index 910e34dfcc..523bc2bc79 100644 --- a/src/libcalamares/modulesystem/RequirementsChecker.h +++ b/src/libcalamares/modulesystem/RequirementsChecker.h @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === - * + * * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -15,9 +16,6 @@ * You should have received a copy of the GNU General Public License * along with Calamares. If not, see . * - * SPDX-License-Identifier: GPL-3.0-or-later - * License-Filename: LICENSE - * */ #ifndef CALAMARES_REQUIREMENTSCHECKER_H #define CALAMARES_REQUIREMENTSCHECKER_H diff --git a/src/libcalamares/modulesystem/RequirementsModel.cpp b/src/libcalamares/modulesystem/RequirementsModel.cpp index 41a5616c1f..2ff184f3b1 100644 --- a/src/libcalamares/modulesystem/RequirementsModel.cpp +++ b/src/libcalamares/modulesystem/RequirementsModel.cpp @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2019-2020 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -15,9 +16,6 @@ * You should have received a copy of the GNU General Public License * along with Calamares. If not, see . * - * SPDX-License-Identifier: GPL-3.0-or-later - * License-Filename: LICENSE - * */ #include "RequirementsModel.h" diff --git a/src/libcalamares/modulesystem/RequirementsModel.h b/src/libcalamares/modulesystem/RequirementsModel.h index df56ccd7b4..904e0b84ec 100644 --- a/src/libcalamares/modulesystem/RequirementsModel.h +++ b/src/libcalamares/modulesystem/RequirementsModel.h @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === - * + * * SPDX-FileCopyrightText: 2019-2020 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -15,9 +16,6 @@ * You should have received a copy of the GNU General Public License * along with Calamares. If not, see . * - * SPDX-License-Identifier: GPL-3.0-or-later - * License-Filename: LICENSE - * */ #ifndef CALAMARES_REQUIREMENTSMODEL_H diff --git a/src/libcalamares/modulesystem/Tests.cpp b/src/libcalamares/modulesystem/Tests.cpp index 7973cc0ad6..282300eecc 100644 --- a/src/libcalamares/modulesystem/Tests.cpp +++ b/src/libcalamares/modulesystem/Tests.cpp @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === - * + * * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -15,9 +16,6 @@ * You should have received a copy of the GNU General Public License * along with Calamares. If not, see . * - * SPDX-License-Identifier: GPL-3.0-or-later - * License-Filename: LICENSE - * */ #include "modulesystem/InstanceKey.h" From 3227658475de2b36c71f064ffcbcac5a7a62b6f6 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Mon, 10 Aug 2020 16:10:16 +0200 Subject: [PATCH 006/157] [calamares] Fix up multiple-moc of KDSAG - was getting multiple definitions of moc-related code due to automoc combined with KDSAG having its own #include moc, comment-out the include. - while here, simplify the CMake bits for building KDSAG --- .../kdsingleapplicationguard.cpp | 2 +- src/calamares/CMakeLists.txt | 17 +++++++++-------- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/3rdparty/kdsingleapplicationguard/kdsingleapplicationguard.cpp b/3rdparty/kdsingleapplicationguard/kdsingleapplicationguard.cpp index cd8fadcce6..8ddf7aad69 100644 --- a/3rdparty/kdsingleapplicationguard/kdsingleapplicationguard.cpp +++ b/3rdparty/kdsingleapplicationguard/kdsingleapplicationguard.cpp @@ -1119,7 +1119,7 @@ void KDSingleApplicationGuard::Private::poll() { } } -#include "moc_kdsingleapplicationguard.cpp" +// #include "moc_kdsingleapplicationguard.cpp" #ifdef KDTOOLSCORE_UNITTESTS diff --git a/src/calamares/CMakeLists.txt b/src/calamares/CMakeLists.txt index ff91904e29..5480dd1f86 100644 --- a/src/calamares/CMakeLists.txt +++ b/src/calamares/CMakeLists.txt @@ -11,15 +11,12 @@ set( calamaresSources ) if( NOT WITH_KF5DBus ) - set( kdsagSources "" ) - foreach( _s - kdsingleapplicationguard/kdsingleapplicationguard.cpp - kdsingleapplicationguard/kdsharedmemorylocker.cpp - kdsingleapplicationguard/kdtoolsglobal.cpp - kdsingleapplicationguard/kdlockedsharedmemorypointer.cpp + set( kdsagSources + ${CMAKE_SOURCE_DIR}/3rdparty/kdsingleapplicationguard/kdsingleapplicationguard.cpp + ${CMAKE_SOURCE_DIR}/3rdparty/kdsingleapplicationguard/kdsharedmemorylocker.cpp + ${CMAKE_SOURCE_DIR}/3rdparty/kdsingleapplicationguard/kdtoolsglobal.cpp + ${CMAKE_SOURCE_DIR}/3rdparty/kdsingleapplicationguard/kdlockedsharedmemorypointer.cpp ) - list( APPEND kdsagSources ${CMAKE_SOURCE_DIR}/3rdparty/${_s} ) - endforeach() mark_thirdparty_code( ${kdsagSources} ) list( APPEND calamaresSources ${kdsagSources} ) endif() @@ -46,6 +43,10 @@ calamares_automoc( calamares_bin ) calamares_autouic( calamares_bin ) calamares_autorcc( calamares_bin ) +if( kdsagSources ) + set_source_files_properties( ${kdsagSources} PROPERTIES AUTOMOC OFF ) +endif() + target_link_libraries( calamares_bin PRIVATE calamares From 8518a5037d722795e935f55b4ff18ad19bebb5c2 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Mon, 10 Aug 2020 23:18:02 +0200 Subject: [PATCH 007/157] Changes: post-release housekeeping --- CHANGES | 12 ++++++++++++ CMakeLists.txt | 4 ++-- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/CHANGES b/CHANGES index 138a23e17c..b041db8690 100644 --- a/CHANGES +++ b/CHANGES @@ -3,6 +3,18 @@ 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.29 (unreleased) # + +This release contains contributions from (alphabetically by first name): + - No external contributors yet + +## Core ## + - No core changes yet + +## Modules ## + - No module changes yet + + # 3.2.28.1 (2020-08-10) # This is a hotfix release for #1482 and #1483, where no user was diff --git a/CMakeLists.txt b/CMakeLists.txt index 9f1208fb45..f425a6f387 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -46,10 +46,10 @@ # TODO:3.3: Require CMake 3.12 cmake_minimum_required( VERSION 3.3 FATAL_ERROR ) project( CALAMARES - VERSION 3.2.28.1 + VERSION 3.2.29 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 # From 9c382e3555c55f475539d995e7b609e41c4441ab Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Tue, 11 Aug 2020 10:16:00 +0200 Subject: [PATCH 008/157] [libcalamares] Support switching public/private during tests --- src/libcalamares/DllMacro.h | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/libcalamares/DllMacro.h b/src/libcalamares/DllMacro.h index 2eeea331ed..8613fa584a 100644 --- a/src/libcalamares/DllMacro.h +++ b/src/libcalamares/DllMacro.h @@ -1,5 +1,5 @@ /* === This file is part of Calamares - === - * + * * SPDX-FileCopyrightText: 2014 Teo Mrnjavac * SPDX-FileCopyrightText: 2020 Adriaan de Groot * @@ -76,4 +76,16 @@ #endif #endif +/* + * For private functions that should be public for testing purposes, + * use PRIVATETEST, which is private except when building tests. + */ +#ifndef PRIVATETEST +#if defined( BUILD_AS_TEST ) +#define PRIVATETEST public +#else +#define PRIVATETEST private +#endif +#endif + #endif From 53eb6c614aea3fdcc4c2d99f7de9ef8700845ee9 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Tue, 11 Aug 2020 10:31:12 +0200 Subject: [PATCH 009/157] [libcalamares] Make InstanceDescription a class - switch from dumb struct to a class; use a structured InstanceKey - expand testing of InstanceKey and InstanceDescription --- src/libcalamares/Settings.cpp | 39 ++++--- src/libcalamares/Settings.h | 45 ++++++-- src/libcalamares/Tests.cpp | 197 ++++++++++++++++++++++++++++++++++ 3 files changed, 255 insertions(+), 26 deletions(-) diff --git a/src/libcalamares/Settings.cpp b/src/libcalamares/Settings.cpp index 3c45c2e43e..c4e7a3b4ce 100644 --- a/src/libcalamares/Settings.cpp +++ b/src/libcalamares/Settings.cpp @@ -1,9 +1,10 @@ /* === This file is part of Calamares - === - * + * * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac * SPDX-FileCopyrightText: 2019 Gabriel Craciunescu * SPDX-FileCopyrightText: 2019 Dominic Hayes * SPDX-FileCopyrightText: 2017-2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -18,9 +19,6 @@ * You should have received a copy of the GNU General Public License * along with Calamares. If not, see . * - * SPDX-License-Identifier: GPL-3.0-or-later - * License-Filename: LICENSE - * */ #include "Settings.h" @@ -75,22 +73,31 @@ requireBool( const YAML::Node& config, const char* key, bool d ) namespace Calamares { -InstanceDescription::InstanceDescription( const QVariantMap& m ) - : module( m.value( "module" ).toString() ) - , id( m.value( "id" ).toString() ) - , config( m.value( "config" ).toString() ) - , weight( m.value( "weight" ).toInt() ) +InstanceDescription::InstanceDescription( Calamares::ModuleSystem::InstanceKey&& key, int weight ) + : m_instanceKey( key ) + , m_weight( qBound( 1, weight, 100 ) ) { - if ( id.isEmpty() ) + if ( !isValid() ) { - id = module; + m_weight = 0; } - if ( config.isEmpty() ) +} + +InstanceDescription +InstanceDescription::fromSettings( const QVariantMap& m ) +{ + InstanceDescription r( + Calamares::ModuleSystem::InstanceKey( m.value( "module" ).toString(), m.value( "id" ).toString() ), + m.value( "weight" ).toInt() ); + if ( r.isValid() ) { - config = module + QStringLiteral( ".conf" ); + r.m_configFileName = m.value( "config" ).toString(); + if ( r.m_configFileName.isEmpty() ) + { + r.m_configFileName = r.key().module() + QStringLiteral( ".conf" ); + } } - - weight = qBound( 1, weight, 100 ); + return r; } Settings* Settings::s_instance = nullptr; @@ -156,7 +163,7 @@ interpretInstances( const YAML::Node& node, Settings::InstanceDescriptionList& c { continue; } - customInstances.append( InstanceDescription( instancesVListItem.toMap() ) ); + customInstances.append( InstanceDescription::fromSettings( instancesVListItem.toMap() ) ); } } } diff --git a/src/libcalamares/Settings.h b/src/libcalamares/Settings.h index 098e010e51..6aa308dc55 100644 --- a/src/libcalamares/Settings.h +++ b/src/libcalamares/Settings.h @@ -1,9 +1,10 @@ /* === This file is part of Calamares - === - * + * * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac * SPDX-FileCopyrightText: 2019 Gabriel Craciunescu * SPDX-FileCopyrightText: 2019 Dominic Hayes * SPDX-FileCopyrightText: 2017-2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -18,9 +19,6 @@ * You should have received a copy of the GNU General Public License * along with Calamares. If not, see . * - * SPDX-License-Identifier: GPL-3.0-or-later - * License-Filename: LICENSE - * */ #ifndef SETTINGS_H @@ -28,6 +26,7 @@ #include "DllMacro.h" #include "modulesystem/Actions.h" +#include "modulesystem/InstanceKey.h" #include #include @@ -36,14 +35,40 @@ namespace Calamares { -struct DLLEXPORT InstanceDescription +/** @brief Description of an instance as named in `settings.conf` + * + * An instance is an intended-step-in-sequence; it is not yet + * a loaded module. The instances have config-files and weights + * which are used by the module manager when loading modules + * and creating jobs. + */ +class DLLEXPORT InstanceDescription { - InstanceDescription( const QVariantMap& ); + using InstanceKey = Calamares::ModuleSystem::InstanceKey; - QString module; ///< Module name (e.g. "welcome") - QString id; ///< Id, to distinguish multiple instances (e.g. "one", for "welcome@one") - QString config; ///< Config-file name (for multiple instances) - int weight; + PRIVATETEST : InstanceDescription( InstanceKey&& key, int weight ); + +public: + /** @brief An invalid InstanceDescription + * + * Use `fromSettings()` to populate an InstanceDescription and + * check its validity. + */ + InstanceDescription() = default; + + static InstanceDescription fromSettings( const QVariantMap& ); + + bool isValid() const { return m_instanceKey.isValid(); } + + const InstanceKey& key() const { return m_instanceKey; } + QString configFileName() const { return m_configFileName; } + bool isCustom() const { return m_instanceKey.isCustom(); } + int weight() const { return m_weight; } + +private: + InstanceKey m_instanceKey; + QString m_configFileName; + int m_weight = 0; }; class DLLEXPORT Settings : public QObject diff --git a/src/libcalamares/Tests.cpp b/src/libcalamares/Tests.cpp index 53bedc5440..a9f53dc565 100644 --- a/src/libcalamares/Tests.cpp +++ b/src/libcalamares/Tests.cpp @@ -20,6 +20,8 @@ */ #include "GlobalStorage.h" +#include "Settings.h" +#include "modulesystem/InstanceKey.h" #include "utils/Logger.h" @@ -39,6 +41,9 @@ private Q_SLOTS: void testGSLoadSave(); void testGSLoadSave2(); void testGSLoadSaveYAMLStringList(); + + void testInstanceKey(); + void testInstanceDescription(); }; void @@ -177,6 +182,198 @@ TestLibCalamares::testGSLoadSaveYAMLStringList() QCOMPARE( gs2.value( "dwarfs" ).toString(), QStringLiteral( "" ) ); // .. they're gone } +void +TestLibCalamares::testInstanceKey() +{ + using InstanceKey = Calamares::ModuleSystem::InstanceKey; + { + InstanceKey k; + QVERIFY( !k.isValid() ); + QVERIFY( !k.isCustom() ); + QVERIFY( k.module().isEmpty() ); + } + { + InstanceKey k( QStringLiteral( "welcome" ), QString() ); + QVERIFY( k.isValid() ); + QVERIFY( !k.isCustom() ); + QCOMPARE( k.module(), QStringLiteral( "welcome" ) ); + QCOMPARE( k.id(), QStringLiteral( "welcome" ) ); + } + { + InstanceKey k( QStringLiteral( "shellprocess" ), QStringLiteral( "zfssetup" ) ); + QVERIFY( k.isValid() ); + QVERIFY( k.isCustom() ); + QCOMPARE( k.module(), QStringLiteral( "shellprocess" ) ); + QCOMPARE( k.id(), QStringLiteral( "zfssetup" ) ); + } + + { + // This is a bad idea, names and ids with odd punctuation + InstanceKey k( QStringLiteral( " o__O " ), QString() ); + QVERIFY( k.isValid() ); + QVERIFY( !k.isCustom() ); + QCOMPARE( k.module(), QStringLiteral( " o__O " ) ); + } + { + // .. but @ is disallowed + InstanceKey k( QStringLiteral( "welcome@hi" ), QString() ); + QVERIFY( !k.isValid() ); + QVERIFY( !k.isCustom() ); + QVERIFY( k.module().isEmpty() ); + } + + { + InstanceKey k = InstanceKey::fromString( "welcome" ); + QVERIFY( k.isValid() ); + QVERIFY( !k.isCustom() ); + QCOMPARE( k.module(), QStringLiteral( "welcome" ) ); + QCOMPARE( k.id(), QStringLiteral( "welcome" ) ); + } + { + InstanceKey k = InstanceKey::fromString( "welcome@welcome" ); + QVERIFY( k.isValid() ); + QVERIFY( !k.isCustom() ); + QCOMPARE( k.module(), QStringLiteral( "welcome" ) ); + QCOMPARE( k.id(), QStringLiteral( "welcome" ) ); + } + + { + InstanceKey k = InstanceKey::fromString( "welcome@hi" ); + QVERIFY( k.isValid() ); + QVERIFY( k.isCustom() ); + QCOMPARE( k.module(), QStringLiteral( "welcome" ) ); + QCOMPARE( k.id(), QStringLiteral( "hi" ) ); + } + { + InstanceKey k = InstanceKey::fromString( "welcome@hi@hi" ); + QVERIFY( !k.isValid() ); + QVERIFY( !k.isCustom() ); + QVERIFY( k.module().isEmpty() ); + QVERIFY( k.id().isEmpty() ); + } +} + +void +TestLibCalamares::testInstanceDescription() +{ + using InstanceDescription = Calamares::InstanceDescription; + using InstanceKey = Calamares::ModuleSystem::InstanceKey; + + // With invalid keys + // + // + { + InstanceDescription d; + QVERIFY( !d.isValid() ); + QVERIFY( !d.isCustom() ); + QCOMPARE( d.weight(), 0 ); + QVERIFY( d.configFileName().isEmpty() ); + } + + { + InstanceDescription d( InstanceKey(), 0 ); + QVERIFY( !d.isValid() ); + QVERIFY( !d.isCustom() ); + QCOMPARE( d.weight(), 0 ); + QVERIFY( d.configFileName().isEmpty() ); + } + + { + InstanceDescription d( InstanceKey(), 100 ); + QVERIFY( !d.isValid() ); + QVERIFY( !d.isCustom() ); + QCOMPARE( d.weight(), 0 ); + QVERIFY( d.configFileName().isEmpty() ); + } + + // Private constructor + // + // This doesn't set up the config file yet. + { + InstanceDescription d( InstanceKey::fromString( "welcome" ), 0 ); + QVERIFY( d.isValid() ); + QVERIFY( !d.isCustom() ); + QCOMPARE( d.weight(), 1 ); // **now** the constraints kick in + QVERIFY( d.configFileName().isEmpty() ); + } + + { + InstanceDescription d( InstanceKey::fromString( "welcome@hi" ), 0 ); + QVERIFY( d.isValid() ); + QVERIFY( d.isCustom() ); + QCOMPARE( d.weight(), 1 ); // **now** the constraints kick in + QVERIFY( d.configFileName().isEmpty() ); + } + + { + InstanceDescription d( InstanceKey::fromString( "welcome@hi" ), 75 ); + QCOMPARE( d.weight(), 75 ); + } + { + InstanceDescription d( InstanceKey::fromString( "welcome@hi" ), 105 ); + QCOMPARE( d.weight(), 100 ); + } + + + // From settings, normal program flow + // + // + { + QVariantMap m; + + InstanceDescription d = InstanceDescription::fromSettings( m ); + QVERIFY( !d.isValid() ); + } + { + QVariantMap m; + m.insert( "name", "welcome" ); + + InstanceDescription d = InstanceDescription::fromSettings( m ); + QVERIFY( !d.isValid() ); + } + { + QVariantMap m; + m.insert( "module", "welcome" ); + + InstanceDescription d = InstanceDescription::fromSettings( m ); + QVERIFY( d.isValid() ); + QVERIFY( !d.isCustom() ); + QCOMPARE( d.weight(), 1 ); + QCOMPARE( d.key().module(), QString( "welcome" ) ); + QCOMPARE( d.key().id(), QString( "welcome" ) ); + QCOMPARE( d.configFileName(), QString( "welcome.conf" ) ); + } + { + QVariantMap m; + m.insert( "module", "welcome" ); + m.insert( "id", "hi" ); + m.insert( "weight", "17" ); // String, that's kind of bogus + + InstanceDescription d = InstanceDescription::fromSettings( m ); + QVERIFY( d.isValid() ); + QVERIFY( d.isCustom() ); + QCOMPARE( d.weight(), 17 ); + QCOMPARE( d.key().module(), QString( "welcome" ) ); + QCOMPARE( d.key().id(), QString( "hi" ) ); + QCOMPARE( d.configFileName(), QString( "welcome.conf" ) ); + } + { + QVariantMap m; + m.insert( "module", "welcome" ); + m.insert( "id", "hi" ); + m.insert( "weight", 134 ); + m.insert( "config", "hi.conf" ); + + InstanceDescription d = InstanceDescription::fromSettings( m ); + QVERIFY( d.isValid() ); + QVERIFY( d.isCustom() ); + QCOMPARE( d.weight(), 100 ); + QCOMPARE( d.key().module(), QString( "welcome" ) ); + QCOMPARE( d.key().id(), QString( "hi" ) ); + QCOMPARE( d.configFileName(), QString( "hi.conf" ) ); + } +} + QTEST_GUILESS_MAIN( TestLibCalamares ) From 34e31d433108092130c48648939de51288961428 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Tue, 11 Aug 2020 11:09:07 +0200 Subject: [PATCH 010/157] [libcalamares] Revert PRIVATETEST - looks funny - is hard to get clang-format to respect this; it's intended as an access-modifier, but those are baked into the code rather than being configurable. - is probably rare enough that #ifdef is acceptable --- src/libcalamares/DllMacro.h | 12 ------------ src/libcalamares/Settings.h | 5 ++++- 2 files changed, 4 insertions(+), 13 deletions(-) diff --git a/src/libcalamares/DllMacro.h b/src/libcalamares/DllMacro.h index 8613fa584a..5677e928bc 100644 --- a/src/libcalamares/DllMacro.h +++ b/src/libcalamares/DllMacro.h @@ -76,16 +76,4 @@ #endif #endif -/* - * For private functions that should be public for testing purposes, - * use PRIVATETEST, which is private except when building tests. - */ -#ifndef PRIVATETEST -#if defined( BUILD_AS_TEST ) -#define PRIVATETEST public -#else -#define PRIVATETEST private -#endif -#endif - #endif diff --git a/src/libcalamares/Settings.h b/src/libcalamares/Settings.h index 6aa308dc55..2ad489a158 100644 --- a/src/libcalamares/Settings.h +++ b/src/libcalamares/Settings.h @@ -46,7 +46,10 @@ class DLLEXPORT InstanceDescription { using InstanceKey = Calamares::ModuleSystem::InstanceKey; - PRIVATETEST : InstanceDescription( InstanceKey&& key, int weight ); +#ifdef BUILD_AS_TEST +public: +#endif + InstanceDescription( InstanceKey&& key, int weight ); public: /** @brief An invalid InstanceDescription From f157d9c4590f9b31303fb127d7241b223de030eb Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Tue, 11 Aug 2020 11:45:21 +0200 Subject: [PATCH 011/157] [libcalamares] Refactor data-loading in Settings - expose, for testing purposes, the load-from-YAML-data part alongside the public constructor that reads a YAML file - add test for building the list of instances --- src/libcalamares/Settings.cpp | 61 ++++++++++++++++++------------ src/libcalamares/Settings.h | 6 +++ src/libcalamares/Tests.cpp | 71 +++++++++++++++++++++++++++++++++++ 3 files changed, 114 insertions(+), 24 deletions(-) diff --git a/src/libcalamares/Settings.cpp b/src/libcalamares/Settings.cpp index c4e7a3b4ce..0a475be003 100644 --- a/src/libcalamares/Settings.cpp +++ b/src/libcalamares/Settings.cpp @@ -213,6 +213,16 @@ interpretSequence( const YAML::Node& node, Settings::ModuleSequence& moduleSeque } } +Settings::Settings( bool debugMode ) + : QObject() + , m_debug( debugMode ) + , m_doChroot( true ) + , m_promptInstall( false ) + , m_disableCancel( false ) + , m_disableCancelDuringExec( false ) +{ +} + Settings::Settings( const QString& settingsFilePath, bool debugMode ) : QObject() , m_debug( debugMode ) @@ -225,30 +235,7 @@ Settings::Settings( const QString& settingsFilePath, bool debugMode ) QFile file( settingsFilePath ); if ( file.exists() && file.open( QFile::ReadOnly | QFile::Text ) ) { - QByteArray ba = file.readAll(); - - try - { - YAML::Node config = YAML::Load( ba.constData() ); - Q_ASSERT( config.IsMap() ); - - interpretModulesSearch( - debugMode, CalamaresUtils::yamlToStringList( config[ "modules-search" ] ), m_modulesSearchPaths ); - interpretInstances( config[ "instances" ], m_customModuleInstances ); - interpretSequence( config[ "sequence" ], m_modulesSequence ); - - m_brandingComponentName = requireString( config, "branding" ); - m_promptInstall = requireBool( config, "prompt-install", false ); - m_doChroot = !requireBool( config, "dont-chroot", false ); - m_isSetupMode = requireBool( config, "oem-setup", !m_doChroot ); - m_disableCancel = requireBool( config, "disable-cancel", false ); - m_disableCancelDuringExec = requireBool( config, "disable-cancel-during-exec", false ); - m_quitAtEnd = requireBool( config, "quit-at-end", false ); - } - catch ( YAML::Exception& e ) - { - CalamaresUtils::explainYamlException( e, ba, file.fileName() ); - } + setConfiguration( file.readAll(), file.fileName() ); } else { @@ -258,6 +245,32 @@ Settings::Settings( const QString& settingsFilePath, bool debugMode ) s_instance = this; } +void +Settings::setConfiguration( const QByteArray& ba, const QString& explainName ) +{ + try + { + YAML::Node config = YAML::Load( ba.constData() ); + Q_ASSERT( config.IsMap() ); + + interpretModulesSearch( + debugMode(), CalamaresUtils::yamlToStringList( config[ "modules-search" ] ), m_modulesSearchPaths ); + interpretInstances( config[ "instances" ], m_customModuleInstances ); + interpretSequence( config[ "sequence" ], m_modulesSequence ); + + m_brandingComponentName = requireString( config, "branding" ); + m_promptInstall = requireBool( config, "prompt-install", false ); + m_doChroot = !requireBool( config, "dont-chroot", false ); + m_isSetupMode = requireBool( config, "oem-setup", !m_doChroot ); + m_disableCancel = requireBool( config, "disable-cancel", false ); + m_disableCancelDuringExec = requireBool( config, "disable-cancel-during-exec", false ); + m_quitAtEnd = requireBool( config, "quit-at-end", false ); + } + catch ( YAML::Exception& e ) + { + CalamaresUtils::explainYamlException( e, ba, explainName ); + } +} QStringList Settings::modulesSearchPaths() const diff --git a/src/libcalamares/Settings.h b/src/libcalamares/Settings.h index 2ad489a158..de12ab57a1 100644 --- a/src/libcalamares/Settings.h +++ b/src/libcalamares/Settings.h @@ -77,8 +77,14 @@ class DLLEXPORT InstanceDescription class DLLEXPORT Settings : public QObject { Q_OBJECT +#ifdef BUILD_AS_TEST +public: +#endif + explicit Settings( bool debugMode ); explicit Settings( const QString& settingsFilePath, bool debugMode ); + void setConfiguration( const QByteArray& configData, const QString& explainName ); + public: static Settings* instance(); /// @brief Find a settings.conf, following @p debugMode diff --git a/src/libcalamares/Tests.cpp b/src/libcalamares/Tests.cpp index a9f53dc565..9fe61e7278 100644 --- a/src/libcalamares/Tests.cpp +++ b/src/libcalamares/Tests.cpp @@ -44,6 +44,8 @@ private Q_SLOTS: void testInstanceKey(); void testInstanceDescription(); + + void testSettings(); }; void @@ -374,6 +376,75 @@ TestLibCalamares::testInstanceDescription() } } +void +TestLibCalamares::testSettings() +{ + { + Calamares::Settings s( false ); + QVERIFY( !s.debugMode() ); + } + { + Calamares::Settings s( true ); + QVERIFY( s.debugMode() ); + QVERIFY( s.customModuleInstances().isEmpty() ); + QVERIFY( s.modulesSequence().isEmpty() ); + QVERIFY( s.brandingComponentName().isEmpty() ); + + s.setConfiguration( R"(--- +instances: + - module: welcome + id: hi + weight: 75 + - module: welcome + id: yo + config: yolo.conf +sequence: + - show: + - welcome@hi + - welcome@yo + - dummycpp + - summary + - exec: + - welcome@hi +)", + QStringLiteral( "" ) ); + + QVERIFY( s.debugMode() ); + QCOMPARE( s.customModuleInstances().count(), 2 ); + QCOMPARE( s.modulesSequence().count(), 2 ); // 2 steps (show, exec) + QVERIFY( s.brandingComponentName().isEmpty() ); + + // Make a lambda where we can adjust what it looks for from the outside, + // by capturing a reference. + QString moduleKey = QString( "welcome" ); + auto moduleFinder = [&moduleKey]( const Calamares::InstanceDescription& d ) { + return d.isValid() && d.key().module() == moduleKey; + }; + + const auto it0 = std::find_if( + s.customModuleInstances().constBegin(), s.customModuleInstances().constEnd(), moduleFinder ); + QVERIFY( it0 != s.customModuleInstances().constEnd() ); + + moduleKey = QString( "derp" ); + const auto it1 = std::find_if( + s.customModuleInstances().constBegin(), s.customModuleInstances().constEnd(), moduleFinder ); + QVERIFY( it1 == s.customModuleInstances().constEnd() ); + + int validCount = 0; + int customCount = 0; + for ( const auto& d : s.customModuleInstances() ) + { + if ( d.isValid() ) + validCount++; + if ( d.isCustom() ) + customCount++; + QVERIFY( d.isCustom() ? d.isValid() : true ); // All custom entries are valid + } + QCOMPARE( customCount, 2 ); + QCOMPARE( validCount, 2 ); + } +} + QTEST_GUILESS_MAIN( TestLibCalamares ) From 6f7234e4ac2d9ae75adb0cd586c20c01308f7887 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Tue, 11 Aug 2020 12:43:59 +0200 Subject: [PATCH 012/157] [libcalamares] Add all mentioned instances to the instanceList - "custom" instances is now a misnomer, since all the instances go into it; they are distinguished by `isCustom()` on the descriptor --- src/libcalamares/Settings.cpp | 56 +++++++++++++++++++++++++++++++++++ src/libcalamares/Settings.h | 11 +++++++ 2 files changed, 67 insertions(+) diff --git a/src/libcalamares/Settings.cpp b/src/libcalamares/Settings.cpp index 0a475be003..e5bc71c97a 100644 --- a/src/libcalamares/Settings.cpp +++ b/src/libcalamares/Settings.cpp @@ -73,6 +73,16 @@ requireBool( const YAML::Node& config, const char* key, bool d ) namespace Calamares { +InstanceDescription::InstanceDescription( const Calamares::ModuleSystem::InstanceKey& key ) + : m_instanceKey( key ) + , m_weight( 1 ) +{ + if ( !isValid() ) + { + m_weight = 0; + } +} + InstanceDescription::InstanceDescription( Calamares::ModuleSystem::InstanceKey&& key, int weight ) : m_instanceKey( key ) , m_weight( qBound( 1, weight, 100 ) ) @@ -245,6 +255,50 @@ Settings::Settings( const QString& settingsFilePath, bool debugMode ) s_instance = this; } +void +Settings::validateSequence() +{ + // Since moduleFinder captures targetKey by reference, we can + // update targetKey to change what the finder lambda looks for. + Calamares::ModuleSystem::InstanceKey targetKey; + auto moduleFinder = [&targetKey]( const InstanceDescription& d ) { return d.isValid() && d.key() == targetKey; }; + + // Check the sequence against the existing instances (which so far are only custom) + for ( const auto& step : m_modulesSequence ) + { + for ( const auto& instance : step.second ) + { + Calamares::ModuleSystem::InstanceKey k = Calamares::ModuleSystem::InstanceKey::fromString( instance ); + if ( !k.isValid() ) + { + cWarning() << "Invalid instance key in *sequence*," << instance; + } + if ( k.isValid() && k.isCustom() ) + { + targetKey = k; + const auto it = std::find_if( + m_customModuleInstances.constBegin(), m_customModuleInstances.constEnd(), moduleFinder ); + if ( it == m_customModuleInstances.constEnd() ) + { + cWarning() << "Custom instance key" << instance << "is not listed in the *instances*"; + // don't add it, let this fail later. + } + } + if ( k.isValid() && !k.isCustom() ) + { + targetKey = k; + const auto it = std::find_if( + m_customModuleInstances.constBegin(), m_customModuleInstances.constEnd(), moduleFinder ); + if ( it == m_customModuleInstances.constEnd() ) + { + // Non-custom instance, just mentioned in *sequence* + m_customModuleInstances.append( InstanceDescription( k ) ); + } + } + } + } +} + void Settings::setConfiguration( const QByteArray& ba, const QString& explainName ) { @@ -265,6 +319,8 @@ Settings::setConfiguration( const QByteArray& ba, const QString& explainName ) m_disableCancel = requireBool( config, "disable-cancel", false ); m_disableCancelDuringExec = requireBool( config, "disable-cancel-during-exec", false ); m_quitAtEnd = requireBool( config, "quit-at-end", false ); + + validateSequence(); } catch ( YAML::Exception& e ) { diff --git a/src/libcalamares/Settings.h b/src/libcalamares/Settings.h index de12ab57a1..97ee77bc44 100644 --- a/src/libcalamares/Settings.h +++ b/src/libcalamares/Settings.h @@ -59,6 +59,16 @@ class DLLEXPORT InstanceDescription */ InstanceDescription() = default; + /** @brief An InstanceDescription with no special settings. + * + * Regardless of @p key being custom, sets weight to 1 and + * the configuration file to @c key.module() (plus the ".conf" + * extension). + * + * To InstanceDescription is custom if the key is. + */ + InstanceDescription( const InstanceKey& key ); + static InstanceDescription fromSettings( const QVariantMap& ); bool isValid() const { return m_instanceKey.isValid(); } @@ -84,6 +94,7 @@ class DLLEXPORT Settings : public QObject explicit Settings( const QString& settingsFilePath, bool debugMode ); void setConfiguration( const QByteArray& configData, const QString& explainName ); + void validateSequence(); public: static Settings* instance(); From 1f57a99ff24545afe0f4c6b2625336fa47410c66 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Tue, 11 Aug 2020 12:54:29 +0200 Subject: [PATCH 013/157] [libcalamares] Rename moduleInstances() and fix tests - "custom" is a misnomer, so drop that from the name - tests adjusted: all instances are returned, not just the "custom" ones. --- src/libcalamares/Settings.cpp | 16 ++++++++-------- src/libcalamares/Settings.h | 4 ++-- src/libcalamares/Tests.cpp | 16 ++++++++-------- 3 files changed, 18 insertions(+), 18 deletions(-) diff --git a/src/libcalamares/Settings.cpp b/src/libcalamares/Settings.cpp index e5bc71c97a..42da7e1f8b 100644 --- a/src/libcalamares/Settings.cpp +++ b/src/libcalamares/Settings.cpp @@ -277,8 +277,8 @@ Settings::validateSequence() { targetKey = k; const auto it = std::find_if( - m_customModuleInstances.constBegin(), m_customModuleInstances.constEnd(), moduleFinder ); - if ( it == m_customModuleInstances.constEnd() ) + m_moduleInstances.constBegin(), m_moduleInstances.constEnd(), moduleFinder ); + if ( it == m_moduleInstances.constEnd() ) { cWarning() << "Custom instance key" << instance << "is not listed in the *instances*"; // don't add it, let this fail later. @@ -288,11 +288,11 @@ Settings::validateSequence() { targetKey = k; const auto it = std::find_if( - m_customModuleInstances.constBegin(), m_customModuleInstances.constEnd(), moduleFinder ); - if ( it == m_customModuleInstances.constEnd() ) + m_moduleInstances.constBegin(), m_moduleInstances.constEnd(), moduleFinder ); + if ( it == m_moduleInstances.constEnd() ) { // Non-custom instance, just mentioned in *sequence* - m_customModuleInstances.append( InstanceDescription( k ) ); + m_moduleInstances.append( InstanceDescription( k ) ); } } } @@ -309,7 +309,7 @@ Settings::setConfiguration( const QByteArray& ba, const QString& explainName ) interpretModulesSearch( debugMode(), CalamaresUtils::yamlToStringList( config[ "modules-search" ] ), m_modulesSearchPaths ); - interpretInstances( config[ "instances" ], m_customModuleInstances ); + interpretInstances( config[ "instances" ], m_moduleInstances ); interpretSequence( config[ "sequence" ], m_modulesSequence ); m_brandingComponentName = requireString( config, "branding" ); @@ -336,9 +336,9 @@ Settings::modulesSearchPaths() const Settings::InstanceDescriptionList -Settings::customModuleInstances() const +Settings::moduleInstances() const { - return m_customModuleInstances; + return m_moduleInstances; } diff --git a/src/libcalamares/Settings.h b/src/libcalamares/Settings.h index 97ee77bc44..5c2908b4ce 100644 --- a/src/libcalamares/Settings.h +++ b/src/libcalamares/Settings.h @@ -106,7 +106,7 @@ class DLLEXPORT Settings : public QObject QStringList modulesSearchPaths() const; using InstanceDescriptionList = QList< InstanceDescription >; - InstanceDescriptionList customModuleInstances() const; + InstanceDescriptionList moduleInstances() const; using ModuleSequence = QList< QPair< ModuleSystem::Action, QStringList > >; ModuleSequence modulesSequence() const; @@ -158,7 +158,7 @@ class DLLEXPORT Settings : public QObject QStringList m_modulesSearchPaths; - InstanceDescriptionList m_customModuleInstances; + InstanceDescriptionList m_moduleInstances; ModuleSequence m_modulesSequence; QString m_brandingComponentName; diff --git a/src/libcalamares/Tests.cpp b/src/libcalamares/Tests.cpp index 9fe61e7278..e2060789fa 100644 --- a/src/libcalamares/Tests.cpp +++ b/src/libcalamares/Tests.cpp @@ -386,7 +386,7 @@ TestLibCalamares::testSettings() { Calamares::Settings s( true ); QVERIFY( s.debugMode() ); - QVERIFY( s.customModuleInstances().isEmpty() ); + QVERIFY( s.moduleInstances().isEmpty() ); QVERIFY( s.modulesSequence().isEmpty() ); QVERIFY( s.brandingComponentName().isEmpty() ); @@ -410,7 +410,7 @@ TestLibCalamares::testSettings() QStringLiteral( "" ) ); QVERIFY( s.debugMode() ); - QCOMPARE( s.customModuleInstances().count(), 2 ); + QCOMPARE( s.moduleInstances().count(), 4 ); // there are 4 module instances mentioned QCOMPARE( s.modulesSequence().count(), 2 ); // 2 steps (show, exec) QVERIFY( s.brandingComponentName().isEmpty() ); @@ -422,17 +422,17 @@ TestLibCalamares::testSettings() }; const auto it0 = std::find_if( - s.customModuleInstances().constBegin(), s.customModuleInstances().constEnd(), moduleFinder ); - QVERIFY( it0 != s.customModuleInstances().constEnd() ); + s.moduleInstances().constBegin(), s.moduleInstances().constEnd(), moduleFinder ); + QVERIFY( it0 != s.moduleInstances().constEnd() ); moduleKey = QString( "derp" ); const auto it1 = std::find_if( - s.customModuleInstances().constBegin(), s.customModuleInstances().constEnd(), moduleFinder ); - QVERIFY( it1 == s.customModuleInstances().constEnd() ); + s.moduleInstances().constBegin(), s.moduleInstances().constEnd(), moduleFinder ); + QVERIFY( it1 == s.moduleInstances().constEnd() ); int validCount = 0; int customCount = 0; - for ( const auto& d : s.customModuleInstances() ) + for ( const auto& d : s.moduleInstances() ) { if ( d.isValid() ) validCount++; @@ -441,7 +441,7 @@ TestLibCalamares::testSettings() QVERIFY( d.isCustom() ? d.isValid() : true ); // All custom entries are valid } QCOMPARE( customCount, 2 ); - QCOMPARE( validCount, 2 ); + QCOMPARE( validCount, 4 ); // welcome@hi is listed twice, in *show* and *exec* } } From e507338f4cebec516dd5d83fec95c5de65e114fc Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Tue, 11 Aug 2020 13:27:15 +0200 Subject: [PATCH 014/157] [libcalamares] Test config filenames as well (custom vs standard) --- src/libcalamares/Tests.cpp | 27 +++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/src/libcalamares/Tests.cpp b/src/libcalamares/Tests.cpp index e2060789fa..1da333365d 100644 --- a/src/libcalamares/Tests.cpp +++ b/src/libcalamares/Tests.cpp @@ -421,13 +421,11 @@ TestLibCalamares::testSettings() return d.isValid() && d.key().module() == moduleKey; }; - const auto it0 = std::find_if( - s.moduleInstances().constBegin(), s.moduleInstances().constEnd(), moduleFinder ); + const auto it0 = std::find_if( s.moduleInstances().constBegin(), s.moduleInstances().constEnd(), moduleFinder ); QVERIFY( it0 != s.moduleInstances().constEnd() ); moduleKey = QString( "derp" ); - const auto it1 = std::find_if( - s.moduleInstances().constBegin(), s.moduleInstances().constEnd(), moduleFinder ); + const auto it1 = std::find_if( s.moduleInstances().constBegin(), s.moduleInstances().constEnd(), moduleFinder ); QVERIFY( it1 == s.moduleInstances().constEnd() ); int validCount = 0; @@ -435,10 +433,31 @@ TestLibCalamares::testSettings() for ( const auto& d : s.moduleInstances() ) { if ( d.isValid() ) + { validCount++; + } if ( d.isCustom() ) + { customCount++; + } QVERIFY( d.isCustom() ? d.isValid() : true ); // All custom entries are valid + + if ( !d.isCustom() ) + { + QCOMPARE( d.configFileName(), QString( "%1.conf" ).arg( d.key().module() ) ); + } + else + { + // Specific cases from this config file + if ( d.key().id() == QString( "yo" ) ) + { + QCOMPARE( d.configFileName(), QString( "yolo.conf" ) ); + } + else + { + QCOMPARE( d.configFileName(), QString( "welcome.conf" ) ); // Not set in the settings data + } + } } QCOMPARE( customCount, 2 ); QCOMPARE( validCount, 4 ); // welcome@hi is listed twice, in *show* and *exec* From 355a4f9b8dd85047a77a6c725c97f783caea7751 Mon Sep 17 00:00:00 2001 From: demmm Date: Tue, 11 Aug 2020 13:46:05 +0200 Subject: [PATCH 015/157] [usersq] adding QML module usersq module builds, installs and runs, connections are not working yet. UserQmlViewstep.cpp/h are from PR https://github.com/calamares/calamares/pull/1356 sections are commented out to make the module build, but help is needed to get those 2 files corrected. config names used in usersq.qml are guessed from users/Config.cpp debug window shows correct entries in GS, and under the module tab, usersq.conf is read as should too. Running shows most config used in users.qml are not registered/wrong, many entries like: qrc:/usersq.qml:228:13: Unable to assign [undefined] to bool It is understood not all needed from the users module has moved to Config.cpp yet, but doing the PR now, since it runs, doesn't crash cala and help is needed to further implement. --- src/modules/usersq/CMakeLists.txt | 45 ++++ src/modules/usersq/UsersQmlViewStep.cpp | 199 ++++++++++++++ src/modules/usersq/UsersQmlViewStep.h | 72 +++++ src/modules/usersq/usersq.conf | 42 +++ src/modules/usersq/usersq.qml | 336 ++++++++++++++++++++++++ src/modules/usersq/usersq.qrc | 5 + 6 files changed, 699 insertions(+) create mode 100644 src/modules/usersq/CMakeLists.txt create mode 100644 src/modules/usersq/UsersQmlViewStep.cpp create mode 100644 src/modules/usersq/UsersQmlViewStep.h create mode 100644 src/modules/usersq/usersq.conf create mode 100644 src/modules/usersq/usersq.qml create mode 100644 src/modules/usersq/usersq.qrc diff --git a/src/modules/usersq/CMakeLists.txt b/src/modules/usersq/CMakeLists.txt new file mode 100644 index 0000000000..d780ec9c45 --- /dev/null +++ b/src/modules/usersq/CMakeLists.txt @@ -0,0 +1,45 @@ +if( NOT WITH_QML ) + calamares_skip_module( "usersq (QML is not supported in this build)" ) + return() +endif() + +find_package( Qt5 ${QT_VERSION} CONFIG REQUIRED Core DBus Network ) +find_package( Crypt REQUIRED ) + +# Add optional libraries here +set( USER_EXTRA_LIB ) +set( _users ${CMAKE_CURRENT_SOURCE_DIR}/../users ) + +include_directories( ${PROJECT_BINARY_DIR}/src/libcalamaresui ${CMAKE_CURRENT_SOURCE_DIR}/../../libcalamares ${_users} ) + +find_package( LibPWQuality ) +set_package_properties( + LibPWQuality PROPERTIES + PURPOSE "Extra checks of password quality" +) + +if( LibPWQuality_FOUND ) + list( APPEND USER_EXTRA_LIB ${LibPWQuality_LIBRARIES} ) + include_directories( ${LibPWQuality_INCLUDE_DIRS} ) + add_definitions( -DCHECK_PWQUALITY -DHAVE_LIBPWQUALITY ) +endif() + +calamares_add_plugin( usersq + TYPE viewmodule + EXPORT_MACRO PLUGINDLLEXPORT_PRO + SOURCES + ${_users}/Config.cpp + ${_users}/CreateUserJob.cpp + ${_users}/SetPasswordJob.cpp + UsersQmlViewStep.cpp + ${_users}/SetHostNameJob.cpp + ${_users}/CheckPWQuality.cpp + RESOURCES + usersq.qrc + LINK_PRIVATE_LIBRARIES + calamaresui + ${CRYPT_LIBRARIES} + ${USER_EXTRA_LIB} + Qt5::DBus + SHARED_LIB +) diff --git a/src/modules/usersq/UsersQmlViewStep.cpp b/src/modules/usersq/UsersQmlViewStep.cpp new file mode 100644 index 0000000000..bb5fbd9a66 --- /dev/null +++ b/src/modules/usersq/UsersQmlViewStep.cpp @@ -0,0 +1,199 @@ +/* === This file is part of Calamares - === + * + * Copyright 2014-2015, Teo Mrnjavac + * Copyright 2017-2018, Adriaan de Groot + * Copyright 2017, Gabriel Craciunescu + * Copyright 2020, Camilo Higuita + * + * Calamares is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Calamares is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Calamares. If not, see . + */ + +#include "UsersQmlViewStep.h" + +#include "SetHostNameJob.h" +#include "SetPasswordJob.h" + +#include "utils/Logger.h" +#include "utils/NamedEnum.h" +#include "utils/Variant.h" + +#include "GlobalStorage.h" +#include "JobQueue.h" + +CALAMARES_PLUGIN_FACTORY_DEFINITION( UsersQmlViewStepFactory, registerPlugin< UsersQmlViewStep >(); ) + +/*static const NamedEnumTable< SetHostNameJob::Action >& +hostnameActions() +{ + using Action = SetHostNameJob::Action; + + // *INDENT-OFF* + // clang-format off + static const NamedEnumTable< Action > names { + { QStringLiteral( "none" ), Action::None }, + { QStringLiteral( "etcfile" ), Action::EtcHostname }, + { QStringLiteral( "hostnamed" ), Action::SystemdHostname } + }; + // clang-format on + // *INDENT-ON* + + return names; +}*/ + +UsersQmlViewStep::UsersQmlViewStep( QObject* parent ) +: Calamares::QmlViewStep( parent ) +, m_config( new Config(this) ) +{ + emit nextStatusChanged( true ); + //connect( m_config, &Config::checkReady, this, &UsersQmlViewStep::nextStatusChanged ); +} + +QString +UsersQmlViewStep::prettyName() const +{ + return tr( "Users" ); +} + +bool +UsersQmlViewStep::isNextEnabled() const +{ + //return m_config->isReady(); + return true; +} + + +bool +UsersQmlViewStep::isBackEnabled() const +{ + return true; +} + + +bool +UsersQmlViewStep::isAtBeginning() const +{ + return true; +} + + +bool +UsersQmlViewStep::isAtEnd() const +{ + return true; +} + + +QList< Calamares::job_ptr > +UsersQmlViewStep::jobs() const +{ + return m_jobs; +} + + +void +UsersQmlViewStep::onActivate() +{ + //m_config->onActivate(); +} + + +void +UsersQmlViewStep::onLeave() +{ + m_jobs.clear(); + + //m_jobs.append( m_config->createJobs( m_defaultGroups ) ); +} + + +void +UsersQmlViewStep::setConfigurationMap( const QVariantMap& configurationMap ) +{ + using CalamaresUtils::getBool; + + if ( configurationMap.contains( "defaultGroups" ) + && configurationMap.value( "defaultGroups" ).type() == QVariant::List ) + { + m_defaultGroups = configurationMap.value( "defaultGroups" ).toStringList(); + } + else + { + cWarning() << "Using fallback groups. Please check defaultGroups in users.conf"; + m_defaultGroups = QStringList { "lp", "video", "network", "storage", "wheel", "audio" }; + } + + if ( configurationMap.contains( "autologinGroup" ) + && configurationMap.value( "autologinGroup" ).type() == QVariant::String ) + { + Calamares::JobQueue::instance()->globalStorage()->insert( + "autologinGroup", configurationMap.value( "autologinGroup" ).toString() ); + } + + if ( configurationMap.contains( "sudoersGroup" ) + && configurationMap.value( "sudoersGroup" ).type() == QVariant::String ) + { + Calamares::JobQueue::instance()->globalStorage()->insert( "sudoersGroup", + configurationMap.value( "sudoersGroup" ).toString() ); + } + + bool setRootPassword = getBool( configurationMap, "setRootPassword", true ); + Calamares::JobQueue::instance()->globalStorage()->insert( "setRootPassword", setRootPassword ); + + //m_config->writeRootPassword( setRootPassword ); + //m_config->setAutologinGroup( getBool( configurationMap, "doAutologin", false ) ); + //m_config->setReusePasswordDefault( getBool( configurationMap, "doReusePassword", false ) ); + + if ( configurationMap.contains( "passwordRequirements" ) + && configurationMap.value( "passwordRequirements" ).type() == QVariant::Map ) + { + auto pr_checks( configurationMap.value( "passwordRequirements" ).toMap() ); + + for ( decltype( pr_checks )::const_iterator i = pr_checks.constBegin(); i != pr_checks.constEnd(); ++i ) + { + //m_config->passwordChecks( i.key(), i.value() ); + } + } + + //m_config->setPasswordCheckboxVisible( getBool( configurationMap, "allowWeakPasswords", false ) ); + //m_config->setValidatePasswordDefault( !getBool( configurationMap, "allowWeakPasswordsDefault", false ) ); + + QString shell( QLatin1String( "/bin/bash" ) ); // as if it's not set at all + if ( configurationMap.contains( "userShell" ) ) + { + shell = CalamaresUtils::getString( configurationMap, "userShell" ); + } + // Now it might be explicitly set to empty, which is ok + + Calamares::JobQueue::instance()->globalStorage()->insert( "userShell", shell ); + + /*using Action = SetHostNameJob::Action; + + QString hostnameActionString = CalamaresUtils::getString( configurationMap, "setHostname" ); + if ( hostnameActionString.isEmpty() ) + { + hostnameActionString = QStringLiteral( "EtcFile" ); + } + bool ok = false; + auto hostnameAction = hostnameActions().find( hostnameActionString, ok ); + if ( !ok ) + { + hostnameAction = Action::EtcHostname; + } + + Action hostsfileAction = getBool( configurationMap, "writeHostsFile", true ) ? Action::WriteEtcHosts : Action::None; + m_actions = hostsfileAction | hostnameAction;*/ + + Calamares::QmlViewStep::setConfigurationMap( configurationMap ); // call parent implementation last + setContextProperty( "Users", m_config ); +} diff --git a/src/modules/usersq/UsersQmlViewStep.h b/src/modules/usersq/UsersQmlViewStep.h new file mode 100644 index 0000000000..c40b35f476 --- /dev/null +++ b/src/modules/usersq/UsersQmlViewStep.h @@ -0,0 +1,72 @@ +/* === This file is part of Calamares - === + * + * Copyright 2014-2015, Teo Mrnjavac + * Copyright 2017, Adriaan de Groot + * Copyright 2020, Camilo Higuita + * + * Calamares is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Calamares is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Calamares. If not, see . + */ + +#ifndef USERSQMLVIEWSTEP_H +#define USERSQMLVIEWSTEP_H + +#include +//#include "SetHostNameJob.h" + +#include +#include + +#include + +#include +#include "Config.h" + +class PLUGINDLLEXPORT UsersQmlViewStep : public Calamares::QmlViewStep +{ + Q_OBJECT + +public: + explicit UsersQmlViewStep( QObject* parent = nullptr ); + + QString prettyName() const override; + + bool isNextEnabled() const override; + bool isBackEnabled() const override; + + bool isAtBeginning() const override; + bool isAtEnd() const override; + + QList< Calamares::job_ptr > jobs() const override; + + void onActivate() override; + void onLeave() override; + + void setConfigurationMap( const QVariantMap& configurationMap ) override; + + QObject * getConfig() override + { + return m_config; + } + +private: + Config *m_config; + QList< Calamares::job_ptr > m_jobs; + + QStringList m_defaultGroups; + //SetHostNameJob::Actions m_actions; +}; + +CALAMARES_PLUGIN_FACTORY_DECLARATION( UsersQmlViewStepFactory ) + +#endif // USERSQMLVIEWSTEP_H diff --git a/src/modules/usersq/usersq.conf b/src/modules/usersq/usersq.conf new file mode 100644 index 0000000000..f416a5c397 --- /dev/null +++ b/src/modules/usersq/usersq.conf @@ -0,0 +1,42 @@ +# For documentation see Users Module users.conf +# +--- +# Used as default groups for the created user. +# Adjust to your Distribution defaults. +defaultGroups: + - users + - lp + - video + - network + - storage + - wheel + - audio + - lpadmin + +autologinGroup: autologin + +doAutologin: true + +sudoersGroup: wheel + +setRootPassword: true + +doReusePassword: true + +passwordRequirements: + nonempty: true + minLength: -1 # Password at least this many characters + maxLength: -1 # Password at most this many characters + libpwquality: + - minlen=0 + - minclass=0 + +allowWeakPasswords: false + +allowWeakPasswordsDefault: false + +userShell: /bin/bash + +setHostname: EtcFile + +writeHostsFile: true diff --git a/src/modules/usersq/usersq.qml b/src/modules/usersq/usersq.qml new file mode 100644 index 0000000000..42bb6321db --- /dev/null +++ b/src/modules/usersq/usersq.qml @@ -0,0 +1,336 @@ +/* === This file is part of Calamares - === + * + * SPDX-FileCopyrightText: 2020 Anke Boersma + * SPDX-License-Identifier: GPL-3.0-or-later + * License-Filename: LICENSE + * + * Calamares is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Calamares is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Calamares. If not, see . + */ + +import io.calamares.core 1.0 +import io.calamares.ui 1.0 + +import QtQuick 2.10 +import QtQuick.Controls 2.10 +import QtQuick.Layouts 1.3 +import org.kde.kirigami 2.7 as Kirigami +import QtGraphicalEffects 1.0 +import QtQuick.Window 2.3 + +Kirigami.ScrollablePage { + + width: parent.width + height: parent.height + + Kirigami.Theme.backgroundColor: "#EFF0F1" + Kirigami.Theme.textColor: "#1F1F1F" + + header: Kirigami.Heading { + + Layout.fillWidth: true + height: 50 + horizontalAlignment: Qt.AlignHCenter + color: Kirigami.Theme.textColor + font.weight: Font.Medium + font.pointSize: 12 + text: qsTr("Pick your user name and credentials to login and perform admin tasks") + } + + ColumnLayout { + + id: _formLayout + spacing: Kirigami.Units.smallSpacing + + Column { + + Layout.fillWidth: true + spacing: Kirigami.Units.smallSpacing + + Label { + + width: parent.width + text: qsTr("What is your name?") + } + + TextField { + + id: _userNameField + width: parent.width + placeholderText: qsTr("Your Full Name") + onTextChanged: config.fullNameChanged(text) + background: Rectangle { + + color: "#FBFBFB" // Kirigami.Theme.backgroundColor + radius: 2 + opacity: 0.9 + //border.color: _userNameField.text === "" ? Kirigami.Theme.backgroundColor : ( config.fullNameReady ? Kirigami.Theme.backgroundColor : Kirigami.Theme.negativeTextColor) + border.color: _userNameField.text === "" ? "#FBFBFB" : ( config.fullNameReady ? "#FBFBFB" : Kirigami.Theme.negativeTextColor) + } + } + } + + Column { + + Layout.fillWidth: true + spacing: Kirigami.Units.smallSpacing + + Label { + + width: parent.width + text: qsTr("What name do you want to use to log in?") + } + + TextField { + + id: _userLoginField + width: parent.width + placeholderText: qsTr("Login Name") + //text: config.userName + onTextEdited: config.loginNameChanged(text) + + background: Rectangle { + + color: "#FBFBFB" // Kirigami.Theme.backgroundColor + opacity: 0.9 + //border.color: _userLoginField.text === "" ? Kirigami.Theme.backgroundColor : ( config.userNameReady ? Kirigami.Theme.backgroundColor : Kirigami.Theme.negativeTextColor) + border.color: _userLoginField.text === "" ? "#FBFBFB" : ( config.userNameReady ? "#FBFBFB" : Kirigami.Theme.negativeTextColor) + } + } + + Label { + + width: parent.width + text: qsTr("If more than one person will use this computer, you can create multiple accounts after installation.") + font.weight: Font.Thin + font.pointSize: 8 + color: "#6D6D6D" + } + } + + Column { + + Layout.fillWidth: true + spacing: Kirigami.Units.smallSpacing + + Label { + + width: parent.width + text: qsTr("What is the name of this computer?") + } + + TextField { + + id: _hostName + width: parent.width + placeholderText: qsTr("Computer Name") + text: config.hostName + onTextEdited: config.hostNameChanged(text) + background: Rectangle { + + color: "#FBFBFB" // Kirigami.Theme.backgroundColor + opacity: 0.9 + //border.color: _hostName.text === "" ? Kirigami.Theme.backgroundColor : ( config.hostNameReady ? Kirigami.Theme.backgroundColor : Kirigami.Theme.negativeTextColor) + border.color: _hostName.text === "" ? "#FBFBFB" : ( config.hostNameReady ? "#FBFBFB" : Kirigami.Theme.negativeTextColor) + } + } + + Label { + + width: parent.width + text: qsTr("This name will be used if you make the computer visible to others on a network.") + font.weight: Font.Thin + font.pointSize: 8 + color: "#6D6D6D" + } + } + + Column { + + Layout.fillWidth: true + spacing: Kirigami.Units.smallSpacing + + Label { + + width: parent.width + text: qsTr("Choose a password to keep your account safe.") + } + + Row { + width: parent.width + spacing: 20 + + TextField { + + id: _passwordField + width: parent.width / 2 - 10 + placeholderText: qsTr("Password") + echoMode: TextInput.Password + passwordMaskDelay: 300 + inputMethodHints: Qt.ImhNoAutoUppercase + onTextChanged: config.userPasswordChanged(text, _verificationPasswordField.text) + + background: Rectangle { + + color: "#FBFBFB" // Kirigami.Theme.backgroundColor + opacity: 0.9 + //border.color: _passwordField.text === "" ? Kirigami.Theme.backgroundColor : ( config.passwordReady ? Kirigami.Theme.backgroundColor : Kirigami.Theme.negativeTextColor) + border.color: _passwordField.text === "" ? "#FBFBFB" : ( config.passwordReady ? "#FBFBFB" : Kirigami.Theme.negativeTextColor) + } + } + + TextField { + + id: _verificationPasswordField + width: parent.width / 2 - 10 + placeholderText: qsTr("Repeat Password") + echoMode: TextInput.Password + passwordMaskDelay: 300 + inputMethodHints: Qt.ImhNoAutoUppercase + onTextChanged: config.userPasswordSecondaryChanged(_passwordField.text, text) + + background: Rectangle { + + color: "#FBFBFB" //Kirigami.Theme.backgroundColor + opacity: 0.9 + //border.color: _verificationpasswordField.text === "" ? Kirigami.Theme.backgroundColor : ( config.passwordReady ? Kirigami.Theme.backgroundColor : Kirigami.Theme.negativeTextColor) + border.color: _verificationpasswordField.text === "" ? "#FBFBFB" : ( config.passwordReady ? "#FBFBFB" : Kirigami.Theme.negativeTextColor) + } + } + } + + Label { + + width: parent.width + text: qsTr("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.") + font.weight: Font.Thin + font.pointSize: 8 + wrapMode: Text.WordWrap + color: "#6D6D6D" + } + } + + CheckBox { + + visible: config.allowWeakPasswords + //visible: false + text: qsTr("Validate passwords quality") + checked: config.allowWeakPasswordsDefault + onToggled: config.allowWeakPasswordsDefault = !config.allowWeakPasswordsDefault + } + + Label { + + visible: config.allowWeakPasswords + //visible: false + width: parent.width + text: qsTr("When this box is checked, password-strength checking is done and you will not be able to use a weak password..") + font.weight: Font.Thin + font.pointSize: 8 + color: "#6D6D6D" + } + + CheckBox { + + text: qsTr("Log in automatically without asking for the password") + checked: config.doAutologin + onToggled: config.doAutologin = !config.doAutologin + } + + CheckBox { + + id: root + visible: config.doReusePassword + text: qsTr("Reuse user password as root password") + checked: config.reuseUserPasswordForRoot + //checked: false + onToggled: config.reuseUserPasswordForRoot = !config.reuseUserPasswordForRoot + } + + Label { + + visible: root.checked + width: parent.width + text: qsTr("Use the same password for the administrator account.") + font.weight: Font.Thin + font.pointSize: 8 + color: "#6D6D6D" + } + + Column { + + visible: ! root.checked + Layout.fillWidth: true + spacing: Kirigami.Units.smallSpacing + + Label { + + width: parent.width + text: qsTr("Choose a root password to keep your account safe.") + } + + Row { + width: parent.width + spacing: 20 + + TextField { + + id: _rootPasswordField + width: parent.width / 2 -10 + placeholderText: qsTr("Root Password") + echoMode: TextInput.Password + passwordMaskDelay: 300 + inputMethodHints: Qt.ImhNoAutoUppercase + onTextChanged: config.rootPasswordChanged(text, _verificationRootPasswordField.text) + + background: Rectangle { + + color: "#FBFBFB" // Kirigami.Theme.backgroundColor + opacity: 0.9 + //border.color: _rootPasswordField.text === "" ? Kirigami.Theme.backgroundColor : ( config.rootPasswordReady ? Kirigami.Theme.backgroundColor : Kirigami.Theme.negativeTextColor) + border.color: _rootPasswordField.text === "" ? "#FBFBFB" : ( config.rootPasswordReady ? "#FBFBFB" : Kirigami.Theme.negativeTextColor) + } + } + + TextField { + + id: _verificationRootPasswordField + width: parent.width / 2 -10 + placeholderText: qsTr("Repeat Root Password") + echoMode: TextInput.Password + passwordMaskDelay: 300 + inputMethodHints: Qt.ImhNoAutoUppercase + onTextChanged: config.rootPasswordSecondaryChanged(_rootPasswordField.text, text) + + background: Rectangle { + + color: "#FBFBFB" // Kirigami.Theme.backgroundColor + opacity: 0.9 + //border.color: _verificationRootPasswordField.text === "" ? Kirigami.Theme.backgroundColor : ( config.rootPasswordReady ? Kirigami.Theme.backgroundColor : Kirigami.Theme.negativeTextColor) + border.color: _verificationRootPasswordField.text === "" ? "#FBFBFB" : ( config.rootPasswordReady ? "#FBFBFB" : Kirigami.Theme.negativeTextColor) + } + } + } + + Label { + + visible: ! root.checked + width: parent.width + text: qsTr("Enter the same password twice, so that it can be checked for typing errors.") + font.weight: Font.Thin + font.pointSize: 8 + color: "#6D6D6D" + } + } + } +} diff --git a/src/modules/usersq/usersq.qrc b/src/modules/usersq/usersq.qrc new file mode 100644 index 0000000000..8c1c4f9862 --- /dev/null +++ b/src/modules/usersq/usersq.qrc @@ -0,0 +1,5 @@ + + + usersq.qml + + From 4968efdaa75069c16c5666a23243df811c78a3bf Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Tue, 11 Aug 2020 13:31:38 +0200 Subject: [PATCH 016/157] [libcalamares] Simplify constructors of InstanceDescription - no more weights in constructors; do that in fromSettings() only. - simplify test to drop those constructors - set config file also for "normal" descriptors; fix test --- src/libcalamares/Settings.cpp | 30 +++++++++++++----------------- src/libcalamares/Settings.h | 5 ----- src/libcalamares/Tests.cpp | 31 ++++++++----------------------- 3 files changed, 21 insertions(+), 45 deletions(-) diff --git a/src/libcalamares/Settings.cpp b/src/libcalamares/Settings.cpp index 42da7e1f8b..ae9b6506cb 100644 --- a/src/libcalamares/Settings.cpp +++ b/src/libcalamares/Settings.cpp @@ -81,15 +81,9 @@ InstanceDescription::InstanceDescription( const Calamares::ModuleSystem::Instanc { m_weight = 0; } -} - -InstanceDescription::InstanceDescription( Calamares::ModuleSystem::InstanceKey&& key, int weight ) - : m_instanceKey( key ) - , m_weight( qBound( 1, weight, 100 ) ) -{ - if ( !isValid() ) + else { - m_weight = 0; + m_configFileName = key.module() + QStringLiteral( ".conf" ); } } @@ -97,14 +91,16 @@ InstanceDescription InstanceDescription::fromSettings( const QVariantMap& m ) { InstanceDescription r( - Calamares::ModuleSystem::InstanceKey( m.value( "module" ).toString(), m.value( "id" ).toString() ), - m.value( "weight" ).toInt() ); + Calamares::ModuleSystem::InstanceKey( m.value( "module" ).toString(), m.value( "id" ).toString() ) ); if ( r.isValid() ) { - r.m_configFileName = m.value( "config" ).toString(); - if ( r.m_configFileName.isEmpty() ) + int w = qBound( 1, m.value( "weight" ).toInt(), 100 ); + r.m_weight = w; + + QString c = m.value( "config" ).toString(); + if ( !c.isEmpty() ) { - r.m_configFileName = r.key().module() + QStringLiteral( ".conf" ); + r.m_configFileName = c; } } return r; @@ -276,8 +272,8 @@ Settings::validateSequence() if ( k.isValid() && k.isCustom() ) { targetKey = k; - const auto it = std::find_if( - m_moduleInstances.constBegin(), m_moduleInstances.constEnd(), moduleFinder ); + const auto it + = std::find_if( m_moduleInstances.constBegin(), m_moduleInstances.constEnd(), moduleFinder ); if ( it == m_moduleInstances.constEnd() ) { cWarning() << "Custom instance key" << instance << "is not listed in the *instances*"; @@ -287,8 +283,8 @@ Settings::validateSequence() if ( k.isValid() && !k.isCustom() ) { targetKey = k; - const auto it = std::find_if( - m_moduleInstances.constBegin(), m_moduleInstances.constEnd(), moduleFinder ); + const auto it + = std::find_if( m_moduleInstances.constBegin(), m_moduleInstances.constEnd(), moduleFinder ); if ( it == m_moduleInstances.constEnd() ) { // Non-custom instance, just mentioned in *sequence* diff --git a/src/libcalamares/Settings.h b/src/libcalamares/Settings.h index 5c2908b4ce..0b8a548ab7 100644 --- a/src/libcalamares/Settings.h +++ b/src/libcalamares/Settings.h @@ -46,11 +46,6 @@ class DLLEXPORT InstanceDescription { using InstanceKey = Calamares::ModuleSystem::InstanceKey; -#ifdef BUILD_AS_TEST -public: -#endif - InstanceDescription( InstanceKey&& key, int weight ); - public: /** @brief An invalid InstanceDescription * diff --git a/src/libcalamares/Tests.cpp b/src/libcalamares/Tests.cpp index 1da333365d..61da7639e0 100644 --- a/src/libcalamares/Tests.cpp +++ b/src/libcalamares/Tests.cpp @@ -273,15 +273,7 @@ TestLibCalamares::testInstanceDescription() } { - InstanceDescription d( InstanceKey(), 0 ); - QVERIFY( !d.isValid() ); - QVERIFY( !d.isCustom() ); - QCOMPARE( d.weight(), 0 ); - QVERIFY( d.configFileName().isEmpty() ); - } - - { - InstanceDescription d( InstanceKey(), 100 ); + InstanceDescription d( InstanceKey {} ); // most-vexing, use brace-init instead QVERIFY( !d.isValid() ); QVERIFY( !d.isCustom() ); QCOMPARE( d.weight(), 0 ); @@ -290,30 +282,23 @@ TestLibCalamares::testInstanceDescription() // Private constructor // - // This doesn't set up the config file yet. + // This does set up the config file, to default values { - InstanceDescription d( InstanceKey::fromString( "welcome" ), 0 ); + InstanceDescription d( InstanceKey::fromString( "welcome" ) ); QVERIFY( d.isValid() ); QVERIFY( !d.isCustom() ); QCOMPARE( d.weight(), 1 ); // **now** the constraints kick in - QVERIFY( d.configFileName().isEmpty() ); + QVERIFY( !d.configFileName().isEmpty() ); + QCOMPARE( d.configFileName(), QStringLiteral( "welcome.conf" ) ); } { - InstanceDescription d( InstanceKey::fromString( "welcome@hi" ), 0 ); + InstanceDescription d( InstanceKey::fromString( "welcome@hi" ) ); QVERIFY( d.isValid() ); QVERIFY( d.isCustom() ); QCOMPARE( d.weight(), 1 ); // **now** the constraints kick in - QVERIFY( d.configFileName().isEmpty() ); - } - - { - InstanceDescription d( InstanceKey::fromString( "welcome@hi" ), 75 ); - QCOMPARE( d.weight(), 75 ); - } - { - InstanceDescription d( InstanceKey::fromString( "welcome@hi" ), 105 ); - QCOMPARE( d.weight(), 100 ); + QVERIFY( !d.configFileName().isEmpty() ); + QCOMPARE( d.configFileName(), QStringLiteral( "welcome.conf" ) ); } From 57f5a92d962540efc27853f2233406df9eb15cfc Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Tue, 11 Aug 2020 14:47:59 +0200 Subject: [PATCH 017/157] [libcalamares] Build complete instanceDescriptor list - there's no reason to ignore custom instances that are **not** mentioned in the *instances* section: it may be useful to name more that one even without distinct config files. --- src/libcalamares/Settings.cpp | 24 +++++++----------------- src/libcalamares/Settings.h | 14 ++++++++++++++ 2 files changed, 21 insertions(+), 17 deletions(-) diff --git a/src/libcalamares/Settings.cpp b/src/libcalamares/Settings.cpp index ae9b6506cb..a054742164 100644 --- a/src/libcalamares/Settings.cpp +++ b/src/libcalamares/Settings.cpp @@ -268,28 +268,18 @@ Settings::validateSequence() if ( !k.isValid() ) { cWarning() << "Invalid instance key in *sequence*," << instance; + continue; } - if ( k.isValid() && k.isCustom() ) + + targetKey = k; + const auto it = std::find_if( m_moduleInstances.constBegin(), m_moduleInstances.constEnd(), moduleFinder ); + if ( it == m_moduleInstances.constEnd() ) { - targetKey = k; - const auto it - = std::find_if( m_moduleInstances.constBegin(), m_moduleInstances.constEnd(), moduleFinder ); - if ( it == m_moduleInstances.constEnd() ) + if ( k.isCustom() ) { cWarning() << "Custom instance key" << instance << "is not listed in the *instances*"; - // don't add it, let this fail later. - } - } - if ( k.isValid() && !k.isCustom() ) - { - targetKey = k; - const auto it - = std::find_if( m_moduleInstances.constBegin(), m_moduleInstances.constEnd(), moduleFinder ); - if ( it == m_moduleInstances.constEnd() ) - { - // Non-custom instance, just mentioned in *sequence* - m_moduleInstances.append( InstanceDescription( k ) ); } + m_moduleInstances.append( InstanceDescription( k ) ); } } } diff --git a/src/libcalamares/Settings.h b/src/libcalamares/Settings.h index 0b8a548ab7..d06a97716d 100644 --- a/src/libcalamares/Settings.h +++ b/src/libcalamares/Settings.h @@ -101,9 +101,23 @@ class DLLEXPORT Settings : public QObject QStringList modulesSearchPaths() const; using InstanceDescriptionList = QList< InstanceDescription >; + /** @brief All the module instances used + * + * Each module-instance mentioned in `settings.conf` has an entry + * in the moduleInstances list -- both custom entries that are + * in the *instances* section, and each module mentioned in the + * *sequence*. + */ InstanceDescriptionList moduleInstances() const; using ModuleSequence = QList< QPair< ModuleSystem::Action, QStringList > >; + /** @brief Representation of *sequence* of execution + * + * Each "section" of the *sequence* key in `settings.conf` gets an + * entry here, stating what kind of action is taken and which modules + * take part (in order). Each entry in the list is an instance key + * which can be found in the moduleInstances() list. + */ ModuleSequence modulesSequence() const; QString brandingComponentName() const; From b23dbd47c730f77486d39d7aa9109bff00570dfe Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Tue, 11 Aug 2020 14:50:15 +0200 Subject: [PATCH 018/157] [libcalamaresui] Chase changes in instanceDescriptor - this is mostly about deleting code, since the special-cases now live in libcalamares where `settings.conf` is interpreted. --- .../modulesystem/ModuleManager.cpp | 80 ++++++------------- 1 file changed, 25 insertions(+), 55 deletions(-) diff --git a/src/libcalamaresui/modulesystem/ModuleManager.cpp b/src/libcalamaresui/modulesystem/ModuleManager.cpp index c872bdaa4e..523e6ec24d 100644 --- a/src/libcalamaresui/modulesystem/ModuleManager.cpp +++ b/src/libcalamaresui/modulesystem/ModuleManager.cpp @@ -1,7 +1,8 @@ /* === This file is part of Calamares - === * - * Copyright 2014-2015, Teo Mrnjavac - * Copyright 2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -157,60 +158,37 @@ ModuleManager::moduleInstance( const ModuleSystem::InstanceKey& instanceKey ) } -/** - * @brief Search a list of instance descriptions for one matching @p module and @p id - * - * @return -1 on failure, otherwise index of the instance that matches. - */ -static int -findCustomInstance( const Settings::InstanceDescriptionList& customInstances, const ModuleSystem::InstanceKey& m ) -{ - for ( int i = 0; i < customInstances.count(); ++i ) - { - const auto& thisInstance = customInstances[ i ]; - if ( thisInstance.module == m.module() && thisInstance.id == m.id() ) - { - return i; - } - } - return -1; -} - -/** @brief Returns the config file name for the fiven @p instanceKey +/** @brief Returns the config file name for the given @p instanceKey * * Custom instances have custom config files, non-custom ones * have a .conf file. Returns an empty QString on * errors. */ static QString -getConfigFileName( const Settings::InstanceDescriptionList& customInstances, +getConfigFileName( const Settings::InstanceDescriptionList& descriptorList, const ModuleSystem::InstanceKey& instanceKey, const ModuleSystem::Descriptor& descriptor ) { - if ( instanceKey.isCustom() ) + if ( descriptor.value( "noconfig", false ).toBool() ) { - int found = findCustomInstance( customInstances, instanceKey ); - - if ( found < 0 ) - { - // This should already have been checked and failed the module already - return QString(); - } - - return customInstances[ found ].config; + // Explicitly set to no-configuration. This doesn't apply + // to custom instances (above) since the only reason to + // **have** a custom instance is to specify a different + // config file for more than one module. + return QString(); } - else + + for ( const auto& descriptor : descriptorList ) { - if ( descriptor.value( "noconfig", false ).toBool() ) + if ( descriptor.key() == instanceKey ) { - // Explicitly set to no-configuration. This doesn't apply - // to custom instances (above) since the only reason to - // **have** a custom instance is to specify a different - // config file for more than one module. - return QString(); + return descriptor.configFileName(); } - return QString( "%1.conf" ).arg( instanceKey.module() ); } + + + // This should already have been checked and failed the module already + return QString(); } void @@ -220,7 +198,7 @@ ModuleManager::loadModules() { cWarning() << "Some installed modules have unmet dependencies."; } - Settings::InstanceDescriptionList customInstances = Settings::instance()->customModuleInstances(); + Settings::InstanceDescriptionList customInstances = Settings::instance()->moduleInstances(); QStringList failedModules; const auto modulesSequence = Settings::instance()->modulesSequence(); @@ -237,16 +215,6 @@ ModuleManager::loadModules() failedModules.append( moduleEntry ); continue; } - if ( instanceKey.isCustom() ) - { - int found = findCustomInstance( customInstances, instanceKey ); - if ( found < 0 ) - { - cError() << "Custom instance" << moduleEntry << "not found in custom instances section."; - failedModules.append( moduleEntry ); - continue; - } - } ModuleSystem::Descriptor descriptor = m_availableDescriptorsByModuleName.value( instanceKey.module(), ModuleSystem::Descriptor() ); @@ -336,7 +304,7 @@ ModuleManager::loadModules() } bool -ModuleManager::addModule( Module *module ) +ModuleManager::addModule( Module* module ) { if ( !module ) { @@ -344,7 +312,7 @@ ModuleManager::addModule( Module *module ) } if ( !module->instanceKey().isValid() ) { - cWarning() << "Module" << module->location() << Logger::Pointer(module) << "has invalid instance key."; + cWarning() << "Module" << module->location() << Logger::Pointer( module ) << "has invalid instance key."; return false; } if ( !checkModuleDependencies( *module ) ) @@ -383,7 +351,9 @@ ModuleManager::checkRequirements() RequirementsChecker* rq = new RequirementsChecker( modules, m_requirementsModel, this ); connect( rq, &RequirementsChecker::done, rq, &RequirementsChecker::deleteLater ); - connect( rq, &RequirementsChecker::done, this, [=](){ this->requirementsComplete( m_requirementsModel->satisfiedMandatory() ); } ); + connect( rq, &RequirementsChecker::done, this, [=]() { + this->requirementsComplete( m_requirementsModel->satisfiedMandatory() ); + } ); QTimer::singleShot( 0, rq, &RequirementsChecker::run ); } From 253e5610afd1098ae6102ae2f6071662a715a0fc Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Tue, 11 Aug 2020 15:27:30 +0200 Subject: [PATCH 019/157] [libcalamares] Better type for the list of InstanceKeys - *sequence* lists module instance keys; make the stored type of those keys InstanceKey instead of QString --- src/libcalamares/Settings.cpp | 23 +++++++++++++-------- src/libcalamares/Settings.h | 2 +- src/libcalamares/modulesystem/InstanceKey.h | 3 +++ 3 files changed, 18 insertions(+), 10 deletions(-) diff --git a/src/libcalamares/Settings.cpp b/src/libcalamares/Settings.cpp index a054742164..3252e706f1 100644 --- a/src/libcalamares/Settings.cpp +++ b/src/libcalamares/Settings.cpp @@ -210,7 +210,13 @@ interpretSequence( const YAML::Node& node, Settings::ModuleSequence& moduleSeque } QStringList thisActionRoster = sequenceVListItem.toMap().value( thisActionS ).toStringList(); - moduleSequence.append( qMakePair( thisAction, thisActionRoster ) ); + Calamares::ModuleSystem::InstanceKeyList roster; + roster.reserve( thisActionRoster.count() ); + std::transform( thisActionRoster.constBegin(), + thisActionRoster.constEnd(), + std::back_inserter( roster ), + []( const QString& s ) { return Calamares::ModuleSystem::InstanceKey::fromString( s ); } ); + moduleSequence.append( qMakePair( thisAction, roster ) ); } } else @@ -262,24 +268,23 @@ Settings::validateSequence() // Check the sequence against the existing instances (which so far are only custom) for ( const auto& step : m_modulesSequence ) { - for ( const auto& instance : step.second ) + for ( const auto& instanceKey : step.second ) { - Calamares::ModuleSystem::InstanceKey k = Calamares::ModuleSystem::InstanceKey::fromString( instance ); - if ( !k.isValid() ) + if ( !instanceKey.isValid() ) { - cWarning() << "Invalid instance key in *sequence*," << instance; + cWarning() << "Invalid instance key in *sequence*," << instanceKey; continue; } - targetKey = k; + targetKey = instanceKey; const auto it = std::find_if( m_moduleInstances.constBegin(), m_moduleInstances.constEnd(), moduleFinder ); if ( it == m_moduleInstances.constEnd() ) { - if ( k.isCustom() ) + if ( instanceKey.isCustom() ) { - cWarning() << "Custom instance key" << instance << "is not listed in the *instances*"; + cWarning() << "Custom instance key" << instanceKey << "is not listed in the *instances*"; } - m_moduleInstances.append( InstanceDescription( k ) ); + m_moduleInstances.append( InstanceDescription( instanceKey ) ); } } } diff --git a/src/libcalamares/Settings.h b/src/libcalamares/Settings.h index d06a97716d..6ebccfb43e 100644 --- a/src/libcalamares/Settings.h +++ b/src/libcalamares/Settings.h @@ -110,7 +110,7 @@ class DLLEXPORT Settings : public QObject */ InstanceDescriptionList moduleInstances() const; - using ModuleSequence = QList< QPair< ModuleSystem::Action, QStringList > >; + using ModuleSequence = QList< QPair< ModuleSystem::Action, Calamares::ModuleSystem::InstanceKeyList > >; /** @brief Representation of *sequence* of execution * * Each "section" of the *sequence* key in `settings.conf` gets an diff --git a/src/libcalamares/modulesystem/InstanceKey.h b/src/libcalamares/modulesystem/InstanceKey.h index 0bfa636f1c..074743bf30 100644 --- a/src/libcalamares/modulesystem/InstanceKey.h +++ b/src/libcalamares/modulesystem/InstanceKey.h @@ -22,6 +22,7 @@ #define MODULESYSTEM_INSTANCEKEY_H #include +#include #include #include @@ -96,6 +97,8 @@ class InstanceKey : public QPair< QString, QString > } }; +using InstanceKeyList = QList< InstanceKey >; + QDebug& operator<<( QDebug& s, const Calamares::ModuleSystem::InstanceKey& i ); } // namespace ModuleSystem From a8075fba5f2fd9cab3d2c2c1f9c8f9e0046a2a53 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Tue, 11 Aug 2020 15:28:25 +0200 Subject: [PATCH 020/157] [libcalamares] Chase API change in settings --- src/libcalamaresui/modulesystem/ModuleManager.cpp | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/libcalamaresui/modulesystem/ModuleManager.cpp b/src/libcalamaresui/modulesystem/ModuleManager.cpp index 523e6ec24d..8c15fc1eb2 100644 --- a/src/libcalamaresui/modulesystem/ModuleManager.cpp +++ b/src/libcalamaresui/modulesystem/ModuleManager.cpp @@ -206,13 +206,12 @@ ModuleManager::loadModules() { ModuleSystem::Action currentAction = modulePhase.first; - foreach ( const QString& moduleEntry, modulePhase.second ) + for ( const auto& instanceKey : modulePhase.second ) { - auto instanceKey = ModuleSystem::InstanceKey::fromString( moduleEntry ); if ( !instanceKey.isValid() ) { - cError() << "Wrong module entry format for module" << moduleEntry; - failedModules.append( moduleEntry ); + cError() << "Wrong module entry format for module" << instanceKey; + failedModules.append( instanceKey.toString() ); continue; } From 4cd2a4ae91e3899e8e029a77d720e621d1ff4757 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Tue, 11 Aug 2020 15:49:14 +0200 Subject: [PATCH 021/157] [libcalamares] Produce warnings while reading settings - any invalid instance key will cause a complaint - "new" custom instances in sequence get a complaint, but the instance description added to the list is valid --- src/libcalamares/Settings.cpp | 26 +++++++++++++++++++------- src/libcalamares/Settings.h | 2 +- 2 files changed, 20 insertions(+), 8 deletions(-) diff --git a/src/libcalamares/Settings.cpp b/src/libcalamares/Settings.cpp index 3252e706f1..813da5c352 100644 --- a/src/libcalamares/Settings.cpp +++ b/src/libcalamares/Settings.cpp @@ -169,7 +169,13 @@ interpretInstances( const YAML::Node& node, Settings::InstanceDescriptionList& c { continue; } - customInstances.append( InstanceDescription::fromSettings( instancesVListItem.toMap() ) ); + auto description = InstanceDescription::fromSettings( instancesVListItem.toMap() ); + if ( !description.isValid() ) + { + cWarning() << "Invalid entry in *instances*" << instancesVListItem; + } + // Append it **anyway**, since this will bail out after Settings is constructed + customInstances.append( description ); } } } @@ -206,16 +212,22 @@ interpretSequence( const YAML::Node& node, Settings::ModuleSequence& moduleSeque } else { + cDebug() << "Unknown action in *sequence*" << thisActionS; continue; } QStringList thisActionRoster = sequenceVListItem.toMap().value( thisActionS ).toStringList(); Calamares::ModuleSystem::InstanceKeyList roster; roster.reserve( thisActionRoster.count() ); - std::transform( thisActionRoster.constBegin(), - thisActionRoster.constEnd(), - std::back_inserter( roster ), - []( const QString& s ) { return Calamares::ModuleSystem::InstanceKey::fromString( s ); } ); + for ( const auto& s : thisActionRoster ) + { + auto instanceKey = Calamares::ModuleSystem::InstanceKey::fromString( s ); + if ( !instanceKey.isValid() ) + { + cWarning() << "Invalid instance in *sequence*" << s; + } + roster.append( instanceKey ); + } moduleSequence.append( qMakePair( thisAction, roster ) ); } } @@ -258,7 +270,7 @@ Settings::Settings( const QString& settingsFilePath, bool debugMode ) } void -Settings::validateSequence() +Settings::reconcileInstancesAndSequence() { // Since moduleFinder captures targetKey by reference, we can // update targetKey to change what the finder lambda looks for. @@ -311,7 +323,7 @@ Settings::setConfiguration( const QByteArray& ba, const QString& explainName ) m_disableCancelDuringExec = requireBool( config, "disable-cancel-during-exec", false ); m_quitAtEnd = requireBool( config, "quit-at-end", false ); - validateSequence(); + reconcileInstancesAndSequence(); } catch ( YAML::Exception& e ) { diff --git a/src/libcalamares/Settings.h b/src/libcalamares/Settings.h index 6ebccfb43e..5507e2322e 100644 --- a/src/libcalamares/Settings.h +++ b/src/libcalamares/Settings.h @@ -89,7 +89,7 @@ class DLLEXPORT Settings : public QObject explicit Settings( const QString& settingsFilePath, bool debugMode ); void setConfiguration( const QByteArray& configData, const QString& explainName ); - void validateSequence(); + void reconcileInstancesAndSequence(); public: static Settings* instance(); From d81d585c3235d8f9feed9d30bd554b7648f02194 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Tue, 11 Aug 2020 16:15:37 +0200 Subject: [PATCH 022/157] [libcalamares] Add isValid() to Settings - settings can be invalid (missing data, whatever) and that can be used to shut things down early. Validity must be checked explicitly, though. --- src/libcalamares/Settings.cpp | 27 +++++++++++++++++++++------ src/libcalamares/Settings.h | 7 +++++++ src/libcalamares/Tests.cpp | 6 +++++- 3 files changed, 33 insertions(+), 7 deletions(-) diff --git a/src/libcalamares/Settings.cpp b/src/libcalamares/Settings.cpp index 813da5c352..7e10de0e82 100644 --- a/src/libcalamares/Settings.cpp +++ b/src/libcalamares/Settings.cpp @@ -282,12 +282,6 @@ Settings::reconcileInstancesAndSequence() { for ( const auto& instanceKey : step.second ) { - if ( !instanceKey.isValid() ) - { - cWarning() << "Invalid instance key in *sequence*," << instanceKey; - continue; - } - targetKey = instanceKey; const auto it = std::find_if( m_moduleInstances.constBegin(), m_moduleInstances.constEnd(), moduleFinder ); if ( it == m_moduleInstances.constEnd() ) @@ -447,4 +441,25 @@ Settings::init( const QString& path ) return new Calamares::Settings( path, true ); } +bool +Settings::isValid() const +{ + if ( brandingComponentName().isEmpty() ) + { + cWarning() << "No branding component is set"; + return false; + } + + const auto invalidDescriptor = []( const InstanceDescription& d ) { return !d.isValid(); }; + const auto invalidDescriptorIt + = std::find_if( m_moduleInstances.constBegin(), m_moduleInstances.constEnd(), invalidDescriptor ); + if ( invalidDescriptorIt != m_moduleInstances.constEnd() ) + { + cWarning() << "Invalid module instance in *instances* or *sequence*"; + return false; + } + + return true; +} + } // namespace Calamares diff --git a/src/libcalamares/Settings.h b/src/libcalamares/Settings.h index 5507e2322e..8e463fc701 100644 --- a/src/libcalamares/Settings.h +++ b/src/libcalamares/Settings.h @@ -122,6 +122,13 @@ class DLLEXPORT Settings : public QObject QString brandingComponentName() const; + /** @brief Are the settings consistent and valid? + * + * Checks that at least branding is set, and that the instances + * and sequence are valid. + */ + bool isValid() const; + /** @brief Is this a debugging run? * * Returns true if Calamares is in debug mode. In debug mode, diff --git a/src/libcalamares/Tests.cpp b/src/libcalamares/Tests.cpp index 61da7639e0..1dc297dd45 100644 --- a/src/libcalamares/Tests.cpp +++ b/src/libcalamares/Tests.cpp @@ -367,6 +367,7 @@ TestLibCalamares::testSettings() { Calamares::Settings s( false ); QVERIFY( !s.debugMode() ); + QVERIFY( !s.isValid() ); } { Calamares::Settings s( true ); @@ -374,8 +375,10 @@ TestLibCalamares::testSettings() QVERIFY( s.moduleInstances().isEmpty() ); QVERIFY( s.modulesSequence().isEmpty() ); QVERIFY( s.brandingComponentName().isEmpty() ); + QVERIFY( !s.isValid() ); s.setConfiguration( R"(--- +branding: default # needed for it to be considered valid instances: - module: welcome id: hi @@ -397,7 +400,8 @@ TestLibCalamares::testSettings() QVERIFY( s.debugMode() ); QCOMPARE( s.moduleInstances().count(), 4 ); // there are 4 module instances mentioned QCOMPARE( s.modulesSequence().count(), 2 ); // 2 steps (show, exec) - QVERIFY( s.brandingComponentName().isEmpty() ); + QVERIFY( !s.brandingComponentName().isEmpty() ); + QVERIFY( s.isValid() ); // Make a lambda where we can adjust what it looks for from the outside, // by capturing a reference. From c8964717c77500feb8a00e5d90677c22666df87e Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Tue, 11 Aug 2020 16:16:43 +0200 Subject: [PATCH 023/157] [calamares] Bail out on invalid settings --- src/calamares/main.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/calamares/main.cpp b/src/calamares/main.cpp index 030ccc2396..4ca089102f 100644 --- a/src/calamares/main.cpp +++ b/src/calamares/main.cpp @@ -166,6 +166,11 @@ main( int argc, char* argv[] ) #endif Calamares::Settings::init( is_debug ); + if ( !Calamares::Settings::instance() || !Calamares::Settings::instance()->isValid() ) + { + qCritical() << "Calamares has invalid settings, shutting down."; + return 78; // EX_CONFIG on FreeBSD + } a.init(); return a.exec(); } From 7cef99605f482b43306c7f22bd6e29ced868aca6 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Tue, 11 Aug 2020 16:45:51 +0200 Subject: [PATCH 024/157] [libcalamares] Distinguish instances with an explicit weight - setting the weight in *instances* should be different from letting the default weight (of 1) stand; explicitly saying 1 should carry some weight (ha!) --- src/libcalamares/Settings.cpp | 9 ++++++--- src/libcalamares/Settings.h | 3 ++- src/libcalamares/Tests.cpp | 27 +++++++++++++++++++++++++++ 3 files changed, 35 insertions(+), 4 deletions(-) diff --git a/src/libcalamares/Settings.cpp b/src/libcalamares/Settings.cpp index 7e10de0e82..592ffd02d0 100644 --- a/src/libcalamares/Settings.cpp +++ b/src/libcalamares/Settings.cpp @@ -75,7 +75,7 @@ namespace Calamares InstanceDescription::InstanceDescription( const Calamares::ModuleSystem::InstanceKey& key ) : m_instanceKey( key ) - , m_weight( 1 ) + , m_weight( -1 ) { if ( !isValid() ) { @@ -94,8 +94,11 @@ InstanceDescription::fromSettings( const QVariantMap& m ) Calamares::ModuleSystem::InstanceKey( m.value( "module" ).toString(), m.value( "id" ).toString() ) ); if ( r.isValid() ) { - int w = qBound( 1, m.value( "weight" ).toInt(), 100 ); - r.m_weight = w; + if ( m.value( "weight" ).isValid() ) + { + int w = qBound( 1, m.value( "weight" ).toInt(), 100 ); + r.m_weight = w; + } QString c = m.value( "config" ).toString(); if ( !c.isEmpty() ) diff --git a/src/libcalamares/Settings.h b/src/libcalamares/Settings.h index 8e463fc701..1cff4b34ac 100644 --- a/src/libcalamares/Settings.h +++ b/src/libcalamares/Settings.h @@ -71,7 +71,8 @@ class DLLEXPORT InstanceDescription const InstanceKey& key() const { return m_instanceKey; } QString configFileName() const { return m_configFileName; } bool isCustom() const { return m_instanceKey.isCustom(); } - int weight() const { return m_weight; } + int weight() const { return m_weight < 0 ? 1 : m_weight; } + bool explicitWeight() const { return m_weight > 0; } private: InstanceKey m_instanceKey; diff --git a/src/libcalamares/Tests.cpp b/src/libcalamares/Tests.cpp index 1dc297dd45..5903dfde66 100644 --- a/src/libcalamares/Tests.cpp +++ b/src/libcalamares/Tests.cpp @@ -270,6 +270,7 @@ TestLibCalamares::testInstanceDescription() QVERIFY( !d.isCustom() ); QCOMPARE( d.weight(), 0 ); QVERIFY( d.configFileName().isEmpty() ); + QVERIFY( !d.explicitWeight() ); } { @@ -278,6 +279,7 @@ TestLibCalamares::testInstanceDescription() QVERIFY( !d.isCustom() ); QCOMPARE( d.weight(), 0 ); QVERIFY( d.configFileName().isEmpty() ); + QVERIFY( !d.explicitWeight() ); } // Private constructor @@ -290,6 +292,7 @@ TestLibCalamares::testInstanceDescription() QCOMPARE( d.weight(), 1 ); // **now** the constraints kick in QVERIFY( !d.configFileName().isEmpty() ); QCOMPARE( d.configFileName(), QStringLiteral( "welcome.conf" ) ); + QVERIFY( !d.explicitWeight() ); } { @@ -299,6 +302,7 @@ TestLibCalamares::testInstanceDescription() QCOMPARE( d.weight(), 1 ); // **now** the constraints kick in QVERIFY( !d.configFileName().isEmpty() ); QCOMPARE( d.configFileName(), QStringLiteral( "welcome.conf" ) ); + QVERIFY( !d.explicitWeight() ); } @@ -317,6 +321,7 @@ TestLibCalamares::testInstanceDescription() InstanceDescription d = InstanceDescription::fromSettings( m ); QVERIFY( !d.isValid() ); + QVERIFY( !d.explicitWeight() ); } { QVariantMap m; @@ -325,7 +330,27 @@ TestLibCalamares::testInstanceDescription() InstanceDescription d = InstanceDescription::fromSettings( m ); QVERIFY( d.isValid() ); QVERIFY( !d.isCustom() ); + // Valid, but no weight set by settings QCOMPARE( d.weight(), 1 ); + QVERIFY( !d.explicitWeight() ); + + QCOMPARE( d.key().module(), QString( "welcome" ) ); + QCOMPARE( d.key().id(), QString( "welcome" ) ); + QCOMPARE( d.configFileName(), QString( "welcome.conf" ) ); + } + { + QVariantMap m; + m.insert( "module", "welcome" ); + m.insert( "weight", 1); + + InstanceDescription d = InstanceDescription::fromSettings( m ); + QVERIFY( d.isValid() ); + QVERIFY( !d.isCustom() ); + + //Valid, set explicitly + QCOMPARE( d.weight(), 1 ); + QVERIFY( d.explicitWeight() ); + QCOMPARE( d.key().module(), QString( "welcome" ) ); QCOMPARE( d.key().id(), QString( "welcome" ) ); QCOMPARE( d.configFileName(), QString( "welcome.conf" ) ); @@ -343,6 +368,7 @@ TestLibCalamares::testInstanceDescription() QCOMPARE( d.key().module(), QString( "welcome" ) ); QCOMPARE( d.key().id(), QString( "hi" ) ); QCOMPARE( d.configFileName(), QString( "welcome.conf" ) ); + QVERIFY( d.explicitWeight() ); } { QVariantMap m; @@ -358,6 +384,7 @@ TestLibCalamares::testInstanceDescription() QCOMPARE( d.key().module(), QString( "welcome" ) ); QCOMPARE( d.key().id(), QString( "hi" ) ); QCOMPARE( d.configFileName(), QString( "hi.conf" ) ); + QVERIFY( d.explicitWeight() ); } } From b144f1dfc085fc02c845c8f83973bb753645aede Mon Sep 17 00:00:00 2001 From: Bart Ribbers Date: Tue, 11 Aug 2020 18:18:31 +0200 Subject: [PATCH 025/157] [mkinitfs] New module This module allows the generation of the initramfs in Alpine Linux based systems (excluding postmarketOS). Very bare bones, but then again it doesn't need much. It uses the Alpine Linux tool "mkinitfs" to do the job. --- src/modules/mkinitfs/main.py | 59 ++++++++++++++++++++++++++++++++ src/modules/mkinitfs/module.desc | 5 +++ 2 files changed, 64 insertions(+) create mode 100644 src/modules/mkinitfs/main.py create mode 100644 src/modules/mkinitfs/module.desc diff --git a/src/modules/mkinitfs/main.py b/src/modules/mkinitfs/main.py new file mode 100644 index 0000000000..7deac39144 --- /dev/null +++ b/src/modules/mkinitfs/main.py @@ -0,0 +1,59 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +# +# === This file is part of Calamares - === +# +# Copyright 2014-2015, Philip Müller +# Copyright 2014, Teo Mrnjavac +# Copyright 2017, Alf Gaida +# Copyright 2019, Adriaan de Groot +# +# Calamares is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# Calamares is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Calamares. If not, see . + +import libcalamares +from libcalamares.utils import target_env_call + + +import gettext +_ = gettext.translation("calamares-python", + localedir=libcalamares.utils.gettext_path(), + languages=libcalamares.utils.gettext_languages(), + fallback=True).gettext + + +def pretty_name(): + return _("Creating initramfs with mkinitfs.") + + +def run_mkinitfs(): + """ + Creates initramfs, even when initramfs already exists. + + :return: + """ + return target_env_call(['mkinitfs']) + + +def run(): + """ + Starts routine to create initramfs. It passes back the exit code + if it fails. + + :return: + """ + return_code = run_mkinitfs() + + if return_code != 0: + return ( _("Failed to run mkinitfs on the target"), + _("The exit code was {}").format(return_code) ) diff --git a/src/modules/mkinitfs/module.desc b/src/modules/mkinitfs/module.desc new file mode 100644 index 0000000000..06541fb870 --- /dev/null +++ b/src/modules/mkinitfs/module.desc @@ -0,0 +1,5 @@ +--- +type: "job" +name: "mkinitfs" +interface: "python" +script: "main.py" From 215cd0d1c3b4a6f8fae8964677a43676b1b32431 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Tue, 11 Aug 2020 22:16:03 +0200 Subject: [PATCH 026/157] [users] Repair test on openSUSE --- src/modules/users/TestCreateUserJob.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/modules/users/TestCreateUserJob.cpp b/src/modules/users/TestCreateUserJob.cpp index 610f84eef2..93dc8967e6 100644 --- a/src/modules/users/TestCreateUserJob.cpp +++ b/src/modules/users/TestCreateUserJob.cpp @@ -63,7 +63,10 @@ CreateUserTests::testReadGroup() #else QVERIFY( groups.contains( QStringLiteral( "root" ) ) ); #endif - QVERIFY( groups.contains( QStringLiteral( "sys" ) ) ); + // openSUSE doesn't have "sys" + // QVERIFY( groups.contains( QStringLiteral( "sys" ) ) ); + QVERIFY( groups.contains( QStringLiteral( "nogroup" ) ) ); + QVERIFY( groups.contains( QStringLiteral( "tty" ) ) ); for ( const QString& s : groups ) { From bdd6bdc3b251b86edd1de3df5e4aae88e1234df8 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Tue, 11 Aug 2020 20:15:14 +0200 Subject: [PATCH 027/157] [libcalamares] Migrate module type and interface to descriptor - move the enums - expose the named-enum functions for them - **start** replacing Descriptor with something stronger; this fails zero tests so it obviously wasn't tested at all --- src/libcalamares/CMakeLists.txt | 1 + src/libcalamares/modulesystem/Descriptor.cpp | 48 ++++++++++++++++++++ src/libcalamares/modulesystem/Descriptor.h | 44 +++++++++++++++++- src/libcalamares/modulesystem/Module.cpp | 44 ++---------------- src/libcalamares/modulesystem/Module.h | 29 +----------- 5 files changed, 99 insertions(+), 67 deletions(-) create mode 100644 src/libcalamares/modulesystem/Descriptor.cpp diff --git a/src/libcalamares/CMakeLists.txt b/src/libcalamares/CMakeLists.txt index 3bfc8e4796..3eab21a99f 100644 --- a/src/libcalamares/CMakeLists.txt +++ b/src/libcalamares/CMakeLists.txt @@ -60,6 +60,7 @@ set( libSources locale/TranslatableString.cpp # Modules + modulesystem/Descriptor.cpp modulesystem/InstanceKey.cpp modulesystem/Module.cpp modulesystem/RequirementsChecker.cpp diff --git a/src/libcalamares/modulesystem/Descriptor.cpp b/src/libcalamares/modulesystem/Descriptor.cpp new file mode 100644 index 0000000000..c8a3c31185 --- /dev/null +++ b/src/libcalamares/modulesystem/Descriptor.cpp @@ -0,0 +1,48 @@ +/* === This file is part of Calamares - === + * + * SPDX-FileCopyrightText: 2020 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later + * + */ + +#include "Descriptor.h" + +namespace Calamares +{ +namespace ModuleSystem +{ + +const NamedEnumTable< Type >& +typeNames() +{ + // *INDENT-OFF* + // clang-format off + static const NamedEnumTable< Type > table{ + { QStringLiteral( "job" ), Type::Job }, + { QStringLiteral( "view" ), Type::View }, + { QStringLiteral( "viewmodule" ), Type::View }, + { QStringLiteral( "jobmodule" ), Type::Job } + }; + // *INDENT-ON* + // clang-format on + return table; +} + +const NamedEnumTable< Interface >& +interfaceNames() +{ + // *INDENT-OFF* + // clang-format off + static const NamedEnumTable< Interface > table { + { QStringLiteral("process"), Interface::Process }, + { QStringLiteral("qtplugin"), Interface::QtPlugin }, + { QStringLiteral("python"), Interface::Python }, + { QStringLiteral("pythonqt"), Interface::PythonQt } + }; + // *INDENT-ON* + // clang-format on + return table; +} + +} // namespace ModuleSystem +} // namespace Calamares diff --git a/src/libcalamares/modulesystem/Descriptor.h b/src/libcalamares/modulesystem/Descriptor.h index c6b5ab5cfd..1d1a24b8b6 100644 --- a/src/libcalamares/modulesystem/Descriptor.h +++ b/src/libcalamares/modulesystem/Descriptor.h @@ -21,17 +21,59 @@ #ifndef MODULESYSTEM_DESCRIPTOR_H #define MODULESYSTEM_DESCRIPTOR_H +#include "utils/NamedEnum.h" + #include namespace Calamares { namespace ModuleSystem { +/** + * @brief The Type enum represents the intended functionality of the module + * Every module is either a job module or a view module. + * A job module is a single Calamares job. + * A view module has a UI (one or more view pages) and zero-to-many jobs. + */ +enum class Type +{ + Job, + View +}; +const NamedEnumTable< Type >& typeNames(); + +/** + * @brief The Interface enum represents the interface through which the module + * talks to Calamares. + * Not all Type-Interface associations are valid. + */ +enum class Interface +{ + QtPlugin, // Jobs or Views + Python, // Jobs only + Process, // Deprecated interface + PythonQt // Views only, available as enum even if PythonQt isn't used +}; +const NamedEnumTable< Interface >& interfaceNames(); + + /* While this isn't a useful *using* right now, the intention is * to create a more strongly-typed Module Descriptor that carries * only the necessary information and no variants. */ -using Descriptor = QVariantMap; +// using Descriptor = QVariantMap; + +class Descriptor +{ +public: + Descriptor(); + + bool isValid() const { return false; } + + QString name() const { return QString(); } + bool isEmergency() const { return false; } +}; + } // namespace ModuleSystem } // namespace Calamares diff --git a/src/libcalamares/modulesystem/Module.cpp b/src/libcalamares/modulesystem/Module.cpp index dae3c84aa6..18c33bde84 100644 --- a/src/libcalamares/modulesystem/Module.cpp +++ b/src/libcalamares/modulesystem/Module.cpp @@ -49,10 +49,10 @@ Module::~Module() {} void Module::initFrom( const Calamares::ModuleSystem::Descriptor& moduleDescriptor, const QString& id ) { - m_key = ModuleSystem::InstanceKey( moduleDescriptor.value( "name" ).toString(), id ); - if ( moduleDescriptor.contains( EMERGENCY ) ) + m_key = ModuleSystem::InstanceKey( moduleDescriptor.name(), id ); + if ( moduleDescriptor.isEmergency() ) { - m_maybe_emergency = moduleDescriptor[ EMERGENCY ].toBool(); + m_maybe_emergency = true; } } @@ -133,54 +133,20 @@ Module::loadConfigurationFile( const QString& configFileName ) //throws YAML::E } -static const NamedEnumTable< Module::Type >& -typeNames() -{ - using Type = Module::Type; - // *INDENT-OFF* - // clang-format off - static const NamedEnumTable< Type > table{ - { QStringLiteral( "job" ), Type::Job }, - { QStringLiteral( "view" ), Type::View }, - { QStringLiteral( "viewmodule" ), Type::View }, - { QStringLiteral( "jobmodule" ), Type::Job } - }; - // *INDENT-ON* - // clang-format on - return table; -} - QString Module::typeString() const { bool ok = false; - QString v = typeNames().find( type(), ok ); + QString v = Calamares::ModuleSystem::typeNames().find( type(), ok ); return ok ? v : QString(); } -static const NamedEnumTable< Module::Interface >& -interfaceNames() -{ - using Interface = Module::Interface; - // *INDENT-OFF* - // clang-format off - static const NamedEnumTable< Interface > table { - { QStringLiteral("process"), Interface::Process }, - { QStringLiteral("qtplugin"), Interface::QtPlugin }, - { QStringLiteral("python"), Interface::Python }, - { QStringLiteral("pythonqt"), Interface::PythonQt } - }; - // *INDENT-ON* - // clang-format on - return table; -} - QString Module::interfaceString() const { bool ok = false; - QString v = interfaceNames().find( interface(), ok ); + QString v = Calamares::ModuleSystem::interfaceNames().find( interface(), ok ); return ok ? v : QString(); } diff --git a/src/libcalamares/modulesystem/Module.h b/src/libcalamares/modulesystem/Module.h index 44e89fd759..a9492c21cc 100644 --- a/src/libcalamares/modulesystem/Module.h +++ b/src/libcalamares/modulesystem/Module.h @@ -51,31 +51,6 @@ Module* moduleFromDescriptor( const ModuleSystem::Descriptor& moduleDescriptor, class DLLEXPORT Module { public: - /** - * @brief The Type enum represents the intended functionality of the module - * Every module is either a job module or a view module. - * A job module is a single Calamares job. - * A view module has a UI (one or more view pages) and zero-to-many jobs. - */ - enum class Type - { - Job, - View - }; - - /** - * @brief The Interface enum represents the interface through which the module - * talks to Calamares. - * Not all Type-Interface associations are valid. - */ - enum class Interface - { - QtPlugin, // Jobs or Views - Python, // Jobs only - Process, // Deprecated interface - PythonQt // Views only, available as enum even if PythonQt isn't used - }; - virtual ~Module(); /** @@ -157,13 +132,13 @@ class DLLEXPORT Module * @brief type returns the Type of this module object. * @return the type enum value. */ - virtual Type type() const = 0; + virtual ModuleSystem::Type type() const = 0; /** * @brief interface the Interface used by this module. * @return the interface enum value. */ - virtual Interface interface() const = 0; + virtual ModuleSystem::Interface interface() const = 0; /** * @brief Check the requirements of this module. From 197cb9982c33ab83325386479226fd8349a6b77a Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Tue, 11 Aug 2020 20:19:00 +0200 Subject: [PATCH 028/157] [libcalamares] Sort the tests by subdir --- src/libcalamares/CMakeLists.txt | 33 +++++++++++++++++---------------- 1 file changed, 17 insertions(+), 16 deletions(-) diff --git a/src/libcalamares/CMakeLists.txt b/src/libcalamares/CMakeLists.txt index 3eab21a99f..284acd1d2c 100644 --- a/src/libcalamares/CMakeLists.txt +++ b/src/libcalamares/CMakeLists.txt @@ -224,22 +224,28 @@ calamares_add_test( ) calamares_add_test( - libcalamaresutilstest + libcalamaresgeoiptest SOURCES - utils/Tests.cpp + geoip/GeoIPTests.cpp + ${geoip_src} ) calamares_add_test( - libcalamaresutilspathstest + libcalamareslocaletest SOURCES - utils/TestPaths.cpp + locale/Tests.cpp ) calamares_add_test( - libcalamaresgeoiptest + libcalamaresmodulesystemtest SOURCES - geoip/GeoIPTests.cpp - ${geoip_src} + modulesystem/Tests.cpp +) + +calamares_add_test( + libcalamaresnetworktest + SOURCES + network/Tests.cpp ) calamares_add_test( @@ -259,22 +265,17 @@ if( KPMcore_FOUND ) endif() calamares_add_test( - libcalamareslocaletest + libcalamaresutilstest SOURCES - locale/Tests.cpp + utils/Tests.cpp ) calamares_add_test( - libcalamaresnetworktest + libcalamaresutilspathstest SOURCES - network/Tests.cpp + utils/TestPaths.cpp ) -calamares_add_test( - libcalamaresmodulesystemtest - SOURCES - modulesystem/Tests.cpp -) # This is not an actual test, it's a test / demo application # for experimenting with GeoIP. From f0c41645153d0cedacb93ed53c0543849cfd9dc4 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Tue, 11 Aug 2020 20:49:57 +0200 Subject: [PATCH 029/157] [libcalamares] Add a more convenient find() to NamedEnum - In most cases, you **know** the table covers all the enum values, and the extra parameter *ok* is just annoying. Provide a convenience that doesn't distinguish empty from empty-but-valid. --- src/libcalamares/utils/NamedEnum.h | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/libcalamares/utils/NamedEnum.h b/src/libcalamares/utils/NamedEnum.h index bf8ff5d181..d962b3c765 100644 --- a/src/libcalamares/utils/NamedEnum.h +++ b/src/libcalamares/utils/NamedEnum.h @@ -105,6 +105,16 @@ struct NamedEnumTable // ok is still false return string_t(); } + + /** @brief Find a value @p s in the table and return its name. + * + * Returns emptry string if the value is not found. + */ + string_t find( enum_t s ) const + { + bool ok = false; + return find( s, ok ); + } }; /** @brief Smashes an enum value to its underlying type. */ From ee834a7abb346bf8fd6c8cdd397d2ffaa8435423 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Tue, 11 Aug 2020 22:08:34 +0200 Subject: [PATCH 030/157] [libcalamares] Define interface for Module descriptor - add fields -- all const, all bogus -- to the descriptor, introduce a stub method to load the descriptor from YAML data (e.g. read from module.desc) - lighten the type-naming in Module a little, with usings --- src/libcalamares/modulesystem/Descriptor.cpp | 14 ++++++ src/libcalamares/modulesystem/Descriptor.h | 52 +++++++++++++++++++- src/libcalamares/modulesystem/Module.h | 7 ++- 3 files changed, 69 insertions(+), 4 deletions(-) diff --git a/src/libcalamares/modulesystem/Descriptor.cpp b/src/libcalamares/modulesystem/Descriptor.cpp index c8a3c31185..6927e74a66 100644 --- a/src/libcalamares/modulesystem/Descriptor.cpp +++ b/src/libcalamares/modulesystem/Descriptor.cpp @@ -7,6 +7,8 @@ #include "Descriptor.h" +#include "utils/Logger.h" + namespace Calamares { namespace ModuleSystem @@ -44,5 +46,17 @@ interfaceNames() return table; } +Descriptor::Descriptor() {} + +Descriptor +Descriptor::fromDescriptorData( const QVariantMap& moduleDesc ) +{ + Descriptor d; + + cDebug() << moduleDesc; + + return d; +} + } // namespace ModuleSystem } // namespace Calamares diff --git a/src/libcalamares/modulesystem/Descriptor.h b/src/libcalamares/modulesystem/Descriptor.h index 1d1a24b8b6..a1a04472ea 100644 --- a/src/libcalamares/modulesystem/Descriptor.h +++ b/src/libcalamares/modulesystem/Descriptor.h @@ -61,17 +61,65 @@ const NamedEnumTable< Interface >& interfaceNames(); * to create a more strongly-typed Module Descriptor that carries * only the necessary information and no variants. */ -// using Descriptor = QVariantMap; - class Descriptor { public: + ///@brief an invalid, and empty, descriptor Descriptor(); + /** @brief Fills a descriptor from the loaded (YAML) data. + * + */ + static Descriptor fromDescriptorData( const QVariantMap& moduleDesc ); + bool isValid() const { return false; } QString name() const { return QString(); } + Type type() const { return Type::Job; } + Interface interface() const { return Interface::QtPlugin; } + bool isEmergency() const { return false; } + bool hasConfig() const { return true; } + + /// @brief The directory where the module.desc lives + QString directory() const { return m_directory; } + void setDirectory( const QString& d ) { m_directory = d; } + + QStringList requiredModules() const { return QStringList {}; } + + /** @section C++ Modules + * + * The C++ modules are the most general, and are loaded as + * a shared library after which a suitable factory creates + * objects from them. + */ + + /// @brief Short path to the shared-library; no extension. + QString load() const { return QString(); } + + /** @section Process Job modules + * + * Process Jobs are somewhat deprecated in favor of shellprocess + * and contextualprocess jobs, since those handle multiple configuration + * much more gracefully. + * + * Process Jobs execute one command. + */ + /// @brief The command to execute; passed to the shell + QString command() const { return QString(); } + /// @brief Timeout in seconds + int timeout() const { return 30; } + /// @brief Run command in chroot? + bool chroot() const { return false; } + + /** @section Python Job modules + * + * Python job modules have one specific script to load and run. + */ + QString script() const { return QString(); } + +private: + QString m_directory; }; } // namespace ModuleSystem diff --git a/src/libcalamares/modulesystem/Module.h b/src/libcalamares/modulesystem/Module.h index a9492c21cc..e9719d7569 100644 --- a/src/libcalamares/modulesystem/Module.h +++ b/src/libcalamares/modulesystem/Module.h @@ -51,6 +51,9 @@ Module* moduleFromDescriptor( const ModuleSystem::Descriptor& moduleDescriptor, class DLLEXPORT Module { public: + using Type = ModuleSystem::Type; + using Interface = ModuleSystem::Interface; + virtual ~Module(); /** @@ -132,13 +135,13 @@ class DLLEXPORT Module * @brief type returns the Type of this module object. * @return the type enum value. */ - virtual ModuleSystem::Type type() const = 0; + virtual Type type() const = 0; /** * @brief interface the Interface used by this module. * @return the interface enum value. */ - virtual ModuleSystem::Interface interface() const = 0; + virtual Interface interface() const = 0; /** * @brief Check the requirements of this module. From 3c6e53ecb979ea8c3d1515d612b4787178e9f8f0 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Tue, 11 Aug 2020 22:12:16 +0200 Subject: [PATCH 031/157] [libcalamaresui] Chase the change in Module descriptor - most of the code becomes **simpler** because the requirement to handle unstructured data is now in the descriptor itself, rather than in consumers. --- .../modulesystem/CppJobModule.cpp | 7 ++--- .../modulesystem/CppJobModule.h | 2 +- .../modulesystem/ModuleFactory.cpp | 31 +++++++++---------- .../modulesystem/ModuleManager.cpp | 23 +++++++------- .../modulesystem/ModuleManager.h | 1 - .../modulesystem/ProcessJobModule.cpp | 26 +++------------- .../modulesystem/ProcessJobModule.h | 2 +- .../modulesystem/PythonJobModule.cpp | 8 ++--- .../modulesystem/PythonJobModule.h | 2 +- .../modulesystem/ViewModule.cpp | 7 ++--- src/libcalamaresui/modulesystem/ViewModule.h | 2 +- 11 files changed, 42 insertions(+), 69 deletions(-) diff --git a/src/libcalamaresui/modulesystem/CppJobModule.cpp b/src/libcalamaresui/modulesystem/CppJobModule.cpp index 632a9dcb82..6050c6955f 100644 --- a/src/libcalamaresui/modulesystem/CppJobModule.cpp +++ b/src/libcalamaresui/modulesystem/CppJobModule.cpp @@ -84,13 +84,12 @@ CppJobModule::jobs() const void -CppJobModule::initFrom( const QVariantMap& moduleDescriptor ) +CppJobModule::initFrom( const ModuleSystem::Descriptor& moduleDescriptor ) { QDir directory( location() ); - QString load; - if ( !moduleDescriptor.value( "load" ).toString().isEmpty() ) + QString load = moduleDescriptor.load(); + if ( !load.isEmpty() ) { - load = moduleDescriptor.value( "load" ).toString(); load = directory.absoluteFilePath( load ); } // If a load path is not specified, we look for a plugin to load in the directory. diff --git a/src/libcalamaresui/modulesystem/CppJobModule.h b/src/libcalamaresui/modulesystem/CppJobModule.h index 2fd82433c4..8774a67e51 100644 --- a/src/libcalamaresui/modulesystem/CppJobModule.h +++ b/src/libcalamaresui/modulesystem/CppJobModule.h @@ -39,7 +39,7 @@ class UIDLLEXPORT CppJobModule : public Module JobList jobs() const override; protected: - void initFrom( const QVariantMap& moduleDescriptor ) override; + void initFrom( const ModuleSystem::Descriptor& moduleDescriptor ) override; private: explicit CppJobModule(); diff --git a/src/libcalamaresui/modulesystem/ModuleFactory.cpp b/src/libcalamaresui/modulesystem/ModuleFactory.cpp index f3b46eab7d..050854613d 100644 --- a/src/libcalamaresui/modulesystem/ModuleFactory.cpp +++ b/src/libcalamaresui/modulesystem/ModuleFactory.cpp @@ -52,23 +52,22 @@ moduleFromDescriptor( const Calamares::ModuleSystem::Descriptor& moduleDescripto const QString& configFileName, const QString& moduleDirectory ) { - std::unique_ptr< Module > m; + using Type = Calamares::ModuleSystem::Type; + using Interface = Calamares::ModuleSystem::Interface; - QString typeString = moduleDescriptor.value( "type" ).toString(); - QString intfString = moduleDescriptor.value( "interface" ).toString(); + std::unique_ptr< Module > m; - if ( typeString.isEmpty() || intfString.isEmpty() ) - { + if ( !moduleDescriptor.isValid() ) { cError() << "Bad module descriptor format" << instanceId; return nullptr; } - if ( ( typeString == "view" ) || ( typeString == "viewmodule" ) ) + if ( moduleDescriptor.type() == Type::View ) { - if ( intfString == "qtplugin" ) + if ( moduleDescriptor.interface() == Interface::QtPlugin ) { m.reset( new ViewModule() ); } - else if ( intfString == "pythonqt" ) + else if ( moduleDescriptor.interface() == Interface::PythonQt ) { #ifdef WITH_PYTHONQT m.reset( new PythonQtViewModule() ); @@ -78,20 +77,20 @@ moduleFromDescriptor( const Calamares::ModuleSystem::Descriptor& moduleDescripto } else { - cError() << "Bad interface" << intfString << "for module type" << typeString; + cError() << "Bad interface" << Calamares::ModuleSystem::interfaceNames().find( moduleDescriptor.interface() ) << "for module type" << Calamares::ModuleSystem::typeNames().find( moduleDescriptor.type() ); } } - else if ( typeString == "job" ) + else if ( moduleDescriptor.type() == Type::Job ) { - if ( intfString == "qtplugin" ) + if ( moduleDescriptor.interface() == Interface::QtPlugin ) { m.reset( new CppJobModule() ); } - else if ( intfString == "process" ) + else if ( moduleDescriptor.interface() == Interface::Process ) { m.reset( new ProcessJobModule() ); } - else if ( intfString == "python" ) + else if ( moduleDescriptor.interface() == Interface::Python ) { #ifdef WITH_PYTHON m.reset( new PythonJobModule() ); @@ -101,17 +100,17 @@ moduleFromDescriptor( const Calamares::ModuleSystem::Descriptor& moduleDescripto } else { - cError() << "Bad interface" << intfString << "for module type" << typeString; + cError() << "Bad interface" << Calamares::ModuleSystem::interfaceNames().find( moduleDescriptor.interface() ) << "for module type" << Calamares::ModuleSystem::typeNames().find( moduleDescriptor.type() ); } } else { - cError() << "Bad module type" << typeString; + cError() << "Bad module type" << Calamares::ModuleSystem::typeNames().find( moduleDescriptor.type() ); } if ( !m ) { - cError() << "Bad module type (" << typeString << ") or interface string (" << intfString << ") for module " + cError() << "Bad module type (" << Calamares::ModuleSystem::typeNames().find( moduleDescriptor.type() ) << ") or interface string (" << Calamares::ModuleSystem::interfaceNames().find( moduleDescriptor.interface() ) << ") for module " << instanceId; return nullptr; } diff --git a/src/libcalamaresui/modulesystem/ModuleManager.cpp b/src/libcalamaresui/modulesystem/ModuleManager.cpp index 8c15fc1eb2..56888b1b41 100644 --- a/src/libcalamaresui/modulesystem/ModuleManager.cpp +++ b/src/libcalamaresui/modulesystem/ModuleManager.cpp @@ -114,9 +114,9 @@ ModuleManager::doInit() if ( ok && !moduleName.isEmpty() && ( moduleName == currentDir.dirName() ) && !m_availableDescriptorsByModuleName.contains( moduleName ) ) { - m_availableDescriptorsByModuleName.insert( moduleName, moduleDescriptorMap ); - m_moduleDirectoriesByModuleName.insert( moduleName, - descriptorFileInfo.absoluteDir().absolutePath() ); + auto descriptor = Calamares::ModuleSystem::Descriptor::fromDescriptorData( moduleDescriptorMap ); + descriptor.setDirectory(descriptorFileInfo.absoluteDir().absolutePath() ); + m_availableDescriptorsByModuleName.insert( moduleName, descriptor ); } } else @@ -132,8 +132,7 @@ ModuleManager::doInit() } // At this point m_availableDescriptorsByModuleName is filled with // the modules that were found in the search paths. - cDebug() << "Found" << m_availableDescriptorsByModuleName.count() << "modules" - << m_moduleDirectoriesByModuleName.count() << "names"; + cDebug() << "Found" << m_availableDescriptorsByModuleName.count() << "modules"; emit initDone(); } @@ -169,7 +168,7 @@ getConfigFileName( const Settings::InstanceDescriptionList& descriptorList, const ModuleSystem::InstanceKey& instanceKey, const ModuleSystem::Descriptor& descriptor ) { - if ( descriptor.value( "noconfig", false ).toBool() ) + if ( !descriptor.hasConfig() ) { // Explicitly set to no-configuration. This doesn't apply // to custom instances (above) since the only reason to @@ -217,7 +216,7 @@ ModuleManager::loadModules() ModuleSystem::Descriptor descriptor = m_availableDescriptorsByModuleName.value( instanceKey.module(), ModuleSystem::Descriptor() ); - if ( descriptor.isEmpty() ) + if ( !descriptor.isValid() ) { cError() << "Module" << instanceKey.toString() << "not found in module search paths." << Logger::DebugList( m_paths ); @@ -258,7 +257,7 @@ ModuleManager::loadModules() = Calamares::moduleFromDescriptor( descriptor, instanceKey.id(), configFileName, - m_moduleDirectoriesByModuleName.value( instanceKey.module() ) ); + descriptor.directory() ); if ( !thisModule ) { cError() << "Module" << instanceKey.toString() << "cannot be created from descriptor" @@ -358,7 +357,7 @@ ModuleManager::checkRequirements() } static QStringList -missingRequiredModules( const QStringList& required, const QMap< QString, QVariantMap >& available ) +missingRequiredModules( const QStringList& required, const QMap< QString, ModuleSystem::Descriptor >& available ) { QStringList l; for ( const QString& depName : required ) @@ -386,12 +385,12 @@ ModuleManager::checkDependencies() for ( auto it = m_availableDescriptorsByModuleName.begin(); it != m_availableDescriptorsByModuleName.end(); ++it ) { - QStringList unmet = missingRequiredModules( it->value( "requiredModules" ).toStringList(), + QStringList unmet = missingRequiredModules( it->requiredModules(), m_availableDescriptorsByModuleName ); if ( unmet.count() > 0 ) { - QString moduleName = it->value( "name" ).toString(); + QString moduleName = it->name(); somethingWasRemovedBecauseOfUnmetDependencies = true; m_availableDescriptorsByModuleName.erase( it ); numberRemoved++; @@ -415,7 +414,7 @@ ModuleManager::checkModuleDependencies( const Module& m ) bool allRequirementsFound = true; QStringList requiredModules - = m_availableDescriptorsByModuleName[ m.name() ].value( "requiredModules" ).toStringList(); + = m_availableDescriptorsByModuleName[ m.name() ].requiredModules(); for ( const QString& required : requiredModules ) { diff --git a/src/libcalamaresui/modulesystem/ModuleManager.h b/src/libcalamaresui/modulesystem/ModuleManager.h index d079baee76..ed4cef8ba6 100644 --- a/src/libcalamaresui/modulesystem/ModuleManager.h +++ b/src/libcalamaresui/modulesystem/ModuleManager.h @@ -162,7 +162,6 @@ private slots: bool checkModuleDependencies( const Module& ); QMap< QString, ModuleSystem::Descriptor > m_availableDescriptorsByModuleName; - QMap< QString, QString > m_moduleDirectoriesByModuleName; QMap< ModuleSystem::InstanceKey, Module* > m_loadedModulesByInstanceKey; const QStringList m_paths; RequirementsModel* m_requirementsModel; diff --git a/src/libcalamaresui/modulesystem/ProcessJobModule.cpp b/src/libcalamaresui/modulesystem/ProcessJobModule.cpp index 3fb0579d35..b5eed6e438 100644 --- a/src/libcalamaresui/modulesystem/ProcessJobModule.cpp +++ b/src/libcalamaresui/modulesystem/ProcessJobModule.cpp @@ -61,32 +61,14 @@ ProcessJobModule::jobs() const void -ProcessJobModule::initFrom( const QVariantMap& moduleDescriptor ) +ProcessJobModule::initFrom( const ModuleSystem::Descriptor& moduleDescriptor ) { QDir directory( location() ); m_workingPath = directory.absolutePath(); - if ( !moduleDescriptor.value( "command" ).toString().isEmpty() ) - { - m_command = moduleDescriptor.value( "command" ).toString(); - } - - m_secondsTimeout = std::chrono::seconds( 30 ); - if ( moduleDescriptor.contains( "timeout" ) && !moduleDescriptor.value( "timeout" ).isNull() ) - { - int sec = moduleDescriptor.value( "timeout" ).toInt(); - if ( sec < 0 ) - { - sec = 0; - } - m_secondsTimeout = std::chrono::seconds( sec ); - } - - m_runInChroot = false; - if ( moduleDescriptor.contains( "chroot" ) && !moduleDescriptor.value( "chroot" ).isNull() ) - { - m_runInChroot = moduleDescriptor.value( "chroot" ).toBool(); - } + m_command = moduleDescriptor.command(); + m_secondsTimeout = std::chrono::seconds( moduleDescriptor.timeout() ); + m_runInChroot = moduleDescriptor.chroot(); } diff --git a/src/libcalamaresui/modulesystem/ProcessJobModule.h b/src/libcalamaresui/modulesystem/ProcessJobModule.h index 87c6e2da82..b59539a049 100644 --- a/src/libcalamaresui/modulesystem/ProcessJobModule.h +++ b/src/libcalamaresui/modulesystem/ProcessJobModule.h @@ -38,7 +38,7 @@ class UIDLLEXPORT ProcessJobModule : public Module JobList jobs() const override; protected: - void initFrom( const QVariantMap& moduleDescriptor ) override; + void initFrom( const ModuleSystem::Descriptor& moduleDescriptor ) override; private: explicit ProcessJobModule(); diff --git a/src/libcalamaresui/modulesystem/PythonJobModule.cpp b/src/libcalamaresui/modulesystem/PythonJobModule.cpp index d5d5563c7a..72ca116fb1 100644 --- a/src/libcalamaresui/modulesystem/PythonJobModule.cpp +++ b/src/libcalamaresui/modulesystem/PythonJobModule.cpp @@ -62,15 +62,11 @@ PythonJobModule::jobs() const void -PythonJobModule::initFrom( const QVariantMap& moduleDescriptor ) +PythonJobModule::initFrom( const ModuleSystem::Descriptor& moduleDescriptor ) { QDir directory( location() ); m_workingPath = directory.absolutePath(); - - if ( !moduleDescriptor.value( "script" ).toString().isEmpty() ) - { - m_scriptFileName = moduleDescriptor.value( "script" ).toString(); - } + m_scriptFileName = moduleDescriptor.script(); } diff --git a/src/libcalamaresui/modulesystem/PythonJobModule.h b/src/libcalamaresui/modulesystem/PythonJobModule.h index 85f25ab740..db5554b9b9 100644 --- a/src/libcalamaresui/modulesystem/PythonJobModule.h +++ b/src/libcalamaresui/modulesystem/PythonJobModule.h @@ -35,7 +35,7 @@ class UIDLLEXPORT PythonJobModule : public Module JobList jobs() const override; protected: - void initFrom( const QVariantMap& moduleDescriptor ) override; + void initFrom( const ModuleSystem::Descriptor& moduleDescriptor ) override; private: explicit PythonJobModule(); diff --git a/src/libcalamaresui/modulesystem/ViewModule.cpp b/src/libcalamaresui/modulesystem/ViewModule.cpp index 54a79ab66b..8f3b9a340e 100644 --- a/src/libcalamaresui/modulesystem/ViewModule.cpp +++ b/src/libcalamaresui/modulesystem/ViewModule.cpp @@ -89,13 +89,12 @@ ViewModule::jobs() const void -ViewModule::initFrom( const QVariantMap& moduleDescriptor ) +ViewModule::initFrom( const ModuleSystem::Descriptor& moduleDescriptor ) { QDir directory( location() ); - QString load; - if ( !moduleDescriptor.value( "load" ).toString().isEmpty() ) + QString load = moduleDescriptor.load(); + if ( !load.isEmpty() ) { - load = moduleDescriptor.value( "load" ).toString(); load = directory.absoluteFilePath( load ); } // If a load path is not specified, we look for a plugin to load in the directory. diff --git a/src/libcalamaresui/modulesystem/ViewModule.h b/src/libcalamaresui/modulesystem/ViewModule.h index 1d24ca8112..ac56e7607f 100644 --- a/src/libcalamaresui/modulesystem/ViewModule.h +++ b/src/libcalamaresui/modulesystem/ViewModule.h @@ -42,7 +42,7 @@ class UIDLLEXPORT ViewModule : public Module RequirementsList checkRequirements() override; protected: - void initFrom( const QVariantMap& moduleDescriptor ) override; + void initFrom( const ModuleSystem::Descriptor& moduleDescriptor ) override; private: explicit ViewModule(); From 60fbf04594393689a7305e0df82bbf6fd01a547d Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Tue, 11 Aug 2020 22:13:04 +0200 Subject: [PATCH 032/157] [calamares] Adjust module test-loader for changed API - the test-loader needs to create modules (and does so hackishly, outside of the ModuleManager) so it needs to chase the API as well. --- src/calamares/testmain.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/calamares/testmain.cpp b/src/calamares/testmain.cpp index c9ac00f2b2..d70ee70b56 100644 --- a/src/calamares/testmain.cpp +++ b/src/calamares/testmain.cpp @@ -184,13 +184,13 @@ class ExecViewModule : public Calamares::Module void loadSelf() override; - virtual Type type() const override; - virtual Interface interface() const override; + virtual Calamares::ModuleSystem::Type type() const override; + virtual Calamares::ModuleSystem::Interface interface() const override; virtual Calamares::JobList jobs() const override; protected: - void initFrom( const QVariantMap& ) override; + void initFrom( const Calamares::ModuleSystem::Descriptor& ) override; }; ExecViewModule::ExecViewModule() @@ -201,13 +201,13 @@ ExecViewModule::ExecViewModule() // We don't have one, so build one -- this gives us "x@x". QVariantMap m; m.insert( "name", "x" ); - Calamares::Module::initFrom( m, "x" ); + Calamares::Module::initFrom( Calamares::ModuleSystem::Descriptor::fromDescriptorData(m), "x" ); } ExecViewModule::~ExecViewModule() {} void -ExecViewModule::initFrom( const QVariantMap& ) +ExecViewModule::initFrom( const Calamares::ModuleSystem::Descriptor& ) { } @@ -332,7 +332,7 @@ load_module( const ModuleConfig& moduleConfig ) cDebug() << "Module" << moduleName << "job-configuration:" << configFile; - Calamares::Module* module = Calamares::moduleFromDescriptor( descriptor, name, configFile, moduleDirectory ); + Calamares::Module* module = Calamares::moduleFromDescriptor( Calamares::ModuleSystem::Descriptor::fromDescriptorData( descriptor ), name, configFile, moduleDirectory ); return module; } From 65273a262b0d5de3a40f39fa3fe5975b8ddccff9 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Wed, 12 Aug 2020 00:33:08 +0200 Subject: [PATCH 033/157] [libcalamares] Start putting data into the module Descriptor --- src/libcalamares/modulesystem/Descriptor.cpp | 17 +++++++++++++++++ src/libcalamares/modulesystem/Descriptor.h | 9 ++++++--- 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/src/libcalamares/modulesystem/Descriptor.cpp b/src/libcalamares/modulesystem/Descriptor.cpp index 6927e74a66..b233686f08 100644 --- a/src/libcalamares/modulesystem/Descriptor.cpp +++ b/src/libcalamares/modulesystem/Descriptor.cpp @@ -55,6 +55,23 @@ Descriptor::fromDescriptorData( const QVariantMap& moduleDesc ) cDebug() << moduleDesc; + { + bool typeOk = false; + Type t = typeNames().find( moduleDesc.value( "type" ).toString(), typeOk ); + bool interfaceOk = false; + Interface i = interfaceNames().find( moduleDesc.value( "interface" ).toString(), interfaceOk ); + if ( typeOk && interfaceOk ) + { + d.m_type = t; + d.m_interface = i; + d.m_isValid = true; + } + } + if ( !d.m_isValid ) + { + return d; + } + return d; } diff --git a/src/libcalamares/modulesystem/Descriptor.h b/src/libcalamares/modulesystem/Descriptor.h index a1a04472ea..709f37ff36 100644 --- a/src/libcalamares/modulesystem/Descriptor.h +++ b/src/libcalamares/modulesystem/Descriptor.h @@ -72,11 +72,11 @@ class Descriptor */ static Descriptor fromDescriptorData( const QVariantMap& moduleDesc ); - bool isValid() const { return false; } + bool isValid() const { return m_isValid; } QString name() const { return QString(); } - Type type() const { return Type::Job; } - Interface interface() const { return Interface::QtPlugin; } + Type type() const { return m_type; } + Interface interface() const { return m_interface; } bool isEmergency() const { return false; } bool hasConfig() const { return true; } @@ -120,6 +120,9 @@ class Descriptor private: QString m_directory; + Type m_type; + Interface m_interface; + bool m_isValid = false; }; } // namespace ModuleSystem From f1bb70269f5b1a56207cb48a312aa946a50b4bdd Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Wed, 12 Aug 2020 00:34:22 +0200 Subject: [PATCH 034/157] [libcalamares] Improve warning/error logging - the lack of a space after the : was inconsistent with most of the rest of the logging. --- src/libcalamares/utils/Logger.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/libcalamares/utils/Logger.cpp b/src/libcalamares/utils/Logger.cpp index 5a2149f44b..d132a2e3ed 100644 --- a/src/libcalamares/utils/Logger.cpp +++ b/src/libcalamares/utils/Logger.cpp @@ -188,11 +188,11 @@ CDebug::CDebug( unsigned int debugLevel, const char* func ) { if ( debugLevel <= LOGERROR ) { - m_msg = QStringLiteral( "ERROR:" ); + m_msg = QStringLiteral( "ERROR: " ); } else if ( debugLevel <= LOGWARNING ) { - m_msg = QStringLiteral( "WARNING:" ); + m_msg = QStringLiteral( "WARNING: " ); } } From e1e81bb133bdebe7af79a4246419b6c59e9e504b Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Wed, 12 Aug 2020 00:39:01 +0200 Subject: [PATCH 035/157] [libcalamaresui] Warnings--, don't shadow a parameter --- src/libcalamaresui/modulesystem/ModuleManager.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/libcalamaresui/modulesystem/ModuleManager.cpp b/src/libcalamaresui/modulesystem/ModuleManager.cpp index 56888b1b41..283ea8b5f8 100644 --- a/src/libcalamaresui/modulesystem/ModuleManager.cpp +++ b/src/libcalamaresui/modulesystem/ModuleManager.cpp @@ -166,9 +166,9 @@ ModuleManager::moduleInstance( const ModuleSystem::InstanceKey& instanceKey ) static QString getConfigFileName( const Settings::InstanceDescriptionList& descriptorList, const ModuleSystem::InstanceKey& instanceKey, - const ModuleSystem::Descriptor& descriptor ) + const ModuleSystem::Descriptor& thisModule ) { - if ( !descriptor.hasConfig() ) + if ( !thisModule.hasConfig() ) { // Explicitly set to no-configuration. This doesn't apply // to custom instances (above) since the only reason to From e406ae19670b72d8032efefb478d7e183abdcfd9 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Wed, 12 Aug 2020 00:52:54 +0200 Subject: [PATCH 036/157] [libcalamares] Add name to module descriptor - introduce basic tests of the data structure - interpret name when passed in as descriptor data --- src/libcalamares/modulesystem/Descriptor.cpp | 3 +- src/libcalamares/modulesystem/Descriptor.h | 3 +- src/libcalamares/modulesystem/Tests.cpp | 44 ++++++++++++++++++++ 3 files changed, 48 insertions(+), 2 deletions(-) diff --git a/src/libcalamares/modulesystem/Descriptor.cpp b/src/libcalamares/modulesystem/Descriptor.cpp index b233686f08..439c7f48c7 100644 --- a/src/libcalamares/modulesystem/Descriptor.cpp +++ b/src/libcalamares/modulesystem/Descriptor.cpp @@ -60,7 +60,8 @@ Descriptor::fromDescriptorData( const QVariantMap& moduleDesc ) Type t = typeNames().find( moduleDesc.value( "type" ).toString(), typeOk ); bool interfaceOk = false; Interface i = interfaceNames().find( moduleDesc.value( "interface" ).toString(), interfaceOk ); - if ( typeOk && interfaceOk ) + d.m_name = moduleDesc.value( "name" ).toString(); + if ( typeOk && interfaceOk && !d.m_name.isEmpty() ) { d.m_type = t; d.m_interface = i; diff --git a/src/libcalamares/modulesystem/Descriptor.h b/src/libcalamares/modulesystem/Descriptor.h index 709f37ff36..c6fa5e3517 100644 --- a/src/libcalamares/modulesystem/Descriptor.h +++ b/src/libcalamares/modulesystem/Descriptor.h @@ -74,7 +74,7 @@ class Descriptor bool isValid() const { return m_isValid; } - QString name() const { return QString(); } + QString name() const { return m_name; } Type type() const { return m_type; } Interface interface() const { return m_interface; } @@ -119,6 +119,7 @@ class Descriptor QString script() const { return QString(); } private: + QString m_name; QString m_directory; Type m_type; Interface m_interface; diff --git a/src/libcalamares/modulesystem/Tests.cpp b/src/libcalamares/modulesystem/Tests.cpp index 282300eecc..2fcd5353da 100644 --- a/src/libcalamares/modulesystem/Tests.cpp +++ b/src/libcalamares/modulesystem/Tests.cpp @@ -18,6 +18,7 @@ * */ +#include "modulesystem/Descriptor.h" #include "modulesystem/InstanceKey.h" #include @@ -40,6 +41,8 @@ private Q_SLOTS: void testBadSimpleCases(); void testBadFromStringCases(); + + void testBasicDescriptor(); }; void @@ -136,6 +139,47 @@ ModuleSystemTests::testBadFromStringCases() assert_is_invalid( k0 ); } +void +ModuleSystemTests::testBasicDescriptor() +{ + { + QVariantMap m; + auto d = Calamares::ModuleSystem::Descriptor::fromDescriptorData( m ); + + QVERIFY( !d.isValid() ); + QVERIFY( d.name().isEmpty() ); + } + { + QVariantMap m; + m.insert( "name", QVariant() ); + auto d = Calamares::ModuleSystem::Descriptor::fromDescriptorData( m ); + + QVERIFY( !d.isValid() ); + QVERIFY( d.name().isEmpty() ); + } + { + QVariantMap m; + m.insert( "name", 17 ); + auto d = Calamares::ModuleSystem::Descriptor::fromDescriptorData( m ); + + QVERIFY( !d.isValid() ); + QVERIFY( !d.name().isEmpty() ); + QCOMPARE( d.name(), QStringLiteral( "17" ) ); // Strange but true + } + { + QVariantMap m; + m.insert( "name", "welcome" ); + m.insert( "type", "viewmodule" ); + m.insert( "interface", "qtplugin" ); + auto d = Calamares::ModuleSystem::Descriptor::fromDescriptorData( m ); + + // QVERIFY( !d.isValid() ); + QCOMPARE( d.name(), QStringLiteral( "welcome" ) ); + QCOMPARE( d.type(), Calamares::ModuleSystem::Type::View ); + QCOMPARE( d.interface(), Calamares::ModuleSystem::Interface::QtPlugin ); + } +} + QTEST_GUILESS_MAIN( ModuleSystemTests ) From c8b96c278be0010df1e3ae5722870806dd7ccdff Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Wed, 12 Aug 2020 08:42:52 +0200 Subject: [PATCH 037/157] [libcalamares] Complete the generic module descriptor - loads emergency, noconfig, requiredModules keys - warns (and marks descriptor invalid) if there are unused / unknown keys left over in the descriptor data. --- src/libcalamares/modulesystem/Descriptor.cpp | 37 ++++++++++++++++++-- src/libcalamares/modulesystem/Descriptor.h | 9 +++-- 2 files changed, 41 insertions(+), 5 deletions(-) diff --git a/src/libcalamares/modulesystem/Descriptor.cpp b/src/libcalamares/modulesystem/Descriptor.cpp index 439c7f48c7..ecfd6b8981 100644 --- a/src/libcalamares/modulesystem/Descriptor.cpp +++ b/src/libcalamares/modulesystem/Descriptor.cpp @@ -8,6 +8,7 @@ #include "Descriptor.h" #include "utils/Logger.h" +#include "utils/Variant.h" namespace Calamares { @@ -57,9 +58,21 @@ Descriptor::fromDescriptorData( const QVariantMap& moduleDesc ) { bool typeOk = false; - Type t = typeNames().find( moduleDesc.value( "type" ).toString(), typeOk ); + QString typeValue = moduleDesc.value( "type" ).toString(); + Type t = typeNames().find( typeValue, typeOk ); + if ( !typeOk ) + { + cWarning() << "Module descriptor contains invalid *type*" << typeValue; + } + bool interfaceOk = false; - Interface i = interfaceNames().find( moduleDesc.value( "interface" ).toString(), interfaceOk ); + QString interfaceValue = moduleDesc.value( "interface" ).toString(); + Interface i = interfaceNames().find( interfaceValue, interfaceOk ); + if ( !interfaceOk ) + { + cWarning() << "Module descriptor contains invalid *interface*" << interfaceValue; + } + d.m_name = moduleDesc.value( "name" ).toString(); if ( typeOk && interfaceOk && !d.m_name.isEmpty() ) { @@ -73,6 +86,26 @@ Descriptor::fromDescriptorData( const QVariantMap& moduleDesc ) return d; } + d.m_isEmergeny = CalamaresUtils::getBool( moduleDesc, "emergency", false ); + d.m_hasConfig = !CalamaresUtils::getBool( moduleDesc, "noconfig", false ); // Inverted logic during load + d.m_requiredModules = CalamaresUtils::getStringList( moduleDesc, "requiredModules" ); + + QStringList consumedKeys { "type", "interface", "name", "emergency", "noconfig", "requiredModules" }; + + QStringList superfluousKeys; + for ( auto kv = moduleDesc.keyBegin(); kv != moduleDesc.keyEnd(); ++kv ) + { + if ( !consumedKeys.contains( *kv ) ) + { + superfluousKeys << *kv; + } + } + if ( !superfluousKeys.isEmpty() ) + { + cWarning() << "Module descriptor contains extra keys:" << Logger::DebugList( superfluousKeys ); + d.m_isValid = false; + } + return d; } diff --git a/src/libcalamares/modulesystem/Descriptor.h b/src/libcalamares/modulesystem/Descriptor.h index c6fa5e3517..b44b53c484 100644 --- a/src/libcalamares/modulesystem/Descriptor.h +++ b/src/libcalamares/modulesystem/Descriptor.h @@ -78,14 +78,14 @@ class Descriptor Type type() const { return m_type; } Interface interface() const { return m_interface; } - bool isEmergency() const { return false; } - bool hasConfig() const { return true; } + bool isEmergency() const { return m_isEmergeny; } + bool hasConfig() const { return m_hasConfig; } /// @brief The directory where the module.desc lives QString directory() const { return m_directory; } void setDirectory( const QString& d ) { m_directory = d; } - QStringList requiredModules() const { return QStringList {}; } + const QStringList& requiredModules() const { return m_requiredModules; } /** @section C++ Modules * @@ -121,9 +121,12 @@ class Descriptor private: QString m_name; QString m_directory; + QStringList m_requiredModules; Type m_type; Interface m_interface; bool m_isValid = false; + bool m_isEmergeny = false; + bool m_hasConfig = true; }; } // namespace ModuleSystem From efd7145f765f2930156eec0caca42bd82ab7532b Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Wed, 12 Aug 2020 09:06:47 +0200 Subject: [PATCH 038/157] [libcalamares] Implement the interface-specific fields for descriptor --- src/libcalamares/modulesystem/Descriptor.cpp | 28 ++++++++++++++++++-- src/libcalamares/modulesystem/Descriptor.h | 27 +++++++++++++++---- 2 files changed, 48 insertions(+), 7 deletions(-) diff --git a/src/libcalamares/modulesystem/Descriptor.cpp b/src/libcalamares/modulesystem/Descriptor.cpp index ecfd6b8981..1ac4dc6c02 100644 --- a/src/libcalamares/modulesystem/Descriptor.cpp +++ b/src/libcalamares/modulesystem/Descriptor.cpp @@ -54,8 +54,6 @@ Descriptor::fromDescriptorData( const QVariantMap& moduleDesc ) { Descriptor d; - cDebug() << moduleDesc; - { bool typeOk = false; QString typeValue = moduleDesc.value( "type" ).toString(); @@ -92,6 +90,32 @@ Descriptor::fromDescriptorData( const QVariantMap& moduleDesc ) QStringList consumedKeys { "type", "interface", "name", "emergency", "noconfig", "requiredModules" }; + switch ( d.interface() ) + { + case Interface::QtPlugin: + d.m_script = CalamaresUtils::getString( moduleDesc, "load" ); + consumedKeys << "load"; + break; + case Interface::Python: + case Interface::PythonQt: + d.m_script = CalamaresUtils::getString( moduleDesc, "script" ); + consumedKeys << "script"; + break; + case Interface::Process: + d.m_script = CalamaresUtils::getString( moduleDesc, "command" ); + d.m_processTimeout = CalamaresUtils::getInteger( moduleDesc, "timeout", 30 ); + d.m_processChroot = CalamaresUtils::getBool( moduleDesc, "chroot", false ); + consumedKeys << "command" + << "timeout" + << "chroot"; + + if ( d.m_processTimeout < 0 ) + { + d.m_processTimeout = 0; + } + break; + } + QStringList superfluousKeys; for ( auto kv = moduleDesc.keyBegin(); kv != moduleDesc.keyEnd(); ++kv ) { diff --git a/src/libcalamares/modulesystem/Descriptor.h b/src/libcalamares/modulesystem/Descriptor.h index b44b53c484..8166f98691 100644 --- a/src/libcalamares/modulesystem/Descriptor.h +++ b/src/libcalamares/modulesystem/Descriptor.h @@ -95,7 +95,7 @@ class Descriptor */ /// @brief Short path to the shared-library; no extension. - QString load() const { return QString(); } + QString load() const { return m_interface == Interface::QtPlugin ? m_script : QString(); } /** @section Process Job modules * @@ -106,17 +106,20 @@ class Descriptor * Process Jobs execute one command. */ /// @brief The command to execute; passed to the shell - QString command() const { return QString(); } + QString command() const { return m_interface == Interface::Process ? m_script : QString(); } /// @brief Timeout in seconds - int timeout() const { return 30; } + int timeout() const { return m_processTimeout; } /// @brief Run command in chroot? - bool chroot() const { return false; } + bool chroot() const { return m_processChroot; } /** @section Python Job modules * * Python job modules have one specific script to load and run. */ - QString script() const { return QString(); } + QString script() const + { + return ( m_interface == Interface::Python || m_interface == Interface::PythonQt ) ? m_script : QString(); + } private: QString m_name; @@ -127,6 +130,20 @@ class Descriptor bool m_isValid = false; bool m_isEmergeny = false; bool m_hasConfig = true; + + /** @brief The name of the thing to load + * + * - A C++ module loads a shared library (via key *load*), + * - A Python module loads a Python script (via key *script*), + * - A process runs a specific command (via key *command*) + * + * This name-of-the-thing is stored here, regardless of which + * interface is being used. + */ + QString m_script; + + int m_processTimeout = 30; + bool m_processChroot = false; }; } // namespace ModuleSystem From f73f94da27bfd77e30ef5698ecdc83d5039d652d Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Wed, 12 Aug 2020 09:36:30 +0200 Subject: [PATCH 039/157] Repait module.desc - a handful of modules had an unused *requires* key in module.desc; this is probably from previous intentions around prerequisites-testing. Since the settings were empty anyway, they have been removed. - [unpackfs] Compacted the way *requiredModules* list is written --- src/modules/displaymanager/module.desc | 1 - src/modules/hwclock/module.desc | 1 - src/modules/networkcfg/module.desc | 1 - src/modules/services-systemd/module.desc | 1 - src/modules/unpackfs/module.desc | 3 +-- 5 files changed, 1 insertion(+), 6 deletions(-) diff --git a/src/modules/displaymanager/module.desc b/src/modules/displaymanager/module.desc index ad7ae4423f..56d3fcb07a 100644 --- a/src/modules/displaymanager/module.desc +++ b/src/modules/displaymanager/module.desc @@ -2,5 +2,4 @@ type: "job" name: "displaymanager" interface: "python" -requires: [] script: "main.py" diff --git a/src/modules/hwclock/module.desc b/src/modules/hwclock/module.desc index 47d1b6c142..ba3dbbaf84 100644 --- a/src/modules/hwclock/module.desc +++ b/src/modules/hwclock/module.desc @@ -2,6 +2,5 @@ type: "job" name: "hwclock" interface: "python" -requires: [] script: "main.py" noconfig: true diff --git a/src/modules/networkcfg/module.desc b/src/modules/networkcfg/module.desc index c02305db27..68024cb8d3 100644 --- a/src/modules/networkcfg/module.desc +++ b/src/modules/networkcfg/module.desc @@ -2,6 +2,5 @@ type: "job" name: "networkcfg" interface: "python" -requires: [] script: "main.py" noconfig: true diff --git a/src/modules/services-systemd/module.desc b/src/modules/services-systemd/module.desc index 4a72b658b3..4305b11410 100644 --- a/src/modules/services-systemd/module.desc +++ b/src/modules/services-systemd/module.desc @@ -2,5 +2,4 @@ type: "job" name: "services-systemd" interface: "python" -requires: [] script: "main.py" diff --git a/src/modules/unpackfs/module.desc b/src/modules/unpackfs/module.desc index 4b3086e44e..54d95df1d7 100644 --- a/src/modules/unpackfs/module.desc +++ b/src/modules/unpackfs/module.desc @@ -4,5 +4,4 @@ type: "job" name: "unpackfs" interface: "python" script: "main.py" -requiredModules: - - mount +requiredModules: [ mount ] From c22e0a345103659d293d9708670c5dc8e123b95f Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Wed, 12 Aug 2020 09:53:34 +0200 Subject: [PATCH 040/157] [netinstall][users][tracking] Warnings--, extra ; --- src/modules/netinstall/NetInstallPage.cpp | 2 +- src/modules/tracking/TrackingPage.cpp | 2 +- src/modules/users/UsersPage.cpp | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/modules/netinstall/NetInstallPage.cpp b/src/modules/netinstall/NetInstallPage.cpp index 0d8dc5960e..755b17999c 100644 --- a/src/modules/netinstall/NetInstallPage.cpp +++ b/src/modules/netinstall/NetInstallPage.cpp @@ -46,7 +46,7 @@ NetInstallPage::NetInstallPage( Config* c, QWidget* parent ) connect( c, &Config::statusReady, this, &NetInstallPage::expandGroups ); setPageTitle( nullptr ); - CALAMARES_RETRANSLATE_SLOT( &NetInstallPage::retranslate ); + CALAMARES_RETRANSLATE_SLOT( &NetInstallPage::retranslate ) } NetInstallPage::~NetInstallPage() {} diff --git a/src/modules/tracking/TrackingPage.cpp b/src/modules/tracking/TrackingPage.cpp index 618e1bc8fe..76b4a6f952 100644 --- a/src/modules/tracking/TrackingPage.cpp +++ b/src/modules/tracking/TrackingPage.cpp @@ -37,7 +37,7 @@ TrackingPage::TrackingPage( Config* config, QWidget* parent ) , ui( new Ui::TrackingPage ) { ui->setupUi( this ); - CALAMARES_RETRANSLATE_SLOT( &TrackingPage::retranslate ); + CALAMARES_RETRANSLATE_SLOT( &TrackingPage::retranslate ) ui->noneCheckBox->setChecked( true ); ui->noneCheckBox->setEnabled( false ); diff --git a/src/modules/users/UsersPage.cpp b/src/modules/users/UsersPage.cpp index 5a96af4e40..16a905d08b 100644 --- a/src/modules/users/UsersPage.cpp +++ b/src/modules/users/UsersPage.cpp @@ -155,7 +155,7 @@ UsersPage::UsersPage( Config* config, QWidget* parent ) connect( config, &Config::requireStrongPasswordsChanged, ui->checkBoxValidatePassword, &QCheckBox::setChecked ); } - CALAMARES_RETRANSLATE_SLOT( &UsersPage::retranslate ); + CALAMARES_RETRANSLATE_SLOT( &UsersPage::retranslate ) onReuseUserPasswordChanged( m_config->reuseUserPasswordForRoot() ); } From 665c2d53abeb36192fac4e1f50f6639eafcd0915 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Wed, 12 Aug 2020 09:54:44 +0200 Subject: [PATCH 041/157] [libcalamares] Fix Doxygen comment for TZ locations --- src/libcalamares/locale/TimeZone.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/libcalamares/locale/TimeZone.cpp b/src/libcalamares/locale/TimeZone.cpp index 3b3b99dce0..7535bbc5c0 100644 --- a/src/libcalamares/locale/TimeZone.cpp +++ b/src/libcalamares/locale/TimeZone.cpp @@ -211,8 +211,8 @@ class Private : public QObject Q_OBJECT public: RegionVector m_regions; - ZoneVector m_zones; - ZoneVector m_altZones; //< Extra locations for zones + ZoneVector m_zones; ///< The official timezones and locations + ZoneVector m_altZones; ///< Extra locations for zones Private() { From 57f02464d9d1f050585b326783b375d2ec5d1463 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Wed, 12 Aug 2020 09:57:46 +0200 Subject: [PATCH 042/157] [hostinfo] The hackish ARM-detection is only for Linux --- src/modules/hostinfo/HostInfoJob.cpp | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/modules/hostinfo/HostInfoJob.cpp b/src/modules/hostinfo/HostInfoJob.cpp index 1d4676f658..789e8fc701 100644 --- a/src/modules/hostinfo/HostInfoJob.cpp +++ b/src/modules/hostinfo/HostInfoJob.cpp @@ -91,17 +91,6 @@ hostCPUmatch( const QString& s ) return QString(); } -static QString -hostCPUmatchARM( const QString& s ) -{ - // Both Rock64 and Raspberry pi mention 0x41 - if ( s.contains( ": 0x41" ) ) - { - return QStringLiteral( "ARM" ); - } - return QString(); -} - #if defined( Q_OS_FREEBSD ) QString hostCPU_FreeBSD() @@ -124,6 +113,17 @@ hostCPU_FreeBSD() #endif #if defined( Q_OS_LINUX ) +static QString +hostCPUmatchARM( const QString& s ) +{ + // Both Rock64 and Raspberry pi mention 0x41 + if ( s.contains( ": 0x41" ) ) + { + return QStringLiteral( "ARM" ); + } + return QString(); +} + QString hostCPU_Linux() { From 2061024a031edc5dabcbf24317ec5227a6a7a9a6 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Wed, 12 Aug 2020 10:04:05 +0200 Subject: [PATCH 043/157] [unpackfs] Fix schema -- new fields *exclude* and *excludeFile* --- src/modules/unpackfs/unpackfs.schema.yaml | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/src/modules/unpackfs/unpackfs.schema.yaml b/src/modules/unpackfs/unpackfs.schema.yaml index 0d6f0955a6..b72a5a69bb 100644 --- a/src/modules/unpackfs/unpackfs.schema.yaml +++ b/src/modules/unpackfs/unpackfs.schema.yaml @@ -4,11 +4,15 @@ $id: https://calamares.io/schemas/unpackfs additionalProperties: false type: object properties: - "unpack": - type: seq - sequence: - - type: map - mapping: - "source": { type: string, required: true } - "sourcefs": { type: str } - "destination": { type: str } + unpack: + type: array + items: + type: object + additionalProperties: false + properties: + source: { type: string } + sourcefs: { type: string } + destination: { type: string } + excludeFile: { type: string } + exclude: { type: array, items: { type: string } } + required: [ source , sourcefs, destination ] From efab699479eea1efc0c0faaef1d242cdca72b7bd Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Wed, 12 Aug 2020 10:05:46 +0200 Subject: [PATCH 044/157] [umount] Fix schema -- prefer *preservefiles* for keeping the log --- src/modules/umount/umount.conf | 28 ++++----------------------- src/modules/umount/umount.schema.yaml | 4 ++-- 2 files changed, 6 insertions(+), 26 deletions(-) diff --git a/src/modules/umount/umount.conf b/src/modules/umount/umount.conf index 22a2e74412..3d4eb7d958 100644 --- a/src/modules/umount/umount.conf +++ b/src/modules/umount/umount.conf @@ -2,35 +2,15 @@ # # This module represents the last part of the installation, the unmounting # of partitions used for the install. It is also the last place where it -# is possible to copy files to the target system, thus the best place to -# copy an installation log. +# is possible to copy files to the target system. +# +# The "copy log files" functionality is deprecated; use the *preservefiles* +# module instead, which is more flexible. # # This module has two configuration keys: # srcLog location in the live system where the log is # destLog location in the target system to copy the log # -# You can either use the default source path (which is -# `/root/.cache/calamares/session.log` ) to copy the regular log, -# or if you want to use the full output of `sudo calamares -d` you will need -# to redirect standard output, for instance in a launcher script or -# in the desktop file. -# -# Example launcher script: -# -# ``` -# #!/bin/sh -# sudo /usr/bin/calamares -d > installation.log -# ``` -# -# Example desktop line: -# -# ``` -# Exec=sudo /usr/bin/calamares -d > installation.log -# ``` -# -# If no source and destination are set, no copy is attempted. If the -# copy fails for some reason, a warning is printed but the installation -# does not fail. --- # example when using the normal Calamares log: diff --git a/src/modules/umount/umount.schema.yaml b/src/modules/umount/umount.schema.yaml index b76a14ac63..585946fbea 100644 --- a/src/modules/umount/umount.schema.yaml +++ b/src/modules/umount/umount.schema.yaml @@ -4,5 +4,5 @@ $id: https://calamares.io/schemas/umount additionalProperties: false type: object properties: - "srcLog": { type: str } - "destLog": { type: str } + srcLog: { type: string } + destLog: { type: string } From fcbd6e38c548f45f20a0c13033f7226182cb6468 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Wed, 12 Aug 2020 10:24:31 +0200 Subject: [PATCH 045/157] [keyboard] Fix schema -- forgotten field *writeEtcDefaultKeyboard* --- src/modules/keyboard/keyboard.schema.yaml | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/modules/keyboard/keyboard.schema.yaml b/src/modules/keyboard/keyboard.schema.yaml index 33175b84d4..05d98bfde1 100644 --- a/src/modules/keyboard/keyboard.schema.yaml +++ b/src/modules/keyboard/keyboard.schema.yaml @@ -1,8 +1,10 @@ --- $schema: https://json-schema.org/schema# $id: https://calamares.io/schemas/finished -additionalProperties: keyboard +additionalProperties: false type: object properties: - xOrgConfFileName: { type: string, required: true } - convertedKeymapPath: { type: string, required: true } + xOrgConfFileName: { type: string } + convertedKeymapPath: { type: string } + writeEtcDefaultKeyboard: { type: boolean, default: true } +required: [ xOrgConfFileName, convertedKeymapPath ] From 14afce538bade7a302087d5b1d90281cb1a8eef5 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Wed, 12 Aug 2020 10:26:40 +0200 Subject: [PATCH 046/157] [netinstall] Fix schema -- the groups file still needs attention --- src/modules/netinstall/netinstall.schema.yaml | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/modules/netinstall/netinstall.schema.yaml b/src/modules/netinstall/netinstall.schema.yaml index 8420ea5013..739af635e0 100644 --- a/src/modules/netinstall/netinstall.schema.yaml +++ b/src/modules/netinstall/netinstall.schema.yaml @@ -4,4 +4,13 @@ $id: https://calamares.io/schemas/netinstall additionalProperties: false type: object properties: - groupsUrl: { type: string, required: true } + groupsUrl: { type: string } + required: { type: boolean, default: false } + label: # Translatable labels + type: object + additionalProperties: true + properties: + sidebar: { type: string } + title: { type: string } + groups: { type: array } # TODO: the schema for the whole groups file +required: [ groupsUrl ] From 050d74b4beb0855466fa06335e1ec8f6f0bc9392 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Wed, 12 Aug 2020 10:27:17 +0200 Subject: [PATCH 047/157] Fix YAML schemas for all the remaining config files --- src/modules/fstab/fstab.schema.yaml | 32 +++++++++------ src/modules/initcpio/initcpio.schema.yaml | 4 +- src/modules/license/license.schema.yaml | 24 ++++++----- .../luksopenswaphookcfg.schema.yaml | 3 +- src/modules/mount/mount.schema.yaml | 41 +++++++++++-------- .../plymouthcfg/plymouthcfg.schema.yaml | 2 +- src/modules/removeuser/removeuser.schema.yaml | 3 +- 7 files changed, 63 insertions(+), 46 deletions(-) diff --git a/src/modules/fstab/fstab.schema.yaml b/src/modules/fstab/fstab.schema.yaml index 1c2bf459cb..5b54d767ff 100644 --- a/src/modules/fstab/fstab.schema.yaml +++ b/src/modules/fstab/fstab.schema.yaml @@ -4,16 +4,22 @@ $id: https://calamares.io/schemas/fstab additionalProperties: false type: object properties: - "mountOptions": - type: map - mapping: - "default": { type: string, required: true } - "btrfs": { type: string, required: true } - "ssdExtraMountOptions": - type: map - mapping: - "ext4": { type: string, required: true } - "jfs": { type: string, required: true } - "xfs": { type: string, required: true } - "swap": { type: string, required: true } - "btrfs": { type: string, required: true } + mountOptions: + type: object + additionalProperties: true # we don't know which FS exist + properties: + default: { type: string } + btrfs: { type: string } + required: [ default ] + ssdExtraMountOptions: + type: object + additionalProperties: true # we don't know which FS exist + properties: + ext4: { type: string } + jfs: { type: string } + xfs: { type: string } + swap: { type: string } + btrfs: { type: string } + efiMountOptions: { type: string } + crypttabOptions: { type: string } +required: [ mountOptions ] diff --git a/src/modules/initcpio/initcpio.schema.yaml b/src/modules/initcpio/initcpio.schema.yaml index db81ba68e6..d3fda6be0e 100644 --- a/src/modules/initcpio/initcpio.schema.yaml +++ b/src/modules/initcpio/initcpio.schema.yaml @@ -4,4 +4,6 @@ $id: https://calamares.io/schemas/initcpio additionalProperties: false type: object properties: - kernel: { type: string, required: true } + kernel: { type: string } + be_unsafe: { type: boolean, default: false } +required: [ kernel ] diff --git a/src/modules/license/license.schema.yaml b/src/modules/license/license.schema.yaml index 62bd070350..090b2428e1 100644 --- a/src/modules/license/license.schema.yaml +++ b/src/modules/license/license.schema.yaml @@ -4,14 +4,16 @@ $id: https://calamares.io/schemas/license additionalProperties: false type: object properties: - "entries": - type: seq - sequence: - - type: map - mapping: - "id": { type: str } - "name": { type: str } - "vendor": { type: str } - "type": { type: str } - "url": { type: str } - "required": { type: boolean, default: false } + entries: + type: array + items: + type: object + additionalProperties: false + properties: + id: { type: string } + name: { type: string } + vendor: { type: string } + type: { type: string } + url: { type: string } + required: { type: boolean, default: false } + expand: { type: boolean, default: false } diff --git a/src/modules/luksopenswaphookcfg/luksopenswaphookcfg.schema.yaml b/src/modules/luksopenswaphookcfg/luksopenswaphookcfg.schema.yaml index 660e06d0b1..426822e276 100644 --- a/src/modules/luksopenswaphookcfg/luksopenswaphookcfg.schema.yaml +++ b/src/modules/luksopenswaphookcfg/luksopenswaphookcfg.schema.yaml @@ -4,4 +4,5 @@ $id: https://calamares.io/schemas/luksopenswaphookcfg additionalProperties: false type: object properties: - "configFilePath": { type: string, required: true } + configFilePath: { type: string } +required: [ configFilePath ] diff --git a/src/modules/mount/mount.schema.yaml b/src/modules/mount/mount.schema.yaml index 8a81d94622..55ee886445 100644 --- a/src/modules/mount/mount.schema.yaml +++ b/src/modules/mount/mount.schema.yaml @@ -4,21 +4,26 @@ $id: https://calamares.io/schemas/mount additionalProperties: false type: object properties: - "extraMounts": - type: seq - sequence: - - type: map - mapping: - "device": { type: string, required: true } - "fs": { type: str } - "mountPoint": { type: string, required: true } - "options": { type: str } - "extraMountsEfi": - type: seq - sequence: - - type: map - mapping: - "device": { type: string, required: true } - "fs": { type: str } - "mountPoint": { type: string, required: true } - "options": { type: str } + # TODO: share the schema definition, since these are identical + extraMounts: + type: array + items: + type: object + additionalProperties: false + properties: + device: { type: string } + fs: { type: string } + mountPoint: { type: string } + options: { type: string } + required: [ device, mountPoint ] + extraMountsEfi: + type: array + items: + type: object + additionalProperties: false + properties: + device: { type: string } + fs: { type: string } + mountPoint: { type: string } + options: { type: string } + required: [ device, mountPoint ] diff --git a/src/modules/plymouthcfg/plymouthcfg.schema.yaml b/src/modules/plymouthcfg/plymouthcfg.schema.yaml index b15db15271..5100e2cd39 100644 --- a/src/modules/plymouthcfg/plymouthcfg.schema.yaml +++ b/src/modules/plymouthcfg/plymouthcfg.schema.yaml @@ -4,4 +4,4 @@ $id: https://calamares.io/schemas/plymouthcfg additionalProperties: false type: object properties: - plymouth_theme: { type: str } + plymouth_theme: { type: string } diff --git a/src/modules/removeuser/removeuser.schema.yaml b/src/modules/removeuser/removeuser.schema.yaml index 7ed6cfbbe6..d1fed47fe6 100644 --- a/src/modules/removeuser/removeuser.schema.yaml +++ b/src/modules/removeuser/removeuser.schema.yaml @@ -4,4 +4,5 @@ $id: https://calamares.io/schemas/removeuser additionalProperties: false type: object properties: - "username": { type: string, required: true } + username: { type: string } +required: [ username ] From 14875259c71274257c744ded5db799d720ea327a Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Wed, 12 Aug 2020 11:20:24 +0200 Subject: [PATCH 048/157] [users] Create all the groups needed for the user - 26b8c82630 added the list of all-the-groups-for-the-user, but didn't change the list passed to the method that creates groups. FIXES #1488 --- src/modules/users/CreateUserJob.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/modules/users/CreateUserJob.cpp b/src/modules/users/CreateUserJob.cpp index 6ccd678cc4..9a61c5d9e5 100644 --- a/src/modules/users/CreateUserJob.cpp +++ b/src/modules/users/CreateUserJob.cpp @@ -196,7 +196,7 @@ CreateUserJob::exec() { groupsForThisUser << gs->value( "autologinGroup" ).toString(); } - ensureGroupsExistInTarget( m_defaultGroups, availableGroups ); + ensureGroupsExistInTarget( groupsForThisUser, availableGroups ); // If we're looking to reuse the contents of an existing /home. // This GS setting comes from the **partitioning** module. From c19866f887b01a74f48157d750b3f5b086579ec6 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Wed, 12 Aug 2020 15:59:42 +0200 Subject: [PATCH 049/157] [libcalamares] Add a module-weight to the module descriptor --- CMakeModules/CalamaresAddPlugin.cmake | 9 ++++++- src/libcalamares/modulesystem/Descriptor.cpp | 27 +++++++++++++++----- src/libcalamares/modulesystem/Descriptor.h | 4 +++ src/modules/README.md | 12 +++++++++ 4 files changed, 45 insertions(+), 7 deletions(-) diff --git a/CMakeModules/CalamaresAddPlugin.cmake b/CMakeModules/CalamaresAddPlugin.cmake index ee3c63acb8..a90e6df638 100644 --- a/CMakeModules/CalamaresAddPlugin.cmake +++ b/CMakeModules/CalamaresAddPlugin.cmake @@ -41,6 +41,7 @@ # [NO_CONFIG] # [SHARED_LIB] # [EMERGENCY] +# [WEIGHT w] # ) # # Function parameters: @@ -63,6 +64,9 @@ # - EMERGENCY # If this is set, the module is marked as an *emergency* module in the # descriptor. See *Emergency Modules* in the module documentation. +# - WEIGHT +# If this is set, writes an explicit weight into the module.desc; +# module weights are used in progress reporting. # include( CMakeParseArguments ) @@ -73,7 +77,7 @@ function( calamares_add_plugin ) # parse arguments ( name needs to be saved before passing ARGN into the macro ) set( NAME ${ARGV0} ) set( options NO_CONFIG NO_INSTALL SHARED_LIB EMERGENCY ) - set( oneValueArgs NAME TYPE EXPORT_MACRO RESOURCES ) + set( oneValueArgs NAME TYPE EXPORT_MACRO RESOURCES WEIGHT ) set( multiValueArgs SOURCES UI LINK_LIBRARIES LINK_PRIVATE_LIBRARIES COMPILE_DEFINITIONS REQUIRES ) cmake_parse_arguments( PLUGIN "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN} ) set( PLUGIN_NAME ${NAME} ) @@ -181,6 +185,9 @@ function( calamares_add_plugin ) if ( PLUGIN_NO_CONFIG ) file( APPEND ${_file} "noconfig: true\n" ) endif() + if ( PLUGIN_WEIGHT ) + file( APPEND ${_file} "weight: ${PLUGIN_WEIGHT}\n" ) + endif() endif() if ( NOT PLUGIN_NO_INSTALL ) diff --git a/src/libcalamares/modulesystem/Descriptor.cpp b/src/libcalamares/modulesystem/Descriptor.cpp index 1ac4dc6c02..9b3e48b6e9 100644 --- a/src/libcalamares/modulesystem/Descriptor.cpp +++ b/src/libcalamares/modulesystem/Descriptor.cpp @@ -87,8 +87,9 @@ Descriptor::fromDescriptorData( const QVariantMap& moduleDesc ) d.m_isEmergeny = CalamaresUtils::getBool( moduleDesc, "emergency", false ); d.m_hasConfig = !CalamaresUtils::getBool( moduleDesc, "noconfig", false ); // Inverted logic during load d.m_requiredModules = CalamaresUtils::getStringList( moduleDesc, "requiredModules" ); + d.m_weight = int( CalamaresUtils::getInteger( moduleDesc, "weight", -1 ) ); - QStringList consumedKeys { "type", "interface", "name", "emergency", "noconfig", "requiredModules" }; + QStringList consumedKeys { "type", "interface", "name", "emergency", "noconfig", "requiredModules", "weight" }; switch ( d.interface() ) { @@ -99,23 +100,37 @@ Descriptor::fromDescriptorData( const QVariantMap& moduleDesc ) case Interface::Python: case Interface::PythonQt: d.m_script = CalamaresUtils::getString( moduleDesc, "script" ); + if ( d.m_script.isEmpty() ) + { + cWarning() << "Module descriptor contains no *script*" << d.name(); + d.m_isValid = false; + } consumedKeys << "script"; break; case Interface::Process: d.m_script = CalamaresUtils::getString( moduleDesc, "command" ); - d.m_processTimeout = CalamaresUtils::getInteger( moduleDesc, "timeout", 30 ); + d.m_processTimeout = int( CalamaresUtils::getInteger( moduleDesc, "timeout", 30 ) ); d.m_processChroot = CalamaresUtils::getBool( moduleDesc, "chroot", false ); - consumedKeys << "command" - << "timeout" - << "chroot"; - if ( d.m_processTimeout < 0 ) { d.m_processTimeout = 0; } + if ( d.m_script.isEmpty() ) + { + cWarning() << "Module descriptor contains no *script*" << d.name(); + d.m_isValid = false; + } + consumedKeys << "command" + << "timeout" + << "chroot"; break; } + if ( !d.m_isValid ) + { + return d; + } + QStringList superfluousKeys; for ( auto kv = moduleDesc.keyBegin(); kv != moduleDesc.keyEnd(); ++kv ) { diff --git a/src/libcalamares/modulesystem/Descriptor.h b/src/libcalamares/modulesystem/Descriptor.h index 8166f98691..a94c0574d0 100644 --- a/src/libcalamares/modulesystem/Descriptor.h +++ b/src/libcalamares/modulesystem/Descriptor.h @@ -80,6 +80,9 @@ class Descriptor bool isEmergency() const { return m_isEmergeny; } bool hasConfig() const { return m_hasConfig; } + int weight() const { return m_weight < 1 ? 1 : m_weight; } + bool explicitWeight() const { return m_weight > 0; } + /// @brief The directory where the module.desc lives QString directory() const { return m_directory; } @@ -125,6 +128,7 @@ class Descriptor QString m_name; QString m_directory; QStringList m_requiredModules; + int m_weight = -1; Type m_type; Interface m_interface; bool m_isValid = false; diff --git a/src/modules/README.md b/src/modules/README.md index ee6e378d24..1220c7398b 100644 --- a/src/modules/README.md +++ b/src/modules/README.md @@ -46,9 +46,19 @@ Module descriptors **must** have the following keys: - *interface* (see below for the different interfaces; generally we refer to the kinds of modules by their interface) +Module descriptors for C++ modules **may** have the following key: +- *load* (the name of the shared library to load; if empty, uses a + standard library name derived from the module name) + Module descriptors for Python modules **must** have the following key: - *script* (the name of the Python script to load, nearly always `main.py`) +Module descriptors for process modules **must** have the following key: +- *command* (the command to run) +Module descriptors for process modules **may** have the following keys: +- *timeout* (how long, in seconds, to wait for the command to run) +- *chroos* (if true, run the command in the target system rather than the host) + Module descriptors **may** have the following keys: - *emergency* (a boolean value, set to true to mark the module as an emergency module) @@ -56,6 +66,8 @@ Module descriptors **may** have the following keys: has no configuration file; defaults to false) - *requiredModules* (a list of modules which are required for this module to operate properly) +- *weight* (a relative module weight, used to scale progress reporting) + ### Required Modules From 73b8ecd622008bf0b2b36b50da82b60b39b91171 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Wed, 12 Aug 2020 16:03:25 +0200 Subject: [PATCH 050/157] [unpackfs] Drop special-case for unpackfs - make the module weight 12, rather than special-casing internals --- src/libcalamares/PythonJob.cpp | 5 ++--- src/libcalamares/PythonJob.h | 3 +-- src/modules/unpackfs/module.desc | 1 + 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/src/libcalamares/PythonJob.cpp b/src/libcalamares/PythonJob.cpp index 50828e896d..87091101e8 100644 --- a/src/libcalamares/PythonJob.cpp +++ b/src/libcalamares/PythonJob.cpp @@ -1,5 +1,5 @@ /* === This file is part of Calamares - === - * + * * SPDX-FileCopyrightText: 2014-2016 Teo Mrnjavac * SPDX-FileCopyrightText: 2018-2020 Adriaan de Groot * @@ -184,7 +184,6 @@ PythonJob::PythonJob( const ModuleSystem::InstanceKey& instance, , m_workingPath( workingPath ) , m_description() , m_configurationMap( moduleConfiguration ) - , m_weight( ( instance.module() == QStringLiteral( "unpackfs" ) ) ? 12.0 : 1.0 ) { } @@ -194,7 +193,7 @@ PythonJob::~PythonJob() {} qreal PythonJob::getJobWeight() const { - return m_weight; + return 1.0; } QString diff --git a/src/libcalamares/PythonJob.h b/src/libcalamares/PythonJob.h index 498eac44fe..6efc45e7f4 100644 --- a/src/libcalamares/PythonJob.h +++ b/src/libcalamares/PythonJob.h @@ -1,5 +1,5 @@ /* === This file is part of Calamares - === - * + * * SPDX-FileCopyrightText: 2014 Teo Mrnjavac * SPDX-FileCopyrightText: 2020 Adriaan de Groot * @@ -68,7 +68,6 @@ class PythonJob : public Job QString m_workingPath; QString m_description; QVariantMap m_configurationMap; - qreal m_weight; }; } // namespace Calamares diff --git a/src/modules/unpackfs/module.desc b/src/modules/unpackfs/module.desc index 54d95df1d7..c87613d741 100644 --- a/src/modules/unpackfs/module.desc +++ b/src/modules/unpackfs/module.desc @@ -5,3 +5,4 @@ name: "unpackfs" interface: "python" script: "main.py" requiredModules: [ mount ] +weight: 12 From a91ef65a37f366324444acabdcd84cc6e8939e23 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Wed, 12 Aug 2020 16:08:37 +0200 Subject: [PATCH 051/157] [libcalamares] Make job weights integers --- src/libcalamares/Job.cpp | 6 +++--- src/libcalamares/Job.h | 10 ++++++++-- src/libcalamares/PythonJob.cpp | 6 ------ src/libcalamares/PythonJob.h | 2 -- 4 files changed, 11 insertions(+), 13 deletions(-) diff --git a/src/libcalamares/Job.cpp b/src/libcalamares/Job.cpp index 95339f349b..a7e67b5f65 100644 --- a/src/libcalamares/Job.cpp +++ b/src/libcalamares/Job.cpp @@ -1,5 +1,5 @@ /* === This file is part of Calamares - === - * + * * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac * * Calamares is free software: you can redistribute it and/or modify @@ -101,10 +101,10 @@ Job::Job( QObject* parent ) Job::~Job() {} -qreal +int Job::getJobWeight() const { - return qreal( 1.0 ); + return 1; } diff --git a/src/libcalamares/Job.h b/src/libcalamares/Job.h index 41674cfffc..dd13f8608f 100644 --- a/src/libcalamares/Job.h +++ b/src/libcalamares/Job.h @@ -100,13 +100,19 @@ class DLLEXPORT Job : public QObject /** @brief The job's (relative) weight. * - * The default implementation returns 1.0, which gives all jobs + * The default implementation returns 1, which gives all jobs * the same weight, so they advance the overall progress the same * amount. This is nonsense, since some jobs take much longer than * others; it's up to the individual jobs to say something about * how much work is (relatively) done. + * + * Since jobs are caused by **modules** from the sequence, the + * overall weight of the module is taken into account: its weight + * is divided among the jobs based on each jobs relative weight. + * This can be used in a module that runs a bunch of jobs to indicate + * which of the jobs is "heavy" and which is not. */ - virtual qreal getJobWeight() const; + virtual int getJobWeight() const; /** @brief The human-readable name of this job * * This should be a very short statement of what the job does. diff --git a/src/libcalamares/PythonJob.cpp b/src/libcalamares/PythonJob.cpp index 87091101e8..c1cfbbc1c9 100644 --- a/src/libcalamares/PythonJob.cpp +++ b/src/libcalamares/PythonJob.cpp @@ -190,12 +190,6 @@ PythonJob::PythonJob( const ModuleSystem::InstanceKey& instance, PythonJob::~PythonJob() {} -qreal -PythonJob::getJobWeight() const -{ - return 1.0; -} - QString PythonJob::prettyName() const { diff --git a/src/libcalamares/PythonJob.h b/src/libcalamares/PythonJob.h index 6efc45e7f4..b34b40b0bc 100644 --- a/src/libcalamares/PythonJob.h +++ b/src/libcalamares/PythonJob.h @@ -55,8 +55,6 @@ class PythonJob : public Job QString prettyStatusMessage() const override; JobResult exec() override; - virtual qreal getJobWeight() const override; - private: struct Private; From c296bcffa35cef8664b4d9e2897ab7d6655f863f Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Wed, 12 Aug 2020 16:45:27 +0200 Subject: [PATCH 052/157] [libcalamares] When enqueueing jobs, pass a weight - The weight is the module (instance) weight, which can be - the default weight of 1 - the weight specified for the module (in module.desc / the module descriptor; this defaults to 1, above) - the weight specified for the instance (in settings.conf) The last of these "wins"; weights are constrained to 1..100 The weight isn't actually used in progress computation yet. --- src/libcalamares/JobQueue.cpp | 11 +---------- src/libcalamares/JobQueue.h | 11 +++++++---- .../modulesystem/ModuleManager.h | 10 ++++++++++ .../viewpages/ExecutionViewStep.cpp | 18 ++++++++++++++++-- 4 files changed, 34 insertions(+), 16 deletions(-) diff --git a/src/libcalamares/JobQueue.cpp b/src/libcalamares/JobQueue.cpp index bc3028ae70..b78ba32dc9 100644 --- a/src/libcalamares/JobQueue.cpp +++ b/src/libcalamares/JobQueue.cpp @@ -205,16 +205,7 @@ JobQueue::start() void -JobQueue::enqueue( const job_ptr& job ) -{ - Q_ASSERT( !m_thread->isRunning() ); - m_jobs.append( job ); - emit queueChanged( m_jobs ); -} - - -void -JobQueue::enqueue( const JobList& jobs ) +JobQueue::enqueue( int moduleWeight, const JobList& jobs ) { Q_ASSERT( !m_thread->isRunning() ); m_jobs.append( jobs ); diff --git a/src/libcalamares/JobQueue.h b/src/libcalamares/JobQueue.h index ff2694d8fb..3847b46679 100644 --- a/src/libcalamares/JobQueue.h +++ b/src/libcalamares/JobQueue.h @@ -1,5 +1,5 @@ /* === This file is part of Calamares - === - * + * * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac * * Calamares is free software: you can redistribute it and/or modify @@ -30,7 +30,6 @@ namespace Calamares { - class GlobalStorage; class JobThread; @@ -45,8 +44,12 @@ class DLLEXPORT JobQueue : public QObject GlobalStorage* globalStorage() const; - void enqueue( const job_ptr& job ); - void enqueue( const JobList& jobs ); + /** @brief Queues up jobs from a single module source + * + * The total weight of the jobs is spread out to fill the weight + * of the module. + */ + void enqueue( int moduleWeight, const JobList& jobs ); void start(); bool isRunning() const { return !m_finished; } diff --git a/src/libcalamaresui/modulesystem/ModuleManager.h b/src/libcalamaresui/modulesystem/ModuleManager.h index ed4cef8ba6..eb7d086c1f 100644 --- a/src/libcalamaresui/modulesystem/ModuleManager.h +++ b/src/libcalamaresui/modulesystem/ModuleManager.h @@ -71,6 +71,16 @@ class ModuleManager : public QObject */ ModuleSystem::Descriptor moduleDescriptor( const QString& name ); + /** @brief returns the module descriptor structure for the module @p instance + * + * Descriptors are for the module, which may have multiple instances; + * this is the same as moduleDescriptor( instance.module() ). + */ + ModuleSystem::Descriptor moduleDescriptor( const ModuleSystem::InstanceKey& instanceKey ) + { + return moduleDescriptor( instanceKey.module() ); + } + /** * @brief moduleInstance returns a Module object for a given instance key. * @param instanceKey the instance key for a module instance. diff --git a/src/libcalamaresui/viewpages/ExecutionViewStep.cpp b/src/libcalamaresui/viewpages/ExecutionViewStep.cpp index b2205d70e6..6f3983dc43 100644 --- a/src/libcalamaresui/viewpages/ExecutionViewStep.cpp +++ b/src/libcalamaresui/viewpages/ExecutionViewStep.cpp @@ -146,10 +146,24 @@ ExecutionViewStep::onActivate() { m_slideshow->changeSlideShowState( Slideshow::Start ); + const auto instanceDescriptors = Calamares::Settings::instance()->moduleInstances(); + JobQueue* queue = JobQueue::instance(); - for( const auto& instanceKey : m_jobInstanceKeys ) + for ( const auto& instanceKey : m_jobInstanceKeys ) { + const auto& moduleDescriptor = Calamares::ModuleManager::instance()->moduleDescriptor( instanceKey ); Calamares::Module* module = Calamares::ModuleManager::instance()->moduleInstance( instanceKey ); + + const auto instanceDescriptor + = std::find_if( instanceDescriptors.constBegin(), + instanceDescriptors.constEnd(), + [=]( const Calamares::InstanceDescription& d ) { return d.key() == instanceKey; } ); + int weight = moduleDescriptor.weight(); + if ( instanceDescriptor != instanceDescriptors.constEnd() && instanceDescriptor->explicitWeight() ) + { + weight = instanceDescriptor->weight(); + } + weight = qBound( 1, weight, 100 ); if ( module ) { auto jl = module->jobs(); @@ -160,7 +174,7 @@ ExecutionViewStep::onActivate() j->setEmergency( true ); } } - queue->enqueue( jl ); + queue->enqueue( weight, jl ); } } From 3245d602dbd0a96409987a8dba93879c0e9f77b0 Mon Sep 17 00:00:00 2001 From: Asif Mahmud Shimon Date: Fri, 14 Aug 2020 20:52:53 +0600 Subject: [PATCH 053/157] retrieving string list fix --- src/libcalamares/utils/Variant.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/libcalamares/utils/Variant.cpp b/src/libcalamares/utils/Variant.cpp index fa5e420b65..a6aad74ce8 100644 --- a/src/libcalamares/utils/Variant.cpp +++ b/src/libcalamares/utils/Variant.cpp @@ -67,7 +67,7 @@ getStringList( const QVariantMap& map, const QString& key, const QStringList& d if ( map.contains( key ) ) { auto v = map.value( key ); - if ( v.type() == QVariant::StringList ) + if ( v.canConvert( QMetaType::QStringList ) ) { return v.toStringList(); } @@ -81,7 +81,7 @@ getInteger( const QVariantMap& map, const QString& key, qint64 d ) if ( map.contains( key ) ) { auto v = map.value( key ); - return v.toString().toLongLong(nullptr, 0); + return v.toString().toLongLong( nullptr, 0 ); } return d; } @@ -92,7 +92,7 @@ getUnsignedInteger( const QVariantMap& map, const QString& key, quint64 d ) if ( map.contains( key ) ) { auto v = map.value( key ); - return v.toString().toULongLong(nullptr, 0); + return v.toString().toULongLong( nullptr, 0 ); } return d; } From 933e54a7310685d796413fef80962e25f4d4701e Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Mon, 17 Aug 2020 11:31:26 +0200 Subject: [PATCH 054/157] Changes: pre-release housekeeping --- CHANGES | 6 ++++++ CMakeLists.txt | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/CHANGES b/CHANGES index 4e7cb0854a..0de4d532bb 100644 --- a/CHANGES +++ b/CHANGES @@ -3,6 +3,12 @@ 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.28.3 (2020-08-17) # + +Another hotfix, for more issues reported by Marco Obaid. Users +were not having a password set (#1489) + + # 3.2.28.2 (2020-08-12) # A second hotfix, for autologin support -- the autologin group was not diff --git a/CMakeLists.txt b/CMakeLists.txt index 4add681b69..bafcfac917 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -46,7 +46,7 @@ # TODO:3.3: Require CMake 3.12 cmake_minimum_required( VERSION 3.3 FATAL_ERROR ) project( CALAMARES - VERSION 3.2.28.2 + VERSION 3.2.28.3 LANGUAGES C CXX ) set( CALAMARES_VERSION_RC 0 ) # Set to 0 during release cycle, 1 during development From e145bf68f1b47d6d606b30567c8c76032f542803 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Mon, 17 Aug 2020 12:16:41 +0200 Subject: [PATCH 055/157] [users] Remove extra ; --- src/modules/users/UsersPage.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/modules/users/UsersPage.cpp b/src/modules/users/UsersPage.cpp index 5a96af4e40..16a905d08b 100644 --- a/src/modules/users/UsersPage.cpp +++ b/src/modules/users/UsersPage.cpp @@ -155,7 +155,7 @@ UsersPage::UsersPage( Config* config, QWidget* parent ) connect( config, &Config::requireStrongPasswordsChanged, ui->checkBoxValidatePassword, &QCheckBox::setChecked ); } - CALAMARES_RETRANSLATE_SLOT( &UsersPage::retranslate ); + CALAMARES_RETRANSLATE_SLOT( &UsersPage::retranslate ) onReuseUserPasswordChanged( m_config->reuseUserPasswordForRoot() ); } From 1dcf56761f69022a9eebb232317e2420bb0267ce Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Mon, 17 Aug 2020 11:41:04 +0200 Subject: [PATCH 056/157] [users] Apply validation to the passwords config knows about - avoid update loops by checking values before emitting *Changed() - check validity of user and root passwords when asked - if root isn't going to be written, or re-uses the user password, defer to those status checks. --- src/modules/users/Config.cpp | 91 +++++++++++++++++++++++++++++---- src/modules/users/Config.h | 37 +++++++++++++- src/modules/users/UsersPage.cpp | 13 +++-- src/modules/users/UsersPage.h | 4 +- 4 files changed, 125 insertions(+), 20 deletions(-) diff --git a/src/modules/users/Config.cpp b/src/modules/users/Config.cpp index 69712a7333..0a6d399bfa 100644 --- a/src/modules/users/Config.cpp +++ b/src/modules/users/Config.cpp @@ -381,7 +381,7 @@ Config::setRequireStrongPasswords( bool strong ) } bool -Config::isPasswordAcceptable( const QString& password, QString& message ) +Config::isPasswordAcceptable( const QString& password, QString& message ) const { bool failureIsFatal = requireStrongPasswords(); @@ -402,23 +402,58 @@ Config::isPasswordAcceptable( const QString& password, QString& message ) void Config::setUserPassword( const QString& s ) { - m_userPassword = s; - // TODO: check new password status - emit userPasswordChanged( s ); + if ( s != m_userPassword ) + { + m_userPassword = s; + // TODO: check new password status + emit userPasswordChanged( s ); + } } void Config::setUserPasswordSecondary( const QString& s ) { - m_userPasswordSecondary = s; - // TODO: check new password status - emit userPasswordSecondaryChanged( s ); + if ( s != m_userPasswordSecondary ) + { + m_userPasswordSecondary = s; + // TODO: check new password status + emit userPasswordSecondaryChanged( s ); + } +} + +QPair< Config::PasswordValidity, QString > +Config::passwordStatus( const QString& pw1, const QString& pw2 ) const +{ + if ( pw1 != pw2 ) + { + return qMakePair( PasswordValidity::Invalid, tr( "Your passwords do not match!" ) ); + } + + QString message; + bool ok = isPasswordAcceptable( pw1, message ); + return qMakePair( ok ? PasswordValidity::Valid : PasswordValidity::Weak, message ); } + +int +Config::userPasswordValidity() const +{ + auto p = passwordStatus( m_userPassword, m_userPasswordSecondary ); + return p.first; +} + +QString +Config::userPasswordStatus() const +{ + auto p = passwordStatus( m_userPassword, m_userPasswordSecondary ); + return p.second; +} + + void Config::setRootPassword( const QString& s ) { - if ( writeRootPassword() ) + if ( writeRootPassword() && s != m_rootPassword ) { m_rootPassword = s; // TODO: check new password status @@ -429,7 +464,7 @@ Config::setRootPassword( const QString& s ) void Config::setRootPasswordSecondary( const QString& s ) { - if ( writeRootPassword() ) + if ( writeRootPassword() && s != m_rootPasswordSecondary ) { m_rootPasswordSecondary = s; // TODO: check new password status @@ -437,28 +472,62 @@ Config::setRootPasswordSecondary( const QString& s ) } } -QString Config::rootPassword() const +QString +Config::rootPassword() const { if ( writeRootPassword() ) { if ( reuseUserPasswordForRoot() ) + { return userPassword(); + } return m_rootPassword; } return QString(); } -QString Config::rootPasswordSecondary() const +QString +Config::rootPasswordSecondary() const { if ( writeRootPassword() ) { if ( reuseUserPasswordForRoot() ) + { return userPasswordSecondary(); + } return m_rootPasswordSecondary; } return QString(); } +int +Config::rootPasswordValidity() const +{ + if ( writeRootPassword() && !reuseUserPasswordForRoot() ) + { + auto p = passwordStatus( m_rootPassword, m_rootPasswordSecondary ); + return p.first; + } + else + { + return userPasswordValidity(); + } +} + +QString +Config::rootPasswordStatus() const +{ + if ( writeRootPassword() && !reuseUserPasswordForRoot() ) + { + auto p = passwordStatus( m_rootPassword, m_rootPasswordSecondary ); + return p.second; + } + else + { + return userPasswordStatus(); + } +} + STATICTEST void setConfigurationDefaultGroups( const QVariantMap& map, QStringList& defaultGroups ) diff --git a/src/modules/users/Config.h b/src/modules/users/Config.h index 334bfcdb35..97178f2ea6 100644 --- a/src/modules/users/Config.h +++ b/src/modules/users/Config.h @@ -62,9 +62,14 @@ class Config : public QObject Q_PROPERTY( QString userPassword READ userPassword WRITE setUserPassword NOTIFY userPasswordChanged ) Q_PROPERTY( QString userPasswordSecondary READ userPasswordSecondary WRITE setUserPasswordSecondary NOTIFY userPasswordSecondaryChanged ) + Q_PROPERTY( int userPasswordValidity READ userPasswordValidity NOTIFY userPasswordStatusChanged STORED false ) + Q_PROPERTY( QString userPasswordStatus READ userPasswordStatus NOTIFY userPasswordStatusChanged STORED false ) + Q_PROPERTY( QString rootPassword READ rootPassword WRITE setRootPassword NOTIFY rootPasswordChanged ) Q_PROPERTY( QString rootPasswordSecondary READ rootPasswordSecondary WRITE setRootPasswordSecondary NOTIFY rootPasswordSecondaryChanged ) + Q_PROPERTY( int rootPasswordValidity READ rootPasswordValidity NOTIFY rootPasswordStatusChanged STORED false ) + Q_PROPERTY( QString rootPasswordStatus READ rootPasswordStatus NOTIFY rootPasswordStatusChanged STORED false ) Q_PROPERTY( bool writeRootPassword READ writeRootPassword CONSTANT ) Q_PROPERTY( bool reuseUserPasswordForRoot READ reuseUserPasswordForRoot WRITE setReuseUserPasswordForRoot NOTIFY @@ -75,6 +80,27 @@ class Config : public QObject requireStrongPasswordsChanged ) public: + /** @brief Validity (status) of a password + * + * Valid passwords are: + * - primary and secondary are equal **and** + * - all the password-strength checks pass + * Weak passwords: + * - primary and secondary are equal **and** + * - not all the checks pass **and** + * - permitWeakPasswords is @c true **and** + * - requireStrongPasswords is @c false + * Invalid passwords (all other cases): + * - the primary and secondary values are not equal **or** + * - not all the checks pass and weak passwords are not permitted + */ + enum PasswordValidity + { + Valid = 0, + Weak = 1, + Invalid = 2 + }; + Config( QObject* parent = nullptr ); ~Config(); @@ -128,16 +154,21 @@ class Config : public QObject * If the password is not acceptable, sets @p message to something * non-empty and returns @c false. */ - bool isPasswordAcceptable( const QString& password, QString& message ); + bool isPasswordAcceptable( const QString& password, QString& message ) const; // The user enters a password (and again in a separate UI element) QString userPassword() const { return m_userPassword; } QString userPasswordSecondary() const { return m_userPasswordSecondary; } + int userPasswordValidity() const; + QString userPasswordStatus() const; + // The root password **may** be entered in the UI, or may be suppressed // entirely when writeRootPassword is off, or may be equal to // the user password when reuseUserPasswordForRoot is on. QString rootPassword() const; QString rootPasswordSecondary() const; + int rootPasswordValidity() const; + QString rootPasswordStatus() const; static const QStringList& forbiddenLoginNames(); static const QStringList& forbiddenHostNames(); @@ -193,11 +224,15 @@ public Q_SLOTS: void requireStrongPasswordsChanged( bool ); void userPasswordChanged( const QString& ); void userPasswordSecondaryChanged( const QString& ); + void userPasswordStatusChanged( int, QString& ); void rootPasswordChanged( const QString& ); void rootPasswordSecondaryChanged( const QString& ); + void rootPasswordStatusChanged( int, QString& ); private: + QPair< PasswordValidity, QString > passwordStatus( const QString&, const QString& ) const; + QStringList m_defaultGroups; QString m_userShell; QString m_autologinGroup; diff --git a/src/modules/users/UsersPage.cpp b/src/modules/users/UsersPage.cpp index 16a905d08b..c8f561f78b 100644 --- a/src/modules/users/UsersPage.cpp +++ b/src/modules/users/UsersPage.cpp @@ -248,8 +248,11 @@ UsersPage::reportHostNameStatus( const QString& status ) } bool -UsersPage::checkPasswordAcceptance( const QString& pw1, const QString& pw2, QLabel* badge, QLabel* message ) +UsersPage::checkPasswordAcceptance( Password p, QLabel* badge, QLabel* message ) { + QString pw1 = p == Password::User ? m_config->userPassword() : m_config->rootPassword(); + QString pw2 = p == Password::User ? m_config->userPasswordSecondary() : m_config->rootPasswordSecondary(); + if ( pw1 != pw2 ) { labelError( badge, message, tr( "Your passwords do not match!" ), Badness::Fatal ); @@ -278,9 +281,7 @@ UsersPage::checkPasswordAcceptance( const QString& pw1, const QString& pw2, QLab void UsersPage::onPasswordTextChanged( const QString& ) { - m_readyPassword = checkPasswordAcceptance( ui->textBoxUserPassword->text(), - ui->textBoxUserVerifiedPassword->text(), - ui->labelUserPassword, + m_readyPassword = checkPasswordAcceptance( Password::User, ui->labelUserPassword, ui->labelUserPasswordError ); emit checkReady( isReady() ); @@ -289,9 +290,7 @@ UsersPage::onPasswordTextChanged( const QString& ) void UsersPage::onRootPasswordTextChanged( const QString& ) { - m_readyRootPassword = checkPasswordAcceptance( ui->textBoxRootPassword->text(), - ui->textBoxVerifiedRootPassword->text(), - ui->labelRootPassword, + m_readyRootPassword = checkPasswordAcceptance( Password::Root, ui->labelRootPassword, ui->labelRootPasswordError ); emit checkReady( isReady() ); } diff --git a/src/modules/users/UsersPage.h b/src/modules/users/UsersPage.h index 46c4ed3998..9046d11985 100644 --- a/src/modules/users/UsersPage.h +++ b/src/modules/users/UsersPage.h @@ -60,13 +60,15 @@ protected slots: void checkReady( bool ); private: + /// @brief Which password are we talking about? (for checkPasswordAcceptance()) + enum class Password { Root, User }; /** @brief Is the password acceptable? * * Checks the two copies of the password and places error messages in the * given QLabels. Returns true (and clears the error messages) if the * password is acceptable. */ - bool checkPasswordAcceptance( const QString& pw1, const QString& pw2, QLabel* badge, QLabel* message ); + bool checkPasswordAcceptance( Password p, QLabel* badge, QLabel* message ); void retranslate(); From 5f2bbd179c361133e8a40b2f0cfd08fbbe1a5646 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Mon, 17 Aug 2020 13:11:54 +0200 Subject: [PATCH 057/157] [users] New test for password-setting - check new config for accepting empty and bogus passwords - check a config with minor pw checks for empty and bogus passwords --- src/modules/users/Tests.cpp | 59 +++++++++++++++++++++++++++++++++++-- 1 file changed, 56 insertions(+), 3 deletions(-) diff --git a/src/modules/users/Tests.cpp b/src/modules/users/Tests.cpp index ff435803dd..75abd46c69 100644 --- a/src/modules/users/Tests.cpp +++ b/src/modules/users/Tests.cpp @@ -19,6 +19,7 @@ #include "Config.h" +#include "JobQueue.h" #include "utils/Logger.h" #include @@ -45,6 +46,7 @@ private Q_SLOTS: void testHostActions_data(); void testHostActions(); void testPasswordChecks(); + void testUserPassword(); }; UserTests::UserTests() {} @@ -136,7 +138,8 @@ UserTests::testHostActions() { m.insert( "setHostname", string ); } - QCOMPARE( getHostNameActions( m ), HostNameActions( result ) | HostNameAction::WriteEtcHosts ); // write bits default to true + QCOMPARE( getHostNameActions( m ), + HostNameActions( result ) | HostNameAction::WriteEtcHosts ); // write bits default to true m.insert( "writeHostsFile", false ); QCOMPARE( getHostNameActions( m ), HostNameActions( result ) ); m.insert( "writeHostsFile", true ); @@ -149,13 +152,63 @@ UserTests::testPasswordChecks() { PasswordCheckList l; QCOMPARE( l.length(), 0 ); - QVERIFY( !addPasswordCheck( "nonempty", QVariant(false), l ) ); // a silly setting + QVERIFY( !addPasswordCheck( "nonempty", QVariant( false ), l ) ); // a silly setting QCOMPARE( l.length(), 0 ); - QVERIFY( addPasswordCheck( "nonempty", QVariant(true), l ) ); + QVERIFY( addPasswordCheck( "nonempty", QVariant( true ), l ) ); QCOMPARE( l.length(), 1 ); } } +void +UserTests::testUserPassword() +{ + if ( !Calamares::JobQueue::instance() ) + { + (void)new Calamares::JobQueue( nullptr ); + } + + { + Config c; + + QVERIFY( c.userPassword().isEmpty() ); + QVERIFY( c.userPasswordSecondary().isEmpty() ); + // There are no validity checks, so no check for nonempty + QCOMPARE( c.userPasswordValidity(), Config::PasswordValidity::Valid ); + + c.setUserPassword( "bogus" ); + QCOMPARE( c.userPasswordValidity(), Config::PasswordValidity::Invalid ); + QCOMPARE( c.userPassword(), "bogus" ); + c.setUserPasswordSecondary( "bogus" ); + QCOMPARE( c.userPasswordValidity(), Config::PasswordValidity::Valid ); + } + + { + Config c; + + QVariantMap m; + m.insert( "allowWeakPasswords", true ); + m.insert( "allowWeakPasswordsDefault", true ); + m.insert( "defaultGroups", QStringList { "wheel" } ); + + QVariantMap pwreq; + pwreq.insert( "nonempty", true ); + pwreq.insert( "minLength", 6 ); + m.insert( "passwordRequirements", pwreq ); + + c.setConfigurationMap( m ); + + QVERIFY( c.userPassword().isEmpty() ); + QVERIFY( c.userPasswordSecondary().isEmpty() ); + // There is now a nonempty check, but weak passwords are ok + QCOMPARE( c.userPasswordValidity(), int( Config::PasswordValidity::Weak ) ); + + c.setUserPassword( "bogus" ); + QCOMPARE( c.userPasswordValidity(), int( Config::PasswordValidity::Invalid ) ); + c.setUserPasswordSecondary( "bogus" ); + QCOMPARE( c.userPasswordValidity(), int( Config::PasswordValidity::Weak ) ); + } +} + QTEST_GUILESS_MAIN( UserTests ) From a16ecba2bda987527fc8ddafcd59da6e8d237078 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Mon, 17 Aug 2020 13:22:44 +0200 Subject: [PATCH 058/157] [users] Inline isPasswordAcceptable - the way isPasswordAcceptable was being used was buggy, leading to test failures (now fixed) - don't expose the function, anyway: it's an implementation detail for passwordStatus() which in itself is an implementation detail for status notifications. --- src/modules/users/Config.cpp | 34 ++++++++++++---------------------- src/modules/users/Config.h | 11 ----------- 2 files changed, 12 insertions(+), 33 deletions(-) diff --git a/src/modules/users/Config.cpp b/src/modules/users/Config.cpp index 0a6d399bfa..2176f3dad0 100644 --- a/src/modules/users/Config.cpp +++ b/src/modules/users/Config.cpp @@ -380,25 +380,6 @@ Config::setRequireStrongPasswords( bool strong ) } } -bool -Config::isPasswordAcceptable( const QString& password, QString& message ) const -{ - bool failureIsFatal = requireStrongPasswords(); - - for ( auto pc : m_passwordChecks ) - { - QString s = pc.filter( password ); - - if ( !s.isEmpty() ) - { - message = s; - return !failureIsFatal; - } - } - - return true; -} - void Config::setUserPassword( const QString& s ) { @@ -429,9 +410,18 @@ Config::passwordStatus( const QString& pw1, const QString& pw2 ) const return qMakePair( PasswordValidity::Invalid, tr( "Your passwords do not match!" ) ); } - QString message; - bool ok = isPasswordAcceptable( pw1, message ); - return qMakePair( ok ? PasswordValidity::Valid : PasswordValidity::Weak, message ); + bool failureIsFatal = requireStrongPasswords(); + for ( const auto& pc : m_passwordChecks ) + { + QString message = pc.filter( pw1 ); + + if ( !message.isEmpty() ) + { + return qMakePair( failureIsFatal ? PasswordValidity::Invalid : PasswordValidity::Weak, message ); + } + } + + return qMakePair( PasswordValidity::Valid, QString() ); } diff --git a/src/modules/users/Config.h b/src/modules/users/Config.h index 97178f2ea6..d9a14795b9 100644 --- a/src/modules/users/Config.h +++ b/src/modules/users/Config.h @@ -145,17 +145,6 @@ class Config : public QObject const QStringList& defaultGroups() const { return m_defaultGroups; } - /** @brief Checks if the password is acceptable. - * - * If all is well, sets @p message to empty and returns @c true. - * If there are warnings, but acceptable, sets @p message to something - * non-empty and returns @c true. This happens if requireStrongPasswords - * is turned off (by config or user). - * If the password is not acceptable, sets @p message to something - * non-empty and returns @c false. - */ - bool isPasswordAcceptable( const QString& password, QString& message ) const; - // The user enters a password (and again in a separate UI element) QString userPassword() const { return m_userPassword; } QString userPasswordSecondary() const { return m_userPasswordSecondary; } From d7b895b45d6b83001e5eb7220aae55324f56ca64 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Mon, 17 Aug 2020 14:05:03 +0200 Subject: [PATCH 059/157] [users] Extend tests - password requirements can disallow weak passwords - start checking for signals on password changes --- src/modules/users/Tests.cpp | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/src/modules/users/Tests.cpp b/src/modules/users/Tests.cpp index 75abd46c69..914821f631 100644 --- a/src/modules/users/Tests.cpp +++ b/src/modules/users/Tests.cpp @@ -206,6 +206,35 @@ UserTests::testUserPassword() QCOMPARE( c.userPasswordValidity(), int( Config::PasswordValidity::Invalid ) ); c.setUserPasswordSecondary( "bogus" ); QCOMPARE( c.userPasswordValidity(), int( Config::PasswordValidity::Weak ) ); + + QVERIFY( !c.requireStrongPasswords() ); + c.setRequireStrongPasswords( true ); + QVERIFY( c.requireStrongPasswords() ); + // Now changed requirements make the password invalid + QCOMPARE( c.userPassword(), "bogus" ); + QCOMPARE( c.userPasswordValidity(), int( Config::PasswordValidity::Invalid ) ); + } + + { + Config c; + QVERIFY( c.userPassword().isEmpty() ); + QCOMPARE( c.userPasswordValidity(), Config::PasswordValidity::Valid ); + + QSignalSpy spy_pwChanged( &c, &Config::userPasswordChanged ); + QSignalSpy spy_pwSecondaryChanged( &c, &Config::userPasswordSecondaryChanged ); + QSignalSpy spy_pwStatusChanged( &c, &Config::userPasswordStatusChanged ); + + c.setUserPassword( "bogus" ); + c.setUserPassword( "bogus" ); + QCOMPARE( spy_pwChanged.count(), 1 ); + QCOMPARE( spy_pwStatusChanged.count(), 1 ); + QCOMPARE( c.userPasswordValidity(), Config::PasswordValidity::Invalid ); + c.setUserPassword( "sugob" ); + c.setUserPasswordSecondary( "sugob" ); + QCOMPARE( spy_pwChanged.count(), 2 ); + QCOMPARE( spy_pwSecondaryChanged.count(), 1 ); + QCOMPARE( spy_pwStatusChanged.count(), 3 ); + QCOMPARE( c.userPasswordValidity(), Config::PasswordValidity::Valid ); } } From 1a7b2668dc1e341b493990b99e9a0cc4530d32cd Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Mon, 17 Aug 2020 14:08:59 +0200 Subject: [PATCH 060/157] [users] Emit password status changes --- src/modules/users/Config.cpp | 12 ++++++++---- src/modules/users/Config.h | 4 ++-- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/src/modules/users/Config.cpp b/src/modules/users/Config.cpp index 2176f3dad0..61746275e4 100644 --- a/src/modules/users/Config.cpp +++ b/src/modules/users/Config.cpp @@ -386,7 +386,8 @@ Config::setUserPassword( const QString& s ) if ( s != m_userPassword ) { m_userPassword = s; - // TODO: check new password status + const auto p = passwordStatus( m_userPassword, m_userPasswordSecondary ); + emit userPasswordStatusChanged( p.first, p.second ); emit userPasswordChanged( s ); } } @@ -397,7 +398,8 @@ Config::setUserPasswordSecondary( const QString& s ) if ( s != m_userPasswordSecondary ) { m_userPasswordSecondary = s; - // TODO: check new password status + const auto p = passwordStatus( m_userPassword, m_userPasswordSecondary ); + emit userPasswordStatusChanged( p.first, p.second ); emit userPasswordSecondaryChanged( s ); } } @@ -446,7 +448,8 @@ Config::setRootPassword( const QString& s ) if ( writeRootPassword() && s != m_rootPassword ) { m_rootPassword = s; - // TODO: check new password status + const auto p = passwordStatus( m_rootPassword, m_rootPasswordSecondary ); + emit rootPasswordStatusChanged( p.first, p.second ); emit rootPasswordChanged( s ); } } @@ -457,7 +460,8 @@ Config::setRootPasswordSecondary( const QString& s ) if ( writeRootPassword() && s != m_rootPasswordSecondary ) { m_rootPasswordSecondary = s; - // TODO: check new password status + const auto p = passwordStatus( m_rootPassword, m_rootPasswordSecondary ); + emit rootPasswordStatusChanged( p.first, p.second ); emit rootPasswordSecondaryChanged( s ); } } diff --git a/src/modules/users/Config.h b/src/modules/users/Config.h index d9a14795b9..a785fb3ae4 100644 --- a/src/modules/users/Config.h +++ b/src/modules/users/Config.h @@ -213,10 +213,10 @@ public Q_SLOTS: void requireStrongPasswordsChanged( bool ); void userPasswordChanged( const QString& ); void userPasswordSecondaryChanged( const QString& ); - void userPasswordStatusChanged( int, QString& ); + void userPasswordStatusChanged( int, const QString& ); void rootPasswordChanged( const QString& ); void rootPasswordSecondaryChanged( const QString& ); - void rootPasswordStatusChanged( int, QString& ); + void rootPasswordStatusChanged( int, const QString& ); private: From 34946ecdee90584caf255fcca732c021e1dc1832 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Mon, 17 Aug 2020 14:20:54 +0200 Subject: [PATCH 061/157] [users] Refactor validity-checking - provide a structured datatype for password status --- src/modules/users/Config.cpp | 41 ++++++++++++++++++++---------------- src/modules/users/Config.h | 22 ++++++++++++++----- 2 files changed, 40 insertions(+), 23 deletions(-) diff --git a/src/modules/users/Config.cpp b/src/modules/users/Config.cpp index 61746275e4..dc2ae5b5c1 100644 --- a/src/modules/users/Config.cpp +++ b/src/modules/users/Config.cpp @@ -427,17 +427,23 @@ Config::passwordStatus( const QString& pw1, const QString& pw2 ) const } +Config::PasswordStatus +Config::userPasswordStatus() const +{ + return passwordStatus( m_userPassword, m_userPasswordSecondary ); +} + int Config::userPasswordValidity() const { - auto p = passwordStatus( m_userPassword, m_userPasswordSecondary ); + auto p = userPasswordStatus(); return p.first; } QString -Config::userPasswordStatus() const +Config::userPasswordMessage() const { - auto p = passwordStatus( m_userPassword, m_userPasswordSecondary ); + auto p = userPasswordStatus(); return p.second; } @@ -494,32 +500,31 @@ Config::rootPasswordSecondary() const return QString(); } -int -Config::rootPasswordValidity() const +Config::PasswordStatus +Config::rootPasswordStatus() const { if ( writeRootPassword() && !reuseUserPasswordForRoot() ) { - auto p = passwordStatus( m_rootPassword, m_rootPasswordSecondary ); - return p.first; + return passwordStatus( m_rootPassword, m_rootPasswordSecondary ); } else { - return userPasswordValidity(); + return userPasswordStatus(); } } +int +Config::rootPasswordValidity() const +{ + auto p = rootPasswordStatus(); + return p.first; +} + QString -Config::rootPasswordStatus() const +Config::rootPasswordMessage() const { - if ( writeRootPassword() && !reuseUserPasswordForRoot() ) - { - auto p = passwordStatus( m_rootPassword, m_rootPasswordSecondary ); - return p.second; - } - else - { - return userPasswordStatus(); - } + auto p = rootPasswordStatus(); + return p.second; } diff --git a/src/modules/users/Config.h b/src/modules/users/Config.h index a785fb3ae4..0581778d41 100644 --- a/src/modules/users/Config.h +++ b/src/modules/users/Config.h @@ -63,13 +63,13 @@ class Config : public QObject Q_PROPERTY( QString userPasswordSecondary READ userPasswordSecondary WRITE setUserPasswordSecondary NOTIFY userPasswordSecondaryChanged ) Q_PROPERTY( int userPasswordValidity READ userPasswordValidity NOTIFY userPasswordStatusChanged STORED false ) - Q_PROPERTY( QString userPasswordStatus READ userPasswordStatus NOTIFY userPasswordStatusChanged STORED false ) + Q_PROPERTY( QString userPasswordMessage READ userPasswordMessage NOTIFY userPasswordStatusChanged STORED false ) Q_PROPERTY( QString rootPassword READ rootPassword WRITE setRootPassword NOTIFY rootPasswordChanged ) Q_PROPERTY( QString rootPasswordSecondary READ rootPasswordSecondary WRITE setRootPasswordSecondary NOTIFY rootPasswordSecondaryChanged ) Q_PROPERTY( int rootPasswordValidity READ rootPasswordValidity NOTIFY rootPasswordStatusChanged STORED false ) - Q_PROPERTY( QString rootPasswordStatus READ rootPasswordStatus NOTIFY rootPasswordStatusChanged STORED false ) + Q_PROPERTY( QString rootPasswordMessage READ rootPasswordMessage NOTIFY rootPasswordStatusChanged STORED false ) Q_PROPERTY( bool writeRootPassword READ writeRootPassword CONSTANT ) Q_PROPERTY( bool reuseUserPasswordForRoot READ reuseUserPasswordForRoot WRITE setReuseUserPasswordForRoot NOTIFY @@ -101,6 +101,16 @@ class Config : public QObject Invalid = 2 }; + /** @brief Full password status + * + * A password's status is in two parts: + * - a validity (valid, weak or invalid) + * - a message describing that validity + * The message is empty when the password is valid, but + * weak and invalid passwords have an explanatory message. + */ + using PasswordStatus = QPair< PasswordValidity, QString >; + Config( QObject* parent = nullptr ); ~Config(); @@ -149,7 +159,8 @@ class Config : public QObject QString userPassword() const { return m_userPassword; } QString userPasswordSecondary() const { return m_userPasswordSecondary; } int userPasswordValidity() const; - QString userPasswordStatus() const; + QString userPasswordMessage() const; + PasswordStatus userPasswordStatus() const; // The root password **may** be entered in the UI, or may be suppressed // entirely when writeRootPassword is off, or may be equal to @@ -157,7 +168,8 @@ class Config : public QObject QString rootPassword() const; QString rootPasswordSecondary() const; int rootPasswordValidity() const; - QString rootPasswordStatus() const; + QString rootPasswordMessage() const; + PasswordStatus rootPasswordStatus() const; static const QStringList& forbiddenLoginNames(); static const QStringList& forbiddenHostNames(); @@ -220,7 +232,7 @@ public Q_SLOTS: private: - QPair< PasswordValidity, QString > passwordStatus( const QString&, const QString& ) const; + PasswordStatus passwordStatus( const QString&, const QString& ) const; QStringList m_defaultGroups; QString m_userShell; From 5db4195b7e3e507a34f84e041b15a4aa86ed32da Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Mon, 17 Aug 2020 15:01:35 +0200 Subject: [PATCH 062/157] [users] Remove most remaining business logic from the Page - report password status from config - tie config-value of fields to the text-boxes --- src/modules/users/UsersPage.cpp | 103 ++++++++++++++++---------------- src/modules/users/UsersPage.h | 14 +---- 2 files changed, 54 insertions(+), 63 deletions(-) diff --git a/src/modules/users/UsersPage.cpp b/src/modules/users/UsersPage.cpp index c8f561f78b..65d6b1e1e6 100644 --- a/src/modules/users/UsersPage.cpp +++ b/src/modules/users/UsersPage.cpp @@ -112,16 +112,25 @@ UsersPage::UsersPage( Config* config, QWidget* parent ) ui->checkBoxValidatePassword->setChecked( m_config->requireStrongPasswords() ); // Connect signals and slots - connect( ui->textBoxUserPassword, &QLineEdit::textChanged, this, &UsersPage::onPasswordTextChanged ); - connect( ui->textBoxUserVerifiedPassword, &QLineEdit::textChanged, this, &UsersPage::onPasswordTextChanged ); - connect( ui->textBoxRootPassword, &QLineEdit::textChanged, this, &UsersPage::onRootPasswordTextChanged ); - connect( ui->textBoxVerifiedRootPassword, &QLineEdit::textChanged, this, &UsersPage::onRootPasswordTextChanged ); - connect( ui->checkBoxValidatePassword, &QCheckBox::stateChanged, this, [this]( int ) { - onPasswordTextChanged( ui->textBoxUserPassword->text() ); - onRootPasswordTextChanged( ui->textBoxRootPassword->text() ); - checkReady( isReady() ); + ui->textBoxUserPassword->setText( config->userPassword() ); + connect( ui->textBoxUserPassword, &QLineEdit::textChanged, config, &Config::setUserPassword ); + connect( config, &Config::userPasswordChanged, ui->textBoxUserPassword, &QLineEdit::setText ); + ui->textBoxUserVerifiedPassword->setText( config->userPasswordSecondary() ); + connect( ui->textBoxUserVerifiedPassword, &QLineEdit::textChanged, config, &Config::setUserPasswordSecondary ); + connect( config, &Config::userPasswordSecondaryChanged, ui->textBoxUserVerifiedPassword, &QLineEdit::setText ); + connect( config, &Config::userPasswordStatusChanged, this, &UsersPage::reportUserPasswordStatus ); + + ui->textBoxRootPassword->setText( config->rootPassword() ); + connect( ui->textBoxRootPassword, &QLineEdit::textChanged, config, &Config::setRootPassword ); + connect( config, &Config::rootPasswordChanged, ui->textBoxRootPassword, &QLineEdit::setText ); + ui->textBoxVerifiedRootPassword->setText( config->rootPasswordSecondary() ); + connect( ui->textBoxVerifiedRootPassword, &QLineEdit::textChanged, config, &Config::setRootPasswordSecondary ); + connect( config, &Config::rootPasswordSecondaryChanged, ui->textBoxVerifiedRootPassword, &QLineEdit::setText ); + connect( config, &Config::rootPasswordStatusChanged, this, &UsersPage::reportRootPasswordStatus ); + + connect( ui->checkBoxValidatePassword, &QCheckBox::stateChanged, this, [this]( int checked ) { + m_config->setRequireStrongPasswords( checked != Qt::Unchecked ); } ); - connect( ui->checkBoxReusePassword, &QCheckBox::stateChanged, this, &UsersPage::onReuseUserPasswordChanged ); connect( ui->textBoxFullName, &QLineEdit::textEdited, config, &Config::setFullName ); connect( config, &Config::fullNameChanged, this, &UsersPage::onFullNameTextEdited ); @@ -145,6 +154,7 @@ UsersPage::UsersPage( Config* config, QWidget* parent ) m_config->setReuseUserPasswordForRoot( checked != Qt::Unchecked ); } ); connect( config, &Config::reuseUserPasswordForRootChanged, ui->checkBoxReusePassword, &QCheckBox::setChecked ); + connect( ui->checkBoxReusePassword, &QCheckBox::stateChanged, this, &UsersPage::onReuseUserPasswordChanged ); } if ( m_config->permitWeakPasswords() ) @@ -181,11 +191,11 @@ UsersPage::retranslate() "use this computer, you can create multiple " "accounts after installation." ) ); } - // Re-do password checks (with output messages) as well. - // .. the password-checking methods get their values from the text boxes, - // not from their parameters. - onPasswordTextChanged( QString() ); - onRootPasswordTextChanged( QString() ); + + const auto up = m_config->userPasswordStatus(); + reportUserPasswordStatus( up.first, up.second ); + const auto rp = m_config->rootPasswordStatus(); + reportRootPasswordStatus( rp.first, rp.second ); } @@ -221,8 +231,10 @@ void UsersPage::onActivate() { ui->textBoxFullName->setFocus(); - onPasswordTextChanged( QString() ); - onRootPasswordTextChanged( QString() ); + const auto up = m_config->userPasswordStatus(); + reportUserPasswordStatus( up.first, up.second ); + const auto rp = m_config->rootPasswordStatus(); + reportRootPasswordStatus( rp.first, rp.second ); } @@ -247,54 +259,43 @@ UsersPage::reportHostNameStatus( const QString& status ) emit checkReady( isReady() ); } -bool -UsersPage::checkPasswordAcceptance( Password p, QLabel* badge, QLabel* message ) +static inline void +passwordStatus( QLabel* iconLabel, QLabel* messageLabel, int validity, const QString& message ) { - QString pw1 = p == Password::User ? m_config->userPassword() : m_config->rootPassword(); - QString pw2 = p == Password::User ? m_config->userPasswordSecondary() : m_config->rootPasswordSecondary(); - - if ( pw1 != pw2 ) + switch ( validity ) { - labelError( badge, message, tr( "Your passwords do not match!" ), Badness::Fatal ); - return false; - } - else - { - QString s; - bool ok = m_config->isPasswordAcceptable( pw1, s ); - if ( !ok ) - { - labelError( badge, message, s, Badness::Fatal ); - } - else if ( !s.isEmpty() ) - { - labelError( badge, message, s, Badness::Warning ); - } - else - { - labelOk( badge, message ); - } - return ok; + case Config::PasswordValidity::Valid: + messageLabel->clear(); + iconLabel->setPixmap( + CalamaresUtils::defaultPixmap( CalamaresUtils::Yes, CalamaresUtils::Original, messageLabel->size() ) ); + break; + case Config::PasswordValidity::Weak: + messageLabel->setText( message ); + iconLabel->setPixmap( CalamaresUtils::defaultPixmap( + CalamaresUtils::StatusWarning, CalamaresUtils::Original, messageLabel->size() ) ); + break; + case Config::PasswordValidity::Invalid: + default: + messageLabel->setText( message ); + iconLabel->setPixmap( CalamaresUtils::defaultPixmap( + CalamaresUtils::StatusError, CalamaresUtils::Original, messageLabel->size() ) ); + break; } } void -UsersPage::onPasswordTextChanged( const QString& ) +UsersPage::reportRootPasswordStatus( int validity, const QString& message ) { - m_readyPassword = checkPasswordAcceptance( Password::User, ui->labelUserPassword, - ui->labelUserPasswordError ); - - emit checkReady( isReady() ); + passwordStatus( ui->labelRootPassword, ui->labelRootPasswordError, validity, message ); } void -UsersPage::onRootPasswordTextChanged( const QString& ) +UsersPage::reportUserPasswordStatus( int validity, const QString& message ) { - m_readyRootPassword = checkPasswordAcceptance( Password::Root, ui->labelRootPassword, - ui->labelRootPasswordError ); - emit checkReady( isReady() ); + passwordStatus( ui->labelUserPassword, ui->labelUserPasswordError, validity, message ); } + void UsersPage::onReuseUserPasswordChanged( const int checked ) { diff --git a/src/modules/users/UsersPage.h b/src/modules/users/UsersPage.h index 9046d11985..9c1d56f2ef 100644 --- a/src/modules/users/UsersPage.h +++ b/src/modules/users/UsersPage.h @@ -52,24 +52,14 @@ protected slots: void onFullNameTextEdited( const QString& ); void reportLoginNameStatus( const QString& ); void reportHostNameStatus( const QString& ); - void onPasswordTextChanged( const QString& ); - void onRootPasswordTextChanged( const QString& ); void onReuseUserPasswordChanged( const int ); + void reportUserPasswordStatus( int, const QString& ); + void reportRootPasswordStatus( int, const QString& ); signals: void checkReady( bool ); private: - /// @brief Which password are we talking about? (for checkPasswordAcceptance()) - enum class Password { Root, User }; - /** @brief Is the password acceptable? - * - * Checks the two copies of the password and places error messages in the - * given QLabels. Returns true (and clears the error messages) if the - * password is acceptable. - */ - bool checkPasswordAcceptance( Password p, QLabel* badge, QLabel* message ); - void retranslate(); Ui::Page_UserSetup* ui; From 24efce0c1d5601a77ad2b919cf0cf387231add76 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Mon, 17 Aug 2020 15:09:20 +0200 Subject: [PATCH 063/157] [locale] Make sanity checks in tests more explicit SEE #1490 --- src/modules/locale/Tests.cpp | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/modules/locale/Tests.cpp b/src/modules/locale/Tests.cpp index 52d4882a22..021140b60e 100644 --- a/src/modules/locale/Tests.cpp +++ b/src/modules/locale/Tests.cpp @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2019-2020, Adriaan de Groot + * SPDX-FileCopyrightText: 2019-2020 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -42,6 +43,7 @@ private Q_SLOTS: void testSplitLocaleConfiguration(); // Check the TZ images for consistency + void testTZSanity(); void testTZImages(); // No overlaps in images void testTZLocations(); // No overlaps in locations void testSpecificLocations(); @@ -106,6 +108,18 @@ LocaleTests::testSplitLocaleConfiguration() QCOMPARE( lc3.lc_numeric, QStringLiteral( "de_DE.UTF-8" ) ); } +void +LocaleTests::testTZSanity() +{ + // Data source for all TZ info + QVERIFY( QFile( "/usr/share/zoneinfo/zone.tab" ).exists() ); + + // Contains a sensible number of total zones + const CalamaresUtils::Locale::ZonesModel zones; + QVERIFY( zones.rowCount( QModelIndex() ) > 100 ); +} + + void LocaleTests::testTZImages() { From eb44d0c6be18c1ced99d5a8c1b1a6a1a0e653be2 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Mon, 17 Aug 2020 15:30:09 +0200 Subject: [PATCH 064/157] [users] Move GlobalStorage wrangling to config - the whole fill-GS method is a bit weird, since you might want to reflect that "live" in GS instead. --- src/modules/users/Config.cpp | 12 ++++++++++++ src/modules/users/Config.h | 7 +++++++ src/modules/users/UsersPage.cpp | 17 ----------------- src/modules/users/UsersPage.h | 2 -- src/modules/users/UsersViewStep.cpp | 2 +- 5 files changed, 20 insertions(+), 20 deletions(-) diff --git a/src/modules/users/Config.cpp b/src/modules/users/Config.cpp index dc2ae5b5c1..e97c75f620 100644 --- a/src/modules/users/Config.cpp +++ b/src/modules/users/Config.cpp @@ -647,3 +647,15 @@ Config::setConfigurationMap( const QVariantMap& configurationMap ) } std::sort( m_passwordChecks.begin(), m_passwordChecks.end() ); } + +void +Config::finalizeGlobalStorage() const +{ + Calamares::GlobalStorage* gs = Calamares::JobQueue::instance()->globalStorage(); + + if ( writeRootPassword() ) + { + gs->insert( "reuseRootPassword", reuseUserPasswordForRoot() ); + } + gs->insert( "password", CalamaresUtils::obscure( userPassword() ) ); +} diff --git a/src/modules/users/Config.h b/src/modules/users/Config.h index 0581778d41..ae09f76ccf 100644 --- a/src/modules/users/Config.h +++ b/src/modules/users/Config.h @@ -116,6 +116,13 @@ class Config : public QObject void setConfigurationMap( const QVariantMap& ); + /** @brief Fill Global Storage with some settings + * + * This should be called when moving on from the view step, + * and copies some things to GS that otherwise would not. + */ + void finalizeGlobalStorage() const; + /** @brief Full path to the user's shell executable * * Typically this will be /bin/bash, but it can be set from diff --git a/src/modules/users/UsersPage.cpp b/src/modules/users/UsersPage.cpp index 65d6b1e1e6..732943bbb1 100644 --- a/src/modules/users/UsersPage.cpp +++ b/src/modules/users/UsersPage.cpp @@ -209,23 +209,6 @@ UsersPage::isReady() const return readyFields; } -void -UsersPage::fillGlobalStorage() const -{ - if ( !isReady() ) - { - return; - } - - Calamares::GlobalStorage* gs = Calamares::JobQueue::instance()->globalStorage(); - - if ( m_config->writeRootPassword() ) - { - gs->insert( "reuseRootPassword", ui->checkBoxReusePassword->isChecked() ); - } - gs->insert( "password", CalamaresUtils::obscure( ui->textBoxUserPassword->text() ) ); -} - void UsersPage::onActivate() diff --git a/src/modules/users/UsersPage.h b/src/modules/users/UsersPage.h index 9c1d56f2ef..b82ca9e552 100644 --- a/src/modules/users/UsersPage.h +++ b/src/modules/users/UsersPage.h @@ -44,8 +44,6 @@ class UsersPage : public QWidget bool isReady() const; - void fillGlobalStorage() const; - void onActivate(); protected slots: diff --git a/src/modules/users/UsersViewStep.cpp b/src/modules/users/UsersViewStep.cpp index c9041abfe1..e2271e7590 100644 --- a/src/modules/users/UsersViewStep.cpp +++ b/src/modules/users/UsersViewStep.cpp @@ -143,7 +143,7 @@ UsersViewStep::onLeave() j = new SetHostNameJob( m_config->hostName(), m_config->hostNameActions() ); m_jobs.append( Calamares::job_ptr( j ) ); - m_widget->fillGlobalStorage(); + m_config->finalizeGlobalStorage(); } From 36cefe3be10c707a2cdfaedd14fddee5cda31f50 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Mon, 17 Aug 2020 16:18:02 +0200 Subject: [PATCH 065/157] [users] Remove calculation of 'ready' from Page - simplify UI update methods - drop all the m_ready* members, that should live in Config --- src/modules/users/UsersPage.cpp | 66 ++++++++++++--------------------- src/modules/users/UsersPage.h | 6 --- 2 files changed, 24 insertions(+), 48 deletions(-) diff --git a/src/modules/users/UsersPage.cpp b/src/modules/users/UsersPage.cpp index 732943bbb1..541991943a 100644 --- a/src/modules/users/UsersPage.cpp +++ b/src/modules/users/UsersPage.cpp @@ -41,25 +41,15 @@ #include #include -/** @brief How bad is the error for labelError() ? */ -enum class Badness -{ - Fatal, - Warning -}; - -/** Add an error message and pixmap to a label. */ +/** @brief Add an error message and pixmap to a label. */ static inline void -labelError( QLabel* pix, QLabel* label, const QString& message, Badness bad ) +labelError( QLabel* pix, QLabel* label, CalamaresUtils::ImageType icon, const QString& message ) { label->setText( message ); - pix->setPixmap( CalamaresUtils::defaultPixmap( ( bad == Badness::Fatal ) ? CalamaresUtils::StatusError - : CalamaresUtils::StatusWarning, - CalamaresUtils::Original, - label->size() ) ); + pix->setPixmap( CalamaresUtils::defaultPixmap( icon, CalamaresUtils::Original, label->size() ) ); } -/** Clear error, indicate OK on a label. */ +/** @brief Clear error, set happy pixmap on a label to indicate "ok". */ static inline void labelOk( QLabel* pix, QLabel* label ) { @@ -67,9 +57,14 @@ labelOk( QLabel* pix, QLabel* label ) pix->setPixmap( CalamaresUtils::defaultPixmap( CalamaresUtils::Yes, CalamaresUtils::Original, label->size() ) ); } -/** Indicate error, update @p ok based on @p status */ +/** @brief Sets error or ok on a label depending on @p status and @p value + * + * - An **empty** @p value gets no message and no icon. + * - A non-empty @p value, with an **empty** @p status gets an "ok". + * - A non-empty @p value with a non-empty @p status gets an error indicator. + */ static inline void -labelStatus( QLabel* pix, QLabel* label, const QString& value, const QString& status, bool& ok ) +labelStatus( QLabel* pix, QLabel* label, const QString& value, const QString& status ) { if ( status.isEmpty() ) { @@ -78,18 +73,15 @@ labelStatus( QLabel* pix, QLabel* label, const QString& value, const QString& st // This is different from labelOK() because no checkmark is shown label->clear(); pix->clear(); - ok = false; } else { labelOk( pix, label ); - ok = true; } } else { - labelError( pix, label, status, Badness::Fatal ); - ok = false; + labelError( pix, label, CalamaresUtils::ImageType::StatusError, status ); } } @@ -97,11 +89,6 @@ UsersPage::UsersPage( Config* config, QWidget* parent ) : QWidget( parent ) , ui( new Ui::Page_UserSetup ) , m_config( config ) - , m_readyFullName( false ) - , m_readyUsername( false ) - , m_readyHostname( false ) - , m_readyPassword( false ) - , m_readyRootPassword( false ) { ui->setupUi( this ); @@ -202,11 +189,12 @@ UsersPage::retranslate() bool UsersPage::isReady() const { - bool readyFields = m_readyFullName && m_readyHostname && m_readyPassword && m_readyUsername; - // If we're going to write a root password, we need a valid one (or reuse the user's password) - readyFields - &= m_config->writeRootPassword() ? ( m_readyRootPassword || ui->checkBoxReusePassword->isChecked() ) : true; - return readyFields; + bool readyFullName = !m_config->fullName().isEmpty(); // Needs some text + bool readyHostname = m_config->hostNameStatus().isEmpty(); // .. no warning message + bool readyUsername = m_config->loginNameStatus().isEmpty(); // .. no warning message + bool readyUserPassword = m_config->userPasswordValidity() != Config::PasswordValidity::Invalid; + bool readyRootPassword = m_config->rootPasswordValidity() != Config::PasswordValidity::Invalid; + return readyFullName && readyHostname && readyUsername && readyUserPassword && readyRootPassword; } @@ -224,21 +212,21 @@ UsersPage::onActivate() void UsersPage::onFullNameTextEdited( const QString& fullName ) { - labelStatus( ui->labelFullName, ui->labelFullNameError, fullName, QString(), m_readyFullName ); + labelStatus( ui->labelFullName, ui->labelFullNameError, fullName, QString() ); checkReady( isReady() ); } void UsersPage::reportLoginNameStatus( const QString& status ) { - labelStatus( ui->labelUsername, ui->labelUsernameError, m_config->loginName(), status, m_readyUsername ); + labelStatus( ui->labelUsername, ui->labelUsernameError, m_config->loginName(), status ); emit checkReady( isReady() ); } void UsersPage::reportHostNameStatus( const QString& status ) { - labelStatus( ui->labelHostname, ui->labelHostnameError, m_config->hostName(), status, m_readyHostname ); + labelStatus( ui->labelHostname, ui->labelHostnameError, m_config->hostName(), status ); emit checkReady( isReady() ); } @@ -248,20 +236,14 @@ passwordStatus( QLabel* iconLabel, QLabel* messageLabel, int validity, const QSt switch ( validity ) { case Config::PasswordValidity::Valid: - messageLabel->clear(); - iconLabel->setPixmap( - CalamaresUtils::defaultPixmap( CalamaresUtils::Yes, CalamaresUtils::Original, messageLabel->size() ) ); + labelOk( iconLabel, messageLabel ); break; case Config::PasswordValidity::Weak: - messageLabel->setText( message ); - iconLabel->setPixmap( CalamaresUtils::defaultPixmap( - CalamaresUtils::StatusWarning, CalamaresUtils::Original, messageLabel->size() ) ); + labelError( iconLabel, messageLabel, CalamaresUtils::StatusWarning, message ); break; case Config::PasswordValidity::Invalid: default: - messageLabel->setText( message ); - iconLabel->setPixmap( CalamaresUtils::defaultPixmap( - CalamaresUtils::StatusError, CalamaresUtils::Original, messageLabel->size() ) ); + labelError( iconLabel, messageLabel, CalamaresUtils::StatusError, message ); break; } } diff --git a/src/modules/users/UsersPage.h b/src/modules/users/UsersPage.h index b82ca9e552..f8bd3b7082 100644 --- a/src/modules/users/UsersPage.h +++ b/src/modules/users/UsersPage.h @@ -62,12 +62,6 @@ protected slots: Ui::Page_UserSetup* ui; Config* m_config; - - bool m_readyFullName; - bool m_readyUsername; - bool m_readyHostname; - bool m_readyPassword; - bool m_readyRootPassword; }; #endif // USERSPAGE_H From abae942e55554866ccd0214d23287306b446000d Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Tue, 18 Aug 2020 11:21:53 +0200 Subject: [PATCH 066/157] [users] Complete isReady move to Config - give Config slots and signals for ready-status - disconnect the page from the viewstep and use the Config object ready-status instead --- src/modules/users/Config.cpp | 48 ++++++++++++++++++++++++++++- src/modules/users/Config.h | 9 +++++- src/modules/users/UsersPage.cpp | 16 ---------- src/modules/users/UsersPage.h | 5 --- src/modules/users/UsersViewStep.cpp | 9 +++--- 5 files changed, 60 insertions(+), 27 deletions(-) diff --git a/src/modules/users/Config.cpp b/src/modules/users/Config.cpp index e97c75f620..c8f2052406 100644 --- a/src/modules/users/Config.cpp +++ b/src/modules/users/Config.cpp @@ -56,6 +56,16 @@ hostNameActionNames() Config::Config( QObject* parent ) : QObject( parent ) { + emit readyChanged( m_isReady ); // false + + // Gang together all the changes of status to one readyChanged() signal + connect( this, &Config::hostNameStatusChanged, this, &Config::checkReady ); + connect( this, &Config::loginNameStatusChanged, this, &Config::checkReady ); + connect( this, &Config::fullNameChanged, this, &Config::checkReady ); + connect( this, &Config::userPasswordStatusChanged, this, &Config::checkReady ); + connect( this, &Config::rootPasswordStatusChanged, this, &Config::checkReady ); + connect( this, &Config::reuseUserPasswordForRootChanged, this, &Config::checkReady ); + connect( this, &Config::requireStrongPasswordsChanged, this, &Config::checkReady ); } Config::~Config() {} @@ -404,7 +414,14 @@ Config::setUserPasswordSecondary( const QString& s ) } } -QPair< Config::PasswordValidity, QString > +/** @brief Checks two copies of the password for validity + * + * Given two copies of the password -- generally the password and + * the secondary fields -- checks them for validity and returns + * a pair of . + * + */ +Config::PasswordStatus Config::passwordStatus( const QString& pw1, const QString& pw2 ) const { if ( pw1 != pw2 ) @@ -527,6 +544,33 @@ Config::rootPasswordMessage() const return p.second; } +bool +Config::isReady() const +{ + bool readyFullName = !fullName().isEmpty(); // Needs some text + bool readyHostname = hostNameStatus().isEmpty(); // .. no warning message + bool readyUsername = loginNameStatus().isEmpty(); // .. no warning message + bool readyUserPassword = userPasswordValidity() != Config::PasswordValidity::Invalid; + bool readyRootPassword = rootPasswordValidity() != Config::PasswordValidity::Invalid; + return readyFullName && readyHostname && readyUsername && readyUserPassword && readyRootPassword; +} + +/** @brief Update ready status and emit signal + * + * This is a "concentrator" private slot for all the status-changed + * signals, so that readyChanged() is emitted only when needed. + */ +void +Config::checkReady() +{ + bool b = isReady(); + if ( b != m_isReady ) + { + m_isReady = b; + emit readyChanged( b ); + } +} + STATICTEST void setConfigurationDefaultGroups( const QVariantMap& map, QStringList& defaultGroups ) @@ -646,6 +690,8 @@ Config::setConfigurationMap( const QVariantMap& configurationMap ) addPasswordCheck( i.key(), i.value(), m_passwordChecks ); } std::sort( m_passwordChecks.begin(), m_passwordChecks.end() ); + + checkReady(); } void diff --git a/src/modules/users/Config.h b/src/modules/users/Config.h index ae09f76ccf..65ea0e5ba6 100644 --- a/src/modules/users/Config.h +++ b/src/modules/users/Config.h @@ -79,6 +79,8 @@ class Config : public QObject Q_PROPERTY( bool requireStrongPasswords READ requireStrongPasswords WRITE setRequireStrongPasswords NOTIFY requireStrongPasswordsChanged ) + Q_PROPERTY( bool ready READ isReady NOTIFY readyChanged STORED false ) + public: /** @brief Validity (status) of a password * @@ -178,6 +180,8 @@ class Config : public QObject QString rootPasswordMessage() const; PasswordStatus rootPasswordStatus() const; + bool isReady() const; + static const QStringList& forbiddenLoginNames(); static const QStringList& forbiddenHostNames(); @@ -236,10 +240,11 @@ public Q_SLOTS: void rootPasswordChanged( const QString& ); void rootPasswordSecondaryChanged( const QString& ); void rootPasswordStatusChanged( int, const QString& ); - + void readyChanged( bool ) const; private: PasswordStatus passwordStatus( const QString&, const QString& ) const; + void checkReady(); QStringList m_defaultGroups; QString m_userShell; @@ -265,6 +270,8 @@ public Q_SLOTS: bool m_customLoginName = false; bool m_customHostName = false; + bool m_isReady = false; ///< Used to reduce readyChanged signals + HostNameActions m_hostNameActions; PasswordCheckList m_passwordChecks; }; diff --git a/src/modules/users/UsersPage.cpp b/src/modules/users/UsersPage.cpp index 541991943a..70effca405 100644 --- a/src/modules/users/UsersPage.cpp +++ b/src/modules/users/UsersPage.cpp @@ -186,18 +186,6 @@ UsersPage::retranslate() } -bool -UsersPage::isReady() const -{ - bool readyFullName = !m_config->fullName().isEmpty(); // Needs some text - bool readyHostname = m_config->hostNameStatus().isEmpty(); // .. no warning message - bool readyUsername = m_config->loginNameStatus().isEmpty(); // .. no warning message - bool readyUserPassword = m_config->userPasswordValidity() != Config::PasswordValidity::Invalid; - bool readyRootPassword = m_config->rootPasswordValidity() != Config::PasswordValidity::Invalid; - return readyFullName && readyHostname && readyUsername && readyUserPassword && readyRootPassword; -} - - void UsersPage::onActivate() { @@ -213,21 +201,18 @@ void UsersPage::onFullNameTextEdited( const QString& fullName ) { labelStatus( ui->labelFullName, ui->labelFullNameError, fullName, QString() ); - checkReady( isReady() ); } void UsersPage::reportLoginNameStatus( const QString& status ) { labelStatus( ui->labelUsername, ui->labelUsernameError, m_config->loginName(), status ); - emit checkReady( isReady() ); } void UsersPage::reportHostNameStatus( const QString& status ) { labelStatus( ui->labelHostname, ui->labelHostnameError, m_config->hostName(), status ); - emit checkReady( isReady() ); } static inline void @@ -280,5 +265,4 @@ UsersPage::onReuseUserPasswordChanged( const int checked ) ui->labelRootPasswordError->setVisible( visible ); ui->textBoxRootPassword->setVisible( visible ); ui->textBoxVerifiedRootPassword->setVisible( visible ); - checkReady( isReady() ); } diff --git a/src/modules/users/UsersPage.h b/src/modules/users/UsersPage.h index f8bd3b7082..246a080838 100644 --- a/src/modules/users/UsersPage.h +++ b/src/modules/users/UsersPage.h @@ -42,8 +42,6 @@ class UsersPage : public QWidget explicit UsersPage( Config* config, QWidget* parent = nullptr ); virtual ~UsersPage(); - bool isReady() const; - void onActivate(); protected slots: @@ -54,9 +52,6 @@ protected slots: void reportUserPasswordStatus( int, const QString& ); void reportRootPasswordStatus( int, const QString& ); -signals: - void checkReady( bool ); - private: void retranslate(); diff --git a/src/modules/users/UsersViewStep.cpp b/src/modules/users/UsersViewStep.cpp index e2271e7590..6d35663992 100644 --- a/src/modules/users/UsersViewStep.cpp +++ b/src/modules/users/UsersViewStep.cpp @@ -39,7 +39,9 @@ UsersViewStep::UsersViewStep( QObject* parent ) , m_widget( nullptr ) , m_config( new Config( this ) ) { - emit nextStatusChanged( true ); + connect( m_config, &Config::readyChanged, this, &UsersViewStep::nextStatusChanged ); + + emit nextStatusChanged( m_config->isReady() ); } @@ -65,7 +67,6 @@ UsersViewStep::widget() if ( !m_widget ) { m_widget = new UsersPage( m_config ); - connect( m_widget, &UsersPage::checkReady, this, &UsersViewStep::nextStatusChanged ); } return m_widget; } @@ -74,7 +75,7 @@ UsersViewStep::widget() bool UsersViewStep::isNextEnabled() const { - return m_widget ? m_widget->isReady() : true; + return m_config->isReady(); } @@ -120,7 +121,7 @@ void UsersViewStep::onLeave() { m_jobs.clear(); - if ( !m_widget || !m_widget->isReady() ) + if ( !m_widget || !m_config->isReady() ) { return; } From 2c72524f295e413c0f4142d8b4e0ecce174a9c5f Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Tue, 18 Aug 2020 11:31:32 +0200 Subject: [PATCH 067/157] [users] Move job-creation to Config - this makes Config entirely stand-alone: it has all the business logic and can be hooked up to alternate UIs or used from other view steps or jobs --- src/modules/users/Config.cpp | 32 +++++++++++++++++++++++++++++ src/modules/users/Config.h | 7 +++++++ src/modules/users/UsersViewStep.cpp | 28 +------------------------ src/modules/users/UsersViewStep.h | 2 +- 4 files changed, 41 insertions(+), 28 deletions(-) diff --git a/src/modules/users/Config.cpp b/src/modules/users/Config.cpp index c8f2052406..102d269172 100644 --- a/src/modules/users/Config.cpp +++ b/src/modules/users/Config.cpp @@ -20,6 +20,10 @@ #include "Config.h" +#include "CreateUserJob.h" +#include "SetHostNameJob.h" +#include "SetPasswordJob.h" + #include "GlobalStorage.h" #include "JobQueue.h" #include "utils/Logger.h" @@ -705,3 +709,31 @@ Config::finalizeGlobalStorage() const } gs->insert( "password", CalamaresUtils::obscure( userPassword() ) ); } + +Calamares::JobList +Config::createJobs() const +{ + Calamares::JobList jobs; + + if ( !isReady() ) + { + return jobs; + } + + Calamares::Job* j; + + j = new CreateUserJob( + loginName(), fullName().isEmpty() ? loginName() : fullName(), doAutoLogin(), defaultGroups() ); + jobs.append( Calamares::job_ptr( j ) ); + + j = new SetPasswordJob( loginName(), userPassword() ); + jobs.append( Calamares::job_ptr( j ) ); + + j = new SetPasswordJob( "root", rootPassword() ); + jobs.append( Calamares::job_ptr( j ) ); + + j = new SetHostNameJob( hostName(), hostNameActions() ); + jobs.append( Calamares::job_ptr( j ) ); + + return jobs; +} diff --git a/src/modules/users/Config.h b/src/modules/users/Config.h index 65ea0e5ba6..133f59c056 100644 --- a/src/modules/users/Config.h +++ b/src/modules/users/Config.h @@ -23,6 +23,7 @@ #include "CheckPWQuality.h" +#include "Job.h" #include "utils/NamedEnum.h" #include @@ -125,6 +126,12 @@ class Config : public QObject */ void finalizeGlobalStorage() const; + /** @brief Jobs for creating user, setting passwords + * + * If the Config object isn't ready yet, returns an empty list. + */ + Calamares::JobList createJobs() const; + /** @brief Full path to the user's shell executable * * Typically this will be /bin/bash, but it can be set from diff --git a/src/modules/users/UsersViewStep.cpp b/src/modules/users/UsersViewStep.cpp index 6d35663992..df77da0368 100644 --- a/src/modules/users/UsersViewStep.cpp +++ b/src/modules/users/UsersViewStep.cpp @@ -21,9 +21,6 @@ #include "UsersViewStep.h" #include "Config.h" -#include "CreateUserJob.h" -#include "SetHostNameJob.h" -#include "SetPasswordJob.h" #include "UsersPage.h" #include "GlobalStorage.h" @@ -120,30 +117,7 @@ UsersViewStep::onActivate() void UsersViewStep::onLeave() { - m_jobs.clear(); - if ( !m_widget || !m_config->isReady() ) - { - return; - } - - Calamares::Job* j; - // TODO: Config object should create jobs, like this one, that depend only on config values - j = new CreateUserJob( m_config->loginName(), - m_config->fullName().isEmpty() ? m_config->loginName() : m_config->fullName(), - m_config->doAutoLogin(), - m_config->defaultGroups() ); - m_jobs.append( Calamares::job_ptr( j ) ); - - j = new SetPasswordJob( m_config->loginName(), m_config->userPassword() ); - m_jobs.append( Calamares::job_ptr( j ) ); - - j = new SetPasswordJob( "root", m_config->rootPassword() ); - m_jobs.append( Calamares::job_ptr( j ) ); - - // TODO: Config object should create jobs - j = new SetHostNameJob( m_config->hostName(), m_config->hostNameActions() ); - m_jobs.append( Calamares::job_ptr( j ) ); - + m_jobs = m_config->createJobs(); m_config->finalizeGlobalStorage(); } diff --git a/src/modules/users/UsersViewStep.h b/src/modules/users/UsersViewStep.h index bfc43d1cd0..baf4e62926 100644 --- a/src/modules/users/UsersViewStep.h +++ b/src/modules/users/UsersViewStep.h @@ -57,7 +57,7 @@ class PLUGINDLLEXPORT UsersViewStep : public Calamares::ViewStep private: UsersPage* m_widget; - QList< Calamares::job_ptr > m_jobs; + Calamares::JobList m_jobs; Config* m_config; }; From 3ecab4bedbe4fe97384da1c252a298b15d04ab5f Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Tue, 18 Aug 2020 11:41:43 +0200 Subject: [PATCH 068/157] [users] Fix test building - now Config can create jobs, tests that consume Config need to build the jobs as well; re-jig CMakeLists to make those a little easier. --- src/modules/users/CMakeLists.txt | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/src/modules/users/CMakeLists.txt b/src/modules/users/CMakeLists.txt index 95b3a96970..7fffc1eea1 100644 --- a/src/modules/users/CMakeLists.txt +++ b/src/modules/users/CMakeLists.txt @@ -18,17 +18,24 @@ endif() include_directories( ${PROJECT_BINARY_DIR}/src/libcalamaresui ) +set( JOB_SRC + CreateUserJob.cpp + SetPasswordJob.cpp + SetHostNameJob.cpp +) +set( CONFIG_SRC + CheckPWQuality.cpp + Config.cpp +) + calamares_add_plugin( users TYPE viewmodule EXPORT_MACRO PLUGINDLLEXPORT_PRO SOURCES - CreateUserJob.cpp - SetPasswordJob.cpp UsersViewStep.cpp UsersPage.cpp - SetHostNameJob.cpp - CheckPWQuality.cpp - Config.cpp + ${JOB_SRC} + ${CONFIG_SRC} UI page_usersetup.ui RESOURCES @@ -63,15 +70,17 @@ calamares_add_test( TestSetHostNameJob.cpp SetHostNameJob.cpp LIBRARIES - Qt5::DBus + Qt5::DBus # HostName job can use DBus to systemd ) calamares_add_test( userstest SOURCES Tests.cpp - Config.cpp - CheckPWQuality.cpp + ${JOB_SRC} + ${CONFIG_SRC} LIBRARIES ${USER_EXTRA_LIB} + Qt5::DBus # HostName job can use DBus to systemd + ${CRYPT_LIBRARIES} # SetPassword job uses crypt() ) From 5d016baee92aa0c358c58655f4723fb86bb71672 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Tue, 18 Aug 2020 12:33:42 +0200 Subject: [PATCH 069/157] [hostinfo] Fix up ARM "detection" As explained by Kevin Kofler and abucodonosor, the implementer line can carry a bunch of different values, but none of them are actually interesting. Simplify the code. --- src/modules/hostinfo/HostInfoJob.cpp | 33 +++++++++++++++++++++++----- 1 file changed, 27 insertions(+), 6 deletions(-) diff --git a/src/modules/hostinfo/HostInfoJob.cpp b/src/modules/hostinfo/HostInfoJob.cpp index 789e8fc701..90c9cd5152 100644 --- a/src/modules/hostinfo/HostInfoJob.cpp +++ b/src/modules/hostinfo/HostInfoJob.cpp @@ -116,12 +116,33 @@ hostCPU_FreeBSD() static QString hostCPUmatchARM( const QString& s ) { - // Both Rock64 and Raspberry pi mention 0x41 - if ( s.contains( ": 0x41" ) ) - { - return QStringLiteral( "ARM" ); - } - return QString(); + /* The "CPU implementer" line is for ARM CPUs in general. + * + * The specific value given distinguishes *which designer* + * (or architecture licensee, who cares) produced the current + * silicon. For instance, a list from lscpu-arm.c (Linux kernel) + * shows this: + * +static const struct hw_impl hw_implementer[] = { + { 0x41, arm_part, "ARM" }, + { 0x42, brcm_part, "Broadcom" }, + { 0x43, cavium_part, "Cavium" }, + { 0x44, dec_part, "DEC" }, + { 0x48, hisi_part, "HiSilicon" }, + { 0x4e, nvidia_part, "Nvidia" }, + { 0x50, apm_part, "APM" }, + { 0x51, qcom_part, "Qualcomm" }, + { 0x53, samsung_part, "Samsung" }, + { 0x56, marvell_part, "Marvell" }, + { 0x66, faraday_part, "Faraday" }, + { 0x69, intel_part, "Intel" }, + { -1, unknown_part, "unknown" }, +}; + * + * Since the specific implementor isn't interesting, just + * map everything to "ARM". + */ + return QStringLiteral( "ARM" ); } QString From fd2399f702cb7a58d4d50009ea86e283efa93172 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Tue, 18 Aug 2020 12:46:27 +0200 Subject: [PATCH 070/157] [users] Re-check password validity on change of conditions - if the user password is reused (or not) then check the status of the passwords against the new reuse-setting - if the allow-weak-passwords setting is changed, then check the status of passwords (both of them) against the new weakness setting --- src/modules/users/Config.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/modules/users/Config.cpp b/src/modules/users/Config.cpp index 102d269172..80c6121712 100644 --- a/src/modules/users/Config.cpp +++ b/src/modules/users/Config.cpp @@ -381,6 +381,10 @@ Config::setReuseUserPasswordForRoot( bool reuse ) { m_reuseUserPasswordForRoot = reuse; emit reuseUserPasswordForRootChanged( reuse ); + { + auto rp = rootPasswordStatus(); + emit rootPasswordStatusChanged( rp.first, rp.second ); + } } } @@ -391,6 +395,14 @@ Config::setRequireStrongPasswords( bool strong ) { m_requireStrongPasswords = strong; emit requireStrongPasswordsChanged( strong ); + { + auto rp = rootPasswordStatus(); + emit rootPasswordStatusChanged( rp.first, rp.second ); + } + { + auto up = userPasswordStatus(); + emit userPasswordStatusChanged( up.first, up.second ); + } } } From c92e12ef74c0d085e73541f51ff0e34d0737d748 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Tue, 18 Aug 2020 12:48:51 +0200 Subject: [PATCH 071/157] [users] Consistent styling of status badges on input fields - Use Status* icons rather than the yes/no --- src/modules/users/UsersPage.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/modules/users/UsersPage.cpp b/src/modules/users/UsersPage.cpp index 70effca405..ad0c448d5b 100644 --- a/src/modules/users/UsersPage.cpp +++ b/src/modules/users/UsersPage.cpp @@ -54,7 +54,7 @@ static inline void labelOk( QLabel* pix, QLabel* label ) { label->clear(); - pix->setPixmap( CalamaresUtils::defaultPixmap( CalamaresUtils::Yes, CalamaresUtils::Original, label->size() ) ); + pix->setPixmap( CalamaresUtils::defaultPixmap( CalamaresUtils::StatusOk, CalamaresUtils::Original, label->size() ) ); } /** @brief Sets error or ok on a label depending on @p status and @p value From dc81c76e5bc27d85ba841924dbe786c4917e5676 Mon Sep 17 00:00:00 2001 From: Calamares CI Date: Tue, 18 Aug 2020 14:58:17 +0200 Subject: [PATCH 072/157] i18n: [calamares] Automatic merge of Transifex translations --- lang/calamares_ar.ts | 250 +++++++++++++-------------- lang/calamares_as.ts | 250 +++++++++++++-------------- lang/calamares_ast.ts | 250 +++++++++++++-------------- lang/calamares_az.ts | 250 +++++++++++++-------------- lang/calamares_az_AZ.ts | 250 +++++++++++++-------------- lang/calamares_be.ts | 250 +++++++++++++-------------- lang/calamares_bg.ts | 250 +++++++++++++-------------- lang/calamares_bn.ts | 250 +++++++++++++-------------- lang/calamares_ca.ts | 250 +++++++++++++-------------- lang/calamares_ca@valencia.ts | 250 +++++++++++++-------------- lang/calamares_cs_CZ.ts | 308 ++++++++++++++++++---------------- lang/calamares_da.ts | 250 +++++++++++++-------------- lang/calamares_de.ts | 250 +++++++++++++-------------- lang/calamares_el.ts | 250 +++++++++++++-------------- lang/calamares_en.ts | 2 +- lang/calamares_en_GB.ts | 250 +++++++++++++-------------- lang/calamares_eo.ts | 250 +++++++++++++-------------- lang/calamares_es.ts | 250 +++++++++++++-------------- lang/calamares_es_MX.ts | 250 +++++++++++++-------------- lang/calamares_es_PR.ts | 250 +++++++++++++-------------- lang/calamares_et.ts | 250 +++++++++++++-------------- lang/calamares_eu.ts | 250 +++++++++++++-------------- lang/calamares_fa.ts | 250 +++++++++++++-------------- lang/calamares_fi_FI.ts | 250 +++++++++++++-------------- lang/calamares_fr.ts | 250 +++++++++++++-------------- lang/calamares_fr_CH.ts | 250 +++++++++++++-------------- lang/calamares_gl.ts | 250 +++++++++++++-------------- lang/calamares_gu.ts | 250 +++++++++++++-------------- lang/calamares_he.ts | 254 ++++++++++++++-------------- lang/calamares_hi.ts | 250 +++++++++++++-------------- lang/calamares_hr.ts | 250 +++++++++++++-------------- lang/calamares_hu.ts | 250 +++++++++++++-------------- lang/calamares_id.ts | 250 +++++++++++++-------------- lang/calamares_ie.ts | 250 +++++++++++++-------------- lang/calamares_is.ts | 250 +++++++++++++-------------- lang/calamares_it_IT.ts | 250 +++++++++++++-------------- lang/calamares_ja.ts | 250 +++++++++++++-------------- lang/calamares_kk.ts | 250 +++++++++++++-------------- lang/calamares_kn.ts | 250 +++++++++++++-------------- lang/calamares_ko.ts | 250 +++++++++++++-------------- lang/calamares_lo.ts | 250 +++++++++++++-------------- lang/calamares_lt.ts | 274 +++++++++++++++--------------- lang/calamares_lv.ts | 250 +++++++++++++-------------- lang/calamares_mk.ts | 250 +++++++++++++-------------- lang/calamares_ml.ts | 250 +++++++++++++-------------- lang/calamares_mr.ts | 250 +++++++++++++-------------- lang/calamares_nb.ts | 250 +++++++++++++-------------- lang/calamares_ne_NP.ts | 250 +++++++++++++-------------- lang/calamares_nl.ts | 250 +++++++++++++-------------- lang/calamares_pl.ts | 250 +++++++++++++-------------- lang/calamares_pt_BR.ts | 250 +++++++++++++-------------- lang/calamares_pt_PT.ts | 250 +++++++++++++-------------- lang/calamares_ro.ts | 250 +++++++++++++-------------- lang/calamares_ru.ts | 250 +++++++++++++-------------- lang/calamares_sk.ts | 272 +++++++++++++++--------------- lang/calamares_sl.ts | 250 +++++++++++++-------------- lang/calamares_sq.ts | 250 +++++++++++++-------------- lang/calamares_sr.ts | 250 +++++++++++++-------------- lang/calamares_sr@latin.ts | 250 +++++++++++++-------------- lang/calamares_sv.ts | 250 +++++++++++++-------------- lang/calamares_tg.ts | 250 +++++++++++++-------------- lang/calamares_th.ts | 250 +++++++++++++-------------- lang/calamares_tr_TR.ts | 250 +++++++++++++-------------- lang/calamares_uk.ts | 250 +++++++++++++-------------- lang/calamares_ur.ts | 250 +++++++++++++-------------- lang/calamares_uz.ts | 250 +++++++++++++-------------- lang/calamares_zh_CN.ts | 250 +++++++++++++-------------- lang/calamares_zh_TW.ts | 250 +++++++++++++-------------- 68 files changed, 8642 insertions(+), 8218 deletions(-) diff --git a/lang/calamares_ar.ts b/lang/calamares_ar.ts index 0ecfd7d4cb..4602356401 100644 --- a/lang/calamares_ar.ts +++ b/lang/calamares_ar.ts @@ -517,134 +517,134 @@ The installer will quit and all changes will be lost. نموذج - + Select storage de&vice: اختر &جهاز التّخزين: - - - - + + + + Current: الحاليّ: - + After: بعد: - + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. <strong>تقسيم يدويّ</strong><br/>يمكنك إنشاء أو تغيير حجم الأقسام بنفسك. - + Reuse %1 as home partition for %2. - + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> <strong>اختر قسمًا لتقليصه، ثمّ اسحب الشّريط السّفليّ لتغيير حجمه </strong> - + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. - + Boot loader location: مكان محمّل الإقلاع: - + <strong>Select a partition to install on</strong> <strong>اختر القسم حيث سيكون التّثبيت عليه</strong> - + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. تعذّر إيجاد قسم النّظام EFI في أيّ مكان. فضلًا ارجع واستخدم التّقسيم اليدويّ لإعداد %1. - + The EFI system partition at %1 will be used for starting %2. قسم النّظام EFI على %1 سيُستخدم لبدء %2. - + EFI system partition: قسم نظام EFI: - + This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. لا يبدو أن في جهاز التّخزين أيّ نظام تشغيل. ما الذي تودّ فعله؟<br/>يمكنك مراجعة الاختيارات وتأكيدها قبل تطبيقها على جهاز التّخزين. - - - - + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>مسح القرص</strong><br/>هذا س<font color="red">يمسح</font> كلّ البيانات الموجودة في جهاز التّخزين المحدّد. - - - - + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>ثبّت جنبًا إلى جنب</strong><br/>سيقلّص المثبّت قسمًا لتفريغ مساحة لِ‍ %1. - - - - + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>استبدل قسمًا</strong><br/>يستبدل قسمًا مع %1 . - + This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. على جهاز التّخزين %1. ما الذي تودّ فعله؟<br/>يمكنك مراجعة الاختيارات وتأكيدها قبل تطبيقها على جهاز التّخزين. - + This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. على جهاز التّخزين هذا نظام تشغيل ذأصلًا. ما الذي تودّ فعله؟<br/>يمكنك مراجعة الاختيارات وتأكيدها قبل تطبيقها على جهاز التّخزين. - + This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. على جهاز التّخزين هذا عدّة أنظمة تشغيل. ما الذي تودّ فعله؟<br/>يمكنك مراجعة الاختيارات وتأكيدها قبل تطبيقها على جهاز التّخزين. - + No Swap - + Reuse Swap - + Swap (no Hibernate) - + Swap (with Hibernate) - + Swap to file @@ -722,17 +722,17 @@ The installer will quit and all changes will be lost. اضبط تخطيط لوحة المفاتيح إلى %1/%2. - + Set timezone to %1/%2. - + The system language will be set to %1. - + The numbers and dates locale will be set to %1. @@ -802,42 +802,42 @@ The installer will quit and all changes will be lost. - + Your username is too long. اسم المستخدم طويل جدًّا. - + '%1' is not allowed as username. - + Your username must start with a lowercase letter or underscore. - + Only lowercase letters, numbers, underscore and hyphen are allowed. - + Your hostname is too short. اسم المضيف قصير جدًّا. - + Your hostname is too long. اسم المضيف طويل جدًّا. - + '%1' is not allowed as hostname. - + Only letters, numbers, underscore and hyphen are allowed. @@ -1258,7 +1258,8 @@ The installer will quit and all changes will be lost. أكّد عبارة المرور - + + Please enter the same passphrase in both boxes. @@ -1710,18 +1711,18 @@ The installer will quit and all changes will be lost. LocalePage - + Region: المنطقة: - + Zone: المجال: - - + + &Change... &غيّر... @@ -1799,7 +1800,12 @@ The installer will quit and all changes will be lost. Map - + + Timezone: %1 + + + + Please select your preferred location on the map so the installer can suggest the locale and timezone settings for you. You can fine-tune the suggested settings below. Search the map by dragging to move and using the +/- buttons to zoom in/out or use mouse scrolling for zooming. @@ -1960,247 +1966,247 @@ The installer will quit and all changes will be lost. PWQ - + Password is too short - + Password is too long - + Password is too weak - + Memory allocation error when setting '%1' - + Memory allocation error - + The password is the same as the old one - + The password is a palindrome - + The password differs with case changes only - + The password is too similar to the old one - + The password contains the user name in some form - + The password contains words from the real name of the user in some form - + The password contains forbidden words in some form - + The password contains less than %1 digits - + The password contains too few digits - + The password contains less than %1 uppercase letters - + The password contains too few uppercase letters - + The password contains less than %1 lowercase letters - + The password contains too few lowercase letters - + The password contains less than %1 non-alphanumeric characters - + The password contains too few non-alphanumeric characters - + The password is shorter than %1 characters - + The password is too short - + The password is just rotated old one - + The password contains less than %1 character classes - + The password does not contain enough character classes - + The password contains more than %1 same characters consecutively - + The password contains too many same characters consecutively - + The password contains more than %1 characters of the same class consecutively - + The password contains too many characters of the same class consecutively - + The password contains monotonic sequence longer than %1 characters - + The password contains too long of a monotonic character sequence - + No password supplied - + Cannot obtain random numbers from the RNG device - + Password generation failed - required entropy too low for settings - + The password fails the dictionary check - %1 - + The password fails the dictionary check - + Unknown setting - %1 - + Unknown setting - + Bad integer value of setting - %1 - + Bad integer value - + Setting %1 is not of integer type - + Setting is not of integer type - + Setting %1 is not of string type - + Setting is not of string type - + Opening the configuration file failed - + The configuration file is malformed - + Fatal failure - + Unknown error - + Password is empty @@ -2534,67 +2540,67 @@ The installer will quit and all changes will be lost. PartitionViewStep - + Gathering system information... جاري جمع معلومات عن النظام... - + Partitions الأقسام - + Install %1 <strong>alongside</strong> another operating system. ثبّت %1 <strong>جنبًا إلى جنب</strong> مع نظام تشغيل آخر. - + <strong>Erase</strong> disk and install %1. <strong>امسح</strong> القرص وثبّت %1. - + <strong>Replace</strong> a partition with %1. <strong>استبدل</strong> قسمًا ب‍ %1. - + <strong>Manual</strong> partitioning. تقسيم <strong>يدويّ</strong>. - + Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). - + <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. <strong>امسح</strong> القرص <strong>%2</strong> (%3) وثبّت %1. - + <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. <strong>استبدل</strong> قسمًا على القرص <strong>%2</strong> (%3) ب‍ %1. - + <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). - + Disk <strong>%1</strong> (%2) - + Current: الحاليّ: - + After: بعد: @@ -2639,12 +2645,12 @@ The installer will quit and all changes will be lost. - + has at least one disk device available. - + There are no partitions to install on. @@ -3546,17 +3552,17 @@ Output: UsersPage - + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> - + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> - + Your passwords do not match! لا يوجد تطابق في كلمات السر! @@ -3564,7 +3570,7 @@ Output: UsersViewStep - + Users المستخدمين @@ -3842,7 +3848,7 @@ Output: localeq - + Change diff --git a/lang/calamares_as.ts b/lang/calamares_as.ts index 9f1da1ad3d..ad9c8a89a1 100644 --- a/lang/calamares_as.ts +++ b/lang/calamares_as.ts @@ -510,134 +510,134 @@ The installer will quit and all changes will be lost. ৰূপ - + Select storage de&vice: স্তোৰেজ ডিভাইচ চয়ণ কৰক (&v): - - - - + + + + Current: বর্তমান: - + After: পিছত: - + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. <strong>মেনুৱেল বিভাজন</strong><br/>আপুনি নিজে বিভাজন বনাব বা বিভজনৰ আয়তন সলনি কৰিব পাৰে। - + Reuse %1 as home partition for %2. %1ক %2ৰ গৃহ বিভাজন হিচাপে পুনৰ ব্যৱহাৰ কৰক। - + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> <strong>আয়তন সলনি কৰিবলৈ বিভাজন বাচনি কৰক, তাৰ পিছত তলৰ "বাৰ্" ডালৰ সহায়ত আয়তন চেত্ কৰক</strong> - + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. %1 বিভজনক সৰু কৰি %2MiB কৰা হ'ব আৰু %4ৰ বাবে %3MiBৰ নতুন বিভজন বনোৱা হ'ব। - + Boot loader location: বুত্ লোডাৰৰ অৱস্থান: - + <strong>Select a partition to install on</strong> <strong>ইনস্তল​ কৰিবলৈ এখন বিভাজন চয়ন কৰক</strong> - + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. এই চিছটেমত এখনো EFI চিছটেম বিভাজন কতো পোৱা নগ'ল। অনুগ্ৰহ কৰি উভতি যাওক আৰু মেনুৱেল বিভাজন প্ৰক্ৰিয়া দ্বাৰা %1 চেত্ আপ কৰক। - + The EFI system partition at %1 will be used for starting %2. %1ত থকা EFI চিছটেম বিভাজনটো %2ক আৰম্ভ কৰাৰ বাবে ব্যৱহাৰ কৰা হ'ব। - + EFI system partition: EFI চিছটেম বিভাজন: - + This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. এইটো ষ্টোৰেজ ডিভাইচত কোনো অপাৰেটিং চিছটেম নাই যেন লাগে। আপুনি কি কৰিব বিচাৰে?<br/>আপুনি ষ্টোৰেজ ডিভাইচটোত কিবা সলনি কৰাৰ আগতে পুনৰীক্ষণ আৰু চয়ন নিশ্চিত কৰিব পাৰিব। - - - - + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>ডিস্কত থকা গোটেই ডাটা আতৰাওক।</strong><br/> ইয়াৰ দ্ৱাৰা ষ্টোৰেজ ডিভাইছত বৰ্তমান থকা সকলো ডাটা <font color="red">বিলোপ</font> কৰা হ'ব। - - - - + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>সমান্তৰালভাৱে ইনস্তল কৰক</strong><br/> ইনস্তলাৰটোৱে %1ক ইনস্তল​ কৰাৰ বাবে এখন বিভাজন সৰু কৰি দিব। - - - - + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>বিভাজন সলনি কৰক</strong> <br/>এখন বিভাজনক % ৰ্ সৈতে সলনি কৰক। - + This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. এইটো ষ্টোৰেজ ডিভাইচত %1 আছে। <br/> আপুনি কি কৰিব বিচাৰে? ষ্টোৰেজ ডিভাইচটোত যিকোনো সলনি কৰাৰ আগত আপুনি পুনৰীক্ষণ আৰু সলনি কৰিব পাৰিব। - + This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. এইটো ষ্টোৰেজ ডিভাইচত ইতিমধ্যে এটা অপাৰেটিং চিছটেম আছে। আপুনি কি কৰিব বিচাৰে? <br/>ষ্টোৰেজ ডিভাইচটোত যিকোনো সলনি কৰাৰ আগত আপুনি পুনৰীক্ষণ আৰু সলনি কৰিব পাৰিব। - + This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. এইটো ষ্টোৰেজ ডিভাইচত একাধিক এটা অপাৰেটিং চিছটেম আছে। আপুনি কি কৰিব বিচাৰে? 1ষ্টোৰেজ ডিভাইচটোত যিকোনো সলনি কৰাৰ আগত আপুনি পুনৰীক্ষণ আৰু সলনি কৰিব পাৰিব। - + No Swap কোনো স্ৱেপ নাই - + Reuse Swap স্ৱেপ পুনৰ ব্যৱহাৰ কৰক - + Swap (no Hibernate) স্ৱেপ (হাইবাৰনেট নোহোৱাকৈ) - + Swap (with Hibernate) স্ৱোআপ (হাইবাৰনেটৰ সৈতে) - + Swap to file ফাইললৈ স্ৱোআপ কৰক। @@ -715,17 +715,17 @@ The installer will quit and all changes will be lost. কিবোৰ্ডৰ লেআউট %1/%2 চেট্ কৰক। - + Set timezone to %1/%2. সময় অঞ্চলৰ সিদ্ধান্ত কৰক %`1%2 - + The system language will be set to %1. চিছটেমৰ ভাষা %1লৈ সলনি কৰা হ'ব। - + The numbers and dates locale will be set to %1. সংখ্যা আৰু তাৰিখ স্থানীয় %1লৈ সলনি কৰা হ'ব। @@ -795,42 +795,42 @@ The installer will quit and all changes will be lost. <h1>%1 ইনস্তলাৰলৈ আদৰণি জনাইছো।</h1> - + Your username is too long. আপোনাৰ ইউজাৰ নাম বহুত দীঘল। - + '%1' is not allowed as username. '%1'ক ব্যৱহাৰকাৰীৰ নাম হিচাপে ব্যৱহাৰ কৰা অবধ্য | - + Your username must start with a lowercase letter or underscore. আপোনাৰ ব্যৱহাৰকাৰী নাম lowercase বৰ্ণ বা underscoreৰে আৰম্ভ হ'ব লাগিব। - + Only lowercase letters, numbers, underscore and hyphen are allowed. কেৱল lowercase বৰ্ণ, সংখ্যা, underscore আৰু hyphenৰ হে মাত্ৰ অনুমতি আছে। - + Your hostname is too short. আপোনাৰ হ'স্ট্ নাম বহুত ছুটি। - + Your hostname is too long. আপোনাৰ হ'স্ট্ নাম বহুত দীঘল। - + '%1' is not allowed as hostname. '%1'ক আয়োজকৰ নাম হিচাপে ব্যৱহাৰ কৰা অবধ্য | - + Only letters, numbers, underscore and hyphen are allowed. কেৱল বৰ্ণ, সংখ্যা, underscore আৰু hyphenৰ হে মাত্ৰ অনুমতি আছে। @@ -1251,7 +1251,8 @@ The installer will quit and all changes will be lost. পাছফ্ৰেছ নিশ্ৱিত কৰক - + + Please enter the same passphrase in both boxes. অনুগ্ৰহ কৰি দুয়োটা বাকচত একে পাছফ্ৰেছ প্রবিষ্ট কৰক। @@ -1703,18 +1704,18 @@ The installer will quit and all changes will be lost. LocalePage - + Region: ক্ষেত্ৰ: - + Zone: মন্ডল: - - + + &Change... সলনি... (&C) @@ -1792,7 +1793,12 @@ The installer will quit and all changes will be lost. Map - + + Timezone: %1 + সময় অঞ্চল: %1 + + + Please select your preferred location on the map so the installer can suggest the locale and timezone settings for you. You can fine-tune the suggested settings below. Search the map by dragging to move and using the +/- buttons to zoom in/out or use mouse scrolling for zooming. @@ -1955,247 +1961,247 @@ The installer will quit and all changes will be lost. PWQ - + Password is too short পাছৱৰ্ড বহুত ছুটি - + Password is too long পাছৱৰ্ড বহুত দীঘল - + Password is too weak পাছৱৰ্ড বহুত দুৰ্বল - + Memory allocation error when setting '%1' '%1' চেটিংস কৰোতে মেম'ৰী আৱন্টন ক্ৰুটি - + Memory allocation error মেম'ৰী আৱন্টন ক্ৰুটি - + The password is the same as the old one পাছৱৰ্ডটো পুৰণি পাছৱৰ্ডৰ লগত একে - + The password is a palindrome পাছৱৰ্ডটো পেলিন্ড্ৰোম - + The password differs with case changes only পাছৱৰ্ডকেইটাৰ মাজত কেৱল lower/upper caseৰ পাৰ্থক্য আছে - + The password is too similar to the old one পাছৱৰ্ডটো পুৰণি পাছৱৰ্ডৰ লগত যথেষ্ট একে - + The password contains the user name in some form পাছৱৰ্ডটোত কিবা প্ৰকাৰে ব্যৱহাৰকাৰীৰ নাম আছে - + The password contains words from the real name of the user in some form পাছৱৰ্ডটোত কিবা প্ৰকাৰে ব্যৱহাৰকাৰীৰ আচল নামৰ কিবা শব্দ আছে - + The password contains forbidden words in some form পাছৱৰ্ডটোত কিবা প্ৰকাৰে নিষিদ্ধ শব্দ আছে - + The password contains less than %1 digits পাছৱৰ্ডটোত %1টাতকৈ কম সংখ্যা আছে - + The password contains too few digits পাছৱৰ্ডটোত বহুত কম সংখ্যাক সংখ্যা আছে - + The password contains less than %1 uppercase letters পাছৱৰ্ডটোত %1টাতকৈ কম uppercaseৰ বৰ্ণ আছে - + The password contains too few uppercase letters পাছৱৰ্ডটোত বহুত কম সংখ্যাক কম uppercaseৰ বৰ্ণ আছে - + The password contains less than %1 lowercase letters পাছৱৰ্ডটোত %1টাতকৈ কম lowercaseৰ বৰ্ণ আছে - + The password contains too few lowercase letters পাছৱৰ্ডটোত বহুত কম সংখ্যাক কম lowercaseৰ বৰ্ণ আছে - + The password contains less than %1 non-alphanumeric characters পাছৱৰ্ডটোত %1টাতকৈ কম non-alphanumeric বৰ্ণ আছে - + The password contains too few non-alphanumeric characters পাছৱৰ্ডটোত বহুত কম সংখ্যাক কম non-alphanumeric বৰ্ণ আছে - + The password is shorter than %1 characters পাছৱৰ্ডটোত %1টা বৰ্ণতকৈ ছুটি - + The password is too short পাছৱৰ্ডটো বহুত ছুটি - + The password is just rotated old one পাছৱৰ্ডটো পুৰণি পাছৱৰ্ডৰ লগত সংশ্লিষ্ট - + The password contains less than %1 character classes পাছৱৰ্ডটোত %1টাতকৈ কম বৰ্ণ শ্ৰেণী আছে - + The password does not contain enough character classes পাছৱৰ্ডটোত থকা বৰ্ণ শ্ৰেণী যথেষ্ট নহয় - + The password contains more than %1 same characters consecutively পাছৱৰ্ডটোত %1বাৰতকৈ বেছি একে বৰ্ণ উপর্যুপৰি আছে - + The password contains too many same characters consecutively পাছৱৰ্ডটোত একে বৰ্ণ উপর্যুপৰি বহুতবাৰ আছে - + The password contains more than %1 characters of the same class consecutively পাছৱৰ্ডটোত %1বাৰতকৈ একে বৰ্ণ শ্ৰেণীৰ বৰ্ণ উপর্যুপৰি বহুতবাৰ আছে - + The password contains too many characters of the same class consecutively পাছৱৰ্ডটোত একে বৰ্ণ শ্ৰেণীৰ বৰ্ণ উপর্যুপৰি বহুতো আছে - + The password contains monotonic sequence longer than %1 characters পাছৱৰ্ডটোত %1তকৈ বেছি ম'ন'টনিক চিকুৱেন্স্ আছে - + The password contains too long of a monotonic character sequence পাছৱৰ্ডটোত বহুত দীঘল ম'ন'টনিক চিকুৱেন্স্ বৰ্ণ আছে - + No password supplied কোনো পাছৱৰ্ড্ দিয়া নাই - + Cannot obtain random numbers from the RNG device RNG ডেভাইচৰ পৰা কোনো ৰেণ্ডম সংখ্যা পোৱা নগ'ল - + Password generation failed - required entropy too low for settings পাছৱৰ্ড্ বনোৱা কাৰ্য্য বিফল হ'ল - চেটিংসৰ বাবে আৱশ্যক এন্ট্ৰ'পী বহুত কম আছে - + The password fails the dictionary check - %1 পাছৱৰ্ডটো অভিধানৰ পৰীক্ষণত বিফল হ'ল - %1 - + The password fails the dictionary check পাছৱৰ্ডটো অভিধানৰ পৰীক্ষণত বিফল হ'ল - + Unknown setting - %1 অজ্ঞাত ছেটিংস - %1 - + Unknown setting অজ্ঞাত ছেটিংস - + Bad integer value of setting - %1 ছেটিংসৰ বেয়া পুৰ্ণ সংখ্যা মান - %1 - + Bad integer value বেয়া পুৰ্ণ সংখ্যা মান - + Setting %1 is not of integer type চেটিংস্ %1 পূৰ্ণাংক নহয় - + Setting is not of integer type চেটিংস্ পূৰ্ণাংক নহয় - + Setting %1 is not of string type চেটিংস্ %1 স্ট্ৰিং নহয় - + Setting is not of string type চেটিংস্ স্ট্ৰিং নহয় - + Opening the configuration file failed কনফিগাৰেচন ফাইল খোলাত বিফল হ'ল - + The configuration file is malformed কনফিগাৰেচন ফাইলটো বেয়া - + Fatal failure গভীৰ বিফলতা - + Unknown error অজ্ঞাত ক্ৰুটি - + Password is empty খালী পাছৱৰ্ড @@ -2529,67 +2535,67 @@ The installer will quit and all changes will be lost. PartitionViewStep - + Gathering system information... চিছটেম তথ্য সংগ্ৰহ কৰা হৈ আছে। - + Partitions বিভাজনসমুহ - + Install %1 <strong>alongside</strong> another operating system. %1ক বেলেগ এটা অপাৰেটিং চিছটেমৰ <strong>লগত </strong>ইনস্তল কৰক। - + <strong>Erase</strong> disk and install %1. ডিস্কত থকা সকলো ডাটা <strong>আতৰাওক</strong> আৰু %1 ইনস্তল কৰক। - + <strong>Replace</strong> a partition with %1. এখন বিভাজন %1ৰ লগত <strong>সলনি</strong> কৰক। - + <strong>Manual</strong> partitioning. <strong>মেনুৱেল</strong> বিভাজন। - + Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). %1ক <strong>%2</strong>(%3)ত ডিস্কত থকা বেলেগ অপাৰেটিং চিছটেমৰ <strong>লগত</strong> ইনস্তল কৰক। - + <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. <strong>%2</strong> (%3)ডিস্কত থকা সকলো ডাটা <strong>আতৰাওক</strong> আৰু %1 ইনস্তল কৰক। - + <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. <strong>%2</strong> (%3) ডিস্কত এখন বিভাজন %1ৰ লগত <strong>সলনি</strong> কৰক। - + <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). <strong>%1</strong> (%2) ডিস্কত <strong>মেনুৱেল</strong> বিভাজন। - + Disk <strong>%1</strong> (%2) ডিস্ক্ <strong>%1</strong> (%2) - + Current: বর্তমান: - + After: পিছত: @@ -2634,12 +2640,12 @@ The installer will quit and all changes will be lost. এনক্ৰিপ্তেড ৰুট বিভাজনৰ সৈতে এটা বেলেগ বুট বিভাজন চেত্ আপ কৰা হৈছিল, কিন্তু বুট বিভাজন এনক্ৰিপ্তেড কৰা হোৱা নাই। <br/><br/>এইধৰণৰ চেত্ আপ সুৰক্ষিত নহয় কাৰণ গুৰুত্ব্পুৰ্ণ চিছটেম ফাইল আন্এনক্ৰিপ্তেড বিভাজনত ৰখা হয়। <br/>আপুনি বিচাৰিলে চলাই থাকিব পাৰে কিন্তু পিছ্ত চিছটেম আৰম্ভৰ সময়ত ফাইল চিছটেম খোলা যাব। <br/>বুট বিভাজন এনক্ৰিপ্ত্ কৰিবলৈ উভতি যাওক আৰু বিভাজন বনোৱা windowত <strong>Encrypt</strong> বাচনি কৰি আকৌ বনাওক। - + has at least one disk device available. অতি কমেও এখন ডিস্ক্ উপলব্ধ আছে। - + There are no partitions to install on. ইনস্তল কৰিবলৈ কোনো বিভাজন নাই। @@ -3545,17 +3551,17 @@ Output: UsersPage - + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>যদি এটাতকৈ বেছি ব্যক্তিয়ে এইটো কম্পিউটাৰ ব্যৱহাৰ কৰে, আপুনি চেত্ আপৰ পিছত বহুতো একাউন্ট বনাব পাৰে।</small> - + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> <small>যদি এটাতকৈ বেছি ব্যক্তিয়ে এইটো কম্পিউটাৰ ব্যৱহাৰ কৰে, আপুনি ইনস্তলচেন​ৰ পিছত বহুতো একাউন্ট বনাব পাৰে।</small> - + Your passwords do not match! আপোনাৰ পাছৱৰ্ডকেইটাৰ মিল নাই! @@ -3563,7 +3569,7 @@ Output: UsersViewStep - + Users ব্যৱহাৰকাৰীসকল @@ -3854,7 +3860,7 @@ Output: localeq - + Change সলনি diff --git a/lang/calamares_ast.ts b/lang/calamares_ast.ts index f10b353e9e..2afefa69ff 100644 --- a/lang/calamares_ast.ts +++ b/lang/calamares_ast.ts @@ -509,134 +509,134 @@ L'instalador va colar y van perdese tolos cambeos. Formulariu - + Select storage de&vice: Esbilla un preséu d'al&macenamientu: - - - - + + + + Current: Anguaño: - + After: Dempués: - + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. <strong>Particionáu manual</strong><br/>Vas poder crear o redimensionar particiones. - + Reuse %1 as home partition for %2. Reusu de %s como partición d'aniciu pa %2. - + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> <strong>Esbilla una partición a redimensionar, dempués arrastra la barra baxera pa facelo</strong> - + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. %1 va redimensionase a %2MB y va crease una partición de %3MB pa %4. - + Boot loader location: Allugamientu del xestor d'arrinque: - + <strong>Select a partition to install on</strong> <strong>Esbilla una partición na qu'instalar</strong> - + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. Nun pudo alcontrase per nenyures una partición del sistema EFI. Volvi p'atrás y usa'l particionáu manual pa configurar %1, por favor. - + The EFI system partition at %1 will be used for starting %2. La partición del sistema EFI en %1 va usase p'aniciar %2. - + EFI system partition: Partición del sistema EFI: - + This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Esti preséu d'almacenamientu nun paez que tenga un sistema operativu nelli. ¿Qué te prestaría facer?<br/>Vas ser a revisar y confirmar lo qu'escueyas enantes de que se faiga cualesquier cambéu nel preséu d'almacenamientu. - - - - + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>Desaniciu d'un discu</strong><br/>Esto va <font color="red">desaniciar</font> tolos datos presentes nel preséu d'almacenamientu esbilláu. - - - - + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Instalación anexa</strong><br/>L'instalador va redimensionar una partición pa dexar sitiu a %1. - - - - + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>Troquéu d'una partición</strong><br/>Troca una parción con %1. - + This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Esti preséu d'almacenamientu tien %1 nelli. ¿Qué te prestaría facer?<br/>Vas ser a revisar y confirmar lo qu'escueyas enantes de que se faiga cualesquier cambéu nel preséu d'almacenamientu. - + This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Esti preséu d'almacenamientu yá tien un sistema operativu nelli. ¿Qué te prestaría facer?<br/>Vas ser a revisar y confirmar lo qu'escueyas enantes de que se faiga cualesquier cambéu nel preséu d'almacenamientu. - + This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Esti preséu d'almacenamientu tien varios sistemes operativos nelli. ¿Qué te prestaría facer?<br/>Vas ser a revisar y confirmar lo qu'escueyas enantes de que se faiga cualesquier cambéu nel preséu d'almacenamientu. - + No Swap Ensin intercambéu - + Reuse Swap Reusar un intercambéu - + Swap (no Hibernate) Intercambéu (ensin ivernación) - + Swap (with Hibernate) Intercambéu (con ivernación) - + Swap to file Intercambéu nun ficheru @@ -714,17 +714,17 @@ L'instalador va colar y van perdese tolos cambeos. Va afitase la distrubución del tecláu a %1/%2. - + Set timezone to %1/%2. - + The system language will be set to %1. La llingua del sistema va afitase a %1. - + The numbers and dates locale will be set to %1. La númberación y data van afitase en %1. @@ -794,42 +794,42 @@ L'instalador va colar y van perdese tolos cambeos. <h1>Afáyate nel instalador de %1</h1> - + Your username is too long. El nome d'usuariu ye perllargu. - + '%1' is not allowed as username. - + Your username must start with a lowercase letter or underscore. - + Only lowercase letters, numbers, underscore and hyphen are allowed. - + Your hostname is too short. El nome d'agospiu ye percurtiu. - + Your hostname is too long. El nome d'agospiu ye perllargu. - + '%1' is not allowed as hostname. - + Only letters, numbers, underscore and hyphen are allowed. @@ -1250,7 +1250,8 @@ L'instalador va colar y van perdese tolos cambeos. Confirmación de la fras de pasu - + + Please enter the same passphrase in both boxes. Introduz la mesma fras de pasu en dambes caxes, por favor. @@ -1702,18 +1703,18 @@ L'instalador va colar y van perdese tolos cambeos. LocalePage - + Region: Rexón: - + Zone: Zona: - - + + &Change... &Camudar... @@ -1791,7 +1792,12 @@ L'instalador va colar y van perdese tolos cambeos. Map - + + Timezone: %1 + + + + Please select your preferred location on the map so the installer can suggest the locale and timezone settings for you. You can fine-tune the suggested settings below. Search the map by dragging to move and using the +/- buttons to zoom in/out or use mouse scrolling for zooming. @@ -1952,247 +1958,247 @@ L'instalador va colar y van perdese tolos cambeos. PWQ - + Password is too short La contraseña ye percurtia - + Password is too long La contraseña ye perllarga - + Password is too weak La contraseña ye perfeble - + Memory allocation error when setting '%1' Fallu d'asignación de memoria al afitar «%1» - + Memory allocation error Fallu d'asignación de memoria - + The password is the same as the old one La contraseña ye la mesma que la vieya - + The password is a palindrome La contraseña ye un palíndromu - + The password differs with case changes only La contraseña namás s'estrema polos cambeos de mayúscules y minúscules - + The password is too similar to the old one La contraseña aseméyase muncho a la vieya - + The password contains the user name in some form La contraseña contién de dalgún mou'l nome d'usuariu - + The password contains words from the real name of the user in some form La contraseña contién de dalgún mou pallabres del nome real del usuariu - + The password contains forbidden words in some form La contraseña contién de dalgún mou pallabres prohibíes - + The password contains less than %1 digits La contraseña contién menos de %1 díxitos - + The password contains too few digits La contraseña contién prepocos díxitos - + The password contains less than %1 uppercase letters La contraseña contién menos de %1 lletres mayúscules - + The password contains too few uppercase letters La contraseña contién perpoques lletres mayúscules - + The password contains less than %1 lowercase letters La contraseña contién menos de %1 lletres minúscules - + The password contains too few lowercase letters La contraseña contién perpoques lletres minúscules - + The password contains less than %1 non-alphanumeric characters La contraseña contién menos de %1 caráuteres que nun son alfanumbéricos - + The password contains too few non-alphanumeric characters La contraseña contién perpocos caráuteres que nun son alfanumbéricos - + The password is shorter than %1 characters La contraseña tien menos de %1 caráuteres - + The password is too short La contraseña ye percurtia - + The password is just rotated old one La contraseña ye l'anterior pero al aviesu - + The password contains less than %1 character classes La contraseña contién menos de %1 clases de caráuteres - + The password does not contain enough character classes La contraseña nun contién abondes clases de caráuteres - + The password contains more than %1 same characters consecutively La contraseña contién más de %1 caráuteres iguales consecutivamente - + The password contains too many same characters consecutively La contraseña contién milenta caráuteres iguales consecutivamente - + The password contains more than %1 characters of the same class consecutively La contraseña contién más de %1 caráuteres de la mesma clas consecutivamente - + The password contains too many characters of the same class consecutively La contraseña contién milenta caráuteres de la mesma clas consecutivamente - + The password contains monotonic sequence longer than %1 characters La contraseña tien una secuencia monotónica de más de %1 caráuteres - + The password contains too long of a monotonic character sequence La contraseña contién una secuencia perllarga de caráuteres monotónicos - + No password supplied Nun s'apurrió nenguna contraseña - + Cannot obtain random numbers from the RNG device Nun puen consiguise los númberos al debalu del preséu RNG - + Password generation failed - required entropy too low for settings Falló la xeneración de la contraseña - ríquese una entropía perbaxa pa los axustes - + The password fails the dictionary check - %1 La contraseña falla la comprobación del diccionariu - %1 - + The password fails the dictionary check La contraseña falla la comprobación del diccionariu - + Unknown setting - %1 Desconozse l'axuste - %1 - + Unknown setting Desconozse l'axuste - + Bad integer value of setting - %1 El valor enteru del axuste ye incorreutu - %1 - + Bad integer value El valor enteru ye incorreutu - + Setting %1 is not of integer type L'axuste %1 nun ye de la triba enteru - + Setting is not of integer type L'axuste nun ye de la triba enteru - + Setting %1 is not of string type L'axuste %1 nun ye de la triba cadena - + Setting is not of string type L'axuste nun ye de la triba cadena - + Opening the configuration file failed Falló l'apertura del ficheru de configuración - + The configuration file is malformed El ficheru de configuración ta malformáu - + Fatal failure Fallu fatal - + Unknown error Desconozse'l fallu - + Password is empty La contraseña ta balera @@ -2526,67 +2532,67 @@ L'instalador va colar y van perdese tolos cambeos. PartitionViewStep - + Gathering system information... Recoyendo la información del sistema... - + Partitions Particiones - + Install %1 <strong>alongside</strong> another operating system. Va instalase %1 <strong>xunto a</strong> otru sistema operativu. - + <strong>Erase</strong> disk and install %1. <strong>Va desaniciase</strong>'l discu y va instalase %1. - + <strong>Replace</strong> a partition with %1. <strong>Va trocase</strong> una partición con %1. - + <strong>Manual</strong> partitioning. Particionáu <strong>manual</strong>. - + Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). Va instalase %1 <strong>xunto a</strong> otru sistema operativu nel discu <strong>%2</strong> (%3). - + <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. <strong>Va desaniciase</strong>'l discu <strong>%2</strong> (%3) y va instalase %1. - + <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. <strong>Va trocase</strong> una partición nel discu <strong>%2</strong> (%3) con %1. - + <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). Particionáu <strong>manual</strong> nel discu <strong>%1</strong> (%2). - + Disk <strong>%1</strong> (%2) Discu <strong>%1</strong> (%2) - + Current: Anguaño: - + After: Dempués: @@ -2631,12 +2637,12 @@ L'instalador va colar y van perdese tolos cambeos. Configuróse una partición d'arrinque xunto con una partición raigañu cifrada pero la partición d'arrinque nun ta cifrada.<br/><br/>Hai problemes de seguranza con esta triba de configuración porque los ficheros importantes del sistema caltiénense nuna partición ensin cifrar.<br/>Podríes siguir si quixeres pero'l desbloquéu del sistema de ficheros va asoceder más sero nel aniciu del sistema.<br/>Pa cifrar la partición raigañu, volvi p'atrás y recreala esbillando <strong>Cifrar</strong> na ventana de creación de particiones. - + has at least one disk device available. tien polo menos un preséu disponible d'almacenamientu - + There are no partitions to install on. Nun hai particiones nes qu'instalar. @@ -3544,17 +3550,17 @@ Salida: UsersPage - + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>Si va usar l'ordenador más d'una persona, pues crear más cuentes tres la configuración.</small> - + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> <small>Si va usar l'ordenador más d'una persona, pues crear más cuentes tres la instalación.</small> - + Your passwords do not match! ¡Les contraseñes nun concasen! @@ -3562,7 +3568,7 @@ Salida: UsersViewStep - + Users Usuarios @@ -3840,7 +3846,7 @@ Salida: localeq - + Change diff --git a/lang/calamares_az.ts b/lang/calamares_az.ts index c762de2df2..599441a96f 100644 --- a/lang/calamares_az.ts +++ b/lang/calamares_az.ts @@ -510,134 +510,134 @@ Bu proqramdan çıxılacaq və bütün dəyişikliklər itiriləcəkdir.Format - + Select storage de&vice: Yaddaş ci&hazını seçmək: - - - - + + + + Current: Cari: - + After: Sonra: - + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. <strong>Əl ilə bölmək</strong><br/>Siz bölməni özünüz yarada və ölçüsünü dəyişə bilərsiniz. - + Reuse %1 as home partition for %2. %1 Ev bölməsi olaraq %2 üçün istifadə edilsin. - + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> <strong>Kiçiltmək üçün bir bölmə seçərək altdakı çübüğü sürüşdürərək ölçüsünü verin</strong> - + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. %1 %2MB-a qədər azalacaq və %4 üçün yeni bölmə %3MB disk bölməsi yaradılacaq. - + Boot loader location: Ön yükləyici (boot) yeri: - + <strong>Select a partition to install on</strong> <strong>Quraşdırılacaq disk bölməsini seçin</strong> - + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. EFI sistem bölməsi tapılmadı. Geriyə qayıdın və %1 bölməsini əllə yaradın. - + The EFI system partition at %1 will be used for starting %2. %1 EFI sistemi %2 başlatmaq üçün istifadə olunacaqdır. - + EFI system partition: EFI sistem bölməsi: - + This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Bu cihazıda əməliyyat sistemi görünmür. Nə etmək istəyərdiniz?<br/>Bu cihazda dəyişiklik etmədən öncə siz seçiminizi dəqiqləşdirə, dəyişə və təsdiq edə bilərsiniz. - - - - + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>Diski təmizləmək</strong><br/> <font color="red">Silmək</font>seçimi hal-hazırda, seçilmiş diskdəki bütün verilənləri siləcəkdir. - - - - + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Yanına quraşdırın</strong><br/>Quraşdırıcı, bölməni kiçildərək %1 üçün boş disk sahəsi yaradacaqdır. - - - - + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>Bölməni başqası ilə əvəzləmək</strong><br/>Bölməni %1 ilə əvəzləyir. - + This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Bu cihazda %1 var. Nə etmək istəyirsiniz?<br/>Bu cihazda dəyişiklik etmədən öncə siz seçiminizi dəqiqləşdirə, dəyişə və təsdiq edə bilərsiniz. - + This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Bu cihazda artıq bir əməliyyat sistemi var. Nə etmək istərdiniz?.<br/>Bu cihazda dəyişiklik etmədən öncə siz seçiminizi dəqiqləşdirə, dəyişə və təsdiq edə bilərsiniz. - + This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Bu cihazda bir neçə əməliyyat sistemi mövcuddur. Nə etmək istərdiniz? Bu cihazda dəyişiklik etmədən öncə siz seçiminizi dəqiqləşdirə, dəyişə və təsdiq edə bilərsiniz. - + No Swap Mübadilə bölməsi olmadan - + Reuse Swap Mövcud mübadilə bölməsini istifadə etmək - + Swap (no Hibernate) Mübadilə bölməsi (yuxu rejimi olmadan) - + Swap (with Hibernate) Mübadilə bölməsi (yuxu rejimi ilə) - + Swap to file Mübadilə faylı @@ -715,17 +715,17 @@ Bu proqramdan çıxılacaq və bütün dəyişikliklər itiriləcəkdir.Klaviatura qatını %1/%2 olaraq təyin etmək. - + Set timezone to %1/%2. Saat quraşağını təyin etmək %1/%2 - + The system language will be set to %1. Sistem dili %1 təyin ediləcək. - + The numbers and dates locale will be set to %1. Yerli say və tarix formatı %1 təyin olunacaq. @@ -795,42 +795,42 @@ Bu proqramdan çıxılacaq və bütün dəyişikliklər itiriləcəkdir.<h1>%1 quraşdırıcısına xoş gəldiniz</h1> - + Your username is too long. İstifadəçi adınız çox uzundur. - + '%1' is not allowed as username. İstifadəçi adı '%1' ola bilməz - + Your username must start with a lowercase letter or underscore. İstifadəçi adınız yalnız kiçik və ya alt cizgili hərflərdən ibarət olmalıdır. - + Only lowercase letters, numbers, underscore and hyphen are allowed. Yalnız kiçik hərflərdən, simvollardan, alt cizgidən və defisdən istifadə oluna bilər. - + Your hostname is too short. Host adınız çox qısadır. - + Your hostname is too long. Host adınız çox uzundur. - + '%1' is not allowed as hostname. Host_adı '%1' ola bilməz - + Only letters, numbers, underscore and hyphen are allowed. Yalnız kiçik hərflərdən, saylardan, alt cizgidən və defisdən istifadə oluna bilər. @@ -1251,7 +1251,8 @@ Bu proqramdan çıxılacaq və bütün dəyişikliklər itiriləcəkdir.Şifrəni təsdiq edin - + + Please enter the same passphrase in both boxes. Lütfən, hər iki sahəyə eyni şifrəni daxil edin. @@ -1703,18 +1704,18 @@ Bu proqramdan çıxılacaq və bütün dəyişikliklər itiriləcəkdir. LocalePage - + Region: Məkan: - + Zone: Saat qurşağı: - - + + &Change... &Dəyişmək... @@ -1792,7 +1793,12 @@ Bu proqramdan çıxılacaq və bütün dəyişikliklər itiriləcəkdir. Map - + + Timezone: %1 + Saat qurşağı: %1 + + + Please select your preferred location on the map so the installer can suggest the locale and timezone settings for you. You can fine-tune the suggested settings below. Search the map by dragging to move and using the +/- buttons to zoom in/out or use mouse scrolling for zooming. @@ -1955,247 +1961,247 @@ Bu proqramdan çıxılacaq və bütün dəyişikliklər itiriləcəkdir. PWQ - + Password is too short Şifrə çox qısadır - + Password is too long Şifrə çox uzundur - + Password is too weak Şifrə çox zəifdir - + Memory allocation error when setting '%1' '%1' ayarlanarkən yaddaş bölgüsü xətası - + Memory allocation error Yaddaş bölgüsü xətası - + The password is the same as the old one Şifrə köhnə şifrə ilə eynidir - + The password is a palindrome Şifrə tərsinə oxunuşu ilə eynidir - + The password differs with case changes only Şifrə yalnız hal dəyişiklikləri ilə fərqlənir - + The password is too similar to the old one Şifrə köhnə şifrə ilə çox oxşardır - + The password contains the user name in some form Şifrənin tərkibində istifadəçi adı var - + The password contains words from the real name of the user in some form Şifrə istifadəçinin əsl adına oxşar sözlərdən ibarətdir - + The password contains forbidden words in some form Şifrə qadağan edilmiş sözlərdən ibarətdir - + The password contains less than %1 digits Şifrə %1-dən az rəqəmdən ibarətdir - + The password contains too few digits Şifrə çox az rəqəmdən ibarətdir - + The password contains less than %1 uppercase letters Şifrə %1-dən az böyük hərfdən ibarətdir - + The password contains too few uppercase letters Şifrə çox az böyük hərflərdən ibarətdir - + The password contains less than %1 lowercase letters Şifrə %1-dən az kiçik hərflərdən ibarətdir - + The password contains too few lowercase letters Şifrə çox az kiçik hərflərdən ibarətdir - + The password contains less than %1 non-alphanumeric characters Şifrə %1-dən az alfasayısal olmayan simvollardan ibarətdir - + The password contains too few non-alphanumeric characters Şifrə çox az alfasayısal olmayan simvollardan ibarətdir - + The password is shorter than %1 characters Şifrə %1 simvoldan qısadır - + The password is too short Şifrə çox qısadır - + The password is just rotated old one Yeni şifrə sadəcə olaraq tərsinə çevirilmiş köhnəsidir - + The password contains less than %1 character classes Şifrə %1-dən az simvol sinifindən ibarətdir - + The password does not contain enough character classes Şifrənin tərkibində kifayət qədər simvol sinifi yoxdur - + The password contains more than %1 same characters consecutively Şifrə ardıcıl olaraq %1-dən çox eyni simvollardan ibarətdir - + The password contains too many same characters consecutively Şifrə ardıcıl olaraq çox oxşar simvollardan ibarətdir - + The password contains more than %1 characters of the same class consecutively Şifrə ardıcıl olaraq eyni sinifin %1-dən çox simvolundan ibarətdir - + The password contains too many characters of the same class consecutively Şifrə ardıcıl olaraq eyni sinifin çox simvolundan ibarətdir - + The password contains monotonic sequence longer than %1 characters Şifrə %1 simvoldan uzun olan monoton ardıcıllıqdan ibarətdir - + The password contains too long of a monotonic character sequence Şifrə çox uzun monoton simvollar ardıcıllığından ibarətdir - + No password supplied Şifrə verilməyib - + Cannot obtain random numbers from the RNG device RNG cihazından təsadüfi nömrələr əldə etmək olmur - + Password generation failed - required entropy too low for settings Şifrə yaratma uğursuz oldu - ayarlar üçün tələb olunan entropiya çox aşağıdır - + The password fails the dictionary check - %1 Şifrənin lüğət yoxlaması alınmadı - %1 - + The password fails the dictionary check Şifrənin lüğət yoxlaması alınmadı - + Unknown setting - %1 Naməlum ayarlar - %1 - + Unknown setting Naməlum ayarlar - + Bad integer value of setting - %1 Ayarın pozulmuş tam dəyəri - %1 - + Bad integer value Pozulmuş tam dəyər - + Setting %1 is not of integer type %1 -i ayarı tam say deyil - + Setting is not of integer type Ayar tam say deyil - + Setting %1 is not of string type %1 ayarı sətir deyil - + Setting is not of string type Ayar sətir deyil - + Opening the configuration file failed Tənzəmləmə faylının açılması uğursuz oldu - + The configuration file is malformed Tənzimləmə faylı qüsurludur - + Fatal failure Ciddi qəza - + Unknown error Naməlum xəta - + Password is empty Şifrə böşdur @@ -2530,67 +2536,67 @@ Lütfən bir birinci disk bölümünü çıxarın və əvəzinə genişləndiril PartitionViewStep - + Gathering system information... Sistem məlumatları toplanır ... - + Partitions Bölmələr - + Install %1 <strong>alongside</strong> another operating system. Digər əməliyyat sistemini %1 <strong>yanına</strong> quraşdırmaq. - + <strong>Erase</strong> disk and install %1. Diski <strong>çıxarmaq</strong> və %1 quraşdırmaq. - + <strong>Replace</strong> a partition with %1. Bölməni %1 ilə <strong>əvəzləmək</strong>. - + <strong>Manual</strong> partitioning. <strong>Əl ilə</strong> bölüşdürmə. - + Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). <strong>%2</strong> (%3) diskində başqa əməliyyat sistemini %1 <strong>yanında</strong> quraşdırmaq. - + <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. <strong>%2</strong> (%3) diskini <strong>çıxartmaq</strong> və %1 quraşdırmaq. - + <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. <strong>%2</strong> (%3) diskində bölməni %1 ilə <strong>əvəzləmək</strong>. - + <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). <strong>%1</strong> (%2) diskində <strong>əl ilə</strong> bölüşdürmə. - + Disk <strong>%1</strong> (%2) <strong>%1</strong> (%2) diski - + Current: Cari: - + After: Sonra: @@ -2635,12 +2641,12 @@ Lütfən bir birinci disk bölümünü çıxarın və əvəzinə genişləndiril Şifrəli bir kök bölməsi ilə birlikdə ayrı bir ön yükləyici bölməsi qurulub, ancaq ön yükləyici bölməsi şifrələnməyib.<br/><br/>Bu cür quraşdırma ilə bağlı təhlükəsizlik problemləri olur, çünki vacib sistem sənədləri şifrəsiz bölmədə saxlanılır.<br/>İstəyirsinizsə davam edə bilərsiniz, lakin, fayl sisteminin kilidi, sistem başladıldıqdan daha sonra açılacaqdır.<br/>Yükləmə hissəsini şifrələmək üçün geri qayıdın və bölmə yaratma pəncərəsində <strong>Şifrələmə</strong> menyusunu seçərək onu yenidən yaradın. - + has at least one disk device available. ən az bir disk qurğusu mövcuddur. - + There are no partitions to install on. Quraşdırmaq üçün bölmə yoxdur. @@ -3548,17 +3554,17 @@ Output: UsersPage - + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>Əgər bu kompyuteri sizdən başqa şəxs istifadə edəcəkdirsə o zaman ayarlandıqdan sonra bir neçə istifadəçi hesabı yarada bilərsiniz.</small> - + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> <small>Əgər bu kompyuteri sizdən başqa şəxs istifadə edəcəkdirsə o zaman quraşdırıldıqdan sonra bir neçə istifadəçi hesabı yarada bilərsiniz.</small> - + Your passwords do not match! Şifrənizin təkrarı eyni deyil! @@ -3566,7 +3572,7 @@ Output: UsersViewStep - + Users İstifadəçilər @@ -3857,7 +3863,7 @@ Output: localeq - + Change Dəyişdirmək diff --git a/lang/calamares_az_AZ.ts b/lang/calamares_az_AZ.ts index 0c10770225..e33e6ee66e 100644 --- a/lang/calamares_az_AZ.ts +++ b/lang/calamares_az_AZ.ts @@ -510,134 +510,134 @@ Bu proqramdan çıxılacaq və bütün dəyişikliklər itiriləcəkdir.Format - + Select storage de&vice: Yaddaş ci&hazını seçmək: - - - - + + + + Current: Cari: - + After: Sonra: - + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. <strong>Əl ilə bölmək</strong><br/>Siz bölməni özünüz yarada və ölçüsünü dəyişə bilərsiniz. - + Reuse %1 as home partition for %2. %1 Ev bölməsi olaraq %2 üçün istifadə edilsin. - + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> <strong>Kiçiltmək üçün bir bölmə seçərək altdakı çübüğü sürüşdürərək ölçüsünü verin</strong> - + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. %1 %2MB-a qədər azalacaq və %4 üçün yeni bölmə %3MB disk bölməsi yaradılacaq. - + Boot loader location: Ön yükləyici (boot) yeri: - + <strong>Select a partition to install on</strong> <strong>Quraşdırılacaq disk bölməsini seçin</strong> - + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. EFI sistem bölməsi tapılmadı. Geriyə qayıdın və %1 bölməsini əllə yaradın. - + The EFI system partition at %1 will be used for starting %2. %1 EFI sistemi %2 başlatmaq üçün istifadə olunacaqdır. - + EFI system partition: EFI sistem bölməsi: - + This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Bu cihazıda əməliyyat sistemi görünmür. Nə etmək istəyərdiniz?<br/>Bu cihazda dəyişiklik etmədən öncə siz seçiminizi dəqiqləşdirə, dəyişə və təsdiq edə bilərsiniz. - - - - + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>Diski təmizləmək</strong><br/> <font color="red">Silmək</font>seçimi hal-hazırda, seçilmiş diskdəki bütün verilənləri siləcəkdir. - - - - + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Yanına quraşdırın</strong><br/>Quraşdırıcı, bölməni kiçildərək %1 üçün boş disk sahəsi yaradacaqdır. - - - - + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>Bölməni başqası ilə əvəzləmək</strong><br/>Bölməni %1 ilə əvəzləyir. - + This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Bu cihazda %1 var. Nə etmək istəyirsiniz?<br/>Bu cihazda dəyişiklik etmədən öncə siz seçiminizi dəqiqləşdirə, dəyişə və təsdiq edə bilərsiniz. - + This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Bu cihazda artıq bir əməliyyat sistemi var. Nə etmək istərdiniz?.<br/>Bu cihazda dəyişiklik etmədən öncə siz seçiminizi dəqiqləşdirə, dəyişə və təsdiq edə bilərsiniz. - + This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Bu cihazda bir neçə əməliyyat sistemi mövcuddur. Nə etmək istərdiniz? Bu cihazda dəyişiklik etmədən öncə siz seçiminizi dəqiqləşdirə, dəyişə və təsdiq edə bilərsiniz. - + No Swap Mübadilə bölməsi olmadan - + Reuse Swap Mövcud mübadilə bölməsini istifadə etmək - + Swap (no Hibernate) Mübadilə bölməsi (yuxu rejimi olmadan) - + Swap (with Hibernate) Mübadilə bölməsi (yuxu rejimi ilə) - + Swap to file Mübadilə faylı @@ -715,17 +715,17 @@ Bu proqramdan çıxılacaq və bütün dəyişikliklər itiriləcəkdir.Klaviatura qatını %1/%2 olaraq təyin etmək. - + Set timezone to %1/%2. Saat quraşağını təyin etmək %1/%2 - + The system language will be set to %1. Sistem dili %1 təyin ediləcək. - + The numbers and dates locale will be set to %1. Yerli say və tarix formatı %1 təyin olunacaq. @@ -795,42 +795,42 @@ Bu proqramdan çıxılacaq və bütün dəyişikliklər itiriləcəkdir.<h1>%1 quraşdırıcısına xoş gəldiniz</h1> - + Your username is too long. İstifadəçi adınız çox uzundur. - + '%1' is not allowed as username. İstifadəçi adı '%1' ola bilməz - + Your username must start with a lowercase letter or underscore. İstifadəçi adınız yalnız kiçik və ya alt cizgili hərflərdən ibarət olmalıdır. - + Only lowercase letters, numbers, underscore and hyphen are allowed. Yalnız kiçik hərflərdən, simvollardan, alt cizgidən və defisdən istifadə oluna bilər. - + Your hostname is too short. Host adınız çox qısadır. - + Your hostname is too long. Host adınız çox uzundur. - + '%1' is not allowed as hostname. Host_adı '%1' ola bilməz - + Only letters, numbers, underscore and hyphen are allowed. Yalnız kiçik hərflərdən, saylardan, alt cizgidən və defisdən istifadə oluna bilər. @@ -1251,7 +1251,8 @@ Bu proqramdan çıxılacaq və bütün dəyişikliklər itiriləcəkdir.Şifrəni təsdiq edin - + + Please enter the same passphrase in both boxes. Lütfən, hər iki sahəyə eyni şifrəni daxil edin. @@ -1703,18 +1704,18 @@ Bu proqramdan çıxılacaq və bütün dəyişikliklər itiriləcəkdir. LocalePage - + Region: Məkan: - + Zone: Saat qurşağı: - - + + &Change... &Dəyişmək... @@ -1792,7 +1793,12 @@ Bu proqramdan çıxılacaq və bütün dəyişikliklər itiriləcəkdir. Map - + + Timezone: %1 + Saat qurşağı: %1 + + + Please select your preferred location on the map so the installer can suggest the locale and timezone settings for you. You can fine-tune the suggested settings below. Search the map by dragging to move and using the +/- buttons to zoom in/out or use mouse scrolling for zooming. @@ -1955,247 +1961,247 @@ Bu proqramdan çıxılacaq və bütün dəyişikliklər itiriləcəkdir. PWQ - + Password is too short Şifrə çox qısadır - + Password is too long Şifrə çox uzundur - + Password is too weak Şifrə çox zəifdir - + Memory allocation error when setting '%1' '%1' ayarlanarkən yaddaş bölgüsü xətası - + Memory allocation error Yaddaş bölgüsü xətası - + The password is the same as the old one Şifrə köhnə şifrə ilə eynidir - + The password is a palindrome Şifrə tərsinə oxunuşu ilə eynidir - + The password differs with case changes only Şifrə yalnız hal dəyişiklikləri ilə fərqlənir - + The password is too similar to the old one Şifrə köhnə şifrə ilə çox oxşardır - + The password contains the user name in some form Şifrənin tərkibində istifadəçi adı var - + The password contains words from the real name of the user in some form Şifrə istifadəçinin əsl adına oxşar sözlərdən ibarətdir - + The password contains forbidden words in some form Şifrə qadağan edilmiş sözlərdən ibarətdir - + The password contains less than %1 digits Şifrə %1-dən az rəqəmdən ibarətdir - + The password contains too few digits Şifrə çox az rəqəmdən ibarətdir - + The password contains less than %1 uppercase letters Şifrə %1-dən az böyük hərfdən ibarətdir - + The password contains too few uppercase letters Şifrə çox az böyük hərflərdən ibarətdir - + The password contains less than %1 lowercase letters Şifrə %1-dən az kiçik hərflərdən ibarətdir - + The password contains too few lowercase letters Şifrə çox az kiçik hərflərdən ibarətdir - + The password contains less than %1 non-alphanumeric characters Şifrə %1-dən az alfasayısal olmayan simvollardan ibarətdir - + The password contains too few non-alphanumeric characters Şifrə çox az alfasayısal olmayan simvollardan ibarətdir - + The password is shorter than %1 characters Şifrə %1 simvoldan qısadır - + The password is too short Şifrə çox qısadır - + The password is just rotated old one Yeni şifrə sadəcə olaraq tərsinə çevirilmiş köhnəsidir - + The password contains less than %1 character classes Şifrə %1-dən az simvol sinifindən ibarətdir - + The password does not contain enough character classes Şifrənin tərkibində kifayət qədər simvol sinifi yoxdur - + The password contains more than %1 same characters consecutively Şifrə ardıcıl olaraq %1-dən çox eyni simvollardan ibarətdir - + The password contains too many same characters consecutively Şifrə ardıcıl olaraq çox oxşar simvollardan ibarətdir - + The password contains more than %1 characters of the same class consecutively Şifrə ardıcıl olaraq eyni sinifin %1-dən çox simvolundan ibarətdir - + The password contains too many characters of the same class consecutively Şifrə ardıcıl olaraq eyni sinifin çox simvolundan ibarətdir - + The password contains monotonic sequence longer than %1 characters Şifrə %1 simvoldan uzun olan monoton ardıcıllıqdan ibarətdir - + The password contains too long of a monotonic character sequence Şifrə çox uzun monoton simvollar ardıcıllığından ibarətdir - + No password supplied Şifrə verilməyib - + Cannot obtain random numbers from the RNG device RNG cihazından təsadüfi nömrələr əldə etmək olmur - + Password generation failed - required entropy too low for settings Şifrə yaratma uğursuz oldu - ayarlar üçün tələb olunan entropiya çox aşağıdır - + The password fails the dictionary check - %1 Şifrənin lüğət yoxlaması alınmadı - %1 - + The password fails the dictionary check Şifrənin lüğət yoxlaması alınmadı - + Unknown setting - %1 Naməlum ayarlar - %1 - + Unknown setting Naməlum ayarlar - + Bad integer value of setting - %1 Ayarın pozulmuş tam dəyəri - %1 - + Bad integer value Pozulmuş tam dəyər - + Setting %1 is not of integer type %1 -i ayarı tam say deyil - + Setting is not of integer type Ayar tam say deyil - + Setting %1 is not of string type %1 ayarı sətir deyil - + Setting is not of string type Ayar sətir deyil - + Opening the configuration file failed Tənzəmləmə faylının açılması uğursuz oldu - + The configuration file is malformed Tənzimləmə faylı qüsurludur - + Fatal failure Ciddi qəza - + Unknown error Naməlum xəta - + Password is empty Şifrə böşdur @@ -2530,67 +2536,67 @@ Lütfən bir birinci disk bölümünü çıxarın və əvəzinə genişləndiril PartitionViewStep - + Gathering system information... Sistem məlumatları toplanır ... - + Partitions Bölmələr - + Install %1 <strong>alongside</strong> another operating system. Digər əməliyyat sistemini %1 <strong>yanına</strong> quraşdırmaq. - + <strong>Erase</strong> disk and install %1. Diski <strong>çıxarmaq</strong> və %1 quraşdırmaq. - + <strong>Replace</strong> a partition with %1. Bölməni %1 ilə <strong>əvəzləmək</strong>. - + <strong>Manual</strong> partitioning. <strong>Əl ilə</strong> bölüşdürmə. - + Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). <strong>%2</strong> (%3) diskində başqa əməliyyat sistemini %1 <strong>yanında</strong> quraşdırmaq. - + <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. <strong>%2</strong> (%3) diskini <strong>çıxartmaq</strong> və %1 quraşdırmaq. - + <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. <strong>%2</strong> (%3) diskində bölməni %1 ilə <strong>əvəzləmək</strong>. - + <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). <strong>%1</strong> (%2) diskində <strong>əl ilə</strong> bölüşdürmə. - + Disk <strong>%1</strong> (%2) <strong>%1</strong> (%2) diski - + Current: Cari: - + After: Sonra: @@ -2635,12 +2641,12 @@ Lütfən bir birinci disk bölümünü çıxarın və əvəzinə genişləndiril Şifrəli bir kök bölməsi ilə birlikdə ayrı bir ön yükləyici bölməsi qurulub, ancaq ön yükləyici bölməsi şifrələnməyib.<br/><br/>Bu cür quraşdırma ilə bağlı təhlükəsizlik problemləri olur, çünki vacib sistem sənədləri şifrəsiz bölmədə saxlanılır.<br/>İstəyirsinizsə davam edə bilərsiniz, lakin, fayl sisteminin kilidi, sistem başladıldıqdan daha sonra açılacaqdır.<br/>Yükləmə hissəsini şifrələmək üçün geri qayıdın və bölmə yaratma pəncərəsində <strong>Şifrələmə</strong> menyusunu seçərək onu yenidən yaradın. - + has at least one disk device available. ən az bir disk qurğusu mövcuddur. - + There are no partitions to install on. Quraşdırmaq üçün bölmə yoxdur. @@ -3548,17 +3554,17 @@ Output: UsersPage - + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>Əgər bu kompyuteri sizdən başqa şəxs istifadə edəcəkdirsə o zaman ayarlandıqdan sonra bir neçə istifadəçi hesabı yarada bilərsiniz.</small> - + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> <small>Əgər bu kompyuteri sizdən başqa şəxs istifadə edəcəkdirsə o zaman quraşdırıldıqdan sonra bir neçə istifadəçi hesabı yarada bilərsiniz.</small> - + Your passwords do not match! Şifrənizin təkrarı eyni deyil! @@ -3566,7 +3572,7 @@ Output: UsersViewStep - + Users İstifadəçilər @@ -3857,7 +3863,7 @@ Output: localeq - + Change Dəyişdirmək diff --git a/lang/calamares_be.ts b/lang/calamares_be.ts index 46febf1b41..ac8d9d01ad 100644 --- a/lang/calamares_be.ts +++ b/lang/calamares_be.ts @@ -512,134 +512,134 @@ The installer will quit and all changes will be lost. Форма - + Select storage de&vice: Абраць &прыладу захоўвання: - - - - + + + + Current: Бягучы: - + After: Пасля: - + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. - + Reuse %1 as home partition for %2. Выкарыстаць %1 як хатні раздзел для %2. - + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> <strong>Абярыце раздзел для памяншэння і цягніце паўзунок, каб змяніць памер</strong> - + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. %1 будзе паменшаны да %2MiB і новы раздзел %3MiB будзе створаны для %4. - + Boot loader location: Размяшчэнне загрузчыка: - + <strong>Select a partition to install on</strong> <strong>Абярыце раздзел для ўсталёўкі </strong> - + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. Не выяўлена сістэмнага раздзела EFI. Калі ласка, вярніцеся назад і зрабіце разметку %1. - + The EFI system partition at %1 will be used for starting %2. Сістэмны раздзел EFI на %1 будзе выкарыстаны для запуску %2. - + EFI system partition: Сістэмны раздзел EFI: - + This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Здаецца, на гэтай прыладзе няма аперацыйнай сістэмы. Што будзеце рабіць?<br/>Вы зможаце змяніць альбо пацвердзіць свой выбар да таго як на прыладзе ўжывуцца змены. - - - - + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>Сцерці дыск</strong><br/>Гэта <font color="red">выдаліць</font> усе даныя на абранай прыладзе. - - - - + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Усталяваць побач</strong><br/>Праграма ўсталёўкі паменшыць раздзел, каб вызваліць месца для %1. - - - - + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>Замяніць раздзел </strong><br/>Заменіць раздзел на %1. - + This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. На гэтай прыладзе ёсць %1. Што будзеце рабіць?<br/>Вы зможаце змяніць альбо пацвердзіць свой выбар да таго як на прыладзе ўжывуцца змены. - + This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. На гэтай прыладзе ўжо ёсць аперацыйная сістэма. Што будзеце рабіць?<br/>Вы зможаце змяніць альбо пацвердзіць свой выбар да таго як на прыладзе ўжывуцца змены. - + This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. На гэтай прыладзе ўжо ёсць некалькі аперацыйных сістэм. Што будзеце рабіць?<br/>Вы зможаце змяніць альбо пацвердзіць свой выбар да таго як на прыладзе ўжывуцца змены. - + No Swap Без раздзела падпампоўкі - + Reuse Swap Выкарыстаць існы раздзел падпампоўкі - + Swap (no Hibernate) Раздзел падпампоўкі (без усыплення) - + Swap (with Hibernate) Раздзел падпампоўкі (з усыпленнем) - + Swap to file Раздзел падпампоўкі ў файле @@ -717,17 +717,17 @@ The installer will quit and all changes will be lost. Вызначыць раскладку клавіятуры %1/%2. - + Set timezone to %1/%2. - + The system language will be set to %1. Сістэмнай мовай будзе зроблена %1. - + The numbers and dates locale will be set to %1. Рэгіянальным фарматам лічбаў і датаў будзе %1. @@ -797,42 +797,42 @@ The installer will quit and all changes will be lost. - + Your username is too long. Імя карыстальніка занадта доўгае. - + '%1' is not allowed as username. - + Your username must start with a lowercase letter or underscore. Імя карыстальніка павінна пачынацца з малой літары альбо сімвала падкрэслівання. - + Only lowercase letters, numbers, underscore and hyphen are allowed. Дазваляюцца толькі літары, лічбы, знакі падкрэслівання, працяжнікі. - + Your hostname is too short. Назва вашага камп’ютара занадта кароткая. - + Your hostname is too long. Назва вашага камп’ютара занадта доўгая. - + '%1' is not allowed as hostname. - + Only letters, numbers, underscore and hyphen are allowed. Толькі літары, лічбы, знакі падкрэслівання, працяжнікі. @@ -1253,7 +1253,8 @@ The installer will quit and all changes will be lost. Пацвердзіце парольную фразу - + + Please enter the same passphrase in both boxes. Калі ласка, увядзіце адную і тую парольную фразу ў абодва радкі. @@ -1705,18 +1706,18 @@ The installer will quit and all changes will be lost. LocalePage - + Region: Рэгіён: - + Zone: Зона: - - + + &Change... &Змяніць... @@ -1794,7 +1795,12 @@ The installer will quit and all changes will be lost. Map - + + Timezone: %1 + + + + Please select your preferred location on the map so the installer can suggest the locale and timezone settings for you. You can fine-tune the suggested settings below. Search the map by dragging to move and using the +/- buttons to zoom in/out or use mouse scrolling for zooming. @@ -1955,247 +1961,247 @@ The installer will quit and all changes will be lost. PWQ - + Password is too short Пароль занадта кароткі - + Password is too long Пароль занадта доўгі - + Password is too weak Пароль занадта ненадзейны - + Memory allocation error when setting '%1' Не атрымалася адвесці памяць падчас усталёўкі '%1' - + Memory allocation error Не атрымалася адвесці памяць - + The password is the same as the old one Пароль не адрозніваецца ад старога - + The password is a palindrome Пароль з’яўляецца паліндромам - + The password differs with case changes only Пароль адрозніваецца толькі рэгістрам знакаў - + The password is too similar to the old one Пароль вельмі падобны да старога - + The password contains the user name in some form Пароль змяшчае імя карыстальніка - + The password contains words from the real name of the user in some form Пароль змяшчае часткі сапраўднага імя карыстальніка - + The password contains forbidden words in some form Пароль змяшчае забароненыя сімвалы - + The password contains less than %1 digits Пароль змяшчае менш за %1 лічбаў - + The password contains too few digits У паролі занадта мала лічбаў - + The password contains less than %1 uppercase letters У паролі менш за %1 вялікіх літар - + The password contains too few uppercase letters У паролі занадта мала вялікіх літар - + The password contains less than %1 lowercase letters У паролі менш за %1 малых літар - + The password contains too few lowercase letters У паролі занадта мала малых літар - + The password contains less than %1 non-alphanumeric characters У паролі менш за %1 адмысловых знакаў - + The password contains too few non-alphanumeric characters У паролі занадта мала адмысловых знакаў - + The password is shorter than %1 characters Пароль карацейшы за %1 знакаў - + The password is too short Пароль занадта кароткі - + The password is just rotated old one Новы пароль - стары пароль наадварот - + The password contains less than %1 character classes Пароль змяшчае менш за %1 класаў сімвалаў - + The password does not contain enough character classes Пароль змяшчае недастаткова класаў сімвалаў - + The password contains more than %1 same characters consecutively Пароль змяшчае больш за %1 аднолькавых паслядоўных знакаў - + The password contains too many same characters consecutively Пароль змяшчае занадта шмат аднолькавых паслядоўных знакаў - + The password contains more than %1 characters of the same class consecutively Пароль змяшчае больш за %1 паслядоўных знакаў таго ж класа - + The password contains too many characters of the same class consecutively Пароль змяшчае занадта шмат паслядоўных знакаў аднаго класа - + The password contains monotonic sequence longer than %1 characters Пароль змяшчае аднастайную паслядоўнасць даўжэйшую за %1 знакаў - + The password contains too long of a monotonic character sequence Пароль змяшчае занадта доўгую аднастайную паслядоўнасць знакаў - + No password supplied Пароль не прызначаны - + Cannot obtain random numbers from the RNG device Не ўдалося атрымаць выпадковыя лікі з прылады RNG - + Password generation failed - required entropy too low for settings Не атрымалася згенераваць пароль - занадта нізкая энтрапія для налад - + The password fails the dictionary check - %1 Пароль не прайшоў праверку слоўнікам - %1 - + The password fails the dictionary check Пароль не прайшоў праверку слоўнікам - + Unknown setting - %1 Невядомы параметр - %1 - + Unknown setting Невядомы параметр - + Bad integer value of setting - %1 Хібнае цэлае значэнне параметра - %1 - + Bad integer value Хібнае цэлае значэнне - + Setting %1 is not of integer type Параметр %1 не з’яўляецца цэлым лікам - + Setting is not of integer type Параметр не з’яўляецца цэлым лікам - + Setting %1 is not of string type Параметр %1 не з’яўляецца радком - + Setting is not of string type Параметр не з’яўляецца радком - + Opening the configuration file failed Не атрымалася адкрыць файл канфігурацыі - + The configuration file is malformed Файл канфігурацыі пашкоджаны - + Fatal failure Фатальны збой - + Unknown error Невядомая памылка - + Password is empty Пароль пусты @@ -2529,67 +2535,67 @@ The installer will quit and all changes will be lost. PartitionViewStep - + Gathering system information... Збор інфармацыі пра сістэму... - + Partitions Раздзелы - + Install %1 <strong>alongside</strong> another operating system. Усталяваць %1 <strong>побач</strong> з іншай аперацыйнай сістэмай. - + <strong>Erase</strong> disk and install %1. <strong>Ачысціць</strong> дыск і ўсталяваць %1. - + <strong>Replace</strong> a partition with %1. <strong>Замяніць</strong> раздзел на %1. - + <strong>Manual</strong> partitioning. <strong>Уласнаручная</strong> разметка. - + Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). Усталяваць %1 <strong>побач</strong> з іншай аперацыйнай сістэмай на дыск<strong>%2</strong> (%3). - + <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. <strong>Ачысціць</strong> дыск <strong>%2</strong> (%3) і ўсталяваць %1. - + <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. <strong>Замяніць</strong> раздзел на дыску <strong>%2</strong> (%3) на %1. - + <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). <strong>Уласнаручная</strong> разметка дыска<strong>%1</strong> (%2). - + Disk <strong>%1</strong> (%2) Дыск <strong>%1</strong> (%2) - + Current: Бягучы: - + After: Пасля: @@ -2634,12 +2640,12 @@ The installer will quit and all changes will be lost. Уключана шыфраванне каранёвага раздзела, але выкарыстаны асобны загрузачны раздзел без шыфравання.<br/><br/>Пры такой канфігурацыі могуць узнікнуць праблемы з бяспекай, бо важныя сістэмныя даныя будуць захоўвацца на раздзеле без шыфравання.<br/>Вы можаце працягнуць, але файлавая сістэма разблакуецца падчас запуску сістэмы.<br/>Каб уключыць шыфраванне загрузачнага раздзела, вярніцеся назад і стварыце яго нанова, адзначыўшы <strong>Шыфраваць</strong> у акне стварэння раздзела. - + has at least one disk device available. ёсць прынамсі адна даступная дыскавая прылада. - + There are no partitions to install on. Няма раздзелаў для ўсталёўкі. @@ -3544,17 +3550,17 @@ Output: UsersPage - + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>Калі камп’ютарам карыстаецца некалькі чалавек, то вы можаце стварыць для іх акаўнты пасля завяршэння ўсталёўкі.</small> - + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> <small>Калі камп’ютарам карыстаецца некалькі чалавек, то вы можаце стварыць для іх акаўнты пасля завяршэння ўсталёўкі.</small> - + Your passwords do not match! Вашыя паролі не супадаюць! @@ -3562,7 +3568,7 @@ Output: UsersViewStep - + Users Карыстальнікі @@ -3850,7 +3856,7 @@ Output: localeq - + Change diff --git a/lang/calamares_bg.ts b/lang/calamares_bg.ts index 0a16314c4c..24b044bf5a 100644 --- a/lang/calamares_bg.ts +++ b/lang/calamares_bg.ts @@ -508,134 +508,134 @@ The installer will quit and all changes will be lost. Форма - + Select storage de&vice: Изберете ус&тройство за съхранение: - - - - + + + + Current: Сегашен: - + After: След: - + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. <strong>Самостоятелно поделяне</strong><br/>Можете да създадете или преоразмерите дяловете сами. - + Reuse %1 as home partition for %2. Използване на %1 като домашен дял за %2 - + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> <strong>Изберете дял за смаляване, после влачете долната лента за преоразмеряване</strong> - + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. - + Boot loader location: Локация на програмата за начално зареждане: - + <strong>Select a partition to install on</strong> <strong>Изберете дял за инсталацията</strong> - + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. EFI системен дял не е намерен. Моля, опитайте пак като използвате ръчно поделяне за %1. - + The EFI system partition at %1 will be used for starting %2. EFI системен дял в %1 ще бъде използван за стартиране на %2. - + EFI system partition: EFI системен дял: - + This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Това устройство за съхранение няма инсталирана операционна система. Какво ще правите?<br/>Ще може да прегледате и потвърдите избора си, преди да се направят промени по устройството за съхранение. - - - - + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>Изтриване на диска</strong><br/>Това ще <font color="red">изтрие</font> всички данни върху устройството за съхранение. - - - - + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Инсталирайте покрай</strong><br/>Инсталатора ще раздроби дяла за да направи място за %1. - - - - + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>Замени дял</strong><br/>Заменя този дял с %1. - + This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Това устройство за съхранение има инсталиран %1. Какво ще правите?<br/>Ще може да прегледате и потвърдите избора си, преди да се направят промени по устройството за съхранение. - + This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Това устройство за съхранение има инсталирана операционна система. Какво ще правите?<br/>Ще може да прегледате и потвърдите избора си, преди да се направят промени по устройството за съхранение. - + This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Това устройство за съхранение има инсталирани операционни системи. Какво ще правите?<br/>Ще може да прегледате и потвърдите избора си, преди да се направят промени по устройството за съхранение. - + No Swap - + Reuse Swap - + Swap (no Hibernate) - + Swap (with Hibernate) - + Swap to file @@ -713,17 +713,17 @@ The installer will quit and all changes will be lost. Постави оформлението на клавиатурата на %1/%2. - + Set timezone to %1/%2. - + The system language will be set to %1. Системният език ще бъде %1. - + The numbers and dates locale will be set to %1. Форматът на цифрите и датата ще бъде %1. @@ -794,42 +794,42 @@ The installer will quit and all changes will be lost. - + Your username is too long. Вашето потребителско име е твърде дълго. - + '%1' is not allowed as username. - + Your username must start with a lowercase letter or underscore. - + Only lowercase letters, numbers, underscore and hyphen are allowed. - + Your hostname is too short. Вашето име на хоста е твърде кратко. - + Your hostname is too long. Вашето име на хоста е твърде дълго. - + '%1' is not allowed as hostname. - + Only letters, numbers, underscore and hyphen are allowed. @@ -1250,7 +1250,8 @@ The installer will quit and all changes will be lost. Потвърди паролата - + + Please enter the same passphrase in both boxes. Моля, въведете еднаква парола в двете полета. @@ -1702,18 +1703,18 @@ The installer will quit and all changes will be lost. LocalePage - + Region: Регион: - + Zone: Зона: - - + + &Change... &Промени... @@ -1791,7 +1792,12 @@ The installer will quit and all changes will be lost. Map - + + Timezone: %1 + + + + Please select your preferred location on the map so the installer can suggest the locale and timezone settings for you. You can fine-tune the suggested settings below. Search the map by dragging to move and using the +/- buttons to zoom in/out or use mouse scrolling for zooming. @@ -1952,247 +1958,247 @@ The installer will quit and all changes will be lost. PWQ - + Password is too short Паролата е твърде кратка - + Password is too long Паролата е твърде дълга - + Password is too weak Паролата е твърде слаба - + Memory allocation error when setting '%1' Грешка при разпределяне на паметта по време на настройването на '%1' - + Memory allocation error Грешка при разпределяне на паметта - + The password is the same as the old one Паролата съвпада с предишната - + The password is a palindrome Паролата е палиндром - + The password differs with case changes only Паролата се различава само със смяна на главни и малки букви - + The password is too similar to the old one Паролата е твърде сходна с предишната - + The password contains the user name in some form Паролата съдържа потребителското име под някаква форма - + The password contains words from the real name of the user in some form Паролата съдържа думи от истинското име на потребителя под някаква форма - + The password contains forbidden words in some form Паролата съдържа забранени думи под някаква форма - + The password contains less than %1 digits Паролата съдържа по-малко от %1 цифри - + The password contains too few digits Паролата съдържа твърде малко цифри - + The password contains less than %1 uppercase letters Паролата съдържа по-малко от %1 главни букви - + The password contains too few uppercase letters Паролата съдържа твърде малко главни букви - + The password contains less than %1 lowercase letters Паролата съдържа по-малко от %1 малки букви - + The password contains too few lowercase letters Паролата съдържа твърде малко малки букви - + The password contains less than %1 non-alphanumeric characters Паролата съдържа по-малко от %1 знаци, които не са букви или цифри - + The password contains too few non-alphanumeric characters Паролата съдържа твърде малко знаци, които не са букви или цифри - + The password is shorter than %1 characters Паролата е по-малка от %1 знаци - + The password is too short Паролата е твърде кратка - + The password is just rotated old one Паролата е обърнат вариант на старата - + The password contains less than %1 character classes Паролата съдържа по-малко от %1 видове знаци - + The password does not contain enough character classes Паролата не съдържа достатъчно видове знаци - + The password contains more than %1 same characters consecutively Паролата съдържа повече от %1 еднакви знаци последователно - + The password contains too many same characters consecutively Паролата съдържа твърде много еднакви знаци последователно - + The password contains more than %1 characters of the same class consecutively Паролата съдържа повече от %1 еднакви видове знаци последователно - + The password contains too many characters of the same class consecutively Паролата съдържа твърде много еднакви видове знаци последователно - + The password contains monotonic sequence longer than %1 characters Паролата съдържа монотонна последователност, по-дълга от %1 знаци - + The password contains too long of a monotonic character sequence Паролата съдържа твърде дълга монотонна последователност от знаци - + No password supplied Липсва парола - + Cannot obtain random numbers from the RNG device Получаването на произволни числа от RNG устройството е неуспешно - + Password generation failed - required entropy too low for settings Генерирането на парола е неуспешно - необходимата ентропия е твърде ниска за настройки - + The password fails the dictionary check - %1 Паролата не издържа проверката на речника - %1 - + The password fails the dictionary check Паролата не издържа проверката на речника - + Unknown setting - %1 Неизвестна настройка - %1 - + Unknown setting Неизвестна настройка - + Bad integer value of setting - %1 Невалидна числена стойност на настройката - %1 - + Bad integer value Невалидна числена стойност на настройката - + Setting %1 is not of integer type Настройката %1 не е от числов вид - + Setting is not of integer type Настройката не е от числов вид - + Setting %1 is not of string type Настройката %1 не е от текстов вид - + Setting is not of string type Настройката не е от текстов вид - + Opening the configuration file failed Отварянето на файла с конфигурацията е неуспешно - + The configuration file is malformed Файлът с конфигурацията е деформиран - + Fatal failure Фатална повреда - + Unknown error Неизвестна грешка - + Password is empty @@ -2526,67 +2532,67 @@ The installer will quit and all changes will be lost. PartitionViewStep - + Gathering system information... Събиране на системна информация... - + Partitions Дялове - + Install %1 <strong>alongside</strong> another operating system. Инсталирай %1 <strong>заедно</strong> с друга операционна система. - + <strong>Erase</strong> disk and install %1. <strong>Изтрий</strong> диска и инсталирай %1. - + <strong>Replace</strong> a partition with %1. <strong>Замени</strong> дял с %1. - + <strong>Manual</strong> partitioning. <strong>Ръчно</strong> поделяне. - + Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). Инсталирай %1 <strong>заедно</strong> с друга операционна система на диск <strong>%2</strong> (%3). - + <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. <strong>Изтрий</strong> диск <strong>%2</strong> (%3) и инсталирай %1. - + <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. <strong>Замени</strong> дял на диск <strong>%2</strong> (%3) с %1. - + <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). <strong>Ръчно</strong> поделяне на диск <strong>%1</strong> (%2). - + Disk <strong>%1</strong> (%2) Диск <strong>%1</strong> (%2) - + Current: Сегашен: - + After: След: @@ -2631,12 +2637,12 @@ The installer will quit and all changes will be lost. - + has at least one disk device available. - + There are no partitions to install on. @@ -3541,17 +3547,17 @@ Output: UsersPage - + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> - + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> - + Your passwords do not match! Паролите Ви не съвпадат! @@ -3559,7 +3565,7 @@ Output: UsersViewStep - + Users Потребители @@ -3837,7 +3843,7 @@ Output: localeq - + Change diff --git a/lang/calamares_bn.ts b/lang/calamares_bn.ts index 1c279ae561..0060679d61 100644 --- a/lang/calamares_bn.ts +++ b/lang/calamares_bn.ts @@ -508,134 +508,134 @@ The installer will quit and all changes will be lost. ফর্ম - + Select storage de&vice: স্টোরেজ ডিএবংভাইস নির্বাচন করুন: - - - - + + + + Current: বর্তমান: - + After: পরে: - + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. - + Reuse %1 as home partition for %2. - + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> <strong>সংকুচিত করার জন্য একটি পার্টিশন নির্বাচন করুন, তারপর নিচের বারটি পুনঃআকারের জন্য টেনে আনুন</strong> - + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. - + Boot loader location: বুট লোডার অবস্থান: - + <strong>Select a partition to install on</strong> <strong>ইনস্টল করতে একটি পার্টিশন নির্বাচন করুন</strong> - + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. - + The EFI system partition at %1 will be used for starting %2. %1 এ EFI সিস্টেম পার্টিশন %2 শুরু করার জন্য ব্যবহার করা হবে। - + EFI system partition: EFI সিস্টেম পার্টিশন: - + This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. এই স্টোরেজ ডিভাইসে কোন অপারেটিং সিস্টেম আছে বলে মনে হয় না। তুমি কি করতে চাও? <br/>স্টোরেজ ডিভাইসে কোন পরিবর্তন করার আগে আপনি আপনার পছন্দপর্যালোচনা এবং নিশ্চিত করতে সক্ষম হবেন। - - - - + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>ডিস্ক মুছে ফেলুন</strong> <br/>এটি বর্তমানে নির্বাচিত স্টোরেজ ডিভাইসে উপস্থিত সকল উপাত্ত <font color="red">মুছে ফেলবে</font>। - - - - + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>ইনস্টল করুন পাশাপাশি</strong> <br/>ইনস্টলার %1 এর জন্য জায়গা তৈরি করতে একটি পার্টিশন সংকুচিত করবে। - - - - + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>একটি পার্টিশন প্রতিস্থাপন করুন</strong><br/>%1-এর সাথে একটি পার্টিশন প্রতিস্থাপন করে। - + This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. এই সঞ্চয় যন্ত্রটিতে %1 আছে। তুমি কি করতে চাও? <br/>স্টোরেজ ডিভাইসে কোন পরিবর্তন করার আগে আপনি আপনার পছন্দপর্যালোচনা এবং নিশ্চিত করতে সক্ষম হবেন। - + This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. এই স্টোরেজ ডিভাইসে ইতোমধ্যে একটি অপারেটিং সিস্টেম আছে। তুমি কি করতে চাও? <br/>স্টোরেজ ডিভাইসে কোন পরিবর্তন করার আগে আপনি আপনার পছন্দপর্যালোচনা এবং নিশ্চিত করতে সক্ষম হবেন. - + This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. এই স্টোরেজ ডিভাইসে একাধিক অপারেটিং সিস্টেম আছে। তুমি কি করতে চাও? <br/>স্টোরেজ ডিভাইসে কোন পরিবর্তন করার আগে আপনি আপনার পছন্দপর্যালোচনা এবং নিশ্চিত করতে সক্ষম হবেন. - + No Swap - + Reuse Swap - + Swap (no Hibernate) - + Swap (with Hibernate) - + Swap to file @@ -713,17 +713,17 @@ The installer will quit and all changes will be lost. %1/%2 এ কীবোর্ড বিন্যাস নির্ধারণ করুন। - + Set timezone to %1/%2. - + The system language will be set to %1. - + The numbers and dates locale will be set to %1. @@ -793,42 +793,42 @@ The installer will quit and all changes will be lost. - + Your username is too long. - + '%1' is not allowed as username. - + Your username must start with a lowercase letter or underscore. - + Only lowercase letters, numbers, underscore and hyphen are allowed. - + Your hostname is too short. - + Your hostname is too long. - + '%1' is not allowed as hostname. - + Only letters, numbers, underscore and hyphen are allowed. @@ -1249,7 +1249,8 @@ The installer will quit and all changes will be lost. - + + Please enter the same passphrase in both boxes. @@ -1701,18 +1702,18 @@ The installer will quit and all changes will be lost. LocalePage - + Region: অঞ্চল: - + Zone: বলয়: - - + + &Change... এবংপরিবর্তন করুন... @@ -1790,7 +1791,12 @@ The installer will quit and all changes will be lost. Map - + + Timezone: %1 + + + + Please select your preferred location on the map so the installer can suggest the locale and timezone settings for you. You can fine-tune the suggested settings below. Search the map by dragging to move and using the +/- buttons to zoom in/out or use mouse scrolling for zooming. @@ -1951,247 +1957,247 @@ The installer will quit and all changes will be lost. PWQ - + Password is too short - + Password is too long - + Password is too weak - + Memory allocation error when setting '%1' - + Memory allocation error - + The password is the same as the old one - + The password is a palindrome - + The password differs with case changes only - + The password is too similar to the old one - + The password contains the user name in some form - + The password contains words from the real name of the user in some form - + The password contains forbidden words in some form - + The password contains less than %1 digits - + The password contains too few digits - + The password contains less than %1 uppercase letters - + The password contains too few uppercase letters - + The password contains less than %1 lowercase letters - + The password contains too few lowercase letters - + The password contains less than %1 non-alphanumeric characters - + The password contains too few non-alphanumeric characters - + The password is shorter than %1 characters - + The password is too short - + The password is just rotated old one - + The password contains less than %1 character classes - + The password does not contain enough character classes - + The password contains more than %1 same characters consecutively - + The password contains too many same characters consecutively - + The password contains more than %1 characters of the same class consecutively - + The password contains too many characters of the same class consecutively - + The password contains monotonic sequence longer than %1 characters - + The password contains too long of a monotonic character sequence - + No password supplied - + Cannot obtain random numbers from the RNG device - + Password generation failed - required entropy too low for settings - + The password fails the dictionary check - %1 - + The password fails the dictionary check - + Unknown setting - %1 - + Unknown setting - + Bad integer value of setting - %1 - + Bad integer value - + Setting %1 is not of integer type - + Setting is not of integer type - + Setting %1 is not of string type - + Setting is not of string type - + Opening the configuration file failed - + The configuration file is malformed - + Fatal failure - + Unknown error - + Password is empty @@ -2525,67 +2531,67 @@ The installer will quit and all changes will be lost. PartitionViewStep - + Gathering system information... সিস্টেম তথ্য সংগ্রহ করা হচ্ছে... - + Partitions পার্টিশনগুলো - + Install %1 <strong>alongside</strong> another operating system. অন্য অপারেটিং সিস্টেমের <strong>পাশাপাশি</strong> %1 ইনস্টল করুন। - + <strong>Erase</strong> disk and install %1. ডিস্ক <strong>মুছে ফেলুন</strong> এবং %1 সংস্থাপন করুন। - + <strong>Replace</strong> a partition with %1. %1 দিয়ে একটি পার্টিশন <strong>প্রতিস্থাপন করুন</strong>। - + <strong>Manual</strong> partitioning. <strong>ম্যানুয়াল</strong> পার্টিশনিং। - + Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). <strong>%2</strong> (%3) ডিস্কে অন্য অপারেটিং সিস্টেমের <strong>পাশাপাশি</strong> %1 ইনস্টল করুন। - + <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. ডিস্ক <strong>%2</strong> (%3) <strong>মুছে ফেলুন</strong> এবং %1 সংস্থাপন করুন। - + <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. %1 দিয়ে <strong>%2</strong> (%3) ডিস্কে একটি পার্টিশন <strong>প্রতিস্থাপন করুন</strong>। - + <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). <strong>%1</strong> (%2) ডিস্কে <strong>ম্যানুয়াল</strong> পার্টিশন করা হচ্ছে। - + Disk <strong>%1</strong> (%2) ডিস্ক <strong>%1</strong> (%2) - + Current: বর্তমান: - + After: পরে: @@ -2630,12 +2636,12 @@ The installer will quit and all changes will be lost. - + has at least one disk device available. - + There are no partitions to install on. @@ -3537,17 +3543,17 @@ Output: UsersPage - + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> - + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> - + Your passwords do not match! আপনার পাসওয়ার্ড মেলে না! @@ -3555,7 +3561,7 @@ Output: UsersViewStep - + Users ব্যবহারকারীরা @@ -3833,7 +3839,7 @@ Output: localeq - + Change diff --git a/lang/calamares_ca.ts b/lang/calamares_ca.ts index 94cf93a99f..3de3ad6f72 100644 --- a/lang/calamares_ca.ts +++ b/lang/calamares_ca.ts @@ -510,134 +510,134 @@ L'instal·lador es tancarà i tots els canvis es perdran. Formulari - + Select storage de&vice: Seleccioneu un dispositiu d'e&mmagatzematge: - - - - + + + + Current: Actual: - + After: Després: - + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. <strong>Particions manuals</strong><br/>Podeu crear o canviar la mida de les particions vosaltres mateixos. - + Reuse %1 as home partition for %2. Reutilitza %1 com a partició de l'usuari per a %2. - + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> <strong>Seleccioneu una partició per encongir i arrossegueu-la per redimensinar-la</strong> - + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. %1 s'encongirà a %2 MiB i es crearà una partició nova de %3 MB per a %4. - + Boot loader location: Ubicació del gestor d'arrencada: - + <strong>Select a partition to install on</strong> <strong>Seleccioneu una partició per fer-hi la instal·lació.</strong> - + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. No s'ha pogut trobar enlloc una partició EFI en aquest sistema. Si us plau, torneu enrere i use les particions manuals per configurar %1. - + The EFI system partition at %1 will be used for starting %2. La partició EFI de sistema a %1 s'usarà per iniciar %2. - + EFI system partition: Partició EFI del sistema: - + This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Aquest dispositiu d'emmagatzematge no sembla que tingui un sistema operatiu. Què voleu fer?<br/>Podreu revisar i confirmar la tria abans que es faci cap canvi al dispositiu. - - - - + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>Esborra el disc</strong><br/>Això <font color="red">suprimirà</font> totes les dades del dispositiu seleccionat. - - - - + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Instal·la'l al costat</strong><br/>L'instal·lador reduirà una partició per fer espai per a %1. - - - - + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>Reemplaça una partició</strong><br/>Reemplaça una partició per %1. - + This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Aquest dispositiu d'emmagatzematge té %1. Què voleu fer?<br/>Podreu revisar i confirmar la tria abans que es faci cap canvi al dispositiu. - + This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Aquest dispositiu d'emmagatzematge ja té un sistema operatiu. Què voleu fer?<br/>Podreu revisar i confirmar la tria abans que es faci cap canvi al dispositiu. - + This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Aquest dispositiu d'emmagatzematge ja múltiples sistemes operatius. Què voleu fer?<br/>Podreu revisar i confirmar la tria abans que es faci cap canvi al dispositiu. - + No Swap Sense intercanvi - + Reuse Swap Reutilitza l'intercanvi - + Swap (no Hibernate) Intercanvi (sense hibernació) - + Swap (with Hibernate) Intercanvi (amb hibernació) - + Swap to file Intercanvi en fitxer @@ -715,17 +715,17 @@ L'instal·lador es tancarà i tots els canvis es perdran. Establirà la distribució del teclat a %1/%2. - + Set timezone to %1/%2. Estableix la zona horària a %1/%2. - + The system language will be set to %1. La llengua del sistema s'establirà a %1. - + The numbers and dates locale will be set to %1. Els números i les dates de la configuració local s'establiran a %1. @@ -795,42 +795,42 @@ L'instal·lador es tancarà i tots els canvis es perdran. <h1>Benvingut/da a l'instal·lador per a %1</h1> - + Your username is too long. El nom d'usuari és massa llarg. - + '%1' is not allowed as username. No es permet %1 com a nom d'usuari. - + Your username must start with a lowercase letter or underscore. El nom d'usuari ha de començar amb una lletra en minúscula o una ratlla baixa. - + Only lowercase letters, numbers, underscore and hyphen are allowed. Només es permeten lletres en minúscula, números, ratlles baixes i guions. - + Your hostname is too short. El nom d'amfitrió és massa curt. - + Your hostname is too long. El nom d'amfitrió és massa llarg. - + '%1' is not allowed as hostname. No es permet %1 com a nom d'amfitrió. - + Only letters, numbers, underscore and hyphen are allowed. Només es permeten lletres, números, ratlles baixes i guions. @@ -1251,7 +1251,8 @@ L'instal·lador es tancarà i tots els canvis es perdran. Confirmeu la contrasenya - + + Please enter the same passphrase in both boxes. Si us plau, escriviu la mateixa contrasenya a les dues caselles. @@ -1703,18 +1704,18 @@ L'instal·lador es tancarà i tots els canvis es perdran. LocalePage - + Region: Regió: - + Zone: Zona: - - + + &Change... &Canvia... @@ -1792,7 +1793,12 @@ L'instal·lador es tancarà i tots els canvis es perdran. Map - + + Timezone: %1 + Zona horària: %1 + + + Please select your preferred location on the map so the installer can suggest the locale and timezone settings for you. You can fine-tune the suggested settings below. Search the map by dragging to move and using the +/- buttons to zoom in/out or use mouse scrolling for zooming. @@ -1955,247 +1961,247 @@ per desplaçar-s'hi i useu els botons +/- per fer ampliar-lo o reduir-lo, o bé PWQ - + Password is too short La contrasenya és massa curta. - + Password is too long La contrasenya és massa llarga. - + Password is too weak La contrasenya és massa dèbil. - + Memory allocation error when setting '%1' Error d'assignació de memòria en establir "%1" - + Memory allocation error Error d'assignació de memòria - + The password is the same as the old one La contrasenya és la mateixa que l'anterior. - + The password is a palindrome La contrasenya és un palíndrom. - + The password differs with case changes only La contrasenya només és diferent per les majúscules o minúscules. - + The password is too similar to the old one La contrasenya és massa semblant a l'anterior. - + The password contains the user name in some form La contrasenya conté el nom d'usuari d'alguna manera. - + The password contains words from the real name of the user in some form La contrasenya conté paraules del nom real de l'usuari d'alguna manera. - + The password contains forbidden words in some form La contrasenya conté paraules prohibides d'alguna manera. - + The password contains less than %1 digits La contrasenya és inferior a %1 dígits. - + The password contains too few digits La contrasenya conté massa pocs dígits. - + The password contains less than %1 uppercase letters La contrasenya conté menys de %1 lletres majúscules. - + The password contains too few uppercase letters La contrasenya conté massa poques lletres majúscules. - + The password contains less than %1 lowercase letters La contrasenya conté menys de %1 lletres minúscules. - + The password contains too few lowercase letters La contrasenya conté massa poques lletres minúscules. - + The password contains less than %1 non-alphanumeric characters La contrasenya conté menys de %1 caràcters no alfanumèrics. - + The password contains too few non-alphanumeric characters La contrasenya conté massa pocs caràcters no alfanumèrics. - + The password is shorter than %1 characters La contrasenya és més curta de %1 caràcters. - + The password is too short La contrasenya és massa curta. - + The password is just rotated old one La contrasenya és només l'anterior capgirada. - + The password contains less than %1 character classes La contrasenya conté menys de %1 classes de caràcters. - + The password does not contain enough character classes La contrasenya no conté prou classes de caràcters. - + The password contains more than %1 same characters consecutively La contrasenya conté més de %1 caràcters iguals consecutius. - + The password contains too many same characters consecutively La contrasenya conté massa caràcters iguals consecutius. - + The password contains more than %1 characters of the same class consecutively La contrasenya conté més de %1 caràcters consecutius de la mateixa classe. - + The password contains too many characters of the same class consecutively La contrasenya conté massa caràcters consecutius de la mateixa classe. - + The password contains monotonic sequence longer than %1 characters La contrasenya conté una seqüència monòtona més llarga de %1 caràcters. - + The password contains too long of a monotonic character sequence La contrasenya conté una seqüència monòtona de caràcters massa llarga. - + No password supplied No s'ha proporcionat cap contrasenya. - + Cannot obtain random numbers from the RNG device No es poden obtenir nombres aleatoris del dispositiu RNG. - + Password generation failed - required entropy too low for settings Ha fallat la generació de la contrasenya. Entropia necessària massa baixa per als paràmetres. - + The password fails the dictionary check - %1 La contrasenya no aprova la comprovació del diccionari: %1 - + The password fails the dictionary check La contrasenya no aprova la comprovació del diccionari. - + Unknown setting - %1 Paràmetre desconegut: %1 - + Unknown setting Paràmetre desconegut - + Bad integer value of setting - %1 Valor enter del paràmetre incorrecte: %1 - + Bad integer value Valor enter incorrecte - + Setting %1 is not of integer type El paràmetre %1 no és del tipus enter. - + Setting is not of integer type El paràmetre no és del tipus enter. - + Setting %1 is not of string type El paràmetre %1 no és del tipus cadena. - + Setting is not of string type El paràmetre no és del tipus cadena. - + Opening the configuration file failed Ha fallat obrir el fitxer de configuració. - + The configuration file is malformed El fitxer de configuració té una forma incorrecta. - + Fatal failure Fallada fatal - + Unknown error Error desconegut - + Password is empty La contrasenya és buida. @@ -2529,67 +2535,67 @@ per desplaçar-s'hi i useu els botons +/- per fer ampliar-lo o reduir-lo, o bé PartitionViewStep - + Gathering system information... Es recopila informació del sistema... - + Partitions Particions - + Install %1 <strong>alongside</strong> another operating system. Instal·la %1 <strong>al costat</strong> d'un altre sistema operatiu. - + <strong>Erase</strong> disk and install %1. <strong>Esborra</strong> el disc i instal·la-hi %1. - + <strong>Replace</strong> a partition with %1. <strong>Reemplaça</strong> una partició amb %1. - + <strong>Manual</strong> partitioning. Particions <strong>manuals</strong>. - + Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). Instal·la %1 <strong>al costat</strong> d'un altre sistema operatiu al disc <strong>%2</strong> (%3). - + <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. <strong>Esborra</strong> el disc <strong>%2</strong> (%3) i instal·la-hi %1. - + <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. <strong>Reemplaça</strong> una partició del disc <strong>%2</strong> (%3) amb %1. - + <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). Particions <strong>manuals</strong> del disc <strong>%1</strong> (%2). - + Disk <strong>%1</strong> (%2) Disc <strong>%1</strong> (%2) - + Current: Actual: - + After: Després: @@ -2634,12 +2640,12 @@ per desplaçar-s'hi i useu els botons +/- per fer ampliar-lo o reduir-lo, o bé S'ha establert una partició d'arrencada separada conjuntament amb una partició d'arrel encriptada, però la partició d'arrencada no està encriptada.<br/><br/>Hi ha assumptes de seguretat amb aquest tipus de configuració, perquè hi ha fitxers del sistema importants en una partició no encriptada.<br/>Podeu continuar, si així ho desitgeu, però el desbloqueig del sistema de fitxers succeirà després, durant l'inici del sistema.<br/>Per encriptar la partició d'arrencada, torneu enrere i torneu-la a crear seleccionant <strong>Encripta</strong> a la finestra de creació de la partició. - + has at least one disk device available. tingui com a mínim un dispositiu de disc disponible. - + There are no partitions to install on. No hi ha particions per fer-hi una instal·lació. @@ -3547,17 +3553,17 @@ La configuració pot continuar, però algunes característiques podrien estar in UsersPage - + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>Si més d'una persona usarà aquest ordinador, podeu crear diversos comptes després de la configuració.</small> - + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> <small>Si més d'una persona usarà aquest ordinador, podeu crear diversos comptes després de la instal·lació.</small> - + Your passwords do not match! Les contrasenyes no coincideixen! @@ -3565,7 +3571,7 @@ La configuració pot continuar, però algunes característiques podrien estar in UsersViewStep - + Users Usuaris @@ -3856,7 +3862,7 @@ La configuració pot continuar, però algunes característiques podrien estar in localeq - + Change Canvia-ho diff --git a/lang/calamares_ca@valencia.ts b/lang/calamares_ca@valencia.ts index d372b5bb76..6b12d7f502 100644 --- a/lang/calamares_ca@valencia.ts +++ b/lang/calamares_ca@valencia.ts @@ -507,134 +507,134 @@ The installer will quit and all changes will be lost. - + Select storage de&vice: - - - - + + + + Current: - + After: - + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. - + Reuse %1 as home partition for %2. - + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> - + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. - + Boot loader location: - + <strong>Select a partition to install on</strong> - + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. - + The EFI system partition at %1 will be used for starting %2. - + EFI system partition: - + This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. - - - - + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. - - - - + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. - - - - + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. - + This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. - + This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. - + This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. - + No Swap - + Reuse Swap - + Swap (no Hibernate) - + Swap (with Hibernate) - + Swap to file @@ -712,17 +712,17 @@ The installer will quit and all changes will be lost. - + Set timezone to %1/%2. - + The system language will be set to %1. - + The numbers and dates locale will be set to %1. @@ -792,42 +792,42 @@ The installer will quit and all changes will be lost. - + Your username is too long. - + '%1' is not allowed as username. - + Your username must start with a lowercase letter or underscore. - + Only lowercase letters, numbers, underscore and hyphen are allowed. - + Your hostname is too short. - + Your hostname is too long. - + '%1' is not allowed as hostname. - + Only letters, numbers, underscore and hyphen are allowed. @@ -1248,7 +1248,8 @@ The installer will quit and all changes will be lost. - + + Please enter the same passphrase in both boxes. @@ -1700,18 +1701,18 @@ The installer will quit and all changes will be lost. LocalePage - + Region: - + Zone: - - + + &Change... @@ -1789,7 +1790,12 @@ The installer will quit and all changes will be lost. Map - + + Timezone: %1 + + + + Please select your preferred location on the map so the installer can suggest the locale and timezone settings for you. You can fine-tune the suggested settings below. Search the map by dragging to move and using the +/- buttons to zoom in/out or use mouse scrolling for zooming. @@ -1950,247 +1956,247 @@ The installer will quit and all changes will be lost. PWQ - + Password is too short - + Password is too long - + Password is too weak - + Memory allocation error when setting '%1' - + Memory allocation error - + The password is the same as the old one - + The password is a palindrome - + The password differs with case changes only - + The password is too similar to the old one - + The password contains the user name in some form - + The password contains words from the real name of the user in some form - + The password contains forbidden words in some form - + The password contains less than %1 digits - + The password contains too few digits - + The password contains less than %1 uppercase letters - + The password contains too few uppercase letters - + The password contains less than %1 lowercase letters - + The password contains too few lowercase letters - + The password contains less than %1 non-alphanumeric characters - + The password contains too few non-alphanumeric characters - + The password is shorter than %1 characters - + The password is too short - + The password is just rotated old one - + The password contains less than %1 character classes - + The password does not contain enough character classes - + The password contains more than %1 same characters consecutively - + The password contains too many same characters consecutively - + The password contains more than %1 characters of the same class consecutively - + The password contains too many characters of the same class consecutively - + The password contains monotonic sequence longer than %1 characters - + The password contains too long of a monotonic character sequence - + No password supplied - + Cannot obtain random numbers from the RNG device - + Password generation failed - required entropy too low for settings - + The password fails the dictionary check - %1 - + The password fails the dictionary check - + Unknown setting - %1 - + Unknown setting - + Bad integer value of setting - %1 - + Bad integer value - + Setting %1 is not of integer type - + Setting is not of integer type - + Setting %1 is not of string type - + Setting is not of string type - + Opening the configuration file failed - + The configuration file is malformed - + Fatal failure - + Unknown error - + Password is empty @@ -2524,67 +2530,67 @@ The installer will quit and all changes will be lost. PartitionViewStep - + Gathering system information... - + Partitions - + Install %1 <strong>alongside</strong> another operating system. - + <strong>Erase</strong> disk and install %1. - + <strong>Replace</strong> a partition with %1. - + <strong>Manual</strong> partitioning. - + Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). - + <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. - + <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. - + <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). - + Disk <strong>%1</strong> (%2) - + Current: - + After: @@ -2629,12 +2635,12 @@ The installer will quit and all changes will be lost. - + has at least one disk device available. - + There are no partitions to install on. @@ -3536,17 +3542,17 @@ Output: UsersPage - + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> - + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> - + Your passwords do not match! @@ -3554,7 +3560,7 @@ Output: UsersViewStep - + Users @@ -3832,7 +3838,7 @@ Output: localeq - + Change diff --git a/lang/calamares_cs_CZ.ts b/lang/calamares_cs_CZ.ts index 10f269b9b9..ee6049f307 100644 --- a/lang/calamares_cs_CZ.ts +++ b/lang/calamares_cs_CZ.ts @@ -514,134 +514,134 @@ Instalační program bude ukončen a všechny změny ztraceny. Formulář - + Select storage de&vice: &Vyberte úložné zařízení: - - - - + + + + Current: Stávající: - + After: Po: - + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. <strong>Ruční rozdělení datového úložiště</strong><br/>Sami si můžete vytvořit vytvořit nebo zvětšit/zmenšit oddíly. - + Reuse %1 as home partition for %2. Zrecyklovat %1 na oddíl pro domovské složky %2. - + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> <strong>Vyberte oddíl, který chcete zmenšit, poté posouváním na spodní liště změňte jeho velikost.</strong> - + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. %1 bude zmenšen na %2MiB a nový %3MiB oddíl pro %4 bude vytvořen. - + Boot loader location: Umístění zavaděče: - + <strong>Select a partition to install on</strong> <strong>Vyberte oddíl na který nainstalovat</strong> - + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. Nebyl nalezen žádný EFI systémový oddíl. Vraťte se zpět a nastavte %1 pomocí ručního rozdělení. - + The EFI system partition at %1 will be used for starting %2. Pro zavedení %2 se využije EFI systémový oddíl %1. - + EFI system partition: EFI systémový oddíl: - + This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Zdá se, že na tomto úložném zařízení není žádný operační systém. Jak chcete postupovat?<br/>Než budou provedeny jakékoli změny na úložných zařízeních, bude zobrazen jejich přehled a budete požádáni o jejich potvrzení. - - - - + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>Vymazat datové úložiště</strong><br/>Touto volbou budou <font color="red">smazána</font> všechna data, která se na něm nyní nacházejí. - - - - + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Nainstalovat vedle</strong><br/>Instalátor zmenší oddíl a vytvoří místo pro %1. - - - - + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>Nahradit oddíl</strong><br/>Původní oddíl bude nahrazen %1. - + This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Na tomto úložném zařízení bylo nalezeno %1. Jak chcete postupovat?<br/>Než budou provedeny jakékoli změny na úložných zařízeních, bude zobrazen jejich přehled a budete požádáni o jejich potvrzení. - + This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Na tomto úložném zařízení se už nachází operační systém. Jak chcete postupovat?<br/>Než budou provedeny jakékoli změny na úložných zařízeních, bude zobrazen jejich přehled a budete požádáni o jejich potvrzení. - + This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Na tomto úložném zařízení se už nachází několik operačních systémů. Jak chcete postupovat?<br/>Než budou provedeny jakékoli změny na úložných zařízeních, bude zobrazen jejich přehled změn a budete požádáni o jejich potvrzení. - + No Swap Žádný odkládací prostor (swap) - + Reuse Swap Použít existující odkládací prostor - + Swap (no Hibernate) Odkládací prostor (bez uspávání na disk) - + Swap (with Hibernate) Odkládací prostor (s uspáváním na disk) - + Swap to file Odkládat do souboru @@ -719,17 +719,17 @@ Instalační program bude ukončen a všechny změny ztraceny. Nastavit rozložení klávesnice na %1/%2. - + Set timezone to %1/%2. Nastavit časové pásmo na %1/%2. - + The system language will be set to %1. Jazyk systému bude nastaven na %1. - + The numbers and dates locale will be set to %1. Formát zobrazení čísel, data a času bude nastaven dle národního prostředí %1. @@ -786,12 +786,12 @@ Instalační program bude ukončen a všechny změny ztraceny. <h1>Welcome to %1 setup</h1> - + <h1>Vítejte v instalátoru %1</h1> <h1>Welcome to the Calamares installer for %1</h1> - + <h1>Vítejte v Calamares, instalačním programu pro %1</h1> @@ -799,42 +799,42 @@ Instalační program bude ukončen a všechny změny ztraceny. <h1>Vítejte v instalátoru %1.</h1> - + Your username is too long. Vaše uživatelské jméno je příliš dlouhé. - + '%1' is not allowed as username. - + „%1“ není možné použít jako uživatelské jméno. - + Your username must start with a lowercase letter or underscore. Je třeba, aby uživatelské jméno začínalo na malé písmeno nebo podtržítko. - + Only lowercase letters, numbers, underscore and hyphen are allowed. Je možné použít pouze malá písmena, číslice, podtržítko a spojovník. - + Your hostname is too short. Název stroje je příliš krátký. - + Your hostname is too long. Název stroje je příliš dlouhý. - + '%1' is not allowed as hostname. - + „%1“ není možné použít jako název počítače. - + Only letters, numbers, underscore and hyphen are allowed. Je možné použít pouze písmena, číslice, podtržítko a spojovník. @@ -1255,7 +1255,8 @@ Instalační program bude ukončen a všechny změny ztraceny. Potvrzení heslové fráze - + + Please enter the same passphrase in both boxes. Zadejte stejnou heslovou frázi do obou kolonek. @@ -1707,18 +1708,18 @@ Instalační program bude ukončen a všechny změny ztraceny. LocalePage - + Region: Oblast: - + Zone: Pásmo: - - + + &Change... &Změnit… @@ -1796,11 +1797,18 @@ Instalační program bude ukončen a všechny změny ztraceny. Map - + + Timezone: %1 + Časová zóna: %1 + + + Please select your preferred location on the map so the installer can suggest the locale and timezone settings for you. You can fine-tune the suggested settings below. Search the map by dragging to move and using the +/- buttons to zoom in/out or use mouse scrolling for zooming. - + Vyberte vámi upřednostňované umístění na mapě, aby vám instalátor mohl doporučit místní a jazyková nastavení + a časové pásmo. Doporučená nastavení můžete dále jemně doladit níže. Pro hledání na mapě přetahujte + pro posouvání a pomocí tlačítek +/- přibližujte/oddalujte nebo k tomu použijte kolečko myši. @@ -1951,253 +1959,253 @@ Instalační program bude ukončen a všechny změny ztraceny. To be able to select a timezone, make sure you are connected to the internet. Restart the installer after connecting. You can fine-tune Language and Locale settings below. - + Aby bylo možné vybrat časové pásmo, ověřte, zda jste připojení k Internetu. Poté, co se připojíte, instalátor zavřete a spusťte znovu. Níže je možné jemně doladit místní a jazyková nastavení. PWQ - + Password is too short Heslo je příliš krátké - + Password is too long Heslo je příliš dlouhé - + Password is too weak Heslo je příliš slabé - + Memory allocation error when setting '%1' Chyba přidělování paměti při nastavování „%1“ - + Memory allocation error Chyba při přidělování paměti - + The password is the same as the old one Heslo je stejné jako to přechozí - + The password is a palindrome Heslo je palindrom (je stejné i pozpátku) - + The password differs with case changes only Heslo se liší pouze změnou velikosti písmen - + The password is too similar to the old one Heslo je příliš podobné tomu předchozímu - + The password contains the user name in some form Heslo obsahuje nějakou formou uživatelské jméno - + The password contains words from the real name of the user in some form Heslo obsahuje obsahuje nějakou formou slova ze jména uživatele - + The password contains forbidden words in some form Heslo obsahuje nějakou formou slova, která není možné použít - + The password contains less than %1 digits Heslo obsahuje méně než %1 číslic - + The password contains too few digits Heslo obsahuje příliš málo číslic - + The password contains less than %1 uppercase letters Heslo obsahuje méně než %1 velkých písmen - + The password contains too few uppercase letters Heslo obsahuje příliš málo velkých písmen - + The password contains less than %1 lowercase letters Heslo obsahuje méně než %1 malých písmen - + The password contains too few lowercase letters Heslo obsahuje příliš málo malých písmen - + The password contains less than %1 non-alphanumeric characters Heslo obsahuje méně než %1 speciálních znaků - + The password contains too few non-alphanumeric characters Heslo obsahuje příliš málo speciálních znaků - + The password is shorter than %1 characters Heslo je kratší než %1 znaků - + The password is too short Heslo je příliš krátké - + The password is just rotated old one Heslo je jen některé z předchozích - + The password contains less than %1 character classes Heslo obsahuje méně než %1 druhů znaků - + The password does not contain enough character classes Heslo není tvořeno dostatečným počtem druhů znaků - + The password contains more than %1 same characters consecutively Heslo obsahuje více než %1 stejných znaků za sebou - + The password contains too many same characters consecutively Heslo obsahuje příliš mnoho stejných znaků za sebou - + The password contains more than %1 characters of the same class consecutively Heslo obsahuje více než %1 znaků ze stejné třídy za sebou - + The password contains too many characters of the same class consecutively Heslo obsahuje příliš mnoho znaků stejného druhu za sebou - + The password contains monotonic sequence longer than %1 characters Heslo obsahuje monotónní posloupnost delší než %1 znaků - + The password contains too long of a monotonic character sequence Heslo obsahuje příliš dlouhou monotónní posloupnost - + No password supplied Nebylo zadáno žádné heslo - + Cannot obtain random numbers from the RNG device Nedaří se získat náhodná čísla ze zařízení generátoru náhodných čísel (RNG) - + Password generation failed - required entropy too low for settings Vytvoření hesla se nezdařilo – úroveň nahodilosti je příliš nízká - + The password fails the dictionary check - %1 Heslo je slovníkové – %1 - + The password fails the dictionary check Heslo je slovníkové - + Unknown setting - %1 Neznámé nastavení – %1 - + Unknown setting Neznámé nastavení - + Bad integer value of setting - %1 Chybná celočíselná hodnota nastavení – %1 - + Bad integer value Chybná celočíselná hodnota - + Setting %1 is not of integer type Nastavení %1 není typu celé číslo - + Setting is not of integer type Nastavení není typu celé číslo - + Setting %1 is not of string type Nastavení %1 není typu řetězec - + Setting is not of string type Nastavení není typu řetězec - + Opening the configuration file failed Nepodařilo se otevřít soubor s nastaveními - + The configuration file is malformed Soubor s nastaveními nemá správný formát - + Fatal failure Fatální nezdar - + Unknown error Neznámá chyba - + Password is empty Heslo není vyplněné @@ -2531,67 +2539,67 @@ Instalační program bude ukončen a všechny změny ztraceny. PartitionViewStep - + Gathering system information... Shromažďování informací o systému… - + Partitions Oddíly - + Install %1 <strong>alongside</strong> another operating system. Nainstalovat %1 <strong>vedle</strong> dalšího operačního systému. - + <strong>Erase</strong> disk and install %1. <strong>Smazat</strong> obsah jednotky a nainstalovat %1. - + <strong>Replace</strong> a partition with %1. <strong>Nahradit</strong> oddíl %1. - + <strong>Manual</strong> partitioning. <strong>Ruční</strong> dělení úložiště. - + Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). Nainstalovat %1 <strong>vedle</strong> dalšího operačního systému na disk <strong>%2</strong> (%3). - + <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. <strong>Vymazat</strong> obsah jednotky <strong>%2</strong> (%3) a nainstalovat %1. - + <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. <strong>Nahradit</strong> oddíl na jednotce <strong>%2</strong> (%3) %1. - + <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). <strong>Ruční</strong> dělení jednotky <strong>%1</strong> (%2). - + Disk <strong>%1</strong> (%2) Jednotka <strong>%1</strong> (%2) - + Current: Stávající: - + After: Potom: @@ -2636,12 +2644,12 @@ Instalační program bude ukončen a všechny změny ztraceny. Kromě šifrovaného kořenového oddílu byl vytvořen i nešifrovaný oddíl zavaděče.<br/><br/>To by mohl být bezpečnostní problém, protože na nešifrovaném oddílu jsou důležité soubory systému.<br/>Pokud chcete, můžete pokračovat, ale odemykání souborového systému bude probíhat později při startu systému.<br/>Pro zašifrování oddílu zavaděče se vraťte a vytvořte ho vybráním možnosti <strong>Šifrovat</strong> v okně při vytváření oddílu. - + has at least one disk device available. má k dispozici alespoň jedno zařízení pro ukládání dat. - + There are no partitions to install on. Nejsou zde žádné oddíly na které by se dalo nainstalovat. @@ -2856,7 +2864,8 @@ Výstup: <p>This computer does not satisfy some of the recommended requirements for setting up %1.<br/> Setup can continue, but some features might be disabled.</p> - + <p>Tento počítač nesplňuje některé doporučené požadavky pro instalaci %1.<br/> + Instalace může pokračovat, ale některé funkce mohou být vypnuty.</p> @@ -2967,13 +2976,15 @@ Výstup: <p>This computer does not satisfy the minimum requirements for installing %1.<br/> Installation cannot continue.</p> - + <p>Tento počítač nesplňuje minimální požadavky pro instalaci %1.<br/> + Instalace nemůže pokračovat.</p> <p>This computer does not satisfy some of the recommended requirements for setting up %1.<br/> Setup can continue, but some features might be disabled.</p> - + <p>Tento počítač nesplňuje některé doporučené požadavky pro instalaci %1.<br/> + Instalace může pokračovat, ale některé funkce mohou být vypnuty.</p> @@ -3444,18 +3455,18 @@ Výstup: Configuring KDE user feedback. - + Nastavuje se zpětná vazba od uživatele pro KDE Error in KDE user feedback configuration. - + Chyba v nastavení zpětné vazby od uživatele pro KDE. Could not configure KDE user feedback correctly, script error %1. - + Nepodařilo se správně nastavit zpětnou vazbu KDE uživatele, chyba ve skriptu %1. @@ -3507,7 +3518,7 @@ Výstup: <html><head/><body><p>Click here to send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> - + <html><head/><body><p>Kliknutím sem nastavíte neodesílání <span style=" font-weight:600;">vůbec žádných informací</span> o vaší instalaci.</p></body></html> @@ -3517,22 +3528,22 @@ Výstup: Tracking helps %1 to see how often it is installed, what hardware it is installed on and which applications are used. To see what will be sent, please click the help icon next to each area. - + Sledování pomůže %1 zjistit, jak často je instalováno, na jakém hardware a které aplikace jsou používány. Pro zobrazení toho, co je odesíláno, klikněte na ikonu nápovědy vedle každé z oblastí. By selecting this you will send information about your installation and hardware. This information will only be sent <b>once</b> after the installation finishes. - + Výběrem tohoto pošlete informace o své instalaci a hardware. Tyto údaje budou poslány <b>pouze jednorázově</b> po dokončení instalace. By selecting this you will periodically send information about your <b>machine</b> installation, hardware and applications, to %1. - + Výběrem tohoto budete pravidelně odesílat informace o instalaci na váš <b>počítač</b>, o hardwaru a aplikacích do %1. By selecting this you will regularly send information about your <b>user</b> installation, hardware, applications and application usage patterns, to %1. - + Výběrem tohoto budete pravidelně odesílat informace o vaší <b>uživatelské</b> instalaci, hardware, aplikacích a způsobu využití aplikací do %1. @@ -3546,17 +3557,17 @@ Výstup: UsersPage - + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>Pokud bude tento počítač používat více lidí, můžete přidat uživatelské účty po dokončení instalace.</small> - + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> <small>Pokud bude tento počítač používat více lidí, můžete přidat uživatelské účty po dokončení instalace.</small> - + Your passwords do not match! Zadání hesla se neshodují! @@ -3564,7 +3575,7 @@ Výstup: UsersViewStep - + Users Uživatelé @@ -3766,7 +3777,18 @@ Výstup: development is sponsored by <br/> <a href='http://www.blue-systems.com/'>Blue Systems</a> - Liberating Software. - + <h1>%1</h1><br/> + <strong>%2<br/> + pro %3</strong><br/><br/> + Autorská práva 2014-2017 Teo Mrnjavac &lt;teo@kde.org&gt;<br/> + Autorská práva 2017-2020 Adriaan de Groot &lt;groot@kde.org&gt;<br/> + Poděkování <a href='https://calamares.io/team/'>kolektivu Calamares</a> + a překladatelskému kolektivu <a href='https://www.transifex.com/calamares/calamares/'>Calamares + </a>.<br/><br/> + Vývoj <a href='https://calamares.io/'>Calamares</a> + je sponzorován společností <br/> + <a href='http://www.blue-systems.com/'>Blue Systems</a> – + osvobozujeme software. @@ -3780,13 +3802,15 @@ Výstup: <h1>Languages</h1> </br> The system locale setting affects the language and character set for some command line user interface elements. The current setting is <strong>%1</strong>. - + <h1>Jazyky</h1> </br> + Systémová místní a jazyková nastavení ovlivní jazyk a znakovou sadu některých prvků uživatelského rozhraní příkazového řádku. Stávající nastavení je <strong>%1</strong>. <h1>Locales</h1> </br> The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. - + <h1>Místní a jazyková nastavení</h1> </br> + Místní a jazyková nastavení ovlivní formát čísel a datumů. Stávající nastavení je <strong>%1</strong>. @@ -3842,7 +3866,7 @@ Výstup: localeq - + Change Změnit diff --git a/lang/calamares_da.ts b/lang/calamares_da.ts index 7e6340a464..c2c5d73d12 100644 --- a/lang/calamares_da.ts +++ b/lang/calamares_da.ts @@ -510,134 +510,134 @@ Installationsprogrammet vil stoppe og alle ændringer vil gå tabt.Formular - + Select storage de&vice: Vælg lageren&hed: - - - - + + + + Current: Nuværende: - + After: Efter: - + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. <strong>Manuel partitionering</strong><br/>Du kan selv oprette og ændre størrelse på partitioner. - + Reuse %1 as home partition for %2. Genbrug %1 som hjemmepartition til %2. - + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> <strong>Vælg en partition der skal mindskes, træk herefter den nederste bjælke for at ændre størrelsen</strong> - + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. %1 vil blive skrumpet til %2 MiB og en ny %3 MiB partition vil blive oprettet for %4. - + Boot loader location: Placering af bootloader: - + <strong>Select a partition to install on</strong> <strong>Vælg en partition at installere på</strong> - + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. En EFI-partition blev ikke fundet på systemet. Gå venligst tilbage og brug manuel partitionering til at opsætte %1. - + The EFI system partition at %1 will be used for starting %2. EFI-systempartitionen ved %1 vil blive brugt til at starte %2. - + EFI system partition: EFI-systempartition: - + This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Lagerenheden ser ikke ud til at indeholde et styresystem. Hvad ønsker du at gøre?<br/>Du vil få mulighed for at se og bekræfte dine valg før der sker ændringer til lagerenheden. - - - - + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>Slet disk</strong><br/>Det vil <font color="red">slette</font> alt data på den valgte lagerenhed. - - - - + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Installér ved siden af</strong><br/>Installationsprogrammet vil mindske en partition for at gøre plads til %1. - - - - + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>Erstat en partition</strong><br/>Erstatter en partition med %1. - + This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Lagerenheden har %1 på sig. Hvad ønsker du at gøre?<br/>Du vil få mulighed for at se og bekræfte dine valg før det sker ændringer til lagerenheden. - + This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Lagerenheden indeholder allerede et styresystem. Hvad ønsker du at gøre?<br/>Du vil få mulighed for at se og bekræfte dine valg før der sker ændringer til lagerenheden. - + This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Lagerenheden indeholder flere styresystemer. Hvad ønsker du at gøre?<br/>Du vil få mulighed for at se og bekræfte dine valg før der sker ændringer til lagerenheden. - + No Swap Ingen swap - + Reuse Swap Genbrug swap - + Swap (no Hibernate) Swap (ingen dvale) - + Swap (with Hibernate) Swap (med dvale) - + Swap to file Swap til fil @@ -715,17 +715,17 @@ Installationsprogrammet vil stoppe og alle ændringer vil gå tabt.Sæt tastaturlayout til %1/%2. - + Set timezone to %1/%2. Indstil tidszone til %1/%2. - + The system language will be set to %1. Systemsproget vil blive sat til %1. - + The numbers and dates locale will be set to %1. Lokalitet for tal og datoer vil blive sat til %1. @@ -795,42 +795,42 @@ Installationsprogrammet vil stoppe og alle ændringer vil gå tabt.<h1>Velkommen til %1-installationsprogrammet</h1> - + Your username is too long. Dit brugernavn er for langt. - + '%1' is not allowed as username. '%1' er ikke tilladt som brugernavn. - + Your username must start with a lowercase letter or underscore. Dit brugernavn skal begynde med et bogstav med småt eller understregning. - + Only lowercase letters, numbers, underscore and hyphen are allowed. Det er kun tilladt at bruge bogstaver med småt, tal, understregning og bindestreg. - + Your hostname is too short. Dit værtsnavn er for kort. - + Your hostname is too long. Dit værtsnavn er for langt. - + '%1' is not allowed as hostname. '%1' er ikke tilladt som værtsnavn. - + Only letters, numbers, underscore and hyphen are allowed. Det er kun tilladt at bruge bogstaver, tal, understregning og bindestreg. @@ -1251,7 +1251,8 @@ Installationsprogrammet vil stoppe og alle ændringer vil gå tabt.Bekræft adgangskode - + + Please enter the same passphrase in both boxes. Indtast venligst samme adgangskode i begge bokse. @@ -1703,18 +1704,18 @@ Installationsprogrammet vil stoppe og alle ændringer vil gå tabt. LocalePage - + Region: Region: - + Zone: Zone: - - + + &Change... &Skift ... @@ -1792,7 +1793,12 @@ Installationsprogrammet vil stoppe og alle ændringer vil gå tabt. Map - + + Timezone: %1 + Tidszone: %1 + + + Please select your preferred location on the map so the installer can suggest the locale and timezone settings for you. You can fine-tune the suggested settings below. Search the map by dragging to move and using the +/- buttons to zoom in/out or use mouse scrolling for zooming. @@ -1955,247 +1961,247 @@ Installationsprogrammet vil stoppe og alle ændringer vil gå tabt. PWQ - + Password is too short Adgangskoden er for kort - + Password is too long Adgangskoden er for lang - + Password is too weak Adgangskoden er for svag - + Memory allocation error when setting '%1' Fejl ved allokering af hukommelse da '%1' blev sat - + Memory allocation error Fejl ved allokering af hukommelse - + The password is the same as the old one Adgangskoden er den samme som den gamle - + The password is a palindrome Adgangskoden er et palindrom - + The password differs with case changes only Adgangskoden har kun ændringer i store/små bogstaver - + The password is too similar to the old one Adgangskoden minder for meget om den gamle - + The password contains the user name in some form Adgangskoden indeholder i nogen form brugernavnet - + The password contains words from the real name of the user in some form Adgangskoden indeholder i nogen form ord fra brugerens rigtige navn - + The password contains forbidden words in some form Adgangskoden indeholder i nogen form forbudte ord - + The password contains less than %1 digits Adgangskoden indeholder færre end %1 cifre - + The password contains too few digits Adgangskoden indeholder for få cifre - + The password contains less than %1 uppercase letters Adgangskoden indeholder færre end %1 bogstaver med stort - + The password contains too few uppercase letters Adgangskoden indeholder for få bogstaver med stort - + The password contains less than %1 lowercase letters Adgangskoden indeholder færre end %1 bogstaver med småt - + The password contains too few lowercase letters Adgangskoden indeholder for få bogstaver med småt - + The password contains less than %1 non-alphanumeric characters Adgangskoden indeholder færre end %1 ikke-alfanumeriske tegn - + The password contains too few non-alphanumeric characters Adgangskoden indeholder for få ikke-alfanumeriske tegn - + The password is shorter than %1 characters Adgangskoden er kortere end %1 tegn - + The password is too short Adgangskoden er for kort - + The password is just rotated old one Adgangskoden er blot det gamle hvor der er byttet om på tegnene - + The password contains less than %1 character classes Adgangskoden indeholder færre end %1 tegnklasser - + The password does not contain enough character classes Adgangskoden indeholder ikke nok tegnklasser - + The password contains more than %1 same characters consecutively Adgangskoden indeholder flere end %1 af de samme tegn i træk - + The password contains too many same characters consecutively Adgangskoden indeholder for mange af de samme tegn i træk - + The password contains more than %1 characters of the same class consecutively Adgangskoden indeholder flere end %1 tegn af den samme klasse i træk - + The password contains too many characters of the same class consecutively Adgangskoden indeholder for mange tegn af den samme klasse i træk - + The password contains monotonic sequence longer than %1 characters Adgangskoden indeholder monoton sekvens som er længere end %1 tegn - + The password contains too long of a monotonic character sequence Adgangskoden indeholder en monoton tegnsekvens som er for lang - + No password supplied Der er ikke angivet nogen adgangskode - + Cannot obtain random numbers from the RNG device Kan ikke få tilfældige tal fra RNG-enhed - + Password generation failed - required entropy too low for settings Generering af adgangskode mislykkedes - krævede entropi er for lav til indstillinger - + The password fails the dictionary check - %1 Adgangskoden bestod ikke ordbogstjekket - %1 - + The password fails the dictionary check Adgangskoden bestod ikke ordbogstjekket - + Unknown setting - %1 Ukendt indstilling - %1 - + Unknown setting Ukendt indstilling - + Bad integer value of setting - %1 Ugyldig heltalsværdi til indstilling - %1 - + Bad integer value Ugyldig heltalsværdi - + Setting %1 is not of integer type Indstillingen %1 er ikke en helttalsstype - + Setting is not of integer type Indstillingen er ikke en helttalsstype - + Setting %1 is not of string type Indstillingen %1 er ikke en strengtype - + Setting is not of string type Indstillingen er ikke en strengtype - + Opening the configuration file failed Åbningen af konfigurationsfilen mislykkedes - + The configuration file is malformed Konfigurationsfilen er forkert udformet - + Fatal failure Fatal fejl - + Unknown error Ukendt fejl - + Password is empty Adgangskoden er tom @@ -2529,67 +2535,67 @@ Installationsprogrammet vil stoppe og alle ændringer vil gå tabt. PartitionViewStep - + Gathering system information... Indsamler systeminformation ... - + Partitions Partitioner - + Install %1 <strong>alongside</strong> another operating system. Installér %1 <strong>ved siden af</strong> et andet styresystem. - + <strong>Erase</strong> disk and install %1. <strong>Slet</strong> disk og installér %1. - + <strong>Replace</strong> a partition with %1. <strong>Erstat</strong> en partition med %1. - + <strong>Manual</strong> partitioning. <strong>Manuel</strong> partitionering. - + Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). Installér %1 <strong>ved siden af</strong> et andet styresystem på disk <strong>%2</strong> (%3). - + <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. <strong>Slet</strong> disk <strong>%2</strong> (%3) og installér %1. - + <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. <strong>Erstat</strong> en partition på disk <strong>%2</strong> (%3) med %1. - + <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). <strong>Manuel</strong> partitionering på disk <strong>%1</strong> (%2). - + Disk <strong>%1</strong> (%2) Disk <strong>%1</strong> (%2) - + Current: Nuværende: - + After: Efter: @@ -2634,12 +2640,12 @@ Installationsprogrammet vil stoppe og alle ændringer vil gå tabt.En separat bootpartition blev opsat sammen med en krypteret rodpartition, men bootpartitionen er ikke krypteret.<br/><br/>Der er sikkerhedsmæssige bekymringer med denne slags opsætning, da vigtige systemfiler er gemt på en ikke-krypteret partition.<br/>Du kan fortsætte hvis du vil, men oplåsning af filsystemet sker senere under systemets opstart.<br/>For at kryptere bootpartitionen skal du gå tilbage og oprette den igen, vælge <strong>Kryptér</strong> i partitionsoprettelsesvinduet. - + has at least one disk device available. har mindst én tilgængelig diskenhed. - + There are no partitions to install on. Der er ikke nogen partitioner at installere på. @@ -3549,17 +3555,17 @@ setting UsersPage - + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>Hvis mere end én person bruger computeren, kan du oprette flere konti efter opsætningen.</small> - + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> <small>Hvis mere end én person bruger computeren, kan du oprette flere konti efter installationen.</small> - + Your passwords do not match! Dine adgangskoder er ikke ens! @@ -3567,7 +3573,7 @@ setting UsersViewStep - + Users Brugere @@ -3858,7 +3864,7 @@ setting localeq - + Change Skift diff --git a/lang/calamares_de.ts b/lang/calamares_de.ts index 909d390b8d..a70360e823 100644 --- a/lang/calamares_de.ts +++ b/lang/calamares_de.ts @@ -510,134 +510,134 @@ Dies wird das Installationsprogramm beenden und alle Änderungen gehen verloren. Form - + Select storage de&vice: Speichermedium auswählen - - - - + + + + Current: Aktuell: - + After: Nachher: - + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. <strong>Manuelle Partitionierung</strong><br/>Sie können Partitionen eigenhändig erstellen oder in der Grösse verändern. - + Reuse %1 as home partition for %2. %1 als Home-Partition für %2 wiederverwenden. - + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> <strong>Wählen Sie die zu verkleinernde Partition, dann ziehen Sie den Regler, um die Größe zu ändern</strong> - + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. %1 wird auf %2MiB verkleinert und eine neue Partition mit einer Größe von %3MiB wird für %4 erstellt werden. - + Boot loader location: Installationsziel des Bootloaders: - + <strong>Select a partition to install on</strong> <strong>Wählen Sie eine Partition für die Installation</strong> - + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. Es wurde keine EFI-Systempartition auf diesem System gefunden. Bitte gehen Sie zurück und nutzen Sie die manuelle Partitionierung für das Einrichten von %1. - + The EFI system partition at %1 will be used for starting %2. Die EFI-Systempartition %1 wird benutzt, um %2 zu starten. - + EFI system partition: EFI-Systempartition: - + This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Auf diesem Speichermedium scheint kein Betriebssystem installiert zu sein. Was möchten Sie tun?<br/>Sie können Ihre Auswahl überprüfen und bestätigen, bevor Änderungen auf diesem Speichermedium vorgenommen werden. - - - - + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>Festplatte löschen</strong><br/>Dies wird alle vorhandenen Daten auf dem gewählten Speichermedium <font color="red">löschen</font>. - - - - + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Parallel dazu installieren</strong><br/>Das Installationsprogramm wird eine Partition verkleinern, um Platz für %1 zu schaffen. - - - - + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>Ersetze eine Partition</strong><br/>Ersetzt eine Partition durch %1. - + This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Auf diesem Speichermedium ist %1 installiert. Was möchten Sie tun?<br/>Sie können Ihre Auswahl überprüfen und bestätigen, bevor Änderungen an dem Speichermedium vorgenommen werden. - + This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Dieses Speichermedium enthält bereits ein Betriebssystem. Was möchten Sie tun?<br/>Sie können Ihre Auswahl überprüfen und bestätigen, bevor Änderungen an dem Speichermedium vorgenommen wird. - + This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Auf diesem Speichermedium sind mehrere Betriebssysteme installiert. Was möchten Sie tun?<br/>Sie können Ihre Auswahl überprüfen und bestätigen, bevor Änderungen an dem Speichermedium vorgenommen werden. - + No Swap Kein Swap - + Reuse Swap Swap wiederverwenden - + Swap (no Hibernate) Swap (ohne Ruhezustand) - + Swap (with Hibernate) Swap (mit Ruhezustand) - + Swap to file Auslagerungsdatei verwenden @@ -715,17 +715,17 @@ Dies wird das Installationsprogramm beenden und alle Änderungen gehen verloren. Setze Tastaturbelegung auf %1/%2. - + Set timezone to %1/%2. - + The system language will be set to %1. Die Systemsprache wird auf %1 gestellt. - + The numbers and dates locale will be set to %1. Das Format für Zahlen und Datum wird auf %1 gesetzt. @@ -795,42 +795,42 @@ Dies wird das Installationsprogramm beenden und alle Änderungen gehen verloren. <h1>Willkommen zum %1 Installationsprogramm</h1> - + Your username is too long. Ihr Nutzername ist zu lang. - + '%1' is not allowed as username. - + Your username must start with a lowercase letter or underscore. Ihr Benutzername muss mit einem Kleinbuchstaben oder Unterstrich beginnen. - + Only lowercase letters, numbers, underscore and hyphen are allowed. Es sind nur Kleinbuchstaben, Zahlen, Unterstrich und Bindestrich erlaubt. - + Your hostname is too short. Ihr Computername ist zu kurz. - + Your hostname is too long. Ihr Computername ist zu lang. - + '%1' is not allowed as hostname. - + Only letters, numbers, underscore and hyphen are allowed. Es sind nur Buchstaben, Zahlen, Unter- und Bindestriche erlaubt. @@ -1251,7 +1251,8 @@ Dies wird das Installationsprogramm beenden und alle Änderungen gehen verloren. Passwort wiederholen - + + Please enter the same passphrase in both boxes. Bitte tragen Sie dasselbe Passwort in beide Felder ein. @@ -1703,18 +1704,18 @@ Dies wird das Installationsprogramm beenden und alle Änderungen gehen verloren. LocalePage - + Region: Region: - + Zone: Zeitzone: - - + + &Change... &Ändern... @@ -1792,7 +1793,12 @@ Dies wird das Installationsprogramm beenden und alle Änderungen gehen verloren. Map - + + Timezone: %1 + Zeitzone: %1 + + + Please select your preferred location on the map so the installer can suggest the locale and timezone settings for you. You can fine-tune the suggested settings below. Search the map by dragging to move and using the +/- buttons to zoom in/out or use mouse scrolling for zooming. @@ -1955,247 +1961,247 @@ Dies wird das Installationsprogramm beenden und alle Änderungen gehen verloren. PWQ - + Password is too short Das Passwort ist zu kurz - + Password is too long Das Passwort ist zu lang - + Password is too weak Das Passwort ist zu schwach - + Memory allocation error when setting '%1' Fehler bei der Speicherzuweisung beim Einrichten von '%1' - + Memory allocation error Fehler bei der Speicherzuweisung - + The password is the same as the old one Das Passwort ist dasselbe wie das alte - + The password is a palindrome Das Passwort ist ein Palindrom - + The password differs with case changes only Das Passwort unterscheidet sich nur durch Groß- und Kleinschreibung - + The password is too similar to the old one Das Passwort ist dem alten zu ähnlich - + The password contains the user name in some form Das Passwort enthält eine Form des Benutzernamens - + The password contains words from the real name of the user in some form Das Passwort enthält Teile des Klarnamens des Benutzers - + The password contains forbidden words in some form Das Passwort enthält verbotene Wörter - + The password contains less than %1 digits Das Passwort hat weniger als %1 Stellen - + The password contains too few digits Das Passwort hat zu wenige Stellen - + The password contains less than %1 uppercase letters Das Passwort enthält weniger als %1 Großbuchstaben - + The password contains too few uppercase letters Das Passwort enthält zu wenige Großbuchstaben - + The password contains less than %1 lowercase letters Das Passwort enthält weniger als %1 Kleinbuchstaben - + The password contains too few lowercase letters Das Passwort enthält zu wenige Kleinbuchstaben - + The password contains less than %1 non-alphanumeric characters Das Passwort enthält weniger als %1 nicht-alphanumerische Zeichen - + The password contains too few non-alphanumeric characters Das Passwort enthält zu wenige nicht-alphanumerische Zeichen - + The password is shorter than %1 characters Das Passwort hat weniger als %1 Stellen - + The password is too short Das Passwort ist zu kurz - + The password is just rotated old one Das Passwort wurde schon einmal verwendet - + The password contains less than %1 character classes Das Passwort enthält weniger als %1 verschiedene Zeichenarten - + The password does not contain enough character classes Das Passwort enthält nicht genügend verschiedene Zeichenarten - + The password contains more than %1 same characters consecutively Das Passwort enthält mehr als %1 gleiche Zeichen am Stück - + The password contains too many same characters consecutively Das Passwort enthält zu viele gleiche Zeichen am Stück - + The password contains more than %1 characters of the same class consecutively Das Passwort enthält mehr als %1 gleiche Zeichenarten am Stück - + The password contains too many characters of the same class consecutively Das Passwort enthält zu viele gleiche Zeichenarten am Stück - + The password contains monotonic sequence longer than %1 characters Das Passwort enthält eine gleichartige Sequenz von mehr als %1 Zeichen - + The password contains too long of a monotonic character sequence Das Passwort enthält eine gleichartige Sequenz von zu großer Länge - + No password supplied Kein Passwort angegeben - + Cannot obtain random numbers from the RNG device Zufallszahlen konnten nicht vom Zufallszahlengenerator abgerufen werden - + Password generation failed - required entropy too low for settings Passwortgeneration fehlgeschlagen - Zufallszahlen zu schwach für die gewählten Einstellungen - + The password fails the dictionary check - %1 Das Passwort besteht den Wörterbuch-Test nicht - %1 - + The password fails the dictionary check Das Passwort besteht den Wörterbuch-Test nicht - + Unknown setting - %1 Unbekannte Einstellung - %1 - + Unknown setting Unbekannte Einstellung - + Bad integer value of setting - %1 Fehlerhafter Integerwert der Einstellung - %1 - + Bad integer value Fehlerhafter Integerwert - + Setting %1 is not of integer type Die Einstellung %1 ist kein Integerwert - + Setting is not of integer type Die Einstellung ist kein Integerwert - + Setting %1 is not of string type Die Einstellung %1 ist keine Zeichenkette - + Setting is not of string type Die Einstellung ist keine Zeichenkette - + Opening the configuration file failed Öffnen der Konfigurationsdatei fehlgeschlagen - + The configuration file is malformed Die Konfigurationsdatei ist falsch strukturiert - + Fatal failure Fataler Fehler - + Unknown error Unbekannter Fehler - + Password is empty Passwort nicht vergeben @@ -2529,67 +2535,67 @@ Dies wird das Installationsprogramm beenden und alle Änderungen gehen verloren. PartitionViewStep - + Gathering system information... Sammle Systeminformationen... - + Partitions Partitionen - + Install %1 <strong>alongside</strong> another operating system. Installiere %1 <strong>neben</strong> einem anderen Betriebssystem. - + <strong>Erase</strong> disk and install %1. <strong>Lösche</strong> Festplatte und installiere %1. - + <strong>Replace</strong> a partition with %1. <strong>Ersetze</strong> eine Partition durch %1. - + <strong>Manual</strong> partitioning. <strong>Manuelle</strong> Partitionierung. - + Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). %1 <strong>parallel</strong> zu einem anderen Betriebssystem auf der Festplatte <strong>%2</strong> (%3) installieren. - + <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. Festplatte <strong>%2</strong> <strong>löschen</strong> (%3) und %1 installieren. - + <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. Eine Partition auf Festplatte <strong>%2</strong> (%3) durch %1 <strong>ersetzen</strong>. - + <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). <strong>Manuelle</strong> Partitionierung auf Festplatte <strong>%1</strong> (%2). - + Disk <strong>%1</strong> (%2) Festplatte <strong>%1</strong> (%2) - + Current: Aktuell: - + After: Nachher: @@ -2634,12 +2640,12 @@ Dies wird das Installationsprogramm beenden und alle Änderungen gehen verloren. Eine separate Bootpartition wurde zusammen mit einer verschlüsselten Rootpartition erstellt, die Bootpartition ist aber unverschlüsselt.<br/><br/> Dies ist sicherheitstechnisch nicht optimal, da wichtige Systemdateien auf der unverschlüsselten Bootpartition gespeichert werden.<br/>Wenn Sie wollen, können Sie fortfahren, aber das Entschlüsseln des Dateisystems wird erst später während des Systemstarts erfolgen.<br/>Um die Bootpartition zu verschlüsseln, gehen Sie zurück und erstellen Sie diese neu, indem Sie bei der Partitionierung <strong>Verschlüsseln</strong> wählen. - + has at least one disk device available. mindestens eine Festplatte zur Verfügung hat - + There are no partitions to install on. Keine Partitionen für die Installation verfügbar. @@ -3544,17 +3550,17 @@ Ausgabe: UsersPage - + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>Falls dieser Computer von mehr als einer Person benutzt werden soll, können weitere Benutzerkonten nach der Installation eingerichtet werden.</small> - + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> <small>Falls dieser Computer von mehr als einer Person benutzt werden soll, können weitere Benutzerkonten nach der Installation eingerichtet werden.</small> - + Your passwords do not match! Ihre Passwörter stimmen nicht überein! @@ -3562,7 +3568,7 @@ Ausgabe: UsersViewStep - + Users Benutzer @@ -3851,7 +3857,7 @@ Liberating Software. localeq - + Change Ändern diff --git a/lang/calamares_el.ts b/lang/calamares_el.ts index b888cfa0b2..53706c48ec 100644 --- a/lang/calamares_el.ts +++ b/lang/calamares_el.ts @@ -508,134 +508,134 @@ The installer will quit and all changes will be lost. Τύπος - + Select storage de&vice: Επιλέξτε συσκευή απ&οθήκευσης: - - - - + + + + Current: Τρέχον: - + After: Μετά: - + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. <strong>Χειροκίνητη τμηματοποίηση</strong><br/>Μπορείτε να δημιουργήσετε κατατμήσεις ή να αλλάξετε το μέγεθός τους μόνοι σας. - + Reuse %1 as home partition for %2. - + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> <strong>Επιλέξτε ένα διαμέρισμα για σμίκρυνση, και μετά σύρετε το κάτω τμήμα της μπάρας για αλλαγή του μεγέθους</strong> - + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. - + Boot loader location: Τοποθεσία προγράμματος εκκίνησης: - + <strong>Select a partition to install on</strong> <strong>Επιλέξτε διαμέρισμα για την εγκατάσταση</strong> - + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. Πουθενά στο σύστημα δεν μπορεί να ανιχθευθεί μία κατάτμηση EFI. Παρακαλώ επιστρέψτε πίσω και χρησιμοποιήστε τη χειροκίνητη τμηματοποίηση για την εγκατάσταση του %1. - + The EFI system partition at %1 will be used for starting %2. Η κατάτμηση συστήματος EFI στο %1 θα χρησιμοποιηθεί για την εκκίνηση του %2. - + EFI system partition: Κατάτμηση συστήματος EFI: - + This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Η συσκευή αποθήκευσης δεν φαίνεται να διαθέτει κάποιο λειτουργικό σύστημα. Τί θα ήθελες να κάνεις;<br/>Θα έχεις την δυνατότητα να επιβεβαιώσεις και αναθεωρήσεις τις αλλαγές πριν γίνει οποιαδήποτε αλλαγή στην συσκευή αποθήκευσης. - - - - + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>Διαγραφή του δίσκου</strong><br/>Αυτό θα <font color="red">διαγράψει</font> όλα τα αρχεία στην επιλεγμένη συσκευή αποθήκευσης. - - - - + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Εγκατάσταση σε επαλληλία</strong><br/>Η εγκατάσταση θα συρρικνώσει μία κατάτμηση για να κάνει χώρο για το %1. - - - - + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>Αντικατάσταση μίας κατάτμησης</strong><br/>Αντικαθιστά μία κατάτμηση με το %1. - + This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. - + This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. - + This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. - + No Swap - + Reuse Swap - + Swap (no Hibernate) - + Swap (with Hibernate) - + Swap to file @@ -713,17 +713,17 @@ The installer will quit and all changes will be lost. Ορισμός της διάταξης πληκτρολογίου σε %1/%2. - + Set timezone to %1/%2. - + The system language will be set to %1. Η τοπική γλώσσα του συστήματος έχει οριστεί σε %1. - + The numbers and dates locale will be set to %1. @@ -793,42 +793,42 @@ The installer will quit and all changes will be lost. - + Your username is too long. Το όνομα χρήστη είναι πολύ μακρύ. - + '%1' is not allowed as username. - + Your username must start with a lowercase letter or underscore. - + Only lowercase letters, numbers, underscore and hyphen are allowed. - + Your hostname is too short. Το όνομα υπολογιστή είναι πολύ σύντομο. - + Your hostname is too long. Το όνομα υπολογιστή είναι πολύ μακρύ. - + '%1' is not allowed as hostname. - + Only letters, numbers, underscore and hyphen are allowed. @@ -1249,7 +1249,8 @@ The installer will quit and all changes will be lost. Επιβεβαίωση λέξης κλειδί - + + Please enter the same passphrase in both boxes. Παρακαλώ εισάγετε την ίδια λέξη κλειδί και στα δύο κουτιά. @@ -1701,18 +1702,18 @@ The installer will quit and all changes will be lost. LocalePage - + Region: Περιοχή: - + Zone: Ζώνη: - - + + &Change... &Αλλαγή... @@ -1790,7 +1791,12 @@ The installer will quit and all changes will be lost. Map - + + Timezone: %1 + + + + Please select your preferred location on the map so the installer can suggest the locale and timezone settings for you. You can fine-tune the suggested settings below. Search the map by dragging to move and using the +/- buttons to zoom in/out or use mouse scrolling for zooming. @@ -1951,247 +1957,247 @@ The installer will quit and all changes will be lost. PWQ - + Password is too short - + Password is too long - + Password is too weak - + Memory allocation error when setting '%1' - + Memory allocation error - + The password is the same as the old one - + The password is a palindrome - + The password differs with case changes only - + The password is too similar to the old one - + The password contains the user name in some form - + The password contains words from the real name of the user in some form - + The password contains forbidden words in some form - + The password contains less than %1 digits - + The password contains too few digits - + The password contains less than %1 uppercase letters - + The password contains too few uppercase letters - + The password contains less than %1 lowercase letters - + The password contains too few lowercase letters - + The password contains less than %1 non-alphanumeric characters - + The password contains too few non-alphanumeric characters - + The password is shorter than %1 characters - + The password is too short - + The password is just rotated old one - + The password contains less than %1 character classes - + The password does not contain enough character classes - + The password contains more than %1 same characters consecutively - + The password contains too many same characters consecutively - + The password contains more than %1 characters of the same class consecutively - + The password contains too many characters of the same class consecutively - + The password contains monotonic sequence longer than %1 characters - + The password contains too long of a monotonic character sequence - + No password supplied - + Cannot obtain random numbers from the RNG device - + Password generation failed - required entropy too low for settings - + The password fails the dictionary check - %1 - + The password fails the dictionary check - + Unknown setting - %1 - + Unknown setting - + Bad integer value of setting - %1 - + Bad integer value - + Setting %1 is not of integer type - + Setting is not of integer type - + Setting %1 is not of string type - + Setting is not of string type - + Opening the configuration file failed - + The configuration file is malformed - + Fatal failure - + Unknown error - + Password is empty @@ -2525,67 +2531,67 @@ The installer will quit and all changes will be lost. PartitionViewStep - + Gathering system information... Συλλογή πληροφοριών συστήματος... - + Partitions Κατατμήσεις - + Install %1 <strong>alongside</strong> another operating system. Εγκατάσταση του %1 <strong>παράλληλα με</strong> ένα άλλο λειτουργικό σύστημα στον δίσκο. - + <strong>Erase</strong> disk and install %1. <strong>Διαγραφή</strong> του δίσκου και εγκατάσταση του %1. - + <strong>Replace</strong> a partition with %1. <strong>Αντικατάσταση</strong> μιας κατάτμησης με το %1. - + <strong>Manual</strong> partitioning. <strong>Χειροκίνητη</strong> τμηματοποίηση. - + Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). Εγκατάσταση του %1 <strong>παράλληλα με</strong> ένα άλλο λειτουργικό σύστημα στον δίσκο<strong>%2</strong> (%3). - + <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. <strong>Διαγραφή</strong> του δίσκου <strong>%2</strong> (%3) και εγκατάσταση του %1. - + <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. <strong>Αντικατάσταση</strong> μιας κατάτμησης στον δίσκο <strong>%2</strong> (%3) με το %1. - + <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). <strong>Χειροκίνητη</strong> τμηματοποίηση του δίσκου <strong>%1</strong> (%2). - + Disk <strong>%1</strong> (%2) Δίσκος <strong>%1</strong> (%2) - + Current: Τρέχον: - + After: Μετά: @@ -2630,12 +2636,12 @@ The installer will quit and all changes will be lost. - + has at least one disk device available. - + There are no partitions to install on. @@ -3537,17 +3543,17 @@ Output: UsersPage - + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> - + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> - + Your passwords do not match! Οι κωδικοί πρόσβασης δεν ταιριάζουν! @@ -3555,7 +3561,7 @@ Output: UsersViewStep - + Users Χρήστες @@ -3833,7 +3839,7 @@ Output: localeq - + Change diff --git a/lang/calamares_en.ts b/lang/calamares_en.ts index e4773535e7..b90a3b0c5f 100644 --- a/lang/calamares_en.ts +++ b/lang/calamares_en.ts @@ -1795,7 +1795,7 @@ The installer will quit and all changes will be lost. Timezone: %1 - Timezone: %1 + Timezone: %1 diff --git a/lang/calamares_en_GB.ts b/lang/calamares_en_GB.ts index 9ab551aa1e..37b2bd4758 100644 --- a/lang/calamares_en_GB.ts +++ b/lang/calamares_en_GB.ts @@ -508,134 +508,134 @@ The installer will quit and all changes will be lost. Form - + Select storage de&vice: Select storage de&vice: - - - - + + + + Current: Current: - + After: After: - + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. - + Reuse %1 as home partition for %2. Reuse %1 as home partition for %2. - + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> - + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. - + Boot loader location: Boot loader location: - + <strong>Select a partition to install on</strong> <strong>Select a partition to install on</strong> - + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. - + The EFI system partition at %1 will be used for starting %2. The EFI system partition at %1 will be used for starting %2. - + EFI system partition: EFI system partition: - + This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. - - - - + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. - - - - + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. - - - - + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>Replace a partition</strong><br/>Replaces a partition with %1. - + This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. - + This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. - + This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. - + No Swap - + Reuse Swap - + Swap (no Hibernate) - + Swap (with Hibernate) - + Swap to file @@ -713,17 +713,17 @@ The installer will quit and all changes will be lost. Set keyboard layout to %1/%2. - + Set timezone to %1/%2. - + The system language will be set to %1. The system language will be set to %1. - + The numbers and dates locale will be set to %1. The numbers and dates locale will be set to %1. @@ -793,42 +793,42 @@ The installer will quit and all changes will be lost. - + Your username is too long. Your username is too long. - + '%1' is not allowed as username. - + Your username must start with a lowercase letter or underscore. - + Only lowercase letters, numbers, underscore and hyphen are allowed. - + Your hostname is too short. Your hostname is too short. - + Your hostname is too long. Your hostname is too long. - + '%1' is not allowed as hostname. - + Only letters, numbers, underscore and hyphen are allowed. @@ -1249,7 +1249,8 @@ The installer will quit and all changes will be lost. Confirm passphrase - + + Please enter the same passphrase in both boxes. Please enter the same passphrase in both boxes. @@ -1701,18 +1702,18 @@ The installer will quit and all changes will be lost. LocalePage - + Region: Region: - + Zone: Zone: - - + + &Change... &Change... @@ -1790,7 +1791,12 @@ The installer will quit and all changes will be lost. Map - + + Timezone: %1 + + + + Please select your preferred location on the map so the installer can suggest the locale and timezone settings for you. You can fine-tune the suggested settings below. Search the map by dragging to move and using the +/- buttons to zoom in/out or use mouse scrolling for zooming. @@ -1951,247 +1957,247 @@ The installer will quit and all changes will be lost. PWQ - + Password is too short Password is too short - + Password is too long Password is too long - + Password is too weak Password is too weak - + Memory allocation error when setting '%1' Memory allocation error when setting '%1' - + Memory allocation error Memory allocation error - + The password is the same as the old one The password is the same as the old one - + The password is a palindrome The password is a palindrome - + The password differs with case changes only The password differs with case changes only - + The password is too similar to the old one The password is too similar to the old one - + The password contains the user name in some form The password contains the user name in some form - + The password contains words from the real name of the user in some form The password contains words from the real name of the user in some form - + The password contains forbidden words in some form The password contains forbidden words in some form - + The password contains less than %1 digits The password contains less than %1 digits - + The password contains too few digits The password contains too few digits - + The password contains less than %1 uppercase letters The password contains less than %1 uppercase letters - + The password contains too few uppercase letters The password contains too few uppercase letters - + The password contains less than %1 lowercase letters The password contains less than %1 lowercase letters - + The password contains too few lowercase letters The password contains too few lowercase letters - + The password contains less than %1 non-alphanumeric characters The password contains less than %1 non-alphanumeric characters - + The password contains too few non-alphanumeric characters The password contains too few non-alphanumeric characters - + The password is shorter than %1 characters The password is shorter than %1 characters - + The password is too short The password is too short - + The password is just rotated old one The password is just rotated old one - + The password contains less than %1 character classes The password contains less than %1 character classes - + The password does not contain enough character classes The password does not contain enough character classes - + The password contains more than %1 same characters consecutively The password contains more than %1 same characters consecutively - + The password contains too many same characters consecutively The password contains too many same characters consecutively - + The password contains more than %1 characters of the same class consecutively The password contains more than %1 characters of the same class consecutively - + The password contains too many characters of the same class consecutively The password contains too many characters of the same class consecutively - + The password contains monotonic sequence longer than %1 characters The password contains monotonic sequence longer than %1 characters - + The password contains too long of a monotonic character sequence The password contains too long of a monotonic character sequence - + No password supplied No password supplied - + Cannot obtain random numbers from the RNG device Cannot obtain random numbers from the RNG device - + Password generation failed - required entropy too low for settings Password generation failed - required entropy too low for settings - + The password fails the dictionary check - %1 The password fails the dictionary check - %1 - + The password fails the dictionary check The password fails the dictionary check - + Unknown setting - %1 Unknown setting - %1 - + Unknown setting Unknown setting - + Bad integer value of setting - %1 Bad integer value of setting - %1 - + Bad integer value Bad integer value - + Setting %1 is not of integer type Setting %1 is not of integer type - + Setting is not of integer type Setting is not of integer type - + Setting %1 is not of string type Setting %1 is not of string type - + Setting is not of string type Setting is not of string type - + Opening the configuration file failed Opening the configuration file failed - + The configuration file is malformed The configuration file is malformed - + Fatal failure Fatal failure - + Unknown error Unknown error - + Password is empty @@ -2525,67 +2531,67 @@ The installer will quit and all changes will be lost. PartitionViewStep - + Gathering system information... Gathering system information... - + Partitions Partitions - + Install %1 <strong>alongside</strong> another operating system. Install %1 <strong>alongside</strong> another operating system. - + <strong>Erase</strong> disk and install %1. <strong>Erase</strong> disk and install %1. - + <strong>Replace</strong> a partition with %1. <strong>Replace</strong> a partition with %1. - + <strong>Manual</strong> partitioning. <strong>Manual</strong> partitioning. - + Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). - + <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. - + <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. - + <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). - + Disk <strong>%1</strong> (%2) Disk <strong>%1</strong> (%2) - + Current: Current: - + After: After: @@ -2630,12 +2636,12 @@ The installer will quit and all changes will be lost. A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window. - + has at least one disk device available. - + There are no partitions to install on. @@ -3540,17 +3546,17 @@ Output: UsersPage - + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> - + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> - + Your passwords do not match! Your passwords do not match! @@ -3558,7 +3564,7 @@ Output: UsersViewStep - + Users Users @@ -3836,7 +3842,7 @@ Output: localeq - + Change diff --git a/lang/calamares_eo.ts b/lang/calamares_eo.ts index 95dd4e9a90..69cf1c2126 100644 --- a/lang/calamares_eo.ts +++ b/lang/calamares_eo.ts @@ -508,134 +508,134 @@ La instalilo forlasos kaj ĉiuj ŝanĝoj perdos. Formularo - + Select storage de&vice: Elektita &tenada aparato - - - - + + + + Current: Nune: - + After: Poste: - + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. - + Reuse %1 as home partition for %2. - + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> - + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. - + Boot loader location: Allokigo de la Praŝargilo: - + <strong>Select a partition to install on</strong> - + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. - + The EFI system partition at %1 will be used for starting %2. - + EFI system partition: - + This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. - - - - + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. - - - - + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. - - - - + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. - + This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. - + This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. - + This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. - + No Swap - + Reuse Swap - + Swap (no Hibernate) - + Swap (with Hibernate) - + Swap to file @@ -713,17 +713,17 @@ La instalilo forlasos kaj ĉiuj ŝanĝoj perdos. - + Set timezone to %1/%2. - + The system language will be set to %1. - + The numbers and dates locale will be set to %1. @@ -793,42 +793,42 @@ La instalilo forlasos kaj ĉiuj ŝanĝoj perdos. - + Your username is too long. - + '%1' is not allowed as username. - + Your username must start with a lowercase letter or underscore. - + Only lowercase letters, numbers, underscore and hyphen are allowed. - + Your hostname is too short. - + Your hostname is too long. - + '%1' is not allowed as hostname. - + Only letters, numbers, underscore and hyphen are allowed. @@ -1249,7 +1249,8 @@ La instalilo forlasos kaj ĉiuj ŝanĝoj perdos. - + + Please enter the same passphrase in both boxes. @@ -1701,18 +1702,18 @@ La instalilo forlasos kaj ĉiuj ŝanĝoj perdos. LocalePage - + Region: - + Zone: - - + + &Change... &Ŝanĝu... @@ -1790,7 +1791,12 @@ La instalilo forlasos kaj ĉiuj ŝanĝoj perdos. Map - + + Timezone: %1 + + + + Please select your preferred location on the map so the installer can suggest the locale and timezone settings for you. You can fine-tune the suggested settings below. Search the map by dragging to move and using the +/- buttons to zoom in/out or use mouse scrolling for zooming. @@ -1951,247 +1957,247 @@ La instalilo forlasos kaj ĉiuj ŝanĝoj perdos. PWQ - + Password is too short - + Password is too long - + Password is too weak - + Memory allocation error when setting '%1' - + Memory allocation error - + The password is the same as the old one - + The password is a palindrome - + The password differs with case changes only - + The password is too similar to the old one - + The password contains the user name in some form - + The password contains words from the real name of the user in some form - + The password contains forbidden words in some form - + The password contains less than %1 digits - + The password contains too few digits - + The password contains less than %1 uppercase letters - + The password contains too few uppercase letters - + The password contains less than %1 lowercase letters - + The password contains too few lowercase letters - + The password contains less than %1 non-alphanumeric characters - + The password contains too few non-alphanumeric characters - + The password is shorter than %1 characters - + The password is too short - + The password is just rotated old one - + The password contains less than %1 character classes - + The password does not contain enough character classes - + The password contains more than %1 same characters consecutively - + The password contains too many same characters consecutively - + The password contains more than %1 characters of the same class consecutively - + The password contains too many characters of the same class consecutively - + The password contains monotonic sequence longer than %1 characters - + The password contains too long of a monotonic character sequence - + No password supplied - + Cannot obtain random numbers from the RNG device - + Password generation failed - required entropy too low for settings - + The password fails the dictionary check - %1 - + The password fails the dictionary check - + Unknown setting - %1 - + Unknown setting - + Bad integer value of setting - %1 - + Bad integer value - + Setting %1 is not of integer type - + Setting is not of integer type - + Setting %1 is not of string type - + Setting is not of string type - + Opening the configuration file failed - + The configuration file is malformed - + Fatal failure - + Unknown error - + Password is empty @@ -2525,67 +2531,67 @@ La instalilo forlasos kaj ĉiuj ŝanĝoj perdos. PartitionViewStep - + Gathering system information... - + Partitions - + Install %1 <strong>alongside</strong> another operating system. - + <strong>Erase</strong> disk and install %1. - + <strong>Replace</strong> a partition with %1. - + <strong>Manual</strong> partitioning. - + Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). - + <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. - + <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. - + <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). - + Disk <strong>%1</strong> (%2) - + Current: Nune: - + After: Poste: @@ -2630,12 +2636,12 @@ La instalilo forlasos kaj ĉiuj ŝanĝoj perdos. - + has at least one disk device available. - + There are no partitions to install on. @@ -3537,17 +3543,17 @@ Output: UsersPage - + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> - + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> - + Your passwords do not match! @@ -3555,7 +3561,7 @@ Output: UsersViewStep - + Users @@ -3833,7 +3839,7 @@ Output: localeq - + Change diff --git a/lang/calamares_es.ts b/lang/calamares_es.ts index 20cd61c16b..231c9e29f8 100644 --- a/lang/calamares_es.ts +++ b/lang/calamares_es.ts @@ -509,134 +509,134 @@ Saldrá del instalador y se perderán todos los cambios. Formulario - + Select storage de&vice: Seleccionar dispositivo de almacenamiento: - - - - + + + + Current: Actual: - + After: Despues: - + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. <strong>Particionado manual </strong><br/> Usted puede crear o cambiar el tamaño de las particiones usted mismo. - + Reuse %1 as home partition for %2. Volver a usar %1 como partición home para %2 - + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> <strong>Seleccione una partición para reducir el tamaño, a continuación, arrastre la barra inferior para cambiar el tamaño</strong> - + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. - + Boot loader location: Ubicación del cargador de arranque: - + <strong>Select a partition to install on</strong> <strong>Seleccione una partición para instalar en</strong> - + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. No se puede encontrar una partición de sistema EFI en ningún lugar de este sistema. Por favor, vuelva y use el particionamiento manual para establecer %1. - + The EFI system partition at %1 will be used for starting %2. La partición de sistema EFI en %1 se usará para iniciar %2. - + EFI system partition: Partición del sistema EFI: - + This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Este dispositivo de almacenamiento no parece tener un sistema operativo en él. ¿Qué quiere hacer?<br/>Podrá revisar y confirmar sus elecciones antes de que se haga cualquier cambio en el dispositivo de almacenamiento. - - - - + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>Borrar disco</strong><br/>Esto <font color="red">borrará</font> todos los datos presentes actualmente en el dispositivo de almacenamiento. - - - - + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Instalar junto al otro SO</strong><br/>El instalador reducirá la partición del SO existente para tener espacio para instalar %1. - - - - + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>Reemplazar una partición</strong><br/>Reemplazar una partición con %1. - + This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. %1 se encuentra instalado en este dispositivo de almacenamiento. ¿Qué desea hacer?<br/>Podrá revisar y confirmar su elección antes de que cualquier cambio se haga efectivo en el dispositivo de almacenamiento. - + This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Este dispositivo de almacenamiento parece que ya tiene un sistema operativo instalado en él. ¿Qué desea hacer?<br/>Podrá revisar y confirmar su elección antes de que cualquier cambio se haga efectivo en el dispositivo de almacenamiento. - + This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Este dispositivo de almacenamiento contiene múltiples sistemas operativos instalados en él. ¿Qué desea hacer?<br/>Podrá revisar y confirmar su elección antes de que cualquier cambio se haga efectivo en el dispositivo de almacenamiento. - + No Swap Sin Swap - + Reuse Swap Reusar Swap - + Swap (no Hibernate) Swap (sin hibernación) - + Swap (with Hibernate) Swap (con hibernación) - + Swap to file Swap a archivo @@ -714,17 +714,17 @@ Saldrá del instalador y se perderán todos los cambios. Configurar la disposición de teclado a %1/%2. - + Set timezone to %1/%2. - + The system language will be set to %1. El idioma del sistema se establecerá a %1. - + The numbers and dates locale will be set to %1. La localización de números y fechas se establecerá a %1. @@ -794,42 +794,42 @@ Saldrá del instalador y se perderán todos los cambios. - + Your username is too long. Su nombre de usuario es demasiado largo. - + '%1' is not allowed as username. - + Your username must start with a lowercase letter or underscore. - + Only lowercase letters, numbers, underscore and hyphen are allowed. - + Your hostname is too short. El nombre del Host es demasiado corto. - + Your hostname is too long. El nombre del Host es demasiado largo. - + '%1' is not allowed as hostname. - + Only letters, numbers, underscore and hyphen are allowed. @@ -1250,7 +1250,8 @@ Saldrá del instalador y se perderán todos los cambios. Confirmar frase-contraseña - + + Please enter the same passphrase in both boxes. Por favor, introduzca la misma frase-contraseña en ambos recuadros. @@ -1702,18 +1703,18 @@ Saldrá del instalador y se perderán todos los cambios. LocalePage - + Region: Región: - + Zone: Zona: - - + + &Change... &Cambiar... @@ -1791,7 +1792,12 @@ Saldrá del instalador y se perderán todos los cambios. Map - + + Timezone: %1 + + + + Please select your preferred location on the map so the installer can suggest the locale and timezone settings for you. You can fine-tune the suggested settings below. Search the map by dragging to move and using the +/- buttons to zoom in/out or use mouse scrolling for zooming. @@ -1952,247 +1958,247 @@ Saldrá del instalador y se perderán todos los cambios. PWQ - + Password is too short La contraseña es demasiado corta - + Password is too long La contraseña es demasiado larga - + Password is too weak La contraseña es demasiado débil - + Memory allocation error when setting '%1' Error de asignación de memoria al establecer '%1' - + Memory allocation error Error de asignación de memoria - + The password is the same as the old one La contraseña es la misma que la antigua - + The password is a palindrome La contraseña es un palíndromo - + The password differs with case changes only La contraseña difiere sólo en cambios de mayúsculas/minúsculas - + The password is too similar to the old one La contraseña es demasiado similar a la antigua - + The password contains the user name in some form La contraseña contiene el nombre de usuario de alguna forma - + The password contains words from the real name of the user in some form La contraseña contiene palabras procedentes del nombre real del usuario de alguna forma - + The password contains forbidden words in some form La contraseña contiene palabras prohibidas de alguna forma - + The password contains less than %1 digits La contraseña contiene menos de %1 dígitos - + The password contains too few digits La contraseña contiene demasiado pocos dígitos - + The password contains less than %1 uppercase letters La contraseña contiene menos de %1 letras mayúsculas - + The password contains too few uppercase letters La contraseña contiene demasiado pocas letras mayúsculas - + The password contains less than %1 lowercase letters La contraseña contiene menos de %1 letras mayúsculas - + The password contains too few lowercase letters La contraseña contiene demasiado pocas letras minúsculas - + The password contains less than %1 non-alphanumeric characters La contraseña contiene menos de %1 caracteres alfanuméricos - + The password contains too few non-alphanumeric characters La contraseña contiene demasiado pocos caracteres alfanuméricos - + The password is shorter than %1 characters La contraseña tiene menos de %1 caracteres - + The password is too short La contraseña es demasiado corta - + The password is just rotated old one La contraseña sólo es la antigua invertida - + The password contains less than %1 character classes La contraseña contiene menos de %1 clases de caracteres - + The password does not contain enough character classes La contraseña no contiene suficientes clases de caracteres - + The password contains more than %1 same characters consecutively La contraseña contiene más de %1 caracteres iguales consecutivamente - + The password contains too many same characters consecutively La contraseña contiene demasiados caracteres iguales consecutivamente - + The password contains more than %1 characters of the same class consecutively La contraseña contiene más de %1 caracteres de la misma clase consecutivamente - + The password contains too many characters of the same class consecutively La contraseña contiene demasiados caracteres de la misma clase consecutivamente - + The password contains monotonic sequence longer than %1 characters La contraseña contiene una secuencia monótona de más de %1 caracteres - + The password contains too long of a monotonic character sequence La contraseña contiene una secuencia monótona de caracteres demasiado larga - + No password supplied No se proporcionó contraseña - + Cannot obtain random numbers from the RNG device No se puede obtener números aleatorios del dispositivo RNG (generador de números aleatorios) - + Password generation failed - required entropy too low for settings La generación de contraseña falló - la entropía requerida es demasiado baja para la configuración - + The password fails the dictionary check - %1 La contraseña no paso el test de diccionario - %1 - + The password fails the dictionary check La contraseña no pasó el test de diccionario - + Unknown setting - %1 Configuración desconocida - %1 - + Unknown setting Configuración desconocida - + Bad integer value of setting - %1 Valor entero de la configuración erróneo - %1 - + Bad integer value Valor entero erróneo - + Setting %1 is not of integer type La configuración %1 no es de tipo entero - + Setting is not of integer type La configuración no es de tipo entero - + Setting %1 is not of string type La configuración %1 no es de tipo cadena de caracteres - + Setting is not of string type La configuración no es de tipo cadena de caracteres - + Opening the configuration file failed No se pudo abrir el fichero de configuración - + The configuration file is malformed El fichero de configuración está mal formado - + Fatal failure Fallo fatal - + Unknown error Error desconocido - + Password is empty La contraseña vacia @@ -2526,67 +2532,67 @@ Saldrá del instalador y se perderán todos los cambios. PartitionViewStep - + Gathering system information... Obteniendo información del sistema... - + Partitions Particiones - + Install %1 <strong>alongside</strong> another operating system. Instalar %1 <strong>junto a</strong> otro sistema operativo. - + <strong>Erase</strong> disk and install %1. <strong>Borrar</strong> disco e instalar %1. - + <strong>Replace</strong> a partition with %1. <strong>Reemplazar</strong> una partición con %1. - + <strong>Manual</strong> partitioning. Particionamiento <strong>manual</strong>. - + Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). Instalar %1 <strong>junto a</strong> otro sistema operativo en disco <strong>%2</strong> (%3). - + <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. <strong>Borrar</strong> disco <strong>%2</strong> (%3) e instalar %1. - + <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. <strong>Reemplazar</strong> una partición en disco <strong>%2</strong> (%3) con %1. - + <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). Particionamiento <strong>manual</strong> en disco <strong>%1</strong> (%2). - + Disk <strong>%1</strong> (%2) Disco <strong>%1<strong> (%2) - + Current: Corriente - + After: Despúes: @@ -2631,12 +2637,12 @@ Saldrá del instalador y se perderán todos los cambios. Se estableció una partición de arranque aparte junto con una partición raíz cifrada, pero la partición de arranque no está cifrada.<br/><br/>Hay consideraciones de seguridad con esta clase de instalación, porque los ficheros de sistema importantes se mantienen en una partición no cifrada.<br/>Puede continuar si lo desea, pero el desbloqueo del sistema de ficheros ocurrirá más tarde durante el arranque del sistema.<br/>Para cifrar la partición de arranque, retroceda y vuelva a crearla, seleccionando <strong>Cifrar</strong> en la ventana de creación de la partición. - + has at least one disk device available. - + There are no partitions to install on. @@ -3541,17 +3547,17 @@ Salida: UsersPage - + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> - + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> - + Your passwords do not match! ¡Sus contraseñas no coinciden! @@ -3559,7 +3565,7 @@ Salida: UsersViewStep - + Users Usuarios @@ -3837,7 +3843,7 @@ Salida: localeq - + Change diff --git a/lang/calamares_es_MX.ts b/lang/calamares_es_MX.ts index 01307b9e49..a529262f01 100644 --- a/lang/calamares_es_MX.ts +++ b/lang/calamares_es_MX.ts @@ -509,135 +509,135 @@ El instalador terminará y se perderán todos los cambios. Formulario - + Select storage de&vice: Seleccionar dispositivo de almacenamiento: - - - - + + + + Current: Actual: - + After: Después: - + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. <strong>Particionado manual </strong><br/> Puede crear o cambiar el tamaño de las particiones usted mismo. - + Reuse %1 as home partition for %2. Reuse %1 como partición home para %2. - + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> <strong>Seleccione una partición para reducir el tamaño, a continuación, arrastre la barra inferior para redimencinar</strong> - + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. %1 será reducido a %2MiB y una nueva %3MiB partición se creará para %4. - + Boot loader location: Ubicación del cargador de arranque: - + <strong>Select a partition to install on</strong> <strong>Seleccione una partición para instalar</strong> - + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. No se puede encontrar en el sistema una partición EFI. Por favor vuelva atrás y use el particionamiento manual para configurar %1. - + The EFI system partition at %1 will be used for starting %2. La partición EFI en %1 será usada para iniciar %2. - + EFI system partition: Partición de sistema EFI: - + This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Este dispositivo de almacenamiento parece no tener un sistema operativo en el. ¿que le gustaría hacer?<br/> Usted podrá revisar y confirmar sus elecciones antes que cualquier cambio se realice al dispositivo de almacenamiento. - - - - + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>Borrar disco</strong> <br/>Esto <font color="red">borrará</font> todos los datos presentes actualmente en el dispositivo de almacenamiento seleccionado. - - - - + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Instalar junto a</strong> <br/>El instalador reducirá una partición con el fin de hacer espacio para %1. - - - - + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>Reemplazar una partición</strong> <br/>Reemplaza una partición con %1. - + This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Este dispositivo de almacenamiento tiene %1 en el. ¿Que le gustaría hacer? <br/>Usted podrá revisar y confirmar sus elecciones antes de que cualquier cambio se realice al dispositivo de almacenamiento. - + This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Este dispositivo de almacenamiento ya tiene un sistema operativo en el. ¿Que le gustaría hacer?<br/> Usted podrá revisar y confirmar sus elecciones antes que cualquier cambio se realice al dispositivo de almacenamiento. - + This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Este dispositivo de almacenamiento tiene múltiples sistemas operativos en el. ¿Que le gustaria hacer?<br/> Usted podrá revisar y confirmar sus elecciones antes que cualquier cambio se realice al dispositivo de almacenamiento. - + No Swap Sin Swap - + Reuse Swap Reutilizar Swap - + Swap (no Hibernate) Swap (sin hibernación) - + Swap (with Hibernate) Swap (con hibernación) - + Swap to file Swap a archivo @@ -715,17 +715,17 @@ El instalador terminará y se perderán todos los cambios. Ajustar teclado a %1/%2. - + Set timezone to %1/%2. - + The system language will be set to %1. El lenguaje del sistema será establecido a %1. - + The numbers and dates locale will be set to %1. Los números y datos locales serán establecidos a %1. @@ -795,42 +795,42 @@ El instalador terminará y se perderán todos los cambios. - + Your username is too long. Tu nombre de usuario es demasiado largo. - + '%1' is not allowed as username. - + Your username must start with a lowercase letter or underscore. - + Only lowercase letters, numbers, underscore and hyphen are allowed. - + Your hostname is too short. El nombre de tu equipo es demasiado corto. - + Your hostname is too long. El nombre de tu equipo es demasiado largo. - + '%1' is not allowed as hostname. - + Only letters, numbers, underscore and hyphen are allowed. @@ -1251,7 +1251,8 @@ El instalador terminará y se perderán todos los cambios. Confirmar contraseña segura - + + Please enter the same passphrase in both boxes. Favor ingrese la misma contraseña segura en ambas casillas. @@ -1703,18 +1704,18 @@ El instalador terminará y se perderán todos los cambios. LocalePage - + Region: Región: - + Zone: Zona: - - + + &Change... &Cambiar... @@ -1792,7 +1793,12 @@ El instalador terminará y se perderán todos los cambios. Map - + + Timezone: %1 + + + + Please select your preferred location on the map so the installer can suggest the locale and timezone settings for you. You can fine-tune the suggested settings below. Search the map by dragging to move and using the +/- buttons to zoom in/out or use mouse scrolling for zooming. @@ -1953,247 +1959,247 @@ El instalador terminará y se perderán todos los cambios. PWQ - + Password is too short La contraseña es muy corta - + Password is too long La contraseña es muy larga - + Password is too weak La contraseña es muy débil - + Memory allocation error when setting '%1' Error de asignación de memoria al configurar '%1' - + Memory allocation error Error en la asignación de memoria - + The password is the same as the old one La contraseña es la misma que la anterior - + The password is a palindrome La contraseña es un Palíndromo - + The password differs with case changes only La contraseña solo difiere en cambios de mayúsculas y minúsculas - + The password is too similar to the old one La contraseña es muy similar a la anterior. - + The password contains the user name in some form La contraseña contiene el nombre de usuario de alguna forma - + The password contains words from the real name of the user in some form La contraseña contiene palabras del nombre real del usuario de alguna forma - + The password contains forbidden words in some form La contraseña contiene palabras prohibidas de alguna forma - + The password contains less than %1 digits La contraseña contiene menos de %1 dígitos - + The password contains too few digits La contraseña contiene muy pocos dígitos - + The password contains less than %1 uppercase letters La contraseña contiene menos de %1 letras mayúsculas - + The password contains too few uppercase letters La contraseña contiene muy pocas letras mayúsculas - + The password contains less than %1 lowercase letters La contraseña continee menos de %1 letras minúsculas - + The password contains too few lowercase letters La contraseña contiene muy pocas letras minúsculas - + The password contains less than %1 non-alphanumeric characters La contraseña contiene menos de %1 caracteres no alfanuméricos - + The password contains too few non-alphanumeric characters La contraseña contiene muy pocos caracteres alfanuméricos - + The password is shorter than %1 characters La contraseña es mas corta que %1 caracteres - + The password is too short La contraseña es muy corta - + The password is just rotated old one La contraseña solo es la rotación de la anterior - + The password contains less than %1 character classes La contraseña contiene menos de %1 tipos de caracteres - + The password does not contain enough character classes La contraseña no contiene suficientes tipos de caracteres - + The password contains more than %1 same characters consecutively La contraseña contiene más de %1 caracteres iguales consecutivamente - + The password contains too many same characters consecutively La contraseña contiene muchos caracteres iguales repetidos consecutivamente - + The password contains more than %1 characters of the same class consecutively La contraseña contiene mas de %1 caracteres de la misma clase consecutivamente - + The password contains too many characters of the same class consecutively La contraseña contiene muchos caracteres de la misma clase consecutivamente - + The password contains monotonic sequence longer than %1 characters La contraseña contiene secuencias monotónicas mas larga que %1 caracteres - + The password contains too long of a monotonic character sequence La contraseña contiene secuencias monotónicas muy largas - + No password supplied Contraseña no suministrada - + Cannot obtain random numbers from the RNG device No pueden obtenerse números aleatorios del dispositivo RING - + Password generation failed - required entropy too low for settings Generación de contraseña fallida - entropía requerida muy baja para los ajustes - + The password fails the dictionary check - %1 La contraseña falla el chequeo del diccionario %1 - + The password fails the dictionary check La contraseña falla el chequeo del diccionario - + Unknown setting - %1 Configuración desconocida - %1 - + Unknown setting Configuración desconocida - + Bad integer value of setting - %1 Valor entero de configuración incorrecto - %1 - + Bad integer value Valor entero incorrecto - + Setting %1 is not of integer type Ajuste de % 1 no es de tipo entero - + Setting is not of integer type Ajuste no es de tipo entero - + Setting %1 is not of string type El ajuste %1 no es de tipo cadena - + Setting is not of string type El ajuste no es de tipo cadena - + Opening the configuration file failed Apertura del archivo de configuración fallida - + The configuration file is malformed El archivo de configuración está malformado - + Fatal failure Falla fatal - + Unknown error Error desconocido - + Password is empty @@ -2527,67 +2533,67 @@ El instalador terminará y se perderán todos los cambios. PartitionViewStep - + Gathering system information... Obteniendo información del sistema... - + Partitions Particiones - + Install %1 <strong>alongside</strong> another operating system. Instalar %1 <strong>junto con</strong> otro sistema operativo. - + <strong>Erase</strong> disk and install %1. <strong>Borrar</strong> el disco e instalar %1. - + <strong>Replace</strong> a partition with %1. <strong>Reemplazar</strong> una parición con %1. - + <strong>Manual</strong> partitioning. Particionamiento <strong>manual</strong>. - + Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). Instalar %1 <strong>junto con</strong> otro sistema operativo en el disco <strong>%2</strong>(%3). - + <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. <strong>Borrar</strong> el disco <strong>%2<strong> (%3) e instalar %1. - + <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. <strong>Reemplazar</strong> una parición en el disco <strong>%2</strong> (%3) con %1. - + <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). Particionar <strong>manualmente</strong> el disco <strong>%1</strong> (%2). - + Disk <strong>%1</strong> (%2) Disco <strong>%1</strong> (%2) - + Current: Actual: - + After: Después: @@ -2632,12 +2638,12 @@ El instalador terminará y se perderán todos los cambios. Se creó una partición de arranque separada junto con una partición raíz cifrada, pero la partición de arranque no está encriptada.<br/><br/> Existen problemas de seguridad con este tipo de configuración, ya que los archivos importantes del sistema se guardan en una partición no encriptada. <br/>Puede continuar si lo desea, pero el desbloqueo del sistema de archivos ocurrirá más tarde durante el inicio del sistema. <br/>Para encriptar la partición de arranque, retroceda y vuelva a crearla, seleccionando <strong>Encriptar</strong> en la ventana de creación de la partición. - + has at least one disk device available. - + There are no partitions to install on. @@ -3543,17 +3549,17 @@ Salida UsersPage - + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>Si más de una persona usará esta computadora, puede crear múltiples cuentas después de la configuración</small> - + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> <small>Si más de una persona usará esta computadora, puede crear varias cuentas después de la instalación.</small> - + Your passwords do not match! Las contraseñas no coinciden! @@ -3561,7 +3567,7 @@ Salida UsersViewStep - + Users Usuarios @@ -3839,7 +3845,7 @@ Salida localeq - + Change diff --git a/lang/calamares_es_PR.ts b/lang/calamares_es_PR.ts index caf71cc4b2..f0eaaff3d6 100644 --- a/lang/calamares_es_PR.ts +++ b/lang/calamares_es_PR.ts @@ -507,134 +507,134 @@ The installer will quit and all changes will be lost. Formulario - + Select storage de&vice: - - - - + + + + Current: - + After: - + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. - + Reuse %1 as home partition for %2. - + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> - + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. - + Boot loader location: - + <strong>Select a partition to install on</strong> - + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. - + The EFI system partition at %1 will be used for starting %2. - + EFI system partition: - + This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. - - - - + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. - - - - + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. - - - - + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. - + This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. - + This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. - + This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. - + No Swap - + Reuse Swap - + Swap (no Hibernate) - + Swap (with Hibernate) - + Swap to file @@ -712,17 +712,17 @@ The installer will quit and all changes will be lost. - + Set timezone to %1/%2. - + The system language will be set to %1. - + The numbers and dates locale will be set to %1. @@ -792,42 +792,42 @@ The installer will quit and all changes will be lost. - + Your username is too long. - + '%1' is not allowed as username. - + Your username must start with a lowercase letter or underscore. - + Only lowercase letters, numbers, underscore and hyphen are allowed. - + Your hostname is too short. - + Your hostname is too long. - + '%1' is not allowed as hostname. - + Only letters, numbers, underscore and hyphen are allowed. @@ -1248,7 +1248,8 @@ The installer will quit and all changes will be lost. - + + Please enter the same passphrase in both boxes. @@ -1700,18 +1701,18 @@ The installer will quit and all changes will be lost. LocalePage - + Region: - + Zone: - - + + &Change... @@ -1789,7 +1790,12 @@ The installer will quit and all changes will be lost. Map - + + Timezone: %1 + + + + Please select your preferred location on the map so the installer can suggest the locale and timezone settings for you. You can fine-tune the suggested settings below. Search the map by dragging to move and using the +/- buttons to zoom in/out or use mouse scrolling for zooming. @@ -1950,247 +1956,247 @@ The installer will quit and all changes will be lost. PWQ - + Password is too short - + Password is too long - + Password is too weak - + Memory allocation error when setting '%1' - + Memory allocation error - + The password is the same as the old one - + The password is a palindrome - + The password differs with case changes only - + The password is too similar to the old one - + The password contains the user name in some form - + The password contains words from the real name of the user in some form - + The password contains forbidden words in some form - + The password contains less than %1 digits - + The password contains too few digits - + The password contains less than %1 uppercase letters - + The password contains too few uppercase letters - + The password contains less than %1 lowercase letters - + The password contains too few lowercase letters - + The password contains less than %1 non-alphanumeric characters - + The password contains too few non-alphanumeric characters - + The password is shorter than %1 characters - + The password is too short - + The password is just rotated old one - + The password contains less than %1 character classes - + The password does not contain enough character classes - + The password contains more than %1 same characters consecutively - + The password contains too many same characters consecutively - + The password contains more than %1 characters of the same class consecutively - + The password contains too many characters of the same class consecutively - + The password contains monotonic sequence longer than %1 characters - + The password contains too long of a monotonic character sequence - + No password supplied - + Cannot obtain random numbers from the RNG device - + Password generation failed - required entropy too low for settings - + The password fails the dictionary check - %1 - + The password fails the dictionary check - + Unknown setting - %1 - + Unknown setting - + Bad integer value of setting - %1 - + Bad integer value - + Setting %1 is not of integer type - + Setting is not of integer type - + Setting %1 is not of string type - + Setting is not of string type - + Opening the configuration file failed - + The configuration file is malformed - + Fatal failure - + Unknown error - + Password is empty @@ -2524,67 +2530,67 @@ The installer will quit and all changes will be lost. PartitionViewStep - + Gathering system information... - + Partitions - + Install %1 <strong>alongside</strong> another operating system. - + <strong>Erase</strong> disk and install %1. - + <strong>Replace</strong> a partition with %1. - + <strong>Manual</strong> partitioning. - + Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). - + <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. - + <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. - + <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). - + Disk <strong>%1</strong> (%2) - + Current: - + After: @@ -2629,12 +2635,12 @@ The installer will quit and all changes will be lost. - + has at least one disk device available. - + There are no partitions to install on. @@ -3536,17 +3542,17 @@ Output: UsersPage - + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> - + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> - + Your passwords do not match! @@ -3554,7 +3560,7 @@ Output: UsersViewStep - + Users @@ -3832,7 +3838,7 @@ Output: localeq - + Change diff --git a/lang/calamares_et.ts b/lang/calamares_et.ts index c70e806365..48678eaf48 100644 --- a/lang/calamares_et.ts +++ b/lang/calamares_et.ts @@ -508,134 +508,134 @@ Paigaldaja sulgub ning kõik muutused kaovad. Form - + Select storage de&vice: Vali mäluseade: - - - - + + + + Current: Hetkel: - + After: Pärast: - + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. <strong>Käsitsi partitsioneerimine</strong><br/>Sa võid ise partitsioone luua või nende suurust muuta. - + Reuse %1 as home partition for %2. Taaskasuta %1 %2 kodupartitsioonina. - + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> <strong>Vali vähendatav partitsioon, seejärel sikuta alumist riba suuruse muutmiseks</strong> - + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. - + Boot loader location: Käivituslaaduri asukoht: - + <strong>Select a partition to install on</strong> <strong>Vali partitsioon, kuhu paigaldada</strong> - + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. EFI süsteemipartitsiooni ei leitud sellest süsteemist. Palun mine tagasi ja kasuta käsitsi partitsioonimist, et seadistada %1. - + The EFI system partition at %1 will be used for starting %2. EFI süsteemipartitsioon asukohas %1 kasutatakse %2 käivitamiseks. - + EFI system partition: EFI süsteemipartitsioon: - + This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Sellel mäluseadmel ei paista olevat operatsioonisüsteemi peal. Mida soovid teha?<br/>Sa saad oma valikud üle vaadata ja kinnitada enne kui mistahes muudatus saab mäluseadmele teostatud. - - - - + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>Tühjenda ketas</strong><br/>See <font color="red">kustutab</font> kõik valitud mäluseadmel olevad andmed. - - - - + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Paigalda kõrvale</strong><br/>Paigaldaja vähendab partitsiooni, et teha ruumi operatsioonisüsteemile %1. - - - - + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>Asenda partitsioon</strong><br/>Asendab partitsiooni operatsioonisüsteemiga %1. - + This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Sellel mäluseadmel on peal %1. Mida soovid teha?<br/>Sa saad oma valikud üle vaadata ja kinnitada enne kui mistahes muudatus saab mäluseadmele teostatud. - + This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Sellel mäluseadmel on juba operatsioonisüsteem peal. Mida soovid teha?<br/>Sa saad oma valikud üle vaadata ja kinnitada enne kui mistahes muudatus saab mäluseadmele teostatud. - + This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Sellel mäluseadmel on mitu operatsioonisüsteemi peal. Mida soovid teha?<br/>Sa saad oma valikud üle vaadata ja kinnitada enne kui mistahes muudatus saab mäluseadmele teostatud. - + No Swap - + Reuse Swap - + Swap (no Hibernate) - + Swap (with Hibernate) - + Swap to file @@ -713,17 +713,17 @@ Paigaldaja sulgub ning kõik muutused kaovad. Sea klaviatuuripaigutuseks %1/%2. - + Set timezone to %1/%2. - + The system language will be set to %1. Süsteemikeeleks määratakse %1. - + The numbers and dates locale will be set to %1. Arvude ja kuupäevade lokaaliks seatakse %1. @@ -793,42 +793,42 @@ Paigaldaja sulgub ning kõik muutused kaovad. - + Your username is too long. Sinu kasutajanimi on liiga pikk. - + '%1' is not allowed as username. - + Your username must start with a lowercase letter or underscore. - + Only lowercase letters, numbers, underscore and hyphen are allowed. - + Your hostname is too short. Sinu hostinimi on liiga lühike. - + Your hostname is too long. Sinu hostinimi on liiga pikk. - + '%1' is not allowed as hostname. - + Only letters, numbers, underscore and hyphen are allowed. @@ -1249,7 +1249,8 @@ Paigaldaja sulgub ning kõik muutused kaovad. Kinnita salaväljendit - + + Please enter the same passphrase in both boxes. Palun sisesta sama salaväljend mõlemisse kasti. @@ -1701,18 +1702,18 @@ Paigaldaja sulgub ning kõik muutused kaovad. LocalePage - + Region: Regioon: - + Zone: Tsoon: - - + + &Change... &Muuda... @@ -1790,7 +1791,12 @@ Paigaldaja sulgub ning kõik muutused kaovad. Map - + + Timezone: %1 + + + + Please select your preferred location on the map so the installer can suggest the locale and timezone settings for you. You can fine-tune the suggested settings below. Search the map by dragging to move and using the +/- buttons to zoom in/out or use mouse scrolling for zooming. @@ -1951,247 +1957,247 @@ Paigaldaja sulgub ning kõik muutused kaovad. PWQ - + Password is too short Parool on liiga lühike - + Password is too long Parool on liiga pikk - + Password is too weak Parool on liiga nõrk - + Memory allocation error when setting '%1' Mälu eraldamise viga valikut "%1" määrates - + Memory allocation error Mälu eraldamise viga - + The password is the same as the old one Parool on sama mis enne - + The password is a palindrome Parool on palindroom - + The password differs with case changes only Parool erineb ainult suurtähtede poolest - + The password is too similar to the old one Parool on eelmisega liiga sarnane - + The password contains the user name in some form Parool sisaldab mingil kujul kasutajanime - + The password contains words from the real name of the user in some form Parool sisaldab mingil kujul sõnu kasutaja pärisnimest - + The password contains forbidden words in some form Parool sisaldab mingil kujul sobimatuid sõnu - + The password contains less than %1 digits Parool sisaldab vähem kui %1 numbrit - + The password contains too few digits Parool sisaldab liiga vähe numbreid - + The password contains less than %1 uppercase letters Parool sisaldab vähem kui %1 suurtähte - + The password contains too few uppercase letters Parool sisaldab liiga vähe suurtähti - + The password contains less than %1 lowercase letters Parool sisaldab vähem kui %1 väiketähte - + The password contains too few lowercase letters Parool sisaldab liiga vähe väiketähti - + The password contains less than %1 non-alphanumeric characters Parool sisaldab vähem kui %1 mitte-tähestikulist märki - + The password contains too few non-alphanumeric characters Parool sisaldab liiga vähe mitte-tähestikulisi märke - + The password is shorter than %1 characters Parool on lühem kui %1 tähemärki - + The password is too short Parool on liiga lühike - + The password is just rotated old one Parool on lihtsalt pööratud eelmine parool - + The password contains less than %1 character classes Parool sisaldab vähem kui %1 tähemärgiklassi - + The password does not contain enough character classes Parool ei sisalda piisavalt tähemärgiklasse - + The password contains more than %1 same characters consecutively Parool sisaldab järjest rohkem kui %1 sama tähemärki - + The password contains too many same characters consecutively Parool sisaldab järjest liiga palju sama tähemärki - + The password contains more than %1 characters of the same class consecutively Parool sisaldab järjest samast klassist rohkem kui %1 tähemärki - + The password contains too many characters of the same class consecutively Parool sisaldab järjest liiga palju samast klassist tähemärke - + The password contains monotonic sequence longer than %1 characters Parool sisaldab monotoonset jada, mis on pikem kui %1 tähemärki - + The password contains too long of a monotonic character sequence Parool sisaldab liiga pikka monotoonsete tähemärkide jada - + No password supplied Parooli ei sisestatud - + Cannot obtain random numbers from the RNG device RNG seadmest ei saanud hankida juhuslikke numbreid - + Password generation failed - required entropy too low for settings Parooligenereerimine ebaõnnestus - nõutud entroopia on seadete jaoks liiga vähe - + The password fails the dictionary check - %1 Parool põrub sõnastikukontrolli - %1 - + The password fails the dictionary check Parool põrub sõnastikukontrolli - + Unknown setting - %1 Tundmatu valik - %1 - + Unknown setting Tundmatu valik - + Bad integer value of setting - %1 Halb täisarvuline väärtus valikul - %1 - + Bad integer value Halb täisarvuväärtus - + Setting %1 is not of integer type Valik %1 pole täisarvu tüüpi - + Setting is not of integer type Valik ei ole täisarvu tüüpi - + Setting %1 is not of string type Valik %1 ei ole string-tüüpi - + Setting is not of string type Valik ei ole string-tüüpi - + Opening the configuration file failed Konfiguratsioonifaili avamine ebaõnnestus - + The configuration file is malformed Konfiguratsioonifail on rikutud - + Fatal failure Saatuslik viga - + Unknown error Tundmatu viga - + Password is empty @@ -2525,67 +2531,67 @@ Paigaldaja sulgub ning kõik muutused kaovad. PartitionViewStep - + Gathering system information... Hangin süsteemiteavet... - + Partitions Partitsioonid - + Install %1 <strong>alongside</strong> another operating system. Paigalda %1 praeguse operatsioonisüsteemi <strong>kõrvale</strong> - + <strong>Erase</strong> disk and install %1. <strong>Tühjenda</strong> ketas ja paigalda %1. - + <strong>Replace</strong> a partition with %1. <strong>Asenda</strong> partitsioon operatsioonisüsteemiga %1. - + <strong>Manual</strong> partitioning. <strong>Käsitsi</strong> partitsioneerimine. - + Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). Paigalda %1 teise operatsioonisüsteemi <strong>kõrvale</strong> kettal <strong>%2</strong> (%3). - + <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. <strong>Tühjenda</strong> ketas <strong>%2</strong> (%3) ja paigalda %1. - + <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. <strong>Asenda</strong> partitsioon kettal <strong>%2</strong> (%3) operatsioonisüsteemiga %1. - + <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). <strong>Käsitsi</strong> partitsioneerimine kettal <strong>%1</strong> (%2). - + Disk <strong>%1</strong> (%2) Ketas <strong>%1</strong> (%2). - + Current: Hetkel: - + After: Pärast: @@ -2630,12 +2636,12 @@ Paigaldaja sulgub ning kõik muutused kaovad. Eraldi käivituspartitsioon seadistati koos krüptitud juurpartitsiooniga, aga käivituspartitsioon ise ei ole krüptitud.<br/><br/>Selle seadistusega kaasnevad turvaprobleemid, sest tähtsad süsteemifailid hoitakse krüptimata partitsioonil.<br/>Sa võid soovi korral jätkata, aga failisüsteemi lukust lahti tegemine toimub hiljem süsteemi käivitusel.<br/>Et krüpteerida käivituspartisiooni, mine tagasi ja taasloo see, valides <strong>Krüpteeri</strong> partitsiooni loomise aknas. - + has at least one disk device available. - + There are no partitions to install on. @@ -3540,17 +3546,17 @@ Väljund: UsersPage - + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> - + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> - + Your passwords do not match! Sinu paroolid ei ühti! @@ -3558,7 +3564,7 @@ Väljund: UsersViewStep - + Users Kasutajad @@ -3836,7 +3842,7 @@ Väljund: localeq - + Change diff --git a/lang/calamares_eu.ts b/lang/calamares_eu.ts index 23a422924b..de13ffabff 100644 --- a/lang/calamares_eu.ts +++ b/lang/calamares_eu.ts @@ -508,134 +508,134 @@ Instalatzailea irten egingo da eta aldaketa guztiak galduko dira. Formulario - + Select storage de&vice: Aukeratu &biltegiratze-gailua: - - - - + + + + Current: Unekoa: - + After: Ondoren: - + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. <strong>Eskuz partizioak landu</strong><br/>Zure kasa sortu edo tamainaz alda dezakezu partizioak. - + Reuse %1 as home partition for %2. Berrerabili %1 home partizio bezala %2rentzat. - + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> <strong>Aukeratu partizioa txikitzeko eta gero arrastatu azpiko-barra tamaina aldatzeko</strong> - + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. - + Boot loader location: Abio kargatzaile kokapena: - + <strong>Select a partition to install on</strong> <strong>aukeratu partizioa instalatzeko</strong> - + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. Ezin da inon aurkitu EFI sistemako partiziorik sistema honetan. Mesedez joan atzera eta erabili eskuz partizioak lantzea %1 ezartzeko. - + The EFI system partition at %1 will be used for starting %2. %1eko EFI partizio sistema erabiliko da abiarazteko %2. - + EFI system partition: EFI sistema-partizioa: - + This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Biltegiratze-gailuak badirudi ez duela sistema eragilerik. Zer egin nahiko zenuke? <br/>Zure aukerak berrikusteko eta berresteko aukera izango duzu aldaketak gauzatu aurretik biltegiratze-gailuan - - - - + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>Diskoa ezabatu</strong><br/>Honek orain dauden datu guztiak <font color="red">ezabatuko</font> ditu biltegiratze-gailutik. - - - - + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Instalatu alboan</strong><br/>Instalatzaileak partizioa txikituko du lekua egiteko %1-(r)i. - - - - + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>Ordeztu partizioa</strong><br/>ordezkatu partizioa %1-(e)kin. - + This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Biltegiratze-gailuak %1 dauka. Zer egin nahiko zenuke? <br/>Zure aukerak berrikusteko eta berresteko aukera izango duzu aldaketak gauzatu aurretik biltegiratze-gailuan - + This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Biltegiragailu honetan badaude jadanik eragile sistema bat. Zer gustatuko litzaizuke egin?<br/>Biltegiragailuan aldaketarik egin baino lehen zure aukerak aztertu eta konfirmatu ahal izango duzu. - + This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Biltegiragailu honetan badaude jadanik eragile sistema batzuk. Zer gustatuko litzaizuke egin?<br/>Biltegiragailuan aldaketarik egin baino lehen zure aukerak aztertu eta konfirmatu ahal izango duzu. - + No Swap - + Reuse Swap - + Swap (no Hibernate) - + Swap (with Hibernate) - + Swap to file @@ -713,17 +713,17 @@ Instalatzailea irten egingo da eta aldaketa guztiak galduko dira. Ezarri teklatu diseinua %1%2ra. - + Set timezone to %1/%2. - + The system language will be set to %1. %1 ezarriko da sistemako hizkuntza bezala. - + The numbers and dates locale will be set to %1. Zenbaki eta daten eskualdea %1-(e)ra ezarri da. @@ -793,42 +793,42 @@ Instalatzailea irten egingo da eta aldaketa guztiak galduko dira. - + Your username is too long. Zure erabiltzaile-izena luzeegia da. - + '%1' is not allowed as username. - + Your username must start with a lowercase letter or underscore. - + Only lowercase letters, numbers, underscore and hyphen are allowed. - + Your hostname is too short. Zure ostalari-izena laburregia da. - + Your hostname is too long. Zure ostalari-izena luzeegia da. - + '%1' is not allowed as hostname. - + Only letters, numbers, underscore and hyphen are allowed. @@ -1249,7 +1249,8 @@ Instalatzailea irten egingo da eta aldaketa guztiak galduko dira. Berretsi pasahitza - + + Please enter the same passphrase in both boxes. Mesedez sartu pasahitz berdina bi kutxatan. @@ -1701,18 +1702,18 @@ Instalatzailea irten egingo da eta aldaketa guztiak galduko dira. LocalePage - + Region: Eskualdea: - + Zone: Zonaldea: - - + + &Change... &Aldatu... @@ -1790,7 +1791,12 @@ Instalatzailea irten egingo da eta aldaketa guztiak galduko dira. Map - + + Timezone: %1 + + + + Please select your preferred location on the map so the installer can suggest the locale and timezone settings for you. You can fine-tune the suggested settings below. Search the map by dragging to move and using the +/- buttons to zoom in/out or use mouse scrolling for zooming. @@ -1951,247 +1957,247 @@ Instalatzailea irten egingo da eta aldaketa guztiak galduko dira. PWQ - + Password is too short Pasahitza laburregia da - + Password is too long Pasahitza luzeegia da - + Password is too weak Pasahitza ahulegia da - + Memory allocation error when setting '%1' - + Memory allocation error - + The password is the same as the old one Pasahitza aurreko zahar baten berdina da - + The password is a palindrome Pasahitza palindromoa da - + The password differs with case changes only - + The password is too similar to the old one Pasahitza aurreko zahar baten oso antzerakoa da - + The password contains the user name in some form - + The password contains words from the real name of the user in some form - + The password contains forbidden words in some form - + The password contains less than %1 digits Pasahitzak %1 baino zenbaki gutxiago ditu - + The password contains too few digits Pasahitzak zenbaki gutxiegi ditu - + The password contains less than %1 uppercase letters Pasahitzak %1 baino maiuskula gutxiago ditu - + The password contains too few uppercase letters Pasahitzak maiuskula gutxiegi ditu - + The password contains less than %1 lowercase letters Pasahitzak %1 baino minuskula gutxiago ditu - + The password contains too few lowercase letters Pasahitzak minuskula gutxiegi ditu - + The password contains less than %1 non-alphanumeric characters Pasahitzak alfabetokoak ez diren %1 baino karaktere gutxiago ditu - + The password contains too few non-alphanumeric characters Pasahitzak alfabetokoak ez diren karaktere gutxiegi ditu - + The password is shorter than %1 characters Pasahitza %1 karaktere baino motzagoa da. - + The password is too short Pasahitza motzegia da - + The password is just rotated old one - + The password contains less than %1 character classes - + The password does not contain enough character classes - + The password contains more than %1 same characters consecutively - + The password contains too many same characters consecutively - + The password contains more than %1 characters of the same class consecutively - + The password contains too many characters of the same class consecutively - + The password contains monotonic sequence longer than %1 characters - + The password contains too long of a monotonic character sequence - + No password supplied - + Cannot obtain random numbers from the RNG device - + Password generation failed - required entropy too low for settings - + The password fails the dictionary check - %1 - + The password fails the dictionary check - + Unknown setting - %1 - + Unknown setting - + Bad integer value of setting - %1 - + Bad integer value - + Setting %1 is not of integer type - + Setting is not of integer type - + Setting %1 is not of string type - + Setting is not of string type - + Opening the configuration file failed Ezin izan da konfigurazio fitxategia zabaldu. - + The configuration file is malformed Konfigurazio fitxategia ez dago ondo eginda. - + Fatal failure Hutsegite larria - + Unknown error Hutsegite ezezaguna - + Password is empty @@ -2525,67 +2531,67 @@ Instalatzailea irten egingo da eta aldaketa guztiak galduko dira. PartitionViewStep - + Gathering system information... Sistemaren informazioa eskuratzen... - + Partitions Partizioak - + Install %1 <strong>alongside</strong> another operating system. - + <strong>Erase</strong> disk and install %1. - + <strong>Replace</strong> a partition with %1. - + <strong>Manual</strong> partitioning. - + Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). - + <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. - + <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. - + <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). - + Disk <strong>%1</strong> (%2) - + Current: Unekoa: - + After: Ondoren: @@ -2630,12 +2636,12 @@ Instalatzailea irten egingo da eta aldaketa guztiak galduko dira. - + has at least one disk device available. - + There are no partitions to install on. @@ -3539,17 +3545,17 @@ Irteera: UsersPage - + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> - + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> - + Your passwords do not match! Pasahitzak ez datoz bat! @@ -3557,7 +3563,7 @@ Irteera: UsersViewStep - + Users Erabiltzaileak @@ -3835,7 +3841,7 @@ Irteera: localeq - + Change diff --git a/lang/calamares_fa.ts b/lang/calamares_fa.ts index 136c3d194c..3042e1aa0b 100644 --- a/lang/calamares_fa.ts +++ b/lang/calamares_fa.ts @@ -510,134 +510,134 @@ The installer will quit and all changes will be lost. فرم - + Select storage de&vice: انتخاب &دستگاه ذخیره‌سازی: - - - - + + + + Current: فعلی: - + After: بعد از: - + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. - + Reuse %1 as home partition for %2. استفاده مجدد از %1 به عنوان پارتیشن خانه برای %2. - + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> <strong>انتخاب یک پارتیشن برای کوجک کردن و ایجاد پارتیشن جدید از آن، سپس نوار دکمه را بکشید تا تغییر اندازه دهد</strong> - + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. %1 تغییر سایز خواهد داد به %2 مبی‌بایت و یک پارتیشن %3 مبی‌بایتی برای %4 ساخته خواهد شد. - + Boot loader location: مکان بالاآورنده بوت: - + <strong>Select a partition to install on</strong> <strong>یک پارتیشن را برای نصب بر روی آن، انتخاب کنید</strong> - + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. پارتیشن سیستم ای.اف.آی نمی‌تواند در هیچ جایی از این سیستم یافت شود. لطفا برگردید و از پارتیشن بندی دستی استفاده کنید تا %1 را راه‌اندازی کنید. - + The EFI system partition at %1 will be used for starting %2. پارتیشن سیستم ای.اف.آی در %1 برای شروع %2 استفاده خواهد شد. - + EFI system partition: پارتیشن سیستم ای.اف.آی - + This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. به نظر می‌رسد در دستگاه ذخیره‌سازی هیچ سیستم‌عاملی وجود ندارد. تمایل به انجام چه کاری دارید؟<br/>شما می‌توانید انتخاب‌هایتان را قبل از اعمال هر تغییری در دستگاه ذخیره‌سازی، مرور و تأیید نمایید. - - - - + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>پاک کردن دیسک</strong><br/>این کار تمام داده‌های موجود بر روی دستگاه ذخیره‌سازی انتخاب شده را <font color="red">حذف می‌کند</font>. - - - - + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>نصب در امتداد</strong><br/>این نصاب از یک پارتیشن برای ساخت یک اتاق برای %1 استفاده می‌کند. - - - - + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>جایگزینی یک افراز</strong><br/>افرازی را با %1 جایگزین می‌کند. - + This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. - + This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. - + This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. - + No Swap بدون Swap - + Reuse Swap باز استفاده از مبادله - + Swap (no Hibernate) مبادله (بدون خواب‌زمستانی) - + Swap (with Hibernate) مبادله (با خواب‌زمستانی) - + Swap to file مبادله به پرونده @@ -715,17 +715,17 @@ The installer will quit and all changes will be lost. تنظیم چینش صفحه‌کلید به %1/%2. - + Set timezone to %1/%2. - + The system language will be set to %1. زبان سامانه به %1 تنظیم خواهد شد. - + The numbers and dates locale will be set to %1. @@ -795,42 +795,42 @@ The installer will quit and all changes will be lost. - + Your username is too long. نام کاربریتان بیش از حد بلند است. - + '%1' is not allowed as username. - + Your username must start with a lowercase letter or underscore. - + Only lowercase letters, numbers, underscore and hyphen are allowed. - + Your hostname is too short. نام میزبانتان بیش از حد کوتاه است. - + Your hostname is too long. نام میزبانتان بیش از حد بلند است. - + '%1' is not allowed as hostname. - + Only letters, numbers, underscore and hyphen are allowed. @@ -1251,7 +1251,8 @@ The installer will quit and all changes will be lost. تأیید عبارت عبور - + + Please enter the same passphrase in both boxes. لطفاً عبارت عبور یکسانی را در هر دو جعبه وارد کنید. @@ -1703,18 +1704,18 @@ The installer will quit and all changes will be lost. LocalePage - + Region: ناحیه: - + Zone: منطقه: - - + + &Change... &تغییر… @@ -1792,7 +1793,12 @@ The installer will quit and all changes will be lost. Map - + + Timezone: %1 + + + + Please select your preferred location on the map so the installer can suggest the locale and timezone settings for you. You can fine-tune the suggested settings below. Search the map by dragging to move and using the +/- buttons to zoom in/out or use mouse scrolling for zooming. @@ -1953,247 +1959,247 @@ The installer will quit and all changes will be lost. PWQ - + Password is too short گذرواژه خیلی کوتاه است - + Password is too long گذرواژه خیلی بلند است - + Password is too weak گذرواژه خیلی ضعیف است - + Memory allocation error when setting '%1' خطای تخصیص حافظه هنگام تنظیم %1 - + Memory allocation error خطای تخصیص حافظه - + The password is the same as the old one گذرواژه همان قبلی است - + The password is a palindrome گذرواژه متقارن است - + The password differs with case changes only گذرواژه فقط در کوچکی و بزرگی متفاوت است - + The password is too similar to the old one گذرواژه خیلی شبیه قبلی است - + The password contains the user name in some form گذرواژه، شکلی از نام کاربری را داراست - + The password contains words from the real name of the user in some form گذرواژه شامل واژگانی از نام واقعی کاربر است - + The password contains forbidden words in some form گذرواژه شکلی از واژگان ممنوعه را دارد - + The password contains less than %1 digits گذرواژه کم‌تر از %1 رقم دارد - + The password contains too few digits گذرواژه، رقم‌های خیلی کمی دارد - + The password contains less than %1 uppercase letters - + The password contains too few uppercase letters - + The password contains less than %1 lowercase letters - + The password contains too few lowercase letters - + The password contains less than %1 non-alphanumeric characters - + The password contains too few non-alphanumeric characters - + The password is shorter than %1 characters گذرواژه کوتاه‌تر از %1 نویسه است - + The password is too short گذرواژه خیلی کوتاه است - + The password is just rotated old one گذرواژه معکوس قبلی است - + The password contains less than %1 character classes - + The password does not contain enough character classes - + The password contains more than %1 same characters consecutively - + The password contains too many same characters consecutively - + The password contains more than %1 characters of the same class consecutively - + The password contains too many characters of the same class consecutively - + The password contains monotonic sequence longer than %1 characters - + The password contains too long of a monotonic character sequence - + No password supplied هیچ‌گذرواژه‌ای فراهم نشده - + Cannot obtain random numbers from the RNG device - + Password generation failed - required entropy too low for settings - + The password fails the dictionary check - %1 - + The password fails the dictionary check - + Unknown setting - %1 تنظیمات ناشناخته - %1 - + Unknown setting تنظیمات ناشناخته - + Bad integer value of setting - %1 مقدار صحیح بد در تنظیمات - %1 - + Bad integer value مقدار صحیح بد - + Setting %1 is not of integer type تنظیمات %1 از گونهٔ صحیح نیست - + Setting is not of integer type تنظیمات از گونهٔ صحیح نیست - + Setting %1 is not of string type تنظیمات %1 از گونهٔ رشته نیست - + Setting is not of string type تنظیمات از گونهٔ رشته نیست - + Opening the configuration file failed گشودن پروندهٔ پیکربندی شکست خورد - + The configuration file is malformed پروندهٔ پیکربندی بدریخت است - + Fatal failure خطای مهلک - + Unknown error خطای ناشناخته - + Password is empty گذرواژه خالی است @@ -2527,67 +2533,67 @@ The installer will quit and all changes will be lost. PartitionViewStep - + Gathering system information... جمع‌آوری اطّلاعات سامانه… - + Partitions افرازها - + Install %1 <strong>alongside</strong> another operating system. نصب %1 <strong>در امتداد</strong> سیستم عامل دیگر. - + <strong>Erase</strong> disk and install %1. <strong>پاک کردن</strong> دیسک و نصب %1. - + <strong>Replace</strong> a partition with %1. <strong>جایگزینی</strong> یک پارتیشن و با %1 - + <strong>Manual</strong> partitioning. <strong>پارتیشن‌بندی</strong> دستی. - + Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). - + <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. - + <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. - + <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). - + Disk <strong>%1</strong> (%2) دیسک <strong>%1</strong> (%2) - + Current: فعلی: - + After: بعد از: @@ -2632,12 +2638,12 @@ The installer will quit and all changes will be lost. - + has at least one disk device available. - + There are no partitions to install on. هیچ پارتیشنی برای نصب وجود ندارد @@ -3539,17 +3545,17 @@ Output: UsersPage - + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> - + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> - + Your passwords do not match! گذرواژه‌هایتان مطابق نیستند! @@ -3557,7 +3563,7 @@ Output: UsersViewStep - + Users کاربران @@ -3835,7 +3841,7 @@ Output: localeq - + Change diff --git a/lang/calamares_fi_FI.ts b/lang/calamares_fi_FI.ts index 0eef96c832..28fb3d625b 100644 --- a/lang/calamares_fi_FI.ts +++ b/lang/calamares_fi_FI.ts @@ -510,134 +510,134 @@ Asennusohjelma sulkeutuu ja kaikki muutoksesi katoavat. Lomake - + Select storage de&vice: Valitse tallennus&laite: - - - - + + + + Current: Nykyinen: - + After: Jälkeen: - + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. <strong>Manuaalinen osiointi </strong><br/>Voit luoda tai muuttaa osioita itse. - + Reuse %1 as home partition for %2. Käytä %1 uudelleen kotiosiona kohteelle %2. - + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> <strong>Valitse supistettava osio ja säädä alarivillä kokoa vetämällä</strong> - + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. %1 supistetaan %2Mib:iin ja uusi %3MiB-osio luodaan kohteelle %4. - + Boot loader location: Käynnistyksen lataajan sijainti: - + <strong>Select a partition to install on</strong> <strong>Valitse asennettava osio</strong> - + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. EFI-osiota ei löydy mistään tässä järjestelmässä. Siirry takaisin ja käytä manuaalista osiointia, kun haluat määrittää %1 - + The EFI system partition at %1 will be used for starting %2. EFI-järjestelmän osiota %1 käytetään käynnistettäessä %2. - + EFI system partition: EFI järjestelmäosio - + This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Tällä tallennuslaitteella ei näytä olevan käyttöjärjestelmää. Mitä haluat tehdä?<br/>Voit tarkistaa ja vahvistaa valintasi ennen kuin tallennuslaitteeseen tehdään muutoksia. - - - - + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>Tyhjennä levy</strong><br/>Tämä <font color="red">poistaa</font> kaikki tiedot valitussa tallennuslaitteessa. - - - - + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Asenna nykyisen rinnalle</strong><br/>Asennus ohjelma supistaa osion tehdäkseen tilaa kohteelle %1. - - - - + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>Osion korvaaminen</strong><br/>korvaa osion %1. - + This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Tässä tallennuslaitteessa on %1 dataa. Mitä haluat tehdä?<br/>Voit tarkistaa ja vahvistaa valintasi ennen kuin tallennuslaitteeseen tehdään muutoksia. - + This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Tämä tallennuslaite sisältää jo käyttöjärjestelmän. Mitä haluaisit tehdä?<br/>Voit tarkistaa ja vahvistaa valintasi, ennen kuin tallennuslaitteeseen tehdään muutoksia. - + This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Tämä tallennuslaite sisältää jo useita käyttöjärjestelmiä. Mitä haluaisit tehdä?<br/>Voit tarkistaa ja vahvistaa valintasi, ennen kuin tallennuslaitteeseen tehdään muutoksia. - + No Swap Ei välimuistia - + Reuse Swap Kierrätä välimuistia - + Swap (no Hibernate) Välimuisti (ei lepotilaa) - + Swap (with Hibernate) Välimuisti (lepotilan kanssa) - + Swap to file Välimuisti tiedostona @@ -715,17 +715,17 @@ Asennusohjelma sulkeutuu ja kaikki muutoksesi katoavat. Aseta näppäimiston asetelmaksi %1/%2. - + Set timezone to %1/%2. Aseta aikavyöhykkeeksi %1/%2. - + The system language will be set to %1. Järjestelmän kielen asetuksena on %1. - + The numbers and dates locale will be set to %1. Numerot ja päivämäärät, paikallinen asetus on %1. @@ -796,42 +796,42 @@ Asennus voi jatkua, mutta jotkin toiminnot saattavat olla pois käytöstä.<h1>Tervetuloa %1 -asennusohjelmaan</h1> - + Your username is too long. Käyttäjänimesi on liian pitkä. - + '%1' is not allowed as username. '%1' ei ole sallittu käyttäjänimenä. - + Your username must start with a lowercase letter or underscore. Käyttäjätunnuksesi täytyy alkaa pienillä kirjaimilla tai alaviivoilla. - + Only lowercase letters, numbers, underscore and hyphen are allowed. Vain pienet kirjaimet, numerot, alaviivat ja tavuviivat ovat sallittuja. - + Your hostname is too short. Isäntänimesi on liian lyhyt. - + Your hostname is too long. Isäntänimesi on liian pitkä. - + '%1' is not allowed as hostname. '%1' ei ole sallittu koneen nimenä. - + Only letters, numbers, underscore and hyphen are allowed. Vain kirjaimet, numerot, alaviivat ja tavuviivat ovat sallittuja. @@ -1252,7 +1252,8 @@ Asennus voi jatkua, mutta jotkin toiminnot saattavat olla pois käytöstä.Vahvista salasana - + + Please enter the same passphrase in both boxes. Anna sama salasana molemmissa ruuduissa. @@ -1704,18 +1705,18 @@ Asennus voi jatkua, mutta jotkin toiminnot saattavat olla pois käytöstä. LocalePage - + Region: Alue: - + Zone: Vyöhyke: - - + + &Change... &Vaihda... @@ -1793,7 +1794,12 @@ Asennus voi jatkua, mutta jotkin toiminnot saattavat olla pois käytöstä. Map - + + Timezone: %1 + Aikavyöhyke: %1 + + + Please select your preferred location on the map so the installer can suggest the locale and timezone settings for you. You can fine-tune the suggested settings below. Search the map by dragging to move and using the +/- buttons to zoom in/out or use mouse scrolling for zooming. @@ -1956,247 +1962,247 @@ hiiren vieritystä skaalaamiseen. PWQ - + Password is too short Salasana on liian lyhyt - + Password is too long Salasana on liian pitkä - + Password is too weak Salasana on liian heikko - + Memory allocation error when setting '%1' Muistin varausvirhe asetettaessa '%1' - + Memory allocation error Muistin varausvirhe - + The password is the same as the old one Salasana on sama kuin vanha - + The password is a palindrome Salasana on palindromi - + The password differs with case changes only Salasana eroaa vain vähäisin muutoksin - + The password is too similar to the old one Salasana on liian samanlainen kuin vanha - + The password contains the user name in some form Salasana sisältää jonkin käyttäjänimen - + The password contains words from the real name of the user in some form Salasana sisältää sanoja käyttäjän todellisesta nimestä jossain muodossa - + The password contains forbidden words in some form Salasana sisältää kiellettyjä sanoja - + The password contains less than %1 digits Salasana sisältää vähemmän kuin %1 numeroa - + The password contains too few digits Salasana sisältää liian vähän numeroita - + The password contains less than %1 uppercase letters Salasana sisältää vähemmän kuin %1 isoja kirjaimia - + The password contains too few uppercase letters Salasana sisältää liian vähän isoja kirjaimia - + The password contains less than %1 lowercase letters Salasana sisältää vähemmän kuin %1 pieniä kirjaimia - + The password contains too few lowercase letters Salasana sisältää liian vähän pieniä kirjaimia - + The password contains less than %1 non-alphanumeric characters Salasanassa on vähemmän kuin %1 erikoismerkkiä - + The password contains too few non-alphanumeric characters Salasana sisältää liian vähän erikoismerkkejä - + The password is shorter than %1 characters Salasana on lyhyempi kuin %1 merkkiä - + The password is too short Salasana on liian lyhyt - + The password is just rotated old one Salasana on vain vanhan pyöritystä - + The password contains less than %1 character classes Salasana sisältää vähemmän kuin %1 merkkiluokkaa - + The password does not contain enough character classes Salasana ei sisällä tarpeeksi merkkiluokkia - + The password contains more than %1 same characters consecutively Salasana sisältää enemmän kuin %1 samaa merkkiä peräkkäin - + The password contains too many same characters consecutively Salasana sisältää liian monta samaa merkkiä peräkkäin - + The password contains more than %1 characters of the same class consecutively Salasana sisältää enemmän kuin %1 merkkiä samasta luokasta peräkkäin - + The password contains too many characters of the same class consecutively Salasana sisältää liian monta saman luokan merkkiä peräkkäin - + The password contains monotonic sequence longer than %1 characters Salasana sisältää monotonisen merkkijonon, joka on pidempi kuin %1 merkkiä - + The password contains too long of a monotonic character sequence Salasanassa on liian pitkä monotoninen merkkijono - + No password supplied Salasanaa ei annettu - + Cannot obtain random numbers from the RNG device Satunnaislukuja ei voi saada RNG-laitteesta - + Password generation failed - required entropy too low for settings Salasanojen luonti epäonnistui - pakollinen vähimmäistaso liian alhainen asetuksia varten - + The password fails the dictionary check - %1 Salasana epäonnistui sanaston tarkistuksessa -%1 - + The password fails the dictionary check Salasana epäonnistui sanaston tarkistuksessa - + Unknown setting - %1 Tuntematon asetus - %1 - + Unknown setting Tuntematon asetus - + Bad integer value of setting - %1 Asetuksen virheellinen kokonaisluku - %1 - + Bad integer value Virheellinen kokonaisluku - + Setting %1 is not of integer type Asetus %1 ei ole kokonaisluku - + Setting is not of integer type Asetus ei ole kokonaisluku - + Setting %1 is not of string type Asetus %1 ei ole merkkijono - + Setting is not of string type Asetus ei ole merkkijono - + Opening the configuration file failed Määritystiedoston avaaminen epäonnistui - + The configuration file is malformed Määritystiedosto on väärin muotoiltu - + Fatal failure Vakava virhe - + Unknown error Tuntematon virhe - + Password is empty Salasana on tyhjä @@ -2530,67 +2536,67 @@ hiiren vieritystä skaalaamiseen. PartitionViewStep - + Gathering system information... Kerätään järjestelmän tietoja... - + Partitions Osiot - + Install %1 <strong>alongside</strong> another operating system. Asenna toisen käyttöjärjestelmän %1 <strong>rinnalle</strong>. - + <strong>Erase</strong> disk and install %1. <strong>Tyhjennä</strong> levy ja asenna %1. - + <strong>Replace</strong> a partition with %1. <strong>Vaihda</strong> osio jolla on %1. - + <strong>Manual</strong> partitioning. <strong>Manuaalinen</strong> osointi. - + Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). Asenna toisen käyttöjärjestelmän %1 <strong>rinnalle</strong> levylle <strong>%2</strong> (%3). - + <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. <strong>Tyhjennä</strong> levy <strong>%2</strong> (%3) ja asenna %1. - + <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. <strong>Korvaa</strong> levyn osio <strong>%2</strong> (%3) jolla on %1. - + <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). <strong>Manuaalinen</strong> osiointi levyllä <strong>%1</strong> (%2). - + Disk <strong>%1</strong> (%2) Levy <strong>%1</strong> (%2) - + Current: Nykyinen: - + After: Jälkeen: @@ -2635,12 +2641,12 @@ hiiren vieritystä skaalaamiseen. Erillinen käynnistysosio perustettiin yhdessä salatun juuriosion kanssa, mutta käynnistysosio ei ole salattu.<br/><br/>Tällaisissa asetuksissa on tietoturvaongelmia, koska tärkeät järjestelmätiedostot pidetään salaamattomassa osiossa.<br/>Voit jatkaa, jos haluat, mutta tiedostojärjestelmän lukituksen avaaminen tapahtuu myöhemmin järjestelmän käynnistyksen aikana.<br/>Käynnistysosion salaamiseksi siirry takaisin ja luo se uudelleen valitsemalla <strong>Salaa</strong> osion luominen -ikkunassa. - + has at least one disk device available. on vähintään yksi levy käytettävissä. - + There are no partitions to install on. Asennettavia osioita ei ole. @@ -3549,17 +3555,17 @@ Asennus voi jatkua, mutta jotkin toiminnot saattavat olla pois käytöstä. UsersPage - + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>Jos useampi kuin yksi henkilö käyttää tätä tietokonetta, voit luoda useita tilejä asennuksen jälkeen.</small> - + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> <small>Jos useampi kuin yksi henkilö käyttää tätä tietokonetta, voit luoda useita tilejä asennuksen jälkeen.</small> - + Your passwords do not match! Salasanasi eivät täsmää! @@ -3567,7 +3573,7 @@ Asennus voi jatkua, mutta jotkin toiminnot saattavat olla pois käytöstä. UsersViewStep - + Users Käyttäjät @@ -3858,7 +3864,7 @@ Asennus voi jatkua, mutta jotkin toiminnot saattavat olla pois käytöstä. localeq - + Change Vaihda diff --git a/lang/calamares_fr.ts b/lang/calamares_fr.ts index 2e48c46345..3b236b2cb2 100644 --- a/lang/calamares_fr.ts +++ b/lang/calamares_fr.ts @@ -510,134 +510,134 @@ L'installateur se fermera et les changements seront perdus. Formulaire - + Select storage de&vice: Sélectionnez le support de sto&ckage : - - - - + + + + Current: Actuel : - + After: Après: - + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. <strong>Partitionnement manuel</strong><br/>Vous pouvez créer ou redimensionner vous-même des partitions. - + Reuse %1 as home partition for %2. Réutiliser %1 comme partition home pour %2. - + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> <strong>Sélectionnez une partition à réduire, puis faites glisser la barre du bas pour redimensionner</strong> - + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. %1 va être réduit à %2Mio et une nouvelle partition de %3Mio va être créée pour %4. - + Boot loader location: Emplacement du chargeur de démarrage: - + <strong>Select a partition to install on</strong> <strong>Sélectionner une partition pour l'installation</strong> - + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. Une partition système EFI n'a pas pu être trouvée sur ce système. Veuillez retourner à l'étape précédente et sélectionner le partitionnement manuel pour configurer %1. - + The EFI system partition at %1 will be used for starting %2. La partition système EFI sur %1 va être utilisée pour démarrer %2. - + EFI system partition: Partition système EFI : - + This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Ce périphérique de stockage ne semble pas contenir de système d'exploitation. Que souhaitez-vous faire ?<br/>Vous pourrez relire et confirmer vos choix avant que les modifications soient effectuées sur le périphérique de stockage. - - - - + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>Effacer le disque</strong><br/>Ceci va <font color="red">effacer</font> toutes les données actuellement présentes sur le périphérique de stockage sélectionné. - - - - + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Installer à côté</strong><br/>L'installateur va réduire une partition pour faire de la place pour %1. - - - - + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>Remplacer une partition</strong><br>Remplace une partition par %1. - + This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Ce périphérique de stockage contient %1. Que souhaitez-vous faire ?<br/>Vous pourrez relire et confirmer vos choix avant que les modifications soient effectuées sur le périphérique de stockage. - + This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Ce périphérique de stockage contient déjà un système d'exploitation. Que souhaitez-vous faire ?<br/>Vous pourrez relire et confirmer vos choix avant que les modifications soient effectuées sur le périphérique de stockage. - + This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Ce péiphérique de stockage contient déjà plusieurs systèmes d'exploitation. Que souhaitez-vous faire ?<br/>Vous pourrez relire et confirmer vos choix avant que les modifications soient effectuées sur le périphérique de stockage. - + No Swap Aucun Swap - + Reuse Swap Réutiliser le Swap - + Swap (no Hibernate) Swap (sans hibernation) - + Swap (with Hibernate) Swap (avec hibernation) - + Swap to file Swap dans un fichier @@ -715,17 +715,17 @@ L'installateur se fermera et les changements seront perdus. Configurer la disposition clavier à %1/%2. - + Set timezone to %1/%2. - + The system language will be set to %1. La langue du système sera réglée sur %1. - + The numbers and dates locale will be set to %1. Les nombres et les dates seront réglés sur %1. @@ -795,42 +795,42 @@ L'installateur se fermera et les changements seront perdus. - + Your username is too long. Votre nom d'utilisateur est trop long. - + '%1' is not allowed as username. - + Your username must start with a lowercase letter or underscore. Votre nom d'utilisateur doit commencer avec une lettre minuscule ou un underscore. - + Only lowercase letters, numbers, underscore and hyphen are allowed. Seuls les minuscules, nombres, underscores et tirets sont autorisés. - + Your hostname is too short. Le nom d'hôte est trop petit. - + Your hostname is too long. Le nom d'hôte est trop long. - + '%1' is not allowed as hostname. - + Only letters, numbers, underscore and hyphen are allowed. Seuls les lettres, nombres, underscores et tirets sont autorisés. @@ -1251,7 +1251,8 @@ L'installateur se fermera et les changements seront perdus. Confirmez la phrase de passe - + + Please enter the same passphrase in both boxes. Merci d'entrer la même phrase de passe dans les deux champs. @@ -1703,18 +1704,18 @@ L'installateur se fermera et les changements seront perdus. LocalePage - + Region: Région : - + Zone: Zone : - - + + &Change... &Modifier... @@ -1792,7 +1793,12 @@ L'installateur se fermera et les changements seront perdus. Map - + + Timezone: %1 + + + + Please select your preferred location on the map so the installer can suggest the locale and timezone settings for you. You can fine-tune the suggested settings below. Search the map by dragging to move and using the +/- buttons to zoom in/out or use mouse scrolling for zooming. @@ -1953,247 +1959,247 @@ L'installateur se fermera et les changements seront perdus. PWQ - + Password is too short Le mot de passe est trop court - + Password is too long Le mot de passe est trop long - + Password is too weak Le mot de passe est trop faible - + Memory allocation error when setting '%1' Erreur d'allocation mémoire lors du paramétrage de '%1' - + Memory allocation error Erreur d'allocation mémoire - + The password is the same as the old one Le mot de passe est identique au précédent - + The password is a palindrome Le mot de passe est un palindrome - + The password differs with case changes only Le mot de passe ne diffère que sur la casse - + The password is too similar to the old one Le mot de passe est trop similaire à l'ancien - + The password contains the user name in some form Le mot de passe contient le nom d'utilisateur sous une certaine forme - + The password contains words from the real name of the user in some form Le mot de passe contient des mots provenant du nom d'utilisateur sous une certaine forme - + The password contains forbidden words in some form Le mot de passe contient des mots interdits sous une certaine forme - + The password contains less than %1 digits Le mot de passe contient moins de %1 chiffres - + The password contains too few digits Le mot de passe ne contient pas assez de chiffres - + The password contains less than %1 uppercase letters Le mot de passe contient moins de %1 lettres majuscules - + The password contains too few uppercase letters Le mot de passe ne contient pas assez de lettres majuscules - + The password contains less than %1 lowercase letters Le mot de passe contient moins de %1 lettres minuscules - + The password contains too few lowercase letters Le mot de passe ne contient pas assez de lettres minuscules - + The password contains less than %1 non-alphanumeric characters Le mot de passe contient moins de %1 caractères spéciaux - + The password contains too few non-alphanumeric characters Le mot de passe ne contient pas assez de caractères spéciaux - + The password is shorter than %1 characters Le mot de passe fait moins de %1 caractères - + The password is too short Le mot de passe est trop court - + The password is just rotated old one Le mot de passe saisit correspond avec un de vos anciens mot de passe - + The password contains less than %1 character classes Le mot de passe contient moins de %1 classes de caractères - + The password does not contain enough character classes Le mot de passe ne contient pas assez de classes de caractères - + The password contains more than %1 same characters consecutively Le mot de passe contient plus de %1 fois le même caractère à la suite - + The password contains too many same characters consecutively Le mot de passe contient trop de fois le même caractère à la suite - + The password contains more than %1 characters of the same class consecutively Le mot de passe contient plus de %1 caractères de la même classe consécutivement - + The password contains too many characters of the same class consecutively Le mot de passe contient trop de caractères de la même classe consécutivement - + The password contains monotonic sequence longer than %1 characters Le mot de passe contient une séquence de caractères monotones de %1 caractères - + The password contains too long of a monotonic character sequence Le mot de passe contient une trop longue séquence de caractères monotones - + No password supplied Aucun mot de passe saisi - + Cannot obtain random numbers from the RNG device Impossible d'obtenir des nombres aléatoires depuis le générateur de nombres aléatoires - + Password generation failed - required entropy too low for settings La génération du mot de passe a échoué - L'entropie minimum nécessaire n'est pas satisfaite par les paramètres - + The password fails the dictionary check - %1 Le mot de passe a échoué le contrôle de qualité par dictionnaire - %1 - + The password fails the dictionary check Le mot de passe a échoué le contrôle de qualité par dictionnaire - + Unknown setting - %1 Paramètre inconnu - %1 - + Unknown setting Paramètre inconnu - + Bad integer value of setting - %1 Valeur incorrect du paramètre - %1 - + Bad integer value Mauvaise valeur d'entier - + Setting %1 is not of integer type Le paramètre %1 n'est pas de type entier - + Setting is not of integer type Le paramètre n'est pas de type entier - + Setting %1 is not of string type Le paramètre %1 n'est pas une chaîne de caractères - + Setting is not of string type Le paramètre n'est pas une chaîne de caractères - + Opening the configuration file failed L'ouverture du fichier de configuration a échouée - + The configuration file is malformed Le fichier de configuration est mal formé - + Fatal failure Erreur fatale - + Unknown error Erreur inconnue - + Password is empty Le mot de passe est vide @@ -2527,67 +2533,67 @@ L'installateur se fermera et les changements seront perdus. PartitionViewStep - + Gathering system information... Récupération des informations système… - + Partitions Partitions - + Install %1 <strong>alongside</strong> another operating system. Installer %1 <strong>à côté</strong>d'un autre système d'exploitation. - + <strong>Erase</strong> disk and install %1. <strong>Effacer</strong> le disque et installer %1. - + <strong>Replace</strong> a partition with %1. <strong>Remplacer</strong> une partition avec %1. - + <strong>Manual</strong> partitioning. Partitionnement <strong>manuel</strong>. - + Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). Installer %1 <strong>à côté</strong> d'un autre système d'exploitation sur le disque <strong>%2</strong> (%3). - + <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. <strong>Effacer</strong> le disque <strong>%2</strong> (%3) et installer %1. - + <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. <strong>Remplacer</strong> une partition sur le disque <strong>%2</strong> (%3) avec %1. - + <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). Partitionnement <strong>manuel</strong> sur le disque <strong>%1</strong> (%2). - + Disk <strong>%1</strong> (%2) Disque <strong>%1</strong> (%2) - + Current: Actuel : - + After: Après : @@ -2632,12 +2638,12 @@ L'installateur se fermera et les changements seront perdus. Une partition d'amorçage distincte a été configurée avec une partition racine chiffrée, mais la partition d'amorçage n'est pas chiffrée. <br/> <br/> Il y a des problèmes de sécurité avec ce type d'installation, car des fichiers système importants sont conservés sur une partition non chiffrée <br/> Vous pouvez continuer si vous le souhaitez, mais le déverrouillage du système de fichiers se produira plus tard au démarrage du système. <br/> Pour chiffrer la partition d'amorçage, revenez en arrière et recréez-la, en sélectionnant <strong> Chiffrer </ strong> dans la partition Fenêtre de création. - + has at least one disk device available. a au moins un disque disponible. - + There are no partitions to install on. Il n'y a pas de partition pour l'installation @@ -3543,17 +3549,17 @@ Sortie UsersPage - + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>si plusieurs personnes utilisent cet ordinateur, vous pourrez créer plusieurs comptes après la configuration.</small> - + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> <small>si plusieurs personnes utilisent cet ordinateur, vous pourrez créer plusieurs comptes après l'installation.</small> - + Your passwords do not match! Vos mots de passe ne correspondent pas ! @@ -3561,7 +3567,7 @@ Sortie UsersViewStep - + Users Utilisateurs @@ -3839,7 +3845,7 @@ Sortie localeq - + Change diff --git a/lang/calamares_fr_CH.ts b/lang/calamares_fr_CH.ts index e46a52d5ee..92c7c69a21 100644 --- a/lang/calamares_fr_CH.ts +++ b/lang/calamares_fr_CH.ts @@ -507,134 +507,134 @@ The installer will quit and all changes will be lost. - + Select storage de&vice: - - - - + + + + Current: - + After: - + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. - + Reuse %1 as home partition for %2. - + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> - + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. - + Boot loader location: - + <strong>Select a partition to install on</strong> - + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. - + The EFI system partition at %1 will be used for starting %2. - + EFI system partition: - + This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. - - - - + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. - - - - + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. - - - - + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. - + This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. - + This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. - + This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. - + No Swap - + Reuse Swap - + Swap (no Hibernate) - + Swap (with Hibernate) - + Swap to file @@ -712,17 +712,17 @@ The installer will quit and all changes will be lost. - + Set timezone to %1/%2. - + The system language will be set to %1. - + The numbers and dates locale will be set to %1. @@ -792,42 +792,42 @@ The installer will quit and all changes will be lost. - + Your username is too long. - + '%1' is not allowed as username. - + Your username must start with a lowercase letter or underscore. - + Only lowercase letters, numbers, underscore and hyphen are allowed. - + Your hostname is too short. - + Your hostname is too long. - + '%1' is not allowed as hostname. - + Only letters, numbers, underscore and hyphen are allowed. @@ -1248,7 +1248,8 @@ The installer will quit and all changes will be lost. - + + Please enter the same passphrase in both boxes. @@ -1700,18 +1701,18 @@ The installer will quit and all changes will be lost. LocalePage - + Region: - + Zone: - - + + &Change... @@ -1789,7 +1790,12 @@ The installer will quit and all changes will be lost. Map - + + Timezone: %1 + + + + Please select your preferred location on the map so the installer can suggest the locale and timezone settings for you. You can fine-tune the suggested settings below. Search the map by dragging to move and using the +/- buttons to zoom in/out or use mouse scrolling for zooming. @@ -1950,247 +1956,247 @@ The installer will quit and all changes will be lost. PWQ - + Password is too short - + Password is too long - + Password is too weak - + Memory allocation error when setting '%1' - + Memory allocation error - + The password is the same as the old one - + The password is a palindrome - + The password differs with case changes only - + The password is too similar to the old one - + The password contains the user name in some form - + The password contains words from the real name of the user in some form - + The password contains forbidden words in some form - + The password contains less than %1 digits - + The password contains too few digits - + The password contains less than %1 uppercase letters - + The password contains too few uppercase letters - + The password contains less than %1 lowercase letters - + The password contains too few lowercase letters - + The password contains less than %1 non-alphanumeric characters - + The password contains too few non-alphanumeric characters - + The password is shorter than %1 characters - + The password is too short - + The password is just rotated old one - + The password contains less than %1 character classes - + The password does not contain enough character classes - + The password contains more than %1 same characters consecutively - + The password contains too many same characters consecutively - + The password contains more than %1 characters of the same class consecutively - + The password contains too many characters of the same class consecutively - + The password contains monotonic sequence longer than %1 characters - + The password contains too long of a monotonic character sequence - + No password supplied - + Cannot obtain random numbers from the RNG device - + Password generation failed - required entropy too low for settings - + The password fails the dictionary check - %1 - + The password fails the dictionary check - + Unknown setting - %1 - + Unknown setting - + Bad integer value of setting - %1 - + Bad integer value - + Setting %1 is not of integer type - + Setting is not of integer type - + Setting %1 is not of string type - + Setting is not of string type - + Opening the configuration file failed - + The configuration file is malformed - + Fatal failure - + Unknown error - + Password is empty @@ -2524,67 +2530,67 @@ The installer will quit and all changes will be lost. PartitionViewStep - + Gathering system information... - + Partitions - + Install %1 <strong>alongside</strong> another operating system. - + <strong>Erase</strong> disk and install %1. - + <strong>Replace</strong> a partition with %1. - + <strong>Manual</strong> partitioning. - + Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). - + <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. - + <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. - + <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). - + Disk <strong>%1</strong> (%2) - + Current: - + After: @@ -2629,12 +2635,12 @@ The installer will quit and all changes will be lost. - + has at least one disk device available. - + There are no partitions to install on. @@ -3536,17 +3542,17 @@ Output: UsersPage - + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> - + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> - + Your passwords do not match! @@ -3554,7 +3560,7 @@ Output: UsersViewStep - + Users @@ -3832,7 +3838,7 @@ Output: localeq - + Change diff --git a/lang/calamares_gl.ts b/lang/calamares_gl.ts index 7288e445f4..ae88c05fc1 100644 --- a/lang/calamares_gl.ts +++ b/lang/calamares_gl.ts @@ -509,134 +509,134 @@ O instalador pecharase e perderanse todos os cambios. Formulario - + Select storage de&vice: Seleccione o dispositivo de almacenamento: - - - - + + + + Current: Actual: - + After: Despois: - + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. <strong>Particionado manual</strong><br/> Pode crear o redimensionar particións pola súa conta. - + Reuse %1 as home partition for %2. Reutilizar %1 como partición home para %2 - + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> <strong>Seleccione unha partición para acurtar, logo empregue a barra para redimensionala</strong> - + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. - + Boot loader location: Localización do cargador de arranque: - + <strong>Select a partition to install on</strong> <strong>Seleccione unha partición para instalar</strong> - + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. Non foi posible atopar unha partición de sistema de tipo EFI. Por favor, volva atrás e empregue a opción de particionado manual para crear unha en %1. - + The EFI system partition at %1 will be used for starting %2. A partición EFI do sistema en %1 será usada para iniciar %2. - + EFI system partition: Partición EFI do sistema: - + This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Esta unidade de almacenamento non semella ter un sistema operativo instalado nela. Que desexa facer?<br/>Poderá revisar e confirmar as súas eleccións antes de que calquera cambio sexa feito na unidade de almacenamento. - - - - + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>Borrar disco</strong><br/>Esto <font color="red">eliminará</font> todos os datos gardados na unidade de almacenamento seleccionada. - - - - + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Instalar a carón</strong><br/>O instalador encollerá a partición para facerlle sitio a %1 - - - - + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>Substituír a partición</strong><br/>Substitúe a partición con %1. - + This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. A unidade de almacenamento ten %1 nela. Que desexa facer?<br/>Poderá revisar e confirmar a súa elección antes de que se aplique algún cambio á unidade. - + This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Esta unidade de almacenamento xa ten un sistema operativo instalado nel. Que desexa facer?<br/>Poderá revisar e confirmar as súas eleccións antes de que calquera cambio sexa feito na unidade de almacenamento - + This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Esta unidade de almacenamento ten múltiples sistemas operativos instalados nela. Que desexa facer?<br/>Poderá revisar e confirmar as súas eleccións antes de que calquera cambio sexa feito na unidade de almacenamento. - + No Swap - + Reuse Swap - + Swap (no Hibernate) - + Swap (with Hibernate) - + Swap to file @@ -714,17 +714,17 @@ O instalador pecharase e perderanse todos os cambios. Seleccionada a disposición do teclado a %1/%2. - + Set timezone to %1/%2. - + The system language will be set to %1. A linguaxe do sistema será establecida a %1. - + The numbers and dates locale will be set to %1. A localización de números e datas será establecida a %1. @@ -794,42 +794,42 @@ O instalador pecharase e perderanse todos os cambios. - + Your username is too long. O nome de usuario é demasiado longo. - + '%1' is not allowed as username. - + Your username must start with a lowercase letter or underscore. - + Only lowercase letters, numbers, underscore and hyphen are allowed. - + Your hostname is too short. O nome do computador é demasiado curto. - + Your hostname is too long. O nome do computador é demasiado longo. - + '%1' is not allowed as hostname. - + Only letters, numbers, underscore and hyphen are allowed. @@ -1250,7 +1250,8 @@ O instalador pecharase e perderanse todos os cambios. Confirme a frase de contrasinal - + + Please enter the same passphrase in both boxes. Faga o favor de introducila a misma frase de contrasinal námbalas dúas caixas. @@ -1702,18 +1703,18 @@ O instalador pecharase e perderanse todos os cambios. LocalePage - + Region: Rexión: - + Zone: Zona: - - + + &Change... &Cambio... @@ -1791,7 +1792,12 @@ O instalador pecharase e perderanse todos os cambios. Map - + + Timezone: %1 + + + + Please select your preferred location on the map so the installer can suggest the locale and timezone settings for you. You can fine-tune the suggested settings below. Search the map by dragging to move and using the +/- buttons to zoom in/out or use mouse scrolling for zooming. @@ -1952,247 +1958,247 @@ O instalador pecharase e perderanse todos os cambios. PWQ - + Password is too short O contrasinal é demasiado curto - + Password is too long O contrasinal é demasiado longo - + Password is too weak O contrasinal é moi feble - + Memory allocation error when setting '%1' Erro de asignación de memoria ao configurar «%1» - + Memory allocation error Erro de asignación de memoria - + The password is the same as the old one O contrasinal é o mesmo que o anterior - + The password is a palindrome O contrasinal é un palíndromo - + The password differs with case changes only O contrasinal difire só no uso de maiúsculas - + The password is too similar to the old one O contrasinal é demasiado semellante ao anterior - + The password contains the user name in some form O contrasinal contén o nome do usuario ou unha variante - + The password contains words from the real name of the user in some form O contrasinal contén palabras do nome real do usuario ou unha variante - + The password contains forbidden words in some form O contrasinal contén palabras prohibidas ou unha variante - + The password contains less than %1 digits O contrasinal contén menos de %1 díxitos - + The password contains too few digits O contrasinal contén moi poucos díxitos - + The password contains less than %1 uppercase letters O contrasinal contén menos de %1 maiúsculas - + The password contains too few uppercase letters O contrasinal contén moi poucas maiúsculas - + The password contains less than %1 lowercase letters O contrasinal contén menos de %1 minúsculas - + The password contains too few lowercase letters O contrasinal contén moi poucas minúsculas - + The password contains less than %1 non-alphanumeric characters O contrasinal contén menos de %1 caracteres alfanuméricos - + The password contains too few non-alphanumeric characters O contrasinal contén moi poucos caracteres non alfanuméricos - + The password is shorter than %1 characters O contrasinal ten menos de %1 caracteres - + The password is too short O contrasinal é moi curto - + The password is just rotated old one O contrasinal é un anterior reutilizado - + The password contains less than %1 character classes O contrasinal contén menos de %1 clases de caracteres - + The password does not contain enough character classes O contrasinal non contén suficientes clases de caracteres - + The password contains more than %1 same characters consecutively O contrasinal contén máis de %1 caracteres iguais consecutivos - + The password contains too many same characters consecutively O contrasinal contén demasiados caracteres iguais consecutivos - + The password contains more than %1 characters of the same class consecutively O contrasinal contén máis de %1 caracteres consecutivos da mesma clase - + The password contains too many characters of the same class consecutively O contrasinal contén demasiados caracteres da mesma clase consecutivos - + The password contains monotonic sequence longer than %1 characters O contrasinal contén unha secuencia monotónica de máis de %1 caracteres - + The password contains too long of a monotonic character sequence O contrasinal contén unha secuencia de caracteres monotónica demasiado longa - + No password supplied Non se indicou o contrasinal - + Cannot obtain random numbers from the RNG device Non é posíbel obter números aleatorios do servizo de RNG - + Password generation failed - required entropy too low for settings Fallou a xeración do contrasinal - a entropía requirida é demasiado baixa para a configuración - + The password fails the dictionary check - %1 O contrasinal falla a comprobación do dicionario - %1 - + The password fails the dictionary check O contrasinal falla a comprobación do dicionario - + Unknown setting - %1 Configuración descoñecida - %1 - + Unknown setting Configuración descoñecida - + Bad integer value of setting - %1 Valor enteiro incorrecto de opción - %1 - + Bad integer value Valor enteiro incorrecto - + Setting %1 is not of integer type A opción %1 non é de tipo enteiro - + Setting is not of integer type A opción non é de tipo enteiro - + Setting %1 is not of string type A opción %1 non é de tipo cadea - + Setting is not of string type A opción non é de tipo cadea - + Opening the configuration file failed Non foi posíbel abrir o ficheiro de configuración - + The configuration file is malformed O ficheiro de configuración está mal escrito - + Fatal failure Fallo fatal - + Unknown error Erro descoñecido - + Password is empty @@ -2526,67 +2532,67 @@ O instalador pecharase e perderanse todos os cambios. PartitionViewStep - + Gathering system information... A reunir a información do sistema... - + Partitions Particións - + Install %1 <strong>alongside</strong> another operating system. Instalar %1 <strong>a carón</strong> doutro sistema operativo. - + <strong>Erase</strong> disk and install %1. <strong>Limpar</strong> o disco e instalar %1. - + <strong>Replace</strong> a partition with %1. <strong>Substituír</strong> unha partición por %1. - + <strong>Manual</strong> partitioning. Particionamento <strong>manual</strong>. - + Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). Instalar %1 <strong>a carón</strong> doutro sistema operativo no disco <strong>%2</strong> (%3). - + <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. <strong>Limpar</strong> o disco <strong>%2</strong> (%3) e instalar %1. - + <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. <strong>Substituír</strong> unha partición do disco <strong>%2</strong> (%3) por %1. - + <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). Particionamento <strong>manual</strong> do disco <strong>%1</strong> (%2). - + Disk <strong>%1</strong> (%2) Disco <strong>%1</strong> (%2) - + Current: Actual: - + After: Despois: @@ -2631,12 +2637,12 @@ O instalador pecharase e perderanse todos os cambios. Configurouse unha partición de arranque separada xunto cunha partición raíz cifrada, mais a partición raíz non está cifrada.<br/><br/>Con este tipo de configuración preocupa a seguranza porque nunha partición sen cifrar grávanse ficheiros de sistema importantes.<br/>Pode continuar, se así o desexa, mais o desbloqueo do sistema de ficheiros producirase máis tarde durante o arranque do sistema.<br/>Para cifrar unha partición raíz volva atrás e créea de novo, seleccionando <strong>Cifrar</strong> na xanela de creación de particións. - + has at least one disk device available. - + There are no partitions to install on. @@ -3541,17 +3547,17 @@ Saída: UsersPage - + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> - + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> - + Your passwords do not match! Os contrasinais non coinciden! @@ -3559,7 +3565,7 @@ Saída: UsersViewStep - + Users Usuarios @@ -3837,7 +3843,7 @@ Saída: localeq - + Change diff --git a/lang/calamares_gu.ts b/lang/calamares_gu.ts index 9ea3fad7d2..9d3d1e3278 100644 --- a/lang/calamares_gu.ts +++ b/lang/calamares_gu.ts @@ -507,134 +507,134 @@ The installer will quit and all changes will be lost. - + Select storage de&vice: - - - - + + + + Current: - + After: - + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. - + Reuse %1 as home partition for %2. - + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> - + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. - + Boot loader location: - + <strong>Select a partition to install on</strong> - + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. - + The EFI system partition at %1 will be used for starting %2. - + EFI system partition: - + This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. - - - - + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. - - - - + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. - - - - + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. - + This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. - + This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. - + This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. - + No Swap - + Reuse Swap - + Swap (no Hibernate) - + Swap (with Hibernate) - + Swap to file @@ -712,17 +712,17 @@ The installer will quit and all changes will be lost. - + Set timezone to %1/%2. - + The system language will be set to %1. - + The numbers and dates locale will be set to %1. @@ -792,42 +792,42 @@ The installer will quit and all changes will be lost. - + Your username is too long. - + '%1' is not allowed as username. - + Your username must start with a lowercase letter or underscore. - + Only lowercase letters, numbers, underscore and hyphen are allowed. - + Your hostname is too short. - + Your hostname is too long. - + '%1' is not allowed as hostname. - + Only letters, numbers, underscore and hyphen are allowed. @@ -1248,7 +1248,8 @@ The installer will quit and all changes will be lost. - + + Please enter the same passphrase in both boxes. @@ -1700,18 +1701,18 @@ The installer will quit and all changes will be lost. LocalePage - + Region: - + Zone: - - + + &Change... @@ -1789,7 +1790,12 @@ The installer will quit and all changes will be lost. Map - + + Timezone: %1 + + + + Please select your preferred location on the map so the installer can suggest the locale and timezone settings for you. You can fine-tune the suggested settings below. Search the map by dragging to move and using the +/- buttons to zoom in/out or use mouse scrolling for zooming. @@ -1950,247 +1956,247 @@ The installer will quit and all changes will be lost. PWQ - + Password is too short - + Password is too long - + Password is too weak - + Memory allocation error when setting '%1' - + Memory allocation error - + The password is the same as the old one - + The password is a palindrome - + The password differs with case changes only - + The password is too similar to the old one - + The password contains the user name in some form - + The password contains words from the real name of the user in some form - + The password contains forbidden words in some form - + The password contains less than %1 digits - + The password contains too few digits - + The password contains less than %1 uppercase letters - + The password contains too few uppercase letters - + The password contains less than %1 lowercase letters - + The password contains too few lowercase letters - + The password contains less than %1 non-alphanumeric characters - + The password contains too few non-alphanumeric characters - + The password is shorter than %1 characters - + The password is too short - + The password is just rotated old one - + The password contains less than %1 character classes - + The password does not contain enough character classes - + The password contains more than %1 same characters consecutively - + The password contains too many same characters consecutively - + The password contains more than %1 characters of the same class consecutively - + The password contains too many characters of the same class consecutively - + The password contains monotonic sequence longer than %1 characters - + The password contains too long of a monotonic character sequence - + No password supplied - + Cannot obtain random numbers from the RNG device - + Password generation failed - required entropy too low for settings - + The password fails the dictionary check - %1 - + The password fails the dictionary check - + Unknown setting - %1 - + Unknown setting - + Bad integer value of setting - %1 - + Bad integer value - + Setting %1 is not of integer type - + Setting is not of integer type - + Setting %1 is not of string type - + Setting is not of string type - + Opening the configuration file failed - + The configuration file is malformed - + Fatal failure - + Unknown error - + Password is empty @@ -2524,67 +2530,67 @@ The installer will quit and all changes will be lost. PartitionViewStep - + Gathering system information... - + Partitions - + Install %1 <strong>alongside</strong> another operating system. - + <strong>Erase</strong> disk and install %1. - + <strong>Replace</strong> a partition with %1. - + <strong>Manual</strong> partitioning. - + Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). - + <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. - + <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. - + <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). - + Disk <strong>%1</strong> (%2) - + Current: - + After: @@ -2629,12 +2635,12 @@ The installer will quit and all changes will be lost. - + has at least one disk device available. - + There are no partitions to install on. @@ -3536,17 +3542,17 @@ Output: UsersPage - + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> - + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> - + Your passwords do not match! @@ -3554,7 +3560,7 @@ Output: UsersViewStep - + Users @@ -3832,7 +3838,7 @@ Output: localeq - + Change diff --git a/lang/calamares_he.ts b/lang/calamares_he.ts index a621e5b6d5..51af5736d8 100644 --- a/lang/calamares_he.ts +++ b/lang/calamares_he.ts @@ -514,134 +514,134 @@ The installer will quit and all changes will be lost. Form - + Select storage de&vice: בחירת התקן א&חסון: - - - - + + + + Current: נוכחי: - + After: לאחר: - + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. <strong>הגדרת מחיצות באופן ידני</strong><br/>ניתן ליצור או לשנות את גודל המחיצות בעצמך. - + Reuse %1 as home partition for %2. להשתמש ב־%1 כמחיצת הבית (home) עבור %2. - + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> <strong>ראשית יש לבחור מחיצה לכיווץ, לאחר מכן לגרור את הסרגל התחתון כדי לשנות את גודלה</strong> - + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. %1 תכווץ לכדי %2MiB ותיווצר מחיצה חדשה בגודל %3MiB עבור %4. - + Boot loader location: מיקום מנהל אתחול המערכת: - + <strong>Select a partition to install on</strong> <strong>נא לבחור מחיצה כדי להתקין עליה</strong> - + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. במערכת זו לא נמצאה מחיצת מערכת EFI. נא לחזור ולהשתמש ביצירת מחיצות באופן ידני כדי להגדיר את %1. - + The EFI system partition at %1 will be used for starting %2. מחיצת מערכת ה־EFI שב־%1 תשמש עבור טעינת %2. - + EFI system partition: מחיצת מערכת EFI: - + This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. לא נמצאה מערכת הפעלה על התקן אחסון זה. מה ברצונך לעשות?<br/> ניתן לסקור ולאשר את בחירתך לפני ששינויים יתבצעו על התקן האחסון. - - - - + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>מחיקת כונן</strong><br/> פעולה זו <font color="red">תמחק</font> את כל המידע השמור על התקן האחסון הנבחר. - - - - + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>התקנה לצד</strong><br/> אשף ההתקנה יכווץ מחיצה כדי לפנות מקום לטובת %1. - - - - + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>החלפת מחיצה</strong><br/> ביצוע החלפה של המחיצה ב־%1. - + This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. בהתקן אחסון זה נמצאה %1. מה ברצונך לעשות?<br/> ניתן לסקור ולאשר את בחירתך לפני ששינויים יתבצעו על התקן האחסון. - + This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. כבר קיימת מערכת הפעלה על התקן האחסון הזה. כיצד להמשיך?<br/> ניתן לסקור ולאשר את בחירתך לפני ששינויים יתבצעו על התקן האחסון. - + This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. ישנן מגוון מערכות הפעלה על התקן אחסון זה. איך להמשיך? <br/>ניתן לסקור ולאשר את בחירתך לפני ששינויים יתבצעו על התקן האחסון. - + No Swap בלי החלפה - + Reuse Swap שימוש מחדש בהחלפה - + Swap (no Hibernate) החלפה (ללא תרדמת) - + Swap (with Hibernate) החלפה (עם תרדמת) - + Swap to file החלפה לקובץ @@ -719,17 +719,17 @@ The installer will quit and all changes will be lost. הגדרת פריסת לוח המקשים בתור %1/%2. - + Set timezone to %1/%2. הגדרת אזור הזמן לכדי %1/%2. - + The system language will be set to %1. שפת המערכת תוגדר להיות %1. - + The numbers and dates locale will be set to %1. תבנית של המספרים והתאריכים של המיקום יוגדרו להיות %1. @@ -799,42 +799,42 @@ The installer will quit and all changes will be lost. <h1>ברוך בואך לתכנית התקנת %1</h1> - + Your username is too long. שם המשתמש ארוך מדי. - + '%1' is not allowed as username. אסור להשתמש ב־‚%1’ כשם משתמש. - + Your username must start with a lowercase letter or underscore. שם המשתמש שלך חייב להתחיל באות קטנה או בקו תחתי. - + Only lowercase letters, numbers, underscore and hyphen are allowed. מותר להשתמש רק באותיות קטנות, ספרות, קווים תחתיים ומינוסים. - + Your hostname is too short. שם המחשב קצר מדי. - + Your hostname is too long. שם המחשב ארוך מדי. - + '%1' is not allowed as hostname. אסור להשתמש ב־‚%1’ כשם מארח. - + Only letters, numbers, underscore and hyphen are allowed. מותר להשתמש רק באותיות, ספרות, קווים תחתיים ומינוסים. @@ -1255,7 +1255,8 @@ The installer will quit and all changes will be lost. אישור מילת צופן - + + Please enter the same passphrase in both boxes. נא להקליד את אותה מילת הצופן בשתי התיבות. @@ -1361,7 +1362,7 @@ The installer will quit and all changes will be lost. The setup of %1 is complete. - התקנת %1 הושלמה. + ההתקנה של %1 הושלמה. @@ -1707,18 +1708,18 @@ The installer will quit and all changes will be lost. LocalePage - + Region: איזור: - + Zone: מיקום: - - + + &Change... ה&חלפה… @@ -1796,7 +1797,12 @@ The installer will quit and all changes will be lost. Map - + + Timezone: %1 + אזור זמן: %1 + + + Please select your preferred location on the map so the installer can suggest the locale and timezone settings for you. You can fine-tune the suggested settings below. Search the map by dragging to move and using the +/- buttons to zoom in/out or use mouse scrolling for zooming. @@ -1959,247 +1965,247 @@ The installer will quit and all changes will be lost. PWQ - + Password is too short הססמה קצרה מדי - + Password is too long הססמה ארוכה מדי - + Password is too weak הססמה חלשה מדי - + Memory allocation error when setting '%1' שגיאת הקצאת זיכרון בעת הגדרת ‚%1’ - + Memory allocation error שגיאת הקצאת זיכרון - + The password is the same as the old one הססמה זהה לישנה - + The password is a palindrome הססמה היא פלינדרום - + The password differs with case changes only מורכבות הססמה טמונה בשינויי סוגי אותיות בלבד - + The password is too similar to the old one הססמה דומה מדי לישנה - + The password contains the user name in some form הססמה מכילה את שם המשתמש בצורה כלשהי - + The password contains words from the real name of the user in some form הססמה מכילה מילים מהשם האמתי של המשתמש בצורה זו או אחרת - + The password contains forbidden words in some form הססמה מכילה מילים אסורות בצורה כלשהי - + The password contains less than %1 digits הססמה מכילה פחות מ־%1 ספרות - + The password contains too few digits הססמה לא מכילה מספיק ספרות - + The password contains less than %1 uppercase letters הססמה מכילה פחות מ־%1 אותיות גדולות - + The password contains too few uppercase letters הססמה מכילה מעט מדי אותיות גדולות - + The password contains less than %1 lowercase letters הססמה מכילה פחות מ־%1 אותיות קטנות - + The password contains too few lowercase letters הססמה אינה מכילה מספיק אותיות קטנות - + The password contains less than %1 non-alphanumeric characters הססמה מכילה פחות מ־%1 תווים שאינם אלפאנומריים - + The password contains too few non-alphanumeric characters הססמה מכילה מעט מדי תווים שאינם אלפאנומריים - + The password is shorter than %1 characters אורך הססמה קצר מ־%1 תווים - + The password is too short הססמה קצרה מדי - + The password is just rotated old one הססמה היא פשוט סיכול של ססמה קודמת - + The password contains less than %1 character classes הססמה מכילה פחות מ־%1 סוגי תווים - + The password does not contain enough character classes הססמה לא מכילה מספיק סוגי תווים - + The password contains more than %1 same characters consecutively הססמה מכילה יותר מ־%1 תווים זהים ברצף - + The password contains too many same characters consecutively הססמה מכילה יותר מדי תווים זהים ברצף - + The password contains more than %1 characters of the same class consecutively הססמה מכילה יותר מ־%1 תווים מאותו הסוג ברצף - + The password contains too many characters of the same class consecutively הססמה מכילה יותר מדי תווים מאותו הסוג ברצף - + The password contains monotonic sequence longer than %1 characters הססמה מכילה רצף תווים מונוטוני של יותר מ־%1 תווים - + The password contains too long of a monotonic character sequence הססמה מכילה רצף תווים מונוטוני ארוך מדי - + No password supplied לא צוינה ססמה - + Cannot obtain random numbers from the RNG device לא ניתן לקבל מספרים אקראיים מהתקן ה־RNG - + Password generation failed - required entropy too low for settings יצירת הססמה נכשלה - רמת האקראיות הנדרשת נמוכה ביחס להגדרות - + The password fails the dictionary check - %1 הססמה נכשלה במבחן המילון - %1 - + The password fails the dictionary check הססמה נכשלה במבחן המילון - + Unknown setting - %1 הגדרה לא מוכרת - %1 - + Unknown setting הגדרה לא מוכרת - + Bad integer value of setting - %1 ערך מספרי שגוי להגדרה - %1 - + Bad integer value ערך מספרי שגוי - + Setting %1 is not of integer type ההגדרה %1 אינה מסוג מספר שלם - + Setting is not of integer type ההגדרה אינה מסוג מספר שלם - + Setting %1 is not of string type ההגדרה %1 אינה מסוג מחרוזת - + Setting is not of string type ההגדרה אינה מסוג מחרוזת - + Opening the configuration file failed פתיחת קובץ התצורה נכשלה - + The configuration file is malformed קובץ התצורה פגום - + Fatal failure כשל מכריע - + Unknown error שגיאה לא ידועה - + Password is empty הססמה ריקה @@ -2533,67 +2539,67 @@ The installer will quit and all changes will be lost. PartitionViewStep - + Gathering system information... נאסף מידע על המערכת… - + Partitions מחיצות - + Install %1 <strong>alongside</strong> another operating system. להתקין את %1 <strong>לצד</strong> מערכת הפעלה אחרת. - + <strong>Erase</strong> disk and install %1. <strong>למחוק</strong> את הכונן ולהתקין את %1. - + <strong>Replace</strong> a partition with %1. <strong>החלפת</strong> מחיצה עם %1. - + <strong>Manual</strong> partitioning. להגדיר מחיצות באופן <strong>ידני</strong>. - + Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). להתקין את %1 <strong>לצד</strong> מערכת הפעלה אחרת על כונן <strong>%2</strong> (%3). - + <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. <strong>למחוק</strong> את הכונן <strong>%2</strong> (%3) ולהתקין את %1. - + <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. <strong>החלפת</strong> מחיצה על כונן <strong>%2</strong> (%3) ב־%1. - + <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). חלוקה למחיצות באופן <strong>ידני</strong> על כונן <strong>%1</strong> (%2). - + Disk <strong>%1</strong> (%2) כונן <strong>%1</strong> (%2) - + Current: נוכחי: - + After: לאחר: @@ -2638,12 +2644,12 @@ The installer will quit and all changes will be lost. מחיצת טעינה, boot, נפרדת הוגדרה יחד עם מחיצת מערכת ההפעלה, root, מוצפנת, אך מחיצת הטעינה לא הוצפנה.<br/><br/> ישנן השלכות בטיחותיות עם התצורה שהוגדרה, מכיוון שקבצי מערכת חשובים נשמרים על מחיצה לא מוצפנת.<br/>תוכל להמשיך אם תרצה, אך שחרור מערכת הקבצים יתרחש מאוחר יותר כחלק מטעינת המערכת.<br/>בכדי להצפין את מחיצת הטעינה, חזור וצור אותה מחדש, על ידי בחירה ב <strong>הצפן</strong> בחלונית יצירת המחיצה. - + has at least one disk device available. יש לפחות התקן כונן אחד זמין. - + There are no partitions to install on. אין מחיצות להתקין עליהן. @@ -3551,17 +3557,17 @@ Output: UsersPage - + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>אם מחשב זה מיועד לשימוש לטובת למעלה ממשתמש אחד, ניתן ליצור מגוון חשבונות לאחר ההתקנה.</small> - + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> <small>אם מחשב זה מיועד לשימוש לטובת למעלה ממשתמש אחד, ניתן ליצור מגוון חשבונות לאחר ההתקנה.</small> - + Your passwords do not match! הססמאות לא תואמות! @@ -3569,7 +3575,7 @@ Output: UsersViewStep - + Users משתמשים @@ -3726,7 +3732,7 @@ Output: About %1 setup - על אודות התקנת %1 + אודות התקנת %1 @@ -3860,7 +3866,7 @@ Output: localeq - + Change החלפה diff --git a/lang/calamares_hi.ts b/lang/calamares_hi.ts index b1d7b3ce8d..28653609a9 100644 --- a/lang/calamares_hi.ts +++ b/lang/calamares_hi.ts @@ -510,134 +510,134 @@ The installer will quit and all changes will be lost. रूप - + Select storage de&vice: डिवाइस चुनें (&v): - - - - + + + + Current: मौजूदा : - + After: बाद में: - + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. <strong>मैनुअल विभाजन</strong><br/> स्वयं विभाजन बनाएँ या उनका आकार बदलें। - + Reuse %1 as home partition for %2. %2 के होम विभाजन के लिए %1 को पुनः उपयोग करें। - + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> <strong>छोटा करने के लिए विभाजन चुनें, फिर नीचे bar से उसका आकर सेट करें</strong> - + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. %1 को छोटा करके %2MiB किया जाएगा व %4 हेतु %3MiB का एक नया विभाजन बनेगा। - + Boot loader location: बूट लोडर का स्थान: - + <strong>Select a partition to install on</strong> <strong>इंस्टॉल के लिए विभाजन चुनें</strong> - + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. इस सिस्टम पर कहीं भी कोई EFI सिस्टम विभाजन नहीं मिला। कृपया वापस जाएँ व %1 को सेट करने के लिए मैनुअल रूप से विभाजन करें। - + The EFI system partition at %1 will be used for starting %2. %1 वाले EFI सिस्टम विभाजन का उपयोग %2 को शुरू करने के लिए किया जाएगा। - + EFI system partition: EFI सिस्टम विभाजन: - + This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. इस डिवाइस पर लगता है कि कोई ऑपरेटिंग सिस्टम नहीं है। आप क्या करना चाहेंगे?<br/>आप डिवाइस में किसी भी बदलाव से पहले उसकी समीक्षा व पुष्टि कर सकेंगे। - - - - + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>डिस्क का सारा डाटा हटाएँ</strong><br/>इससे चयनित डिवाइस पर मौजूद सारा डाटा <font color="red">हटा</font>हो जाएगा। - - - - + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>साथ में इंस्टॉल करें</strong><br/>इंस्टॉलर %1 के लिए स्थान बनाने हेतु एक विभाजन को छोटा कर देगा। - - - - + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>विभाजन को बदलें</strong><br/>एक विभाजन को %1 से बदलें। - + This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. इस डिवाइस पर %1 है। आप क्या करना चाहेंगे?<br/>आप डिवाइस में किसी भी बदलाव से पहले उसकी समीक्षा व पुष्टि कर सकेंगे। - + This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. इस डिवाइस पर पहले से एक ऑपरेटिंग सिस्टम है। आप क्या करना चाहेंगे?<br/>आप डिवाइस में किसी भी बदलाव से पहले उसकी समीक्षा व पुष्टि कर सकेंगे। - + This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. इस डिवाइस पर एक से अधिक ऑपरेटिंग सिस्टम है। आप क्या करना चाहेंगे?<br/>आप डिवाइस में किसी भी बदलाव से पहले उसकी समीक्षा व पुष्टि कर सकेंगे। - + No Swap कोई स्वैप नहीं - + Reuse Swap स्वैप पुनः उपयोग करें - + Swap (no Hibernate) स्वैप (हाइबरनेशन/सिस्टम सुप्त रहित) - + Swap (with Hibernate) स्वैप (हाइबरनेशन/सिस्टम सुप्त सहित) - + Swap to file स्वैप फाइल बनाएं @@ -715,17 +715,17 @@ The installer will quit and all changes will be lost. कुंजीपटल का अभिन्यास %1/%2 सेट करें। - + Set timezone to %1/%2. समय क्षेत्र %1%2 सेट करें। - + The system language will be set to %1. सिस्टम भाषा %1 सेट की जाएगी। - + The numbers and dates locale will be set to %1. संख्या व दिनांक स्थानिकी %1 सेट की जाएगी। @@ -795,42 +795,42 @@ The installer will quit and all changes will be lost. <h1>%1 इंस्टॉलर में आपका स्वागत है</h1> - + Your username is too long. उपयोक्ता नाम बहुत लंबा है। - + '%1' is not allowed as username. उपयोक्ता नाम के रूप में '%1' का उपयोग अस्वीकार्य है। - + Your username must start with a lowercase letter or underscore. उपयोक्ता नाम का आरंभ केवल लोअरकेस अक्षर या अंडरस्कोर(-) से ही करें। - + Only lowercase letters, numbers, underscore and hyphen are allowed. केवल लोअरकेस अक्षर, अंक, अंडरस्कोर(_) व हाइफ़न(-) ही स्वीकार्य हैं। - + Your hostname is too short. होस्ट नाम बहुत छोटा है। - + Your hostname is too long. होस्ट नाम बहुत लंबा है। - + '%1' is not allowed as hostname. होस्ट नाम के रूप में '%1' का उपयोग अस्वीकार्य है। - + Only letters, numbers, underscore and hyphen are allowed. केवल अक्षर, अंक, अंडरस्कोर(_) व हाइफ़न(-) ही स्वीकार्य हैं। @@ -1251,7 +1251,8 @@ The installer will quit and all changes will be lost. कूटशब्द की पुष्टि करें - + + Please enter the same passphrase in both boxes. कृपया दोनों स्थानों में समान कूटशब्द दर्ज करें। @@ -1703,18 +1704,18 @@ The installer will quit and all changes will be lost. LocalePage - + Region: क्षेत्र : - + Zone: ज़ोन : - - + + &Change... बदलें (&C)... @@ -1792,7 +1793,12 @@ The installer will quit and all changes will be lost. Map - + + Timezone: %1 + समय क्षेत्र : %1 + + + Please select your preferred location on the map so the installer can suggest the locale and timezone settings for you. You can fine-tune the suggested settings below. Search the map by dragging to move and using the +/- buttons to zoom in/out or use mouse scrolling for zooming. @@ -1955,247 +1961,247 @@ The installer will quit and all changes will be lost. PWQ - + Password is too short कूटशब्द बहुत छोटा है - + Password is too long कूटशब्द बहुत लंबा है - + Password is too weak कूटशब्द बहुत कमज़ोर है - + Memory allocation error when setting '%1' '%1' सेट करते समय मेमोरी आवंटन त्रुटि - + Memory allocation error मेमोरी आवंटन त्रुटि - + The password is the same as the old one यह कूटशब्द पुराने वाला ही है - + The password is a palindrome कूटशब्द एक विलोमपद है - + The password differs with case changes only इसमें और पिछले कूटशब्द में केवल lower/upper case का फर्क है - + The password is too similar to the old one यह कूटशब्द पुराने वाले जैसा ही है - + The password contains the user name in some form इस कूटशब्द में किसी रूप में उपयोक्ता नाम है - + The password contains words from the real name of the user in some form इस कूटशब्द में किसी रूप में उपयोक्ता के असली नाम के शब्द शामिल है - + The password contains forbidden words in some form इस कूटशब्द में किसी रूप में वर्जित शब्द है - + The password contains less than %1 digits इस कूटशब्द में %1 से कम अंक हैं - + The password contains too few digits इस कूटशब्द में काफ़ी कम अंक हैं - + The password contains less than %1 uppercase letters इस कूटशब्द में %1 से कम uppercase अक्षर हैं - + The password contains too few uppercase letters इस कूटशब्द में काफ़ी कम uppercase अक्षर हैं - + The password contains less than %1 lowercase letters इस कूटशब्द में %1 से कम lowercase अक्षर हैं - + The password contains too few lowercase letters इस कूटशब्द में काफ़ी कम lowercase अक्षर हैं - + The password contains less than %1 non-alphanumeric characters इस कूटशब्द में %1 से कम ऐसे अक्षर हैं जो अक्षरांक नहीं हैं - + The password contains too few non-alphanumeric characters इस कूटशब्द में काफ़ी कम अक्षरांक हैं - + The password is shorter than %1 characters कूटशब्द %1 अक्षरों से छोटा है - + The password is too short कूटशब्द बहुत छोटा है - + The password is just rotated old one यह कूटशब्द पुराने वाला ही है, बस घुमा रखा है - + The password contains less than %1 character classes इस कूटशब्द में %1 से कम अक्षर classes हैं - + The password does not contain enough character classes इस कूटशब्द में नाकाफ़ी अक्षर classes हैं - + The password contains more than %1 same characters consecutively कूटशब्द में %1 से अधिक समान अक्षर लगातार हैं - + The password contains too many same characters consecutively कूटशब्द में काफ़ी ज्यादा समान अक्षर लगातार हैं - + The password contains more than %1 characters of the same class consecutively कूटशब्द में %1 से अधिक समान अक्षर classes लगातार हैं - + The password contains too many characters of the same class consecutively कूटशब्द में काफ़ी ज्यादा एक ही class के अक्षर लगातार हैं - + The password contains monotonic sequence longer than %1 characters कूटशब्द में %1 अक्षरों से लंबा monotonic अनुक्रम है - + The password contains too long of a monotonic character sequence कूटशब्द में काफ़ी बड़ा monotonic अनुक्रम है - + No password supplied कोई कूटशब्द नहीं दिया गया - + Cannot obtain random numbers from the RNG device RNG डिवाइस से यादृच्छिक अंक नहीं मिल सके - + Password generation failed - required entropy too low for settings कूटशब्द बनाना विफल रहा - सेटिंग्स के लिए आवश्यक entropy बहुत कम है - + The password fails the dictionary check - %1 कूटशब्द शब्दकोश की जाँच में विफल रहा - %1 - + The password fails the dictionary check कूटशब्द शब्दकोश की जाँच में विफल रहा - + Unknown setting - %1 अज्ञात सेटिंग- %1 - + Unknown setting अज्ञात सेटिंग - + Bad integer value of setting - %1 सेटिंग का गलत पूर्णांक मान - %1 - + Bad integer value गलत पूर्णांक मान - + Setting %1 is not of integer type सेटिंग %1 पूर्णांक नहीं है - + Setting is not of integer type सेटिंग पूर्णांक नहीं है - + Setting %1 is not of string type सेटिंग %1 स्ट्रिंग नहीं है - + Setting is not of string type सेटिंग स्ट्रिंग नहीं है - + Opening the configuration file failed विन्यास फ़ाइल खोलने में विफल - + The configuration file is malformed विन्यास फाइल ख़राब है - + Fatal failure गंभीर विफलता - + Unknown error अज्ञात त्रुटि - + Password is empty कूटशब्द रिक्त है @@ -2529,67 +2535,67 @@ The installer will quit and all changes will be lost. PartitionViewStep - + Gathering system information... सिस्टम की जानकारी प्राप्त की जा रही है... - + Partitions विभाजन - + Install %1 <strong>alongside</strong> another operating system. %1 को दूसरे ऑपरेटिंग सिस्टम <strong>के साथ</strong> इंस्टॉल करें। - + <strong>Erase</strong> disk and install %1. डिस्क का सारा डाटा<strong>हटाकर</strong> कर %1 इंस्टॉल करें। - + <strong>Replace</strong> a partition with %1. विभाजन को %1 से <strong>बदलें</strong>। - + <strong>Manual</strong> partitioning. <strong>मैनुअल</strong> विभाजन। - + Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). डिस्क <strong>%2</strong> (%3) पर %1 को दूसरे ऑपरेटिंग सिस्टम <strong>के साथ</strong> इंस्टॉल करें। - + <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. डिस्क <strong>%2</strong> (%3) <strong>erase</strong> कर %1 इंस्टॉल करें। - + <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. डिस्क <strong>%2</strong> (%3) के विभाजन को %1 से <strong>बदलें</strong>। - + <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). डिस्क <strong>%1</strong> (%2) पर <strong>मैनुअल</strong> विभाजन। - + Disk <strong>%1</strong> (%2) डिस्क <strong>%1</strong> (%2) - + Current: मौजूदा : - + After: बाद में: @@ -2634,12 +2640,12 @@ The installer will quit and all changes will be lost. एन्क्रिप्टेड रुट विभाजन के साथ एक अलग बूट विभाजन भी सेट किया गया था, पर बूट विभाजन एन्क्रिप्टेड नहीं था।<br/><br/> इस तरह का सेटअप सुरक्षित नहीं होता क्योंकि सिस्टम फ़ाइल एन्क्रिप्टेड विभाजन पर होती हैं।<br/>आप चाहे तो जारी रख सकते है, पर फिर फ़ाइल सिस्टम बाद में सिस्टम स्टार्टअप के दौरान अनलॉक होगा।<br/> विभाजन को एन्क्रिप्ट करने के लिए वापस जाकर उसे दोबारा बनाएँ व विभाजन निर्माण विंडो में<strong>एन्क्रिप्ट</strong> चुनें। - + has at least one disk device available. कम-से-कम एक डिस्क डिवाइस उपलब्ध हो। - + There are no partitions to install on. इंस्टॉल हेतु कोई विभाजन नहीं हैं। @@ -3547,17 +3553,17 @@ Output: UsersPage - + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>यदि एक से अधिक व्यक्ति इस कंप्यूटर का उपयोग करेंगे, तो आप सेटअप के उपरांत एकाधिक अकाउंट बना सकते हैं।</small> - + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> <small>यदि एक से अधिक व्यक्ति इस कंप्यूटर का उपयोग करेंगे, तो आप इंस्टॉल के उपरांत एकाधिक अकाउंट बना सकते हैं।</small> - + Your passwords do not match! आपके कूटशब्द मेल नहीं खाते! @@ -3565,7 +3571,7 @@ Output: UsersViewStep - + Users उपयोक्ता @@ -3856,7 +3862,7 @@ Output: localeq - + Change बदलें diff --git a/lang/calamares_hr.ts b/lang/calamares_hr.ts index 7a50c9f6d3..152e7ab6d4 100644 --- a/lang/calamares_hr.ts +++ b/lang/calamares_hr.ts @@ -512,134 +512,134 @@ Instalacijski program će izaći i sve promjene će biti izgubljene.Oblik - + Select storage de&vice: Odaberi uređaj za spremanje: - - - - + + + + Current: Trenutni: - + After: Poslije: - + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. <strong>Ručno particioniranje</strong><br/>Možete sami stvoriti ili promijeniti veličine particija. - + Reuse %1 as home partition for %2. Koristi %1 kao home particiju za %2. - + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> <strong>Odaberite particiju za smanjivanje, te povlačenjem donjeg pokazivača odaberite promjenu veličine</strong> - + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. %1 će se smanjiti na %2MB i stvorit će se nova %3MB particija za %4. - + Boot loader location: Lokacija boot učitavača: - + <strong>Select a partition to install on</strong> <strong>Odaberite particiju za instalaciju</strong> - + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. EFI particija ne postoji na ovom sustavu. Vratite se natrag i koristite ručno particioniranje da bi ste postavili %1. - + The EFI system partition at %1 will be used for starting %2. EFI particija na %1 će se koristiti za pokretanje %2. - + EFI system partition: EFI particija: - + This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Izgleda da na ovom disku nema operacijskog sustava. Što želite učiniti?<br/>Moći ćete provjeriti i potvrditi vaš odabir prije bilo kakvih promjena na disku. - - - - + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>Obriši disk</strong><br/>To će <font color="red">obrisati</font> sve podatke na odabranom disku. - - - - + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Instaliraj uz postojeće</strong><br/>Instalacijski program će smanjiti particiju da bi napravio mjesto za %1. - - - - + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>Zamijeni particiju</strong><br/>Zamijenjuje particiju sa %1. - + This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Ovaj disk ima %1. Što želite učiniti?<br/>Moći ćete provjeriti i potvrditi vaš odabir prije bilo kakvih promjena na disku. - + This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Ovaj disk već ima operacijski sustav. Što želite učiniti?<br/>Moći ćete provjeriti i potvrditi vaš odabir prije bilo kakvih promjena na disku. - + This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Ovaj disk ima više operacijskih sustava. Što želite učiniti?<br/>Moći ćete provjeriti i potvrditi vaš odabir prije bilo kakvih promjena na disku. - + No Swap Bez swap-a - + Reuse Swap Iskoristi postojeći swap - + Swap (no Hibernate) Swap (bez hibernacije) - + Swap (with Hibernate) Swap (sa hibernacijom) - + Swap to file Swap datoteka @@ -717,17 +717,17 @@ Instalacijski program će izaći i sve promjene će biti izgubljene.Postavi raspored tipkovnice na %1%2. - + Set timezone to %1/%2. Postavi vremesku zonu na %1%2. - + The system language will be set to %1. Jezik sustava će se postaviti na %1. - + The numbers and dates locale will be set to %1. Regionalne postavke brojeva i datuma će se postaviti na %1. @@ -797,42 +797,42 @@ Instalacijski program će izaći i sve promjene će biti izgubljene.<h1>Dobrodošli u %1 instalacijski program</h1> - + Your username is too long. Vaše korisničko ime je predugačko. - + '%1' is not allowed as username. '%1' nije dopušteno kao korisničko ime. - + Your username must start with a lowercase letter or underscore. Vaše korisničko ime mora započeti malim slovom ili podvlakom. - + Only lowercase letters, numbers, underscore and hyphen are allowed. Dopuštena su samo mala slova, brojevi, podvlake i crtice. - + Your hostname is too short. Ime računala je kratko. - + Your hostname is too long. Ime računala je predugačko. - + '%1' is not allowed as hostname. '%1' nije dopušteno kao ime računala. - + Only letters, numbers, underscore and hyphen are allowed. Dopuštena su samo slova, brojevi, podvlake i crtice. @@ -1253,7 +1253,8 @@ Instalacijski program će izaći i sve promjene će biti izgubljene.Potvrdi lozinku - + + Please enter the same passphrase in both boxes. Molimo unesite istu lozinku u oba polja. @@ -1705,18 +1706,18 @@ Instalacijski program će izaći i sve promjene će biti izgubljene. LocalePage - + Region: Regija: - + Zone: Zona: - - + + &Change... &Promijeni... @@ -1794,7 +1795,12 @@ Instalacijski program će izaći i sve promjene će biti izgubljene. Map - + + Timezone: %1 + Vremenska zona: %1 + + + Please select your preferred location on the map so the installer can suggest the locale and timezone settings for you. You can fine-tune the suggested settings below. Search the map by dragging to move and using the +/- buttons to zoom in/out or use mouse scrolling for zooming. @@ -1957,247 +1963,247 @@ te korištenjem tipki +/- ili skrolanjem miša za zumiranje. PWQ - + Password is too short Lozinka je prekratka - + Password is too long Lozinka je preduga - + Password is too weak Lozinka je preslaba - + Memory allocation error when setting '%1' Pogreška u dodjeli memorije prilikom postavljanja '%1' - + Memory allocation error Pogreška u dodjeli memorije - + The password is the same as the old one Lozinka je ista prethodnoj - + The password is a palindrome Lozinka je palindrom - + The password differs with case changes only Lozinka se razlikuje samo u promjenama velikog i malog slova - + The password is too similar to the old one Lozinka je slična prethodnoj - + The password contains the user name in some form Lozinka u nekoj formi sadrži korisničko ime - + The password contains words from the real name of the user in some form Lozinka u nekoj formi sadrži stvarno ime korisnika - + The password contains forbidden words in some form Lozinka u nekoj formi sadrži zabranjene rijeći - + The password contains less than %1 digits Lozinka sadrži manje od %1 brojeva - + The password contains too few digits Lozinka sadrži premalo brojeva - + The password contains less than %1 uppercase letters Lozinka sadrži manje od %1 velikih slova - + The password contains too few uppercase letters Lozinka sadrži premalo velikih slova - + The password contains less than %1 lowercase letters Lozinka sadrži manje od %1 malih slova - + The password contains too few lowercase letters Lozinka sadrži premalo malih slova - + The password contains less than %1 non-alphanumeric characters Lozinka sadrži manje od %1 ne-alfanumeričkih znakova. - + The password contains too few non-alphanumeric characters Lozinka sadrži premalo ne-alfanumeričkih znakova - + The password is shorter than %1 characters Lozinka je kraća od %1 znakova - + The password is too short Lozinka je prekratka - + The password is just rotated old one Lozinka je jednaka rotiranoj prethodnoj - + The password contains less than %1 character classes Lozinka sadrži manje od %1 razreda znakova - + The password does not contain enough character classes Lozinka ne sadrži dovoljno razreda znakova - + The password contains more than %1 same characters consecutively Lozinka sadrži više od %1 uzastopnih znakova - + The password contains too many same characters consecutively Lozinka sadrži previše uzastopnih znakova - + The password contains more than %1 characters of the same class consecutively Lozinka sadrži više od %1 uzastopnih znakova iz istog razreda - + The password contains too many characters of the same class consecutively Lozinka sadrži previše uzastopnih znakova iz istog razreda - + The password contains monotonic sequence longer than %1 characters Lozinka sadrži monotonu sekvencu dužu od %1 znakova - + The password contains too long of a monotonic character sequence Lozinka sadrži previše monotonu sekvencu znakova - + No password supplied Nema isporučene lozinke - + Cannot obtain random numbers from the RNG device Ne mogu dobiti slučajne brojeve od RNG uređaja - + Password generation failed - required entropy too low for settings Generiranje lozinke nije uspjelo - potrebna entropija je premala za postavke - + The password fails the dictionary check - %1 Nije uspjela provjera rječnika za lozinku - %1 - + The password fails the dictionary check Nije uspjela provjera rječnika za lozinku - + Unknown setting - %1 Nepoznate postavke - %1 - + Unknown setting Nepoznate postavke - + Bad integer value of setting - %1 Loša cjelobrojna vrijednost postavke - %1 - + Bad integer value Loša cjelobrojna vrijednost - + Setting %1 is not of integer type Postavka %1 nije cjelobrojnog tipa - + Setting is not of integer type Postavka nije cjelobrojnog tipa - + Setting %1 is not of string type Postavka %1 nije tipa znakovnog niza - + Setting is not of string type Postavka nije tipa znakovnog niza - + Opening the configuration file failed Nije uspjelo otvaranje konfiguracijske datoteke - + The configuration file is malformed Konfiguracijska datoteka je oštećena - + Fatal failure Fatalna pogreška - + Unknown error Nepoznata greška - + Password is empty Lozinka je prazna @@ -2531,67 +2537,67 @@ te korištenjem tipki +/- ili skrolanjem miša za zumiranje. PartitionViewStep - + Gathering system information... Skupljanje informacija o sustavu... - + Partitions Particije - + Install %1 <strong>alongside</strong> another operating system. Instaliraj %1 <strong>uz postojeći</strong> operacijski sustav. - + <strong>Erase</strong> disk and install %1. <strong>Obriši</strong> disk i instaliraj %1. - + <strong>Replace</strong> a partition with %1. <strong>Zamijeni</strong> particiju s %1. - + <strong>Manual</strong> partitioning. <strong>Ručno</strong> particioniranje. - + Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). Instaliraj %1 <strong>uz postojeći</strong> operacijski sustav na disku <strong>%2</strong> (%3). - + <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. <strong>Obriši</strong> disk <strong>%2</strong> (%3) i instaliraj %1. - + <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. <strong>Zamijeni</strong> particiju na disku <strong>%2</strong> (%3) s %1. - + <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). <strong>Ručno</strong> particioniram disk <strong>%1</strong> (%2). - + Disk <strong>%1</strong> (%2) Disk <strong>%1</strong> (%2) - + Current: Trenutni: - + After: Poslije: @@ -2636,12 +2642,12 @@ te korištenjem tipki +/- ili skrolanjem miša za zumiranje. Odvojena boot particija je postavljena zajedno s kriptiranom root particijom, ali boot particija nije kriptirana.<br/><br/>Zabrinuti smo za vašu sigurnost jer su važne datoteke sustava na nekriptiranoj particiji.<br/>Možete nastaviti ako želite, ali datotečni sustav će se otključati kasnije tijekom pokretanja sustava.<br/>Da bi ste kriptirali boot particiju, vratite se natrag i napravite ju, odabirom opcije <strong>Kriptiraj</strong> u prozoru za stvaranje prarticije. - + has at least one disk device available. ima barem jedan disk dostupan. - + There are no partitions to install on. Ne postoje particije na koje bi se instalirao sustav. @@ -3549,17 +3555,17 @@ Postavljanje se može nastaviti, ali neke će značajke možda biti onemogućene UsersPage - + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>Ako će više osoba koristiti ovo računalo, možete postaviti više korisničkih računa poslije instalacije.</small> - + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> <small>Ako će više osoba koristiti ovo računalo, možete postaviti više korisničkih računa poslije instalacije.</small> - + Your passwords do not match! Lozinke se ne podudaraju! @@ -3567,7 +3573,7 @@ Postavljanje se može nastaviti, ali neke će značajke možda biti onemogućene UsersViewStep - + Users Korisnici @@ -3858,7 +3864,7 @@ Postavke regije utječu na format brojeva i datuma. Trenutne postavke su <str localeq - + Change Promijeni diff --git a/lang/calamares_hu.ts b/lang/calamares_hu.ts index ea504bace9..e04b7c4f9a 100644 --- a/lang/calamares_hu.ts +++ b/lang/calamares_hu.ts @@ -509,134 +509,134 @@ Minden változtatás elveszik, ha kilépsz a telepítőből. Adatlap - + Select storage de&vice: Válassz tároló eszközt: - - - - + + + + Current: Aktuális: - + After: Utána: - + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. <strong>Manuális partícionálás</strong><br/>Létrehozhat vagy átméretezhet partíciókat. - + Reuse %1 as home partition for %2. %1 partíció használata mint home partíció a %2 -n - + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> <strong>Válaszd ki a partíciót amit zsugorítani akarsz és egérrel méretezd át.</strong> - + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. %1 zsugorítva lesz %2MiB -re és új %3MiB partíció lesz létrehozva itt %4. - + Boot loader location: Rendszerbetöltő helye: - + <strong>Select a partition to install on</strong> <strong>Válaszd ki a telepítésre szánt partíciót </strong> - + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. Nem található EFI partíció a rendszeren. Menj vissza a manuális partícionáláshoz és állíts be %1. - + The EFI system partition at %1 will be used for starting %2. A %1 EFI rendszer partíció lesz használva %2 indításához. - + EFI system partition: EFI rendszerpartíció: - + This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Úgy tűnik ezen a tárolóeszközön nincs operációs rendszer. Mit szeretnél csinálni?<br/>Lehetőséged lesz átnézni és megerősíteni a választásod mielőtt bármilyen változtatás történik a tárolóeszközön. - - - - + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>Lemez törlése</strong><br/>Ez <font color="red">törölni</font> fogja a lemezen levő összes adatot. - - - - + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Meglévő mellé telepíteni</strong><br/>A telepítő zsugorítani fogja a partíciót, hogy elférjen a %1. - - - - + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>A partíció lecserélése</strong> a következővel: %1. - + This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Ezen a tárolóeszközön %1 található. Mit szeretnél tenni?<br/>Lehetőséged lesz átnézni és megerősíteni a választásod mielőtt bármilyen változtatás történik a tárolóeszközön. - + This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Ez a tárolóeszköz már tartalmaz egy operációs rendszert. Mit szeretnél tenni?<br/>Lehetőséged lesz átnézni és megerősíteni a választásod mielőtt bármilyen változtatás történik a tárolóeszközön. - + This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. A tárolóeszközön több operációs rendszer található. Mit szeretnél tenni?<br/>Lehetőséged lesz átnézni és megerősíteni a választásod mielőtt bármilyen változtatás történik a tárolóeszközön. - + No Swap Swap nélkül - + Reuse Swap Swap újrahasználata - + Swap (no Hibernate) Swap (nincs hibernálás) - + Swap (with Hibernate) Swap (hibernálással) - + Swap to file Swap fájlba @@ -714,17 +714,17 @@ Minden változtatás elveszik, ha kilépsz a telepítőből. Billentyűzet kiosztás beállítása %1/%2. - + Set timezone to %1/%2. - + The system language will be set to %1. A rendszer területi beállítása %1. - + The numbers and dates locale will be set to %1. A számok és dátumok területi beállítása %1. @@ -795,42 +795,42 @@ Telepítés nem folytatható. <a href="#details">Részletek...</a> - + Your username is too long. A felhasználónév túl hosszú. - + '%1' is not allowed as username. - + Your username must start with a lowercase letter or underscore. - + Only lowercase letters, numbers, underscore and hyphen are allowed. - + Your hostname is too short. A hálózati név túl rövid. - + Your hostname is too long. A hálózati név túl hosszú. - + '%1' is not allowed as hostname. - + Only letters, numbers, underscore and hyphen are allowed. @@ -1251,7 +1251,8 @@ Telepítés nem folytatható. <a href="#details">Részletek...</a>Jelszó megerősítés - + + Please enter the same passphrase in both boxes. Írd be ugyanazt a jelmondatot mindkét dobozban. @@ -1703,18 +1704,18 @@ Telepítés nem folytatható. <a href="#details">Részletek...</a> LocalePage - + Region: Régió: - + Zone: Zóna: - - + + &Change... &Változtat... @@ -1792,7 +1793,12 @@ Telepítés nem folytatható. <a href="#details">Részletek...</a> Map - + + Timezone: %1 + + + + Please select your preferred location on the map so the installer can suggest the locale and timezone settings for you. You can fine-tune the suggested settings below. Search the map by dragging to move and using the +/- buttons to zoom in/out or use mouse scrolling for zooming. @@ -1953,247 +1959,247 @@ Telepítés nem folytatható. <a href="#details">Részletek...</a> PWQ - + Password is too short Túl rövid jelszó - + Password is too long Túl hosszú jelszó - + Password is too weak A jelszó túl gyenge - + Memory allocation error when setting '%1' Memóriafoglalási hiba a(z) „%1” beállításakor - + Memory allocation error Memóriafoglalási hiba - + The password is the same as the old one A jelszó ugyanaz, mint a régi - + The password is a palindrome A jelszó egy palindrom - + The password differs with case changes only A jelszó csak kis- és nagybetűben tér el - + The password is too similar to the old one A jelszó túlságosan hasonlít a régire - + The password contains the user name in some form A jelszó tartalmazza felhasználónevet valamilyen formában - + The password contains words from the real name of the user in some form A jelszó tartalmazza a felhasználó valódi nevét valamilyen formában - + The password contains forbidden words in some form A jelszó tiltott szavakat tartalmaz valamilyen formában - + The password contains less than %1 digits A jelszó kevesebb mint %1 számjegyet tartalmaz - + The password contains too few digits A jelszó túl kevés számjegyet tartalmaz - + The password contains less than %1 uppercase letters A jelszó kevesebb mint %1 nagybetűt tartalmaz - + The password contains too few uppercase letters A jelszó túl kevés nagybetűt tartalmaz - + The password contains less than %1 lowercase letters A jelszó kevesebb mint %1 kisbetűt tartalmaz - + The password contains too few lowercase letters A jelszó túl kevés kisbetűt tartalmaz - + The password contains less than %1 non-alphanumeric characters A jelszó kevesebb mint %1 nem alfanumerikus karaktert tartalmaz - + The password contains too few non-alphanumeric characters A jelszó túl kevés nem alfanumerikus karaktert tartalmaz - + The password is shorter than %1 characters A jelszó rövidebb mint %1 karakter - + The password is too short A jelszó túl rövid - + The password is just rotated old one A jelszó egy újra felhasznált régi jelszó - + The password contains less than %1 character classes A jelszó kevesebb mint %1 karaktert tartalmaz - + The password does not contain enough character classes A jelszó nem tartalmaz elég karakterosztályt - + The password contains more than %1 same characters consecutively A jelszó több mint %1 egyező karaktert tartalmaz egymás után - + The password contains too many same characters consecutively A jelszó túl sok egyező karaktert tartalmaz egymás után - + The password contains more than %1 characters of the same class consecutively A jelszó több mint %1 karaktert tartalmaz ugyanabból a karakterosztályból egymás után - + The password contains too many characters of the same class consecutively A jelszó túl sok karaktert tartalmaz ugyanabból a karakterosztályból egymás után - + The password contains monotonic sequence longer than %1 characters A jelszó %1 karakternél hosszabb monoton sorozatot tartalmaz - + The password contains too long of a monotonic character sequence A jelszó túl hosszú monoton karaktersorozatot tartalmaz - + No password supplied Nincs jelszó megadva - + Cannot obtain random numbers from the RNG device Nem nyerhetőek ki véletlenszámok az RNG eszközből - + Password generation failed - required entropy too low for settings A jelszó előállítás meghiúsult – a szükséges entrópia túl alacsony a beállításokhoz - + The password fails the dictionary check - %1 A jelszó megbukott a szótárellenőrzésen – %1 - + The password fails the dictionary check A jelszó megbukott a szótárellenőrzésen - + Unknown setting - %1 Ismeretlen beállítás – %1 - + Unknown setting Ismeretlen beállítás - + Bad integer value of setting - %1 Hibás egész érték a beállításnál – %1 - + Bad integer value Hibás egész érték - + Setting %1 is not of integer type A(z) %1 beállítás nem egész típusú - + Setting is not of integer type A beállítás nem egész típusú - + Setting %1 is not of string type A(z) %1 beállítás nem karakterlánc típusú - + Setting is not of string type A beállítás nem karakterlánc típusú - + Opening the configuration file failed A konfigurációs fájl megnyitása meghiúsult - + The configuration file is malformed A konfigurációs fájl rosszul formázott - + Fatal failure Végzetes hiba - + Unknown error Ismeretlen hiba - + Password is empty @@ -2527,67 +2533,67 @@ Telepítés nem folytatható. <a href="#details">Részletek...</a> PartitionViewStep - + Gathering system information... Rendszerinformációk gyűjtése... - + Partitions Partíciók - + Install %1 <strong>alongside</strong> another operating system. %1 telepítése más operációs rendszer <strong>mellé</strong> . - + <strong>Erase</strong> disk and install %1. <strong>Lemez törlés</strong>és %1 telepítés. - + <strong>Replace</strong> a partition with %1. <strong>A partíció lecserélése</strong> a következővel: %1. - + <strong>Manual</strong> partitioning. <strong>Kézi</strong> partícionálás. - + Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). %1 telepítése más operációs rendszer <strong>mellé</strong> a <strong>%2</strong> (%3) lemezen. - + <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. <strong>%2 lemez törlése</strong> (%3) és %1 telepítés. - + <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. <strong>A partíció lecserélése</strong> a <strong>%2</strong> lemezen(%3) a következővel: %1. - + <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). <strong>Kézi</strong> telepítés a <strong>%1</strong> (%2) lemezen. - + Disk <strong>%1</strong> (%2) Lemez <strong>%1</strong> (%2) - + Current: Aktuális: - + After: Utána: @@ -2632,12 +2638,12 @@ Telepítés nem folytatható. <a href="#details">Részletek...</a>Egy külön indító partíció lett beállítva egy titkosított root partícióval, de az indító partíció nincs titkosítva.br/><br/>Biztonsági aggályok merülnek fel ilyen beállítás mellet, mert fontos fájlok nem titkosított partíción vannak tárolva. <br/>Ha szeretnéd, folytathatod így, de a fájlrendszer zárolása meg fog történni az indítás után. <br/> Az indító partíció titkosításához lépj vissza és az újra létrehozáskor válaszd a <strong>Titkosít</strong> opciót. - + has at least one disk device available. legalább egy lemez eszköz elérhető. - + There are no partitions to install on. @@ -3544,17 +3550,17 @@ Calamares hiba %1. UsersPage - + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>Ha egynél több személy használja a számítógépet akkor létrehozhat több felhasználói fiókot telepítés után.</small> - + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> <small>Ha egynél több személy használja a számítógépet akkor létrehozhat több felhasználói fiókot telepítés után.</small> - + Your passwords do not match! A két jelszó nem egyezik! @@ -3562,7 +3568,7 @@ Calamares hiba %1. UsersViewStep - + Users Felhasználók @@ -3840,7 +3846,7 @@ Calamares hiba %1. localeq - + Change diff --git a/lang/calamares_id.ts b/lang/calamares_id.ts index 8ddc4cf6a9..7f71893706 100644 --- a/lang/calamares_id.ts +++ b/lang/calamares_id.ts @@ -506,134 +506,134 @@ Instalasi akan ditutup dan semua perubahan akan hilang. Isian - + Select storage de&vice: Pilih perangkat penyimpanan: - - - - + + + + Current: Saat ini: - + After: Setelah: - + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. <strong>Pemartisian manual</strong><br/>Anda bisa membuat atau mengubah ukuran partisi. - + Reuse %1 as home partition for %2. Gunakan kembali %1 sebagai partisi home untuk %2. - + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> <strong>Pilih sebuah partisi untuk diiris, kemudian seret bilah di bawah untuk mengubah ukuran</strong> - + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. - + Boot loader location: Lokasi Boot loader: - + <strong>Select a partition to install on</strong> <strong>Pilih sebuah partisi untuk memasang</strong> - + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. Sebuah partisi sistem EFI tidak ditemukan pada sistem ini. Silakan kembali dan gunakan pemartisian manual untuk mengeset %1. - + The EFI system partition at %1 will be used for starting %2. Partisi sistem EFI di %1 akan digunakan untuk memulai %2. - + EFI system partition: Partisi sistem EFI: - + This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Tampaknya media penyimpanan ini tidak mengandung sistem operasi. Apa yang hendak Anda lakukan?<br/>Anda dapat menelaah dan mengkonfirmasi pilihan Anda sebelum dilakukan perubahan pada media penyimpanan. - - - - + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>Hapus disk</strong><br/>Aksi ini akan <font color="red">menghapus</font> semua berkas yang ada pada media penyimpanan terpilih. - - - - + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Instal berdampingan dengan</strong><br/>Installer akan mengiris sebuah partisi untuk memberi ruang bagi %1. - - - - + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>Ganti sebuah partisi</strong><br/> Ganti partisi dengan %1. - + This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Media penyimpanan ini mengandung %1. Apa yang hendak Anda lakukan?<br/>Anda dapat menelaah dan mengkonfirmasi pilihan Anda sebelum dilakukan perubahan pada media penyimpanan. - + This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Media penyimpanan ini telah mengandung sistem operasi. Apa yang hendak Anda lakukan?<br/>Anda dapat menelaah dan mengkonfirmasi pilihan Anda sebelum dilakukan perubahan pada media penyimpanan. - + This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Media penyimpanan ini telah mengandung beberapa sistem operasi. Apa yang hendak Anda lakukan?<br/>Anda dapat menelaah dan mengkonfirmasi pilihan Anda sebelum dilakukan perubahan pada media penyimpanan. - + No Swap - + Reuse Swap - + Swap (no Hibernate) - + Swap (with Hibernate) - + Swap to file @@ -711,17 +711,17 @@ Instalasi akan ditutup dan semua perubahan akan hilang. Setel tata letak papan ketik ke %1/%2. - + Set timezone to %1/%2. - + The system language will be set to %1. Bahasa sistem akan disetel ke %1. - + The numbers and dates locale will be set to %1. Nomor dan tanggal lokal akan disetel ke %1. @@ -793,42 +793,42 @@ Instalasi dapat dilanjutkan, namun beberapa fitur akan dinonfungsikan. - + Your username is too long. Nama pengguna Anda terlalu panjang. - + '%1' is not allowed as username. - + Your username must start with a lowercase letter or underscore. - + Only lowercase letters, numbers, underscore and hyphen are allowed. - + Your hostname is too short. Hostname Anda terlalu pendek. - + Your hostname is too long. Hostname Anda terlalu panjang. - + '%1' is not allowed as hostname. - + Only letters, numbers, underscore and hyphen are allowed. @@ -1249,7 +1249,8 @@ Instalasi dapat dilanjutkan, namun beberapa fitur akan dinonfungsikan.Konfirmasi kata sandi - + + Please enter the same passphrase in both boxes. Silakan masukkan kata sandi yang sama di kedua kotak. @@ -1701,18 +1702,18 @@ Instalasi dapat dilanjutkan, namun beberapa fitur akan dinonfungsikan. LocalePage - + Region: Wilayah: - + Zone: Zona: - - + + &Change... &Ubah... @@ -1790,7 +1791,12 @@ Instalasi dapat dilanjutkan, namun beberapa fitur akan dinonfungsikan. Map - + + Timezone: %1 + + + + Please select your preferred location on the map so the installer can suggest the locale and timezone settings for you. You can fine-tune the suggested settings below. Search the map by dragging to move and using the +/- buttons to zoom in/out or use mouse scrolling for zooming. @@ -1951,247 +1957,247 @@ Instalasi dapat dilanjutkan, namun beberapa fitur akan dinonfungsikan. PWQ - + Password is too short Kata sandi terlalu pendek - + Password is too long Kata sandi terlalu panjang - + Password is too weak kata sandi terlalu lemah - + Memory allocation error when setting '%1' Kesalahan alokasi memori saat menyetel '%1' - + Memory allocation error Kesalahan alokasi memori - + The password is the same as the old one Kata sandi sama dengan yang lama - + The password is a palindrome Kata sandi palindrom - + The password differs with case changes only Kata sandi berbeda hanya dengan perubahan huruf saja - + The password is too similar to the old one Kata sandi terlalu mirip dengan yang lama - + The password contains the user name in some form Kata sandi berisi nama pengguna dalam beberapa form - + The password contains words from the real name of the user in some form Kata sandi berisi kata-kata dari nama asli pengguna dalam beberapa form - + The password contains forbidden words in some form Password mengandung kata yang dilarang pada beberapa bagian form - + The password contains less than %1 digits Password setidaknya berisi 1 digit karakter - + The password contains too few digits Kata sandi terkandung terlalu sedikit digit - + The password contains less than %1 uppercase letters Kata sandi terkandung kurang dari %1 huruf besar - + The password contains too few uppercase letters Kata sandi terkandung terlalu sedikit huruf besar - + The password contains less than %1 lowercase letters Kata sandi terkandung kurang dari %1 huruf kecil - + The password contains too few lowercase letters Kata sandi terkandung terlalu sedikit huruf kecil - + The password contains less than %1 non-alphanumeric characters Kata sandi terkandung kurang dari %1 karakter non-alfanumerik - + The password contains too few non-alphanumeric characters Kata sandi terkandung terlalu sedikit non-alfanumerik - + The password is shorter than %1 characters Kata sandi terlalu pendek dari %1 karakter - + The password is too short Password terlalu pendek - + The password is just rotated old one Kata sandi hanya terotasi satu kali - + The password contains less than %1 character classes Kata sandi terkandung kurang dari %1 kelas karakter - + The password does not contain enough character classes Kata sandi tidak terkandung kelas karakter yang cukup - + The password contains more than %1 same characters consecutively Kata sandi terkandung lebih dari %1 karakter berurutan yang sama - + The password contains too many same characters consecutively Kata sandi terkandung terlalu banyak karakter berurutan yang sama - + The password contains more than %1 characters of the same class consecutively Kata sandi terkandung lebih dari %1 karakter dari kelas berurutan yang sama - + The password contains too many characters of the same class consecutively Kata sandi terkandung terlalu banyak karakter dari kelas berurutan yang sama - + The password contains monotonic sequence longer than %1 characters Kata sandi terkandung rangkaian monoton yang lebih panjang dari %1 karakter - + The password contains too long of a monotonic character sequence Kata sandi terkandung rangkaian karakter monoton yang panjang - + No password supplied Tidak ada kata sandi yang dipasok - + Cannot obtain random numbers from the RNG device Tidak dapat memperoleh angka acak dari piranti RNG - + Password generation failed - required entropy too low for settings Penghasilan kata sandi gagal - entropi yang diperlukan terlalu rendah untuk pengaturan - + The password fails the dictionary check - %1 Kata sandi gagal memeriksa kamus - %1 - + The password fails the dictionary check Kata sandi gagal memeriksa kamus - + Unknown setting - %1 Pengaturan tidak diketahui - %1 - + Unknown setting pengaturan tidak diketahui - + Bad integer value of setting - %1 Nilai bilangan bulat buruk dari pengaturan - %1 - + Bad integer value Nilai integer jelek - + Setting %1 is not of integer type Pengaturan %1 tidak termasuk tipe integer - + Setting is not of integer type Pengaturan tidak termasuk tipe integer - + Setting %1 is not of string type Pengaturan %1 tidak termasuk tipe string - + Setting is not of string type Pengaturan tidak termasuk tipe string - + Opening the configuration file failed Ada kesalahan saat membuka berkas konfigurasi - + The configuration file is malformed Kesalahan format pada berkas konfigurasi - + Fatal failure Kegagalan fatal - + Unknown error Ada kesalahan yang tidak diketahui - + Password is empty @@ -2525,67 +2531,67 @@ Instalasi dapat dilanjutkan, namun beberapa fitur akan dinonfungsikan. PartitionViewStep - + Gathering system information... Mengumpulkan informasi sistem... - + Partitions Paritsi - + Install %1 <strong>alongside</strong> another operating system. Instal %1 <strong>berdampingan</strong> dengan sistem operasi lain. - + <strong>Erase</strong> disk and install %1. <strong>Hapus</strong> diska dan instal %1. - + <strong>Replace</strong> a partition with %1. <strong>Ganti</strong> partisi dengan %1. - + <strong>Manual</strong> partitioning. Partisi <strong>manual</strong>. - + Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). Instal %1 <strong>berdampingan</strong> dengan sistem operasi lain di disk <strong>%2</strong> (%3). - + <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. <strong>Hapus</strong> diska <strong>%2</strong> (%3) dan instal %1. - + <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. <strong>Ganti</strong> partisi pada diska <strong>%2</strong> (%3) dengan %1. - + <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). <strong>Partisi Manual</strong> pada diska <strong>%1</strong> (%2). - + Disk <strong>%1</strong> (%2) Disk <strong>%1</strong> (%2) - + Current: Saat ini: - + After: Sesudah: @@ -2630,12 +2636,12 @@ Instalasi dapat dilanjutkan, namun beberapa fitur akan dinonfungsikan.Sebuah partisi tersendiri telah terset bersama dengan sebuah partisi root terenkripsi, tapi partisi boot tidak terenkripsi.<br/><br/>Ada kekhawatiran keamanan dengan jenis setup ini, karena file sistem penting tetap pada partisi tak terenkripsi.<br/>Kamu bisa melanjutkan jika kamu menghendaki, tapi filesystem unlocking akan terjadi nanti selama memulai sistem.<br/>Untuk mengenkripsi partisi boot, pergi mundur dan menciptakannya ulang, memilih <strong>Encrypt</strong> di jendela penciptaan partisi. - + has at least one disk device available. - + There are no partitions to install on. @@ -3542,17 +3548,17 @@ Instalasi dapat dilanjutkan, namun beberapa fitur akan dinonfungsikan. UsersPage - + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> - + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> - + Your passwords do not match! Sandi Anda tidak sama! @@ -3560,7 +3566,7 @@ Instalasi dapat dilanjutkan, namun beberapa fitur akan dinonfungsikan. UsersViewStep - + Users Pengguna @@ -3838,7 +3844,7 @@ Instalasi dapat dilanjutkan, namun beberapa fitur akan dinonfungsikan. localeq - + Change diff --git a/lang/calamares_ie.ts b/lang/calamares_ie.ts index 5ad19f7663..ce87c586ec 100644 --- a/lang/calamares_ie.ts +++ b/lang/calamares_ie.ts @@ -507,134 +507,134 @@ The installer will quit and all changes will be lost. Redimensionar un gruppe de tomes - + Select storage de&vice: - - - - + + + + Current: Actual: - + After: Pos: - + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. - + Reuse %1 as home partition for %2. - + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> - + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. - + Boot loader location: Localisation del bootloader: - + <strong>Select a partition to install on</strong> - + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. - + The EFI system partition at %1 will be used for starting %2. - + EFI system partition: Partition de sistema EFI: - + This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. - - - - + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. - - - - + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. - - - - + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. - + This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. - + This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. - + This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. - + No Swap Sin swap - + Reuse Swap Reusar un swap - + Swap (no Hibernate) Swap (sin hivernation) - + Swap (with Hibernate) Swap (con hivernation) - + Swap to file Swap in un file @@ -712,17 +712,17 @@ The installer will quit and all changes will be lost. - + Set timezone to %1/%2. - + The system language will be set to %1. - + The numbers and dates locale will be set to %1. @@ -792,42 +792,42 @@ The installer will quit and all changes will be lost. <h1>Benevenit al installator de %1</h1> - + Your username is too long. - + '%1' is not allowed as username. - + Your username must start with a lowercase letter or underscore. - + Only lowercase letters, numbers, underscore and hyphen are allowed. - + Your hostname is too short. - + Your hostname is too long. - + '%1' is not allowed as hostname. - + Only letters, numbers, underscore and hyphen are allowed. @@ -1248,7 +1248,8 @@ The installer will quit and all changes will be lost. - + + Please enter the same passphrase in both boxes. @@ -1700,18 +1701,18 @@ The installer will quit and all changes will be lost. LocalePage - + Region: Region: - + Zone: Zone: - - + + &Change... &Modificar... @@ -1789,7 +1790,12 @@ The installer will quit and all changes will be lost. Map - + + Timezone: %1 + Zone horari: %1 + + + Please select your preferred location on the map so the installer can suggest the locale and timezone settings for you. You can fine-tune the suggested settings below. Search the map by dragging to move and using the +/- buttons to zoom in/out or use mouse scrolling for zooming. @@ -1950,247 +1956,247 @@ The installer will quit and all changes will be lost. PWQ - + Password is too short Li contrasigne es tro curt - + Password is too long Li contrasigne es tro long - + Password is too weak - + Memory allocation error when setting '%1' - + Memory allocation error - + The password is the same as the old one - + The password is a palindrome - + The password differs with case changes only - + The password is too similar to the old one - + The password contains the user name in some form - + The password contains words from the real name of the user in some form - + The password contains forbidden words in some form - + The password contains less than %1 digits - + The password contains too few digits - + The password contains less than %1 uppercase letters - + The password contains too few uppercase letters - + The password contains less than %1 lowercase letters - + The password contains too few lowercase letters - + The password contains less than %1 non-alphanumeric characters - + The password contains too few non-alphanumeric characters - + The password is shorter than %1 characters - + The password is too short - + The password is just rotated old one - + The password contains less than %1 character classes - + The password does not contain enough character classes - + The password contains more than %1 same characters consecutively - + The password contains too many same characters consecutively - + The password contains more than %1 characters of the same class consecutively - + The password contains too many characters of the same class consecutively - + The password contains monotonic sequence longer than %1 characters - + The password contains too long of a monotonic character sequence - + No password supplied - + Cannot obtain random numbers from the RNG device - + Password generation failed - required entropy too low for settings - + The password fails the dictionary check - %1 - + The password fails the dictionary check - + Unknown setting - %1 - + Unknown setting - + Bad integer value of setting - %1 - + Bad integer value - + Setting %1 is not of integer type - + Setting is not of integer type - + Setting %1 is not of string type - + Setting is not of string type - + Opening the configuration file failed - + The configuration file is malformed - + Fatal failure - + Unknown error Ínconosset errore - + Password is empty Li contrasigne es vacui @@ -2524,67 +2530,67 @@ The installer will quit and all changes will be lost. PartitionViewStep - + Gathering system information... - + Partitions Partitiones - + Install %1 <strong>alongside</strong> another operating system. - + <strong>Erase</strong> disk and install %1. - + <strong>Replace</strong> a partition with %1. - + <strong>Manual</strong> partitioning. - + Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). - + <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. - + <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. - + <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). - + Disk <strong>%1</strong> (%2) - + Current: Actual: - + After: Pos: @@ -2629,12 +2635,12 @@ The installer will quit and all changes will be lost. - + has at least one disk device available. - + There are no partitions to install on. Ne existe disponibil partitiones por installation. @@ -3536,17 +3542,17 @@ Output: UsersPage - + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> - + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> - + Your passwords do not match! @@ -3554,7 +3560,7 @@ Output: UsersViewStep - + Users Usatores @@ -3832,7 +3838,7 @@ Output: localeq - + Change Modificar diff --git a/lang/calamares_is.ts b/lang/calamares_is.ts index cc9adfa025..bc21d01279 100644 --- a/lang/calamares_is.ts +++ b/lang/calamares_is.ts @@ -508,134 +508,134 @@ Uppsetningarforritið mun hætta og allar breytingar tapast. Eyðublað - + Select storage de&vice: Veldu geymslu tæ&ki: - - - - + + + + Current: Núverandi: - + After: Eftir: - + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. <strong>Handvirk disksneiðing</strong><br/>Þú getur búið til eða breytt stærð disksneiða sjálft. - + Reuse %1 as home partition for %2. Endurnota %1 sem heimasvæðis disksneið fyrir %2. - + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> <strong>Veldu disksneið til að minnka, dragðu síðan botnstikuna til að breyta stærðinni</strong> - + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. - + Boot loader location: Staðsetning ræsistjóra - + <strong>Select a partition to install on</strong> <strong>Veldu disksneið til að setja upp á </strong> - + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. EFI kerfisdisksneið er hvergi að finna á þessu kerfi. Farðu til baka og notaðu handvirka skiptingu til að setja upp %1. - + The EFI system partition at %1 will be used for starting %2. EFI kerfisdisksneið á %1 mun verða notuð til að ræsa %2. - + EFI system partition: EFI kerfisdisksneið: - + This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Þetta geymslu tæki hefur mörg stýrikerfi á sér. Hvað viltu gera?<br/>Þú verður að vera fær um að yfirfara og staðfesta val þitt áður en breytingar eru gerðar til geymslu tæki. - - - - + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>Eyða disk</strong><br/>Þetta mun <font color="red">eyða</font> öllum gögnum á þessu valdna geymslu tæki. - - - - + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Setja upp samhliða</strong><br/>Uppsetningarforritið mun minnka disksneið til að búa til pláss fyrir %1. - - - - + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>Skipta út disksneið</strong><br/>Skiptir disksneið út með %1. - + This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Þetta geymslu tæki hefur %1 á sér. Hvað viltu gera?<br/>Þú verður að vera fær um að yfirfara og staðfesta val þitt áður en breytingar eru gerðar til geymslu tæki. - + This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Þetta geymslu tæki hefur stýrikerfi á sér. Hvað viltu gera?<br/>Þú verður að vera fær um að yfirfara og staðfesta val þitt áður en breytingar eru gerðar til geymslu tæki. - + This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Þetta geymslu tæki hefur mörg stýrikerfi á sér. Hvað viltu gera?<br/>Þú verður að vera fær um að yfirfara og staðfesta val þitt áður en breytingar eru gerðar til geymslu tæki. - + No Swap - + Reuse Swap - + Swap (no Hibernate) - + Swap (with Hibernate) - + Swap to file @@ -713,17 +713,17 @@ Uppsetningarforritið mun hætta og allar breytingar tapast. - + Set timezone to %1/%2. - + The system language will be set to %1. Tungumál kerfisins verður sett sem %1. - + The numbers and dates locale will be set to %1. @@ -793,42 +793,42 @@ Uppsetningarforritið mun hætta og allar breytingar tapast. - + Your username is too long. Notandanafnið þitt er of langt. - + '%1' is not allowed as username. - + Your username must start with a lowercase letter or underscore. - + Only lowercase letters, numbers, underscore and hyphen are allowed. - + Your hostname is too short. Notandanafnið þitt er of stutt. - + Your hostname is too long. Notandanafnið þitt er of langt. - + '%1' is not allowed as hostname. - + Only letters, numbers, underscore and hyphen are allowed. @@ -1249,7 +1249,8 @@ Uppsetningarforritið mun hætta og allar breytingar tapast. Staðfesta lykilorð - + + Please enter the same passphrase in both boxes. Vinsamlegast sláðu inn sama lykilorðið í báða kassana. @@ -1701,18 +1702,18 @@ Uppsetningarforritið mun hætta og allar breytingar tapast. LocalePage - + Region: Hérað: - + Zone: Svæði: - - + + &Change... &Breyta... @@ -1790,7 +1791,12 @@ Uppsetningarforritið mun hætta og allar breytingar tapast. Map - + + Timezone: %1 + + + + Please select your preferred location on the map so the installer can suggest the locale and timezone settings for you. You can fine-tune the suggested settings below. Search the map by dragging to move and using the +/- buttons to zoom in/out or use mouse scrolling for zooming. @@ -1951,247 +1957,247 @@ Uppsetningarforritið mun hætta og allar breytingar tapast. PWQ - + Password is too short Lykilorðið þitt er of stutt - + Password is too long Lykilorðið þitt er of langt - + Password is too weak Lykilorðið þitt er of veikt - + Memory allocation error when setting '%1' - + Memory allocation error - + The password is the same as the old one - + The password is a palindrome - + The password differs with case changes only - + The password is too similar to the old one - + The password contains the user name in some form - + The password contains words from the real name of the user in some form - + The password contains forbidden words in some form - + The password contains less than %1 digits - + The password contains too few digits - + The password contains less than %1 uppercase letters - + The password contains too few uppercase letters - + The password contains less than %1 lowercase letters - + The password contains too few lowercase letters - + The password contains less than %1 non-alphanumeric characters - + The password contains too few non-alphanumeric characters - + The password is shorter than %1 characters - + The password is too short Lykilorðið er of stutt - + The password is just rotated old one - + The password contains less than %1 character classes - + The password does not contain enough character classes - + The password contains more than %1 same characters consecutively - + The password contains too many same characters consecutively - + The password contains more than %1 characters of the same class consecutively - + The password contains too many characters of the same class consecutively - + The password contains monotonic sequence longer than %1 characters - + The password contains too long of a monotonic character sequence - + No password supplied - + Cannot obtain random numbers from the RNG device - + Password generation failed - required entropy too low for settings - + The password fails the dictionary check - %1 - + The password fails the dictionary check - + Unknown setting - %1 - + Unknown setting - + Bad integer value of setting - %1 - + Bad integer value - + Setting %1 is not of integer type - + Setting is not of integer type - + Setting %1 is not of string type - + Setting is not of string type - + Opening the configuration file failed - + The configuration file is malformed - + Fatal failure - + Unknown error Óþekkt villa - + Password is empty @@ -2525,67 +2531,67 @@ Uppsetningarforritið mun hætta og allar breytingar tapast. PartitionViewStep - + Gathering system information... Söfnun kerfis upplýsingar... - + Partitions Disksneiðar - + Install %1 <strong>alongside</strong> another operating system. Setja upp %1 <strong>ásamt</strong> ásamt öðru stýrikerfi. - + <strong>Erase</strong> disk and install %1. <strong>Eyða</strong> disk og setja upp %1. - + <strong>Replace</strong> a partition with %1. <strong>Skipta út</strong> disksneið með %1. - + <strong>Manual</strong> partitioning. <strong>Handvirk</strong> disksneiðaskipting. - + Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). Uppsetning %1 <strong>með</strong> öðru stýrikerfi á disk <strong>%2</strong> (%3). - + <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. <strong>Eyða</strong> disk <strong>%2</strong> (%3) og setja upp %1. - + <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. <strong>Skipta út</strong> disksneið á diski <strong>%2</strong> (%3) með %1. - + <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). <strong>Handvirk</strong> disksneiðaskipting á diski <strong>%1</strong> (%2). - + Disk <strong>%1</strong> (%2) Diskur <strong>%1</strong> (%2) - + Current: Núverandi: - + After: Eftir: @@ -2630,12 +2636,12 @@ Uppsetningarforritið mun hætta og allar breytingar tapast. - + has at least one disk device available. - + There are no partitions to install on. @@ -3537,17 +3543,17 @@ Output: UsersPage - + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> - + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> - + Your passwords do not match! Lykilorð passa ekki! @@ -3555,7 +3561,7 @@ Output: UsersViewStep - + Users Notendur @@ -3833,7 +3839,7 @@ Output: localeq - + Change diff --git a/lang/calamares_it_IT.ts b/lang/calamares_it_IT.ts index 179e6b4793..2dc265b04d 100644 --- a/lang/calamares_it_IT.ts +++ b/lang/calamares_it_IT.ts @@ -509,134 +509,134 @@ Il programma d'installazione sarà terminato e tutte le modifiche andranno perse Modulo - + Select storage de&vice: Selezionare un dispositivo di me&moria: - - - - + + + + Current: Corrente: - + After: Dopo: - + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. <strong>Partizionamento manuale</strong><br/>Si possono creare o ridimensionare le partizioni manualmente. - + Reuse %1 as home partition for %2. Riutilizzare %1 come partizione home per &2. - + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> <strong>Selezionare una partizione da ridurre, trascina la barra inferiore per ridimensionare</strong> - + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. %1 sarà ridotta a %2MiB ed una nuova partizione di %3MiB sarà creata per %4 - + Boot loader location: Posizionamento del boot loader: - + <strong>Select a partition to install on</strong> <strong>Selezionare la partizione sulla quale si vuole installare</strong> - + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. Impossibile trovare una partizione EFI di sistema. Si prega di tornare indietro ed effettuare un partizionamento manuale per configurare %1. - + The EFI system partition at %1 will be used for starting %2. La partizione EFI di sistema su %1 sarà usata per avviare %2. - + EFI system partition: Partizione EFI di sistema: - + This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Questo dispositivo di memoria non sembra contenere alcun sistema operativo. Come si vuole procedere?<br/>Si potranno comunque rivedere e confermare le scelte prima di apportare i cambiamenti al dispositivo. - - - - + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>Cancellare disco</strong><br/>Questo <font color="red">cancellerà</font> tutti i dati attualmente presenti sul dispositivo di memoria. - - - - + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Installare a fianco</strong><br/>Il programma di installazione ridurrà una partizione per dare spazio a %1. - - - - + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>Sostituire una partizione</strong><br/>Sostituisce una partizione con %1. - + This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Questo dispositivo di memoria ha %1. Come si vuole procedere?<br/>Si potranno comunque rivedere e confermare le scelte prima di apportare i cambiamenti al dispositivo. - + This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Questo dispositivo di memoria contenere già un sistema operativo. Come si vuole procedere?<br/>Si potranno comunque rivedere e confermare le scelte prima di apportare i cambiamenti al dispositivo. - + This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Questo dispositivo di memoria contenere diversi sistemi operativi. Come si vuole procedere?<br/>Comunque si potranno rivedere e confermare le scelte prima di apportare i cambiamenti al dispositivo. - + No Swap No Swap - + Reuse Swap Riutilizza Swap - + Swap (no Hibernate) Swap (senza ibernazione) - + Swap (with Hibernate) Swap (con ibernazione) - + Swap to file Swap su file @@ -714,17 +714,17 @@ Il programma d'installazione sarà terminato e tutte le modifiche andranno perse Impostare il layout della tastiera a %1/%2. - + Set timezone to %1/%2. - + The system language will be set to %1. La lingua di sistema sarà impostata a %1. - + The numbers and dates locale will be set to %1. I numeri e le date locali saranno impostati a %1. @@ -794,42 +794,42 @@ Il programma d'installazione sarà terminato e tutte le modifiche andranno perse Benvenuto nel programma di installazione di %1 - + Your username is too long. Il nome utente è troppo lungo. - + '%1' is not allowed as username. - + Your username must start with a lowercase letter or underscore. Il tuo username deve iniziare con una lettera minuscola o un trattino basso. - + Only lowercase letters, numbers, underscore and hyphen are allowed. Solo lettere minuscole, numeri, trattini e trattini bassi sono permessi. - + Your hostname is too short. Hostname è troppo corto. - + Your hostname is too long. Hostname è troppo lungo. - + '%1' is not allowed as hostname. - + Only letters, numbers, underscore and hyphen are allowed. Solo lettere, numeri, trattini e trattini bassi sono permessi. @@ -1250,7 +1250,8 @@ Il programma d'installazione sarà terminato e tutte le modifiche andranno perse Confermare frase di accesso - + + Please enter the same passphrase in both boxes. Si prega di immettere la stessa frase di accesso in entrambi i riquadri. @@ -1702,18 +1703,18 @@ Il programma d'installazione sarà terminato e tutte le modifiche andranno perse LocalePage - + Region: Area: - + Zone: Zona: - - + + &Change... &Cambia... @@ -1791,7 +1792,12 @@ Il programma d'installazione sarà terminato e tutte le modifiche andranno perse Map - + + Timezone: %1 + Fuso orario: %1 + + + Please select your preferred location on the map so the installer can suggest the locale and timezone settings for you. You can fine-tune the suggested settings below. Search the map by dragging to move and using the +/- buttons to zoom in/out or use mouse scrolling for zooming. @@ -1952,247 +1958,247 @@ Il programma d'installazione sarà terminato e tutte le modifiche andranno perse PWQ - + Password is too short Password troppo corta - + Password is too long Password troppo lunga - + Password is too weak Password troppo debole - + Memory allocation error when setting '%1' Errore di allocazione della memoria quando si imposta '%1' - + Memory allocation error Errore di allocazione di memoria - + The password is the same as the old one La password coincide con la precedente - + The password is a palindrome La password è un palindromo - + The password differs with case changes only La password differisce solo per lettere minuscole e maiuscole - + The password is too similar to the old one La password è troppo simile a quella precedente - + The password contains the user name in some form La password contiene il nome utente in qualche campo - + The password contains words from the real name of the user in some form La password contiene parti del nome utente reale in qualche campo - + The password contains forbidden words in some form La password contiene parole vietate in alcuni campi - + The password contains less than %1 digits La password contiene meno di %1 cifre - + The password contains too few digits La password contiene poche cifre - + The password contains less than %1 uppercase letters La password contiene meno di %1 lettere maiuscole - + The password contains too few uppercase letters La password contiene poche lettere maiuscole - + The password contains less than %1 lowercase letters La password contiene meno di %1 lettere minuscole - + The password contains too few lowercase letters La password contiene poche lettere minuscole - + The password contains less than %1 non-alphanumeric characters La password contiene meno di %1 caratteri non alfanumerici - + The password contains too few non-alphanumeric characters La password contiene pochi caratteri non alfanumerici - + The password is shorter than %1 characters La password ha meno di %1 caratteri - + The password is too short La password è troppo corta - + The password is just rotated old one La password è solo una rotazione della precedente - + The password contains less than %1 character classes La password contiene meno di %1 classi di caratteri - + The password does not contain enough character classes La password non contiene classi di caratteri sufficienti - + The password contains more than %1 same characters consecutively La password contiene più di %1 caratteri uguali consecutivi - + The password contains too many same characters consecutively La password contiene troppi caratteri uguali consecutivi - + The password contains more than %1 characters of the same class consecutively La password contiene più di %1 caratteri consecutivi della stessa classe - + The password contains too many characters of the same class consecutively La password contiene molti caratteri consecutivi della stessa classe - + The password contains monotonic sequence longer than %1 characters La password contiene una sequenza monotona più lunga di %1 caratteri - + The password contains too long of a monotonic character sequence La password contiene una sequenza di caratteri monotona troppo lunga - + No password supplied Nessuna password fornita - + Cannot obtain random numbers from the RNG device Impossibile ottenere numeri casuali dal dispositivo RNG - + Password generation failed - required entropy too low for settings Generazione della password fallita - entropia richiesta troppo bassa per le impostazioni - + The password fails the dictionary check - %1 La password non supera il controllo del dizionario - %1 - + The password fails the dictionary check La password non supera il controllo del dizionario - + Unknown setting - %1 Impostazioni sconosciute - %1 - + Unknown setting Impostazione sconosciuta - + Bad integer value of setting - %1 Valore intero non valido per l'impostazione - %1 - + Bad integer value Valore intero non valido - + Setting %1 is not of integer type Impostazione %1 non è di tipo intero - + Setting is not of integer type Impostazione non è di tipo intero - + Setting %1 is not of string type Impostazione %1 non è di tipo stringa - + Setting is not of string type Impostazione non è di tipo stringa - + Opening the configuration file failed Apertura del file di configurazione fallita - + The configuration file is malformed Il file di configurazione non è corretto - + Fatal failure Errore fatale - + Unknown error Errore sconosciuto - + Password is empty Password vuota @@ -2526,67 +2532,67 @@ Il programma d'installazione sarà terminato e tutte le modifiche andranno perse PartitionViewStep - + Gathering system information... Raccolta delle informazioni di sistema... - + Partitions Partizioni - + Install %1 <strong>alongside</strong> another operating system. Installare %1 <strong>a fianco</strong> di un altro sistema operativo. - + <strong>Erase</strong> disk and install %1. <strong>Cancellare</strong> il disco e installare %1. - + <strong>Replace</strong> a partition with %1. <strong>Sostituire</strong> una partizione con %1. - + <strong>Manual</strong> partitioning. Partizionamento <strong>manuale</strong>. - + Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). Installare %1 <strong>a fianco</strong> di un altro sistema operativo sul disco<strong>%2</strong> (%3). - + <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. <strong>Cancellare</strong> il disco <strong>%2</strong> (%3) e installa %1. - + <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. <strong>Sostituire</strong> una partizione sul disco <strong>%2</strong> (%3) con %1. - + <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). Partizionamento <strong>manuale</strong> sul disco <strong>%1</strong> (%2). - + Disk <strong>%1</strong> (%2) Disco <strong>%1</strong> (%2) - + Current: Corrente: - + After: Dopo: @@ -2631,12 +2637,12 @@ Il programma d'installazione sarà terminato e tutte le modifiche andranno perse E' stata configurata una partizione di avvio non criptata assieme ad una partizione root criptata. <br/><br/>Ci sono problemi di sicurezza con questo tipo di configurazione perchè dei file di sistema importanti sono tenuti su una partizione non criptata.<br/>Si può continuare se lo si desidera ma dopo ci sarà lo sblocco del file system, durante l'avvio del sistema.<br/>Per criptare la partizione di avvio, tornare indietro e ricrearla, selezionando <strong>Criptare</strong> nella finestra di creazione della partizione. - + has at least one disk device available. ha almeno un'unità disco disponibile. - + There are no partitions to install on. Non ci sono partizioni su cui installare. @@ -3541,17 +3547,17 @@ Output: UsersPage - + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>Se più di una persona utilizzerà questo computer, puoi creare ulteriori account dopo la configurazione.</small> - + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> <small>Se più di una persona utilizzerà questo computer, puoi creare ulteriori account dopo l'installazione.</small> - + Your passwords do not match! Le password non corrispondono! @@ -3559,7 +3565,7 @@ Output: UsersViewStep - + Users Utenti @@ -3848,7 +3854,7 @@ Output: localeq - + Change diff --git a/lang/calamares_ja.ts b/lang/calamares_ja.ts index 8febc0aba7..edd32434f6 100644 --- a/lang/calamares_ja.ts +++ b/lang/calamares_ja.ts @@ -508,134 +508,134 @@ The installer will quit and all changes will be lost. フォーム - + Select storage de&vice: ストレージデバイスを選択 (&V): - - - - + + + + Current: 現在: - + After: 後: - + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. <strong>手動パーティション</strong><br/>パーティションの作成、あるいはサイズ変更を行うことができます。 - + Reuse %1 as home partition for %2. %1 を %2 のホームパーティションとして再利用する - + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> <strong>縮小するパーティションを選択し、下のバーをドラッグしてサイズを変更して下さい</strong> - + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. %1 は %2MiB に縮小され新たに %4 に %3MiB のパーティションが作成されます。 - + Boot loader location: ブートローダーの場所: - + <strong>Select a partition to install on</strong> <strong>インストールするパーティションの選択</strong> - + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. システムにEFIシステムパーティションが存在しません。%1 のセットアップのため、元に戻り、手動パーティショニングを使用してください。 - + The EFI system partition at %1 will be used for starting %2. %1 上のEFIシステムパーテイションは %2 のスタートに使用されます。 - + EFI system partition: EFI システムパーティション: - + This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. このストレージデバイスにはオペレーティングシステムが存在しないようです。何を行いますか?<br/>ストレージデバイスに対する変更を行う前に、変更点をレビューし、確認することができます。 - - - - + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>ディスクの消去</strong><br/>選択したストレージデバイス上のデータがすべて <font color="red">削除</font>されます。 - - - - + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>共存してインストール</strong><br/>インストーラは %1 用の空きスペースを確保するため、パーティションを縮小します。 - - - - + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>パーティションの置換</strong><br/>パーティションを %1 に置き換えます。 - + This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. このストレージデバイスには %1 が存在します。何を行いますか?<br/>ストレージデバイスに対する変更を行う前に、変更点をレビューし、確認することができます。 - + This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. このストレージデバイスにはすでにオペレーティングシステムが存在します。何を行いますか?<br/>ストレージデバイスに対する変更を行う前に、変更点をレビューし、確認することができます。 - + This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. このストレージデバイスには複数のオペレーティングシステムが存在します。何を行いますか?<br />ストレージデバイスに対する変更を行う前に、変更点をレビューし、確認することができます。 - + No Swap スワップを使用しない - + Reuse Swap スワップを再利用 - + Swap (no Hibernate) スワップ(ハイバーネートなし) - + Swap (with Hibernate) スワップ(ハイバーネート) - + Swap to file ファイルにスワップ @@ -713,17 +713,17 @@ The installer will quit and all changes will be lost. キーボードのレイアウトを %1/%2 に設定する。 - + Set timezone to %1/%2. タイムゾーンを %1/%2 に設定します。 - + The system language will be set to %1. システムの言語を %1 に設定します。 - + The numbers and dates locale will be set to %1. 数値と日付のロケールを %1 に設定します。 @@ -793,42 +793,42 @@ The installer will quit and all changes will be lost. <h1>%1 インストーラーへようこそ</h1> - + Your username is too long. ユーザー名が長すぎます。 - + '%1' is not allowed as username. '%1' はユーザー名として許可されていません。 - + Your username must start with a lowercase letter or underscore. ユーザー名はアルファベットの小文字または _ で始めてください。 - + Only lowercase letters, numbers, underscore and hyphen are allowed. 使用できるのはアルファベットの小文字と数字と _ と - だけです。 - + Your hostname is too short. ホスト名が短すぎます。 - + Your hostname is too long. ホスト名が長過ぎます。 - + '%1' is not allowed as hostname. '%1' はホスト名として許可されていません。 - + Only letters, numbers, underscore and hyphen are allowed. 使用できるのはアルファベットと数字と _ と - だけです。 @@ -1249,7 +1249,8 @@ The installer will quit and all changes will be lost. パスフレーズの確認 - + + Please enter the same passphrase in both boxes. 両方のボックスに同じパスフレーズを入力してください。 @@ -1702,18 +1703,18 @@ The installer will quit and all changes will be lost. LocalePage - + Region: 地域: - + Zone: ゾーン: - - + + &Change... 変更 (&C)... @@ -1791,7 +1792,12 @@ The installer will quit and all changes will be lost. Map - + + Timezone: %1 + タイムゾーン: %1 + + + Please select your preferred location on the map so the installer can suggest the locale and timezone settings for you. You can fine-tune the suggested settings below. Search the map by dragging to move and using the +/- buttons to zoom in/out or use mouse scrolling for zooming. @@ -1955,247 +1961,247 @@ The installer will quit and all changes will be lost. PWQ - + Password is too short パスワードが短すぎます - + Password is too long パスワードが長すぎます - + Password is too weak パスワードが弱すぎます - + Memory allocation error when setting '%1' '%1' の設定の際にメモリーアロケーションエラーが発生しました - + Memory allocation error メモリーアロケーションエラー - + The password is the same as the old one パスワードが以前のものと同じです。 - + The password is a palindrome パスワードが回文です - + The password differs with case changes only パスワードの変更が大文字、小文字の変更のみです - + The password is too similar to the old one パスワードが以前のものと酷似しています - + The password contains the user name in some form パスワードにユーザー名が含まれています - + The password contains words from the real name of the user in some form パスワードにユーザーの実名が含まれています - + The password contains forbidden words in some form パスワードに禁句が含まれています - + The password contains less than %1 digits パスワードに含まれている数字が %1 字以下です - + The password contains too few digits パスワードに含まれる数字の数が少なすぎます - + The password contains less than %1 uppercase letters パスワードに含まれている大文字が %1 字以下です - + The password contains too few uppercase letters パスワードに含まれる大文字の数が少なすぎます - + The password contains less than %1 lowercase letters パスワードに含まれている小文字が %1 字以下です - + The password contains too few lowercase letters パスワードに含まれる小文字の数が少なすぎます - + The password contains less than %1 non-alphanumeric characters パスワードに含まれる非アルファベット文字が %1 字以下です - + The password contains too few non-alphanumeric characters パスワードに含まれる非アルファベット文字の数が少なすぎます - + The password is shorter than %1 characters パスワードの長さが %1 字より短いです - + The password is too short パスワードが短すぎます - + The password is just rotated old one パスワードが古いものの使いまわしです - + The password contains less than %1 character classes パスワードに含まれている文字クラスは %1 以下です。 - + The password does not contain enough character classes パスワードには十分な文字クラスが含まれていません - + The password contains more than %1 same characters consecutively パスワードで同じ文字が %1 字以上連続しています。 - + The password contains too many same characters consecutively パスワードで同じ文字を続けすぎています - + The password contains more than %1 characters of the same class consecutively パスワードで同じ文字クラスが %1 以上連続しています。 - + The password contains too many characters of the same class consecutively パスワードで同じ文字クラスの文字を続けすぎています - + The password contains monotonic sequence longer than %1 characters パスワードに %1 文字以上の単調な文字列が含まれています - + The password contains too long of a monotonic character sequence パスワードに限度を超えた単調な文字列が含まれています - + No password supplied パスワードがありません - + Cannot obtain random numbers from the RNG device RNGデバイスから乱数を取得できません - + Password generation failed - required entropy too low for settings パスワード生成に失敗 - 設定のためのエントロピーが低すぎます - + The password fails the dictionary check - %1 パスワードの辞書チェックに失敗しました - %1 - + The password fails the dictionary check パスワードの辞書チェックに失敗しました - + Unknown setting - %1 未設定- %1 - + Unknown setting 未設定 - + Bad integer value of setting - %1 不適切な設定値 - %1 - + Bad integer value 不適切な設定値 - + Setting %1 is not of integer type 設定値 %1 は整数ではありません - + Setting is not of integer type 設定値は整数ではありません - + Setting %1 is not of string type 設定値 %1 は文字列ではありません - + Setting is not of string type 設定値は文字列ではありません - + Opening the configuration file failed 設定ファイルが開けませんでした - + The configuration file is malformed 設定ファイルが不正な形式です - + Fatal failure 致命的な失敗 - + Unknown error 未知のエラー - + Password is empty パスワードが空です @@ -2529,67 +2535,67 @@ The installer will quit and all changes will be lost. PartitionViewStep - + Gathering system information... システム情報を取得しています... - + Partitions パーティション - + Install %1 <strong>alongside</strong> another operating system. 他のオペレーティングシステムに<strong>共存して</strong> %1 をインストール。 - + <strong>Erase</strong> disk and install %1. ディスクを<strong>消去</strong>し %1 をインストール。 - + <strong>Replace</strong> a partition with %1. パーティションを %1 に<strong>置き換える。</strong> - + <strong>Manual</strong> partitioning. <strong>手動</strong>でパーティションを設定する。 - + Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). ディスク <strong>%2</strong> (%3) 上ののオペレーティングシステムと<strong>共存</strong>して %1 をインストール。 - + <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. ディスク <strong>%2</strong> (%3) を<strong>消去して</strong> %1 をインストール。 - + <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. ディスク <strong>%2</strong> (%3) 上のパーティションを %1 に<strong>置き換える。</strong> - + <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). ディスク <strong>%1</strong> (%2) に <strong>手動で</strong>パーティショニングする。 - + Disk <strong>%1</strong> (%2) ディスク <strong>%1</strong> (%2) - + Current: 現在: - + After: 変更後: @@ -2634,12 +2640,12 @@ The installer will quit and all changes will be lost. ブートパーティションは暗号化されたルートパーティションとともにセットアップされましたが、ブートパーティションは暗号化されていません。<br/><br/>重要なシステムファイルが暗号化されていないパーティションに残されているため、このようなセットアップは安全上の懸念があります。<br/>セットアップを続行することはできますが、後でシステムの起動中にファイルシステムが解除されるおそれがあります。<br/>ブートパーティションを暗号化させるには、前の画面に戻って、再度パーティションを作成し、パーティション作成ウィンドウ内で<strong>Encrypt</strong> (暗号化) を選択してください。 - + has at least one disk device available. 少なくとも1枚のディスクは使用可能。 - + There are no partitions to install on. インストールするパーティションがありません。 @@ -3547,17 +3553,17 @@ Output: UsersPage - + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>もし複数の人間がこのコンピュータを使用する場合、セットアップの後で複数のアカウントを作成できます。</small> - + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> <small>もし複数の人間がこのコンピュータを使用する場合、インストールの後で複数のアカウントを作成できます。</small> - + Your passwords do not match! パスワードが一致していません! @@ -3565,7 +3571,7 @@ Output: UsersViewStep - + Users ユーザー情報 @@ -3856,7 +3862,7 @@ Output: localeq - + Change 変更 diff --git a/lang/calamares_kk.ts b/lang/calamares_kk.ts index 7edbe0c44e..989c9891a7 100644 --- a/lang/calamares_kk.ts +++ b/lang/calamares_kk.ts @@ -507,134 +507,134 @@ The installer will quit and all changes will be lost. - + Select storage de&vice: - - - - + + + + Current: - + After: - + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. - + Reuse %1 as home partition for %2. - + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> - + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. - + Boot loader location: - + <strong>Select a partition to install on</strong> - + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. - + The EFI system partition at %1 will be used for starting %2. - + EFI system partition: EFI жүйелік бөлімі: - + This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. - - - - + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. - - - - + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. - - - - + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. - + This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. - + This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. - + This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. - + No Swap - + Reuse Swap - + Swap (no Hibernate) - + Swap (with Hibernate) - + Swap to file @@ -712,17 +712,17 @@ The installer will quit and all changes will be lost. - + Set timezone to %1/%2. - + The system language will be set to %1. - + The numbers and dates locale will be set to %1. @@ -792,42 +792,42 @@ The installer will quit and all changes will be lost. - + Your username is too long. - + '%1' is not allowed as username. - + Your username must start with a lowercase letter or underscore. - + Only lowercase letters, numbers, underscore and hyphen are allowed. - + Your hostname is too short. - + Your hostname is too long. - + '%1' is not allowed as hostname. - + Only letters, numbers, underscore and hyphen are allowed. @@ -1248,7 +1248,8 @@ The installer will quit and all changes will be lost. - + + Please enter the same passphrase in both boxes. @@ -1700,18 +1701,18 @@ The installer will quit and all changes will be lost. LocalePage - + Region: - + Zone: - - + + &Change... @@ -1789,7 +1790,12 @@ The installer will quit and all changes will be lost. Map - + + Timezone: %1 + + + + Please select your preferred location on the map so the installer can suggest the locale and timezone settings for you. You can fine-tune the suggested settings below. Search the map by dragging to move and using the +/- buttons to zoom in/out or use mouse scrolling for zooming. @@ -1950,247 +1956,247 @@ The installer will quit and all changes will be lost. PWQ - + Password is too short - + Password is too long - + Password is too weak - + Memory allocation error when setting '%1' - + Memory allocation error - + The password is the same as the old one - + The password is a palindrome - + The password differs with case changes only - + The password is too similar to the old one - + The password contains the user name in some form - + The password contains words from the real name of the user in some form - + The password contains forbidden words in some form - + The password contains less than %1 digits - + The password contains too few digits - + The password contains less than %1 uppercase letters - + The password contains too few uppercase letters - + The password contains less than %1 lowercase letters - + The password contains too few lowercase letters - + The password contains less than %1 non-alphanumeric characters - + The password contains too few non-alphanumeric characters - + The password is shorter than %1 characters - + The password is too short - + The password is just rotated old one - + The password contains less than %1 character classes - + The password does not contain enough character classes - + The password contains more than %1 same characters consecutively - + The password contains too many same characters consecutively - + The password contains more than %1 characters of the same class consecutively - + The password contains too many characters of the same class consecutively - + The password contains monotonic sequence longer than %1 characters - + The password contains too long of a monotonic character sequence - + No password supplied - + Cannot obtain random numbers from the RNG device - + Password generation failed - required entropy too low for settings - + The password fails the dictionary check - %1 - + The password fails the dictionary check - + Unknown setting - %1 - + Unknown setting - + Bad integer value of setting - %1 - + Bad integer value - + Setting %1 is not of integer type - + Setting is not of integer type - + Setting %1 is not of string type - + Setting is not of string type - + Opening the configuration file failed - + The configuration file is malformed - + Fatal failure - + Unknown error - + Password is empty @@ -2524,67 +2530,67 @@ The installer will quit and all changes will be lost. PartitionViewStep - + Gathering system information... - + Partitions - + Install %1 <strong>alongside</strong> another operating system. - + <strong>Erase</strong> disk and install %1. - + <strong>Replace</strong> a partition with %1. - + <strong>Manual</strong> partitioning. - + Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). - + <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. - + <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. - + <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). - + Disk <strong>%1</strong> (%2) - + Current: - + After: @@ -2629,12 +2635,12 @@ The installer will quit and all changes will be lost. - + has at least one disk device available. - + There are no partitions to install on. @@ -3536,17 +3542,17 @@ Output: UsersPage - + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> - + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> - + Your passwords do not match! @@ -3554,7 +3560,7 @@ Output: UsersViewStep - + Users Пайдаланушылар @@ -3832,7 +3838,7 @@ Output: localeq - + Change diff --git a/lang/calamares_kn.ts b/lang/calamares_kn.ts index 74ee0833c8..9970a67de9 100644 --- a/lang/calamares_kn.ts +++ b/lang/calamares_kn.ts @@ -507,134 +507,134 @@ The installer will quit and all changes will be lost. - + Select storage de&vice: - - - - + + + + Current: ಪ್ರಸಕ್ತ: - + After: - + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. - + Reuse %1 as home partition for %2. - + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> - + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. - + Boot loader location: - + <strong>Select a partition to install on</strong> - + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. - + The EFI system partition at %1 will be used for starting %2. - + EFI system partition: - + This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. - - - - + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. - - - - + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. - - - - + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. - + This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. - + This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. - + This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. - + No Swap - + Reuse Swap - + Swap (no Hibernate) - + Swap (with Hibernate) - + Swap to file @@ -712,17 +712,17 @@ The installer will quit and all changes will be lost. - + Set timezone to %1/%2. - + The system language will be set to %1. - + The numbers and dates locale will be set to %1. @@ -792,42 +792,42 @@ The installer will quit and all changes will be lost. - + Your username is too long. - + '%1' is not allowed as username. - + Your username must start with a lowercase letter or underscore. - + Only lowercase letters, numbers, underscore and hyphen are allowed. - + Your hostname is too short. - + Your hostname is too long. - + '%1' is not allowed as hostname. - + Only letters, numbers, underscore and hyphen are allowed. @@ -1248,7 +1248,8 @@ The installer will quit and all changes will be lost. - + + Please enter the same passphrase in both boxes. @@ -1700,18 +1701,18 @@ The installer will quit and all changes will be lost. LocalePage - + Region: - + Zone: - - + + &Change... @@ -1789,7 +1790,12 @@ The installer will quit and all changes will be lost. Map - + + Timezone: %1 + + + + Please select your preferred location on the map so the installer can suggest the locale and timezone settings for you. You can fine-tune the suggested settings below. Search the map by dragging to move and using the +/- buttons to zoom in/out or use mouse scrolling for zooming. @@ -1950,247 +1956,247 @@ The installer will quit and all changes will be lost. PWQ - + Password is too short - + Password is too long - + Password is too weak - + Memory allocation error when setting '%1' - + Memory allocation error - + The password is the same as the old one - + The password is a palindrome - + The password differs with case changes only - + The password is too similar to the old one - + The password contains the user name in some form - + The password contains words from the real name of the user in some form - + The password contains forbidden words in some form - + The password contains less than %1 digits - + The password contains too few digits - + The password contains less than %1 uppercase letters - + The password contains too few uppercase letters - + The password contains less than %1 lowercase letters - + The password contains too few lowercase letters - + The password contains less than %1 non-alphanumeric characters - + The password contains too few non-alphanumeric characters - + The password is shorter than %1 characters - + The password is too short - + The password is just rotated old one - + The password contains less than %1 character classes - + The password does not contain enough character classes - + The password contains more than %1 same characters consecutively - + The password contains too many same characters consecutively - + The password contains more than %1 characters of the same class consecutively - + The password contains too many characters of the same class consecutively - + The password contains monotonic sequence longer than %1 characters - + The password contains too long of a monotonic character sequence - + No password supplied - + Cannot obtain random numbers from the RNG device - + Password generation failed - required entropy too low for settings - + The password fails the dictionary check - %1 - + The password fails the dictionary check - + Unknown setting - %1 - + Unknown setting - + Bad integer value of setting - %1 - + Bad integer value - + Setting %1 is not of integer type - + Setting is not of integer type - + Setting %1 is not of string type - + Setting is not of string type - + Opening the configuration file failed - + The configuration file is malformed - + Fatal failure - + Unknown error - + Password is empty @@ -2524,67 +2530,67 @@ The installer will quit and all changes will be lost. PartitionViewStep - + Gathering system information... - + Partitions - + Install %1 <strong>alongside</strong> another operating system. - + <strong>Erase</strong> disk and install %1. - + <strong>Replace</strong> a partition with %1. - + <strong>Manual</strong> partitioning. - + Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). - + <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. - + <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. - + <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). - + Disk <strong>%1</strong> (%2) - + Current: ಪ್ರಸಕ್ತ: - + After: @@ -2629,12 +2635,12 @@ The installer will quit and all changes will be lost. - + has at least one disk device available. - + There are no partitions to install on. @@ -3536,17 +3542,17 @@ Output: UsersPage - + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> - + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> - + Your passwords do not match! @@ -3554,7 +3560,7 @@ Output: UsersViewStep - + Users @@ -3832,7 +3838,7 @@ Output: localeq - + Change diff --git a/lang/calamares_ko.ts b/lang/calamares_ko.ts index b39d728dae..a205052118 100644 --- a/lang/calamares_ko.ts +++ b/lang/calamares_ko.ts @@ -508,134 +508,134 @@ The installer will quit and all changes will be lost. 형식 - + Select storage de&vice: 저장 장치 선택 (&v) - - - - + + + + Current: 현재: - + After: 이후: - + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. <strong>수동 파티션 작업</strong><br/>직접 파티션을 만들거나 크기를 조정할 수 있습니다. - + Reuse %1 as home partition for %2. %2의 홈 파티션으로 %1을 재사용합니다. - + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> <strong>축소할 파티션을 선택한 다음 하단 막대를 끌어 크기를 조정합니다.</strong> - + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. %1이 %2MiB로 축소되고 %4에 대해 새 %3MiB 파티션이 생성됩니다. - + Boot loader location: 부트 로더 위치 : - + <strong>Select a partition to install on</strong> <strong>설치할 파티션을 선택합니다.</strong> - + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. 이 시스템에서는 EFI 시스템 파티션을 찾을 수 없습니다. 돌아가서 수동 파티션 작업을 사용하여 %1을 설정하세요. - + The EFI system partition at %1 will be used for starting %2. %1의 EFI 시스템 파티션은 %2의 시작으로 사용될 것입니다. - + EFI system partition: EFI 시스템 파티션: - + This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. 이 저장 장치에는 운영 체제가없는 것 같습니다. 무엇을하고 싶으십니까?<br/>저장 장치를 변경하기 전에 선택 사항을 검토하고 확인할 수 있습니다. - - - - + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>디스크 지우기</strong><br/>그러면 선택한 저장 장치에 현재 있는 모든 데이터가 <font color="red">삭제</font>됩니다. - - - - + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>함께 설치</strong><br/>설치 관리자가 파티션을 축소하여 %1 공간을 확보합니다. - - - - + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>파티션 바꾸기</strong><br/>파티션을 %1로 바꿉니다. - + This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. 이 저장 장치에 %1이 있습니다. 무엇을하고 싶으십니까?<br/>저장 장치를 변경하기 전에 선택 사항을 검토하고 확인할 수 있습니다. - + This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. 이 저장 장치에는 이미 운영 체제가 있습니다. 무엇을하고 싶으십니까?<br/>저장 장치를 변경하기 전에 선택 사항을 검토하고 확인할 수 있습니다. - + This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. 이 저장 장치에는 여러 개의 운영 체제가 있습니다. 무엇을하고 싶으십니까?<br/>저장 장치를 변경하기 전에 선택 사항을 검토하고 확인할 수 있습니다. - + No Swap 스왑 없음 - + Reuse Swap 스왑 재사용 - + Swap (no Hibernate) 스왑 (최대 절전모드 아님) - + Swap (with Hibernate) 스왑 (최대 절전모드 사용) - + Swap to file 파일로 스왑 @@ -713,17 +713,17 @@ The installer will quit and all changes will be lost. 키보드 레이아웃을 %1/%2로 설정합니다. - + Set timezone to %1/%2. - + The system language will be set to %1. 시스템 언어가 %1로 설정됩니다. - + The numbers and dates locale will be set to %1. 숫자와 날짜 로케일이 %1로 설정됩니다. @@ -793,42 +793,42 @@ The installer will quit and all changes will be lost. - + Your username is too long. 사용자 이름이 너무 깁니다. - + '%1' is not allowed as username. - + Your username must start with a lowercase letter or underscore. 사용자 이름은 소문자 또는 밑줄로 시작해야 합니다. - + Only lowercase letters, numbers, underscore and hyphen are allowed. 소문자, 숫자, 밑줄 및 하이픈만 허용됩니다. - + Your hostname is too short. 호스트 이름이 너무 짧습니다. - + Your hostname is too long. 호스트 이름이 너무 깁니다. - + '%1' is not allowed as hostname. - + Only letters, numbers, underscore and hyphen are allowed. 문자, 숫자, 밑줄 및 하이픈만 허용됩니다. @@ -1249,7 +1249,8 @@ The installer will quit and all changes will be lost. 암호 확인 - + + Please enter the same passphrase in both boxes. 암호와 암호 확인 상자에 동일한 값을 입력해주세요. @@ -1701,18 +1702,18 @@ The installer will quit and all changes will be lost. LocalePage - + Region: 지역 : - + Zone: 표준시간대 : - - + + &Change... 변경 (&C)... @@ -1790,7 +1791,12 @@ The installer will quit and all changes will be lost. Map - + + Timezone: %1 + + + + Please select your preferred location on the map so the installer can suggest the locale and timezone settings for you. You can fine-tune the suggested settings below. Search the map by dragging to move and using the +/- buttons to zoom in/out or use mouse scrolling for zooming. @@ -1951,247 +1957,247 @@ The installer will quit and all changes will be lost. PWQ - + Password is too short 암호가 너무 짧습니다 - + Password is too long 암호가 너무 깁니다 - + Password is too weak 암호가 너무 취약합니다 - + Memory allocation error when setting '%1' '%1'을 설정하는 중 메모리 할당 오류 - + Memory allocation error 메모리 할당 오류 - + The password is the same as the old one 암호가 이전과 같습니다 - + The password is a palindrome 암호가 앞뒤로 동일해 보이는 단어입니다 - + The password differs with case changes only 암호가 대소문자만 다릅니다 - + The password is too similar to the old one 암호가 이전 암호와 너무 유사합니다 - + The password contains the user name in some form 암호가 사용자 이름의 일부를 포함하고 있습니다. - + The password contains words from the real name of the user in some form 암호가 사용자 실명의 일부를 포함하고 있습니다 - + The password contains forbidden words in some form 암호가 금지된 단어를 포함하고 있습니다 - + The password contains less than %1 digits 암호가 %1개 미만의 숫자를 포함하고 있습니다 - + The password contains too few digits 암호가 너무 적은 개수의 숫자들을 포함하고 있습니다 - + The password contains less than %1 uppercase letters 암호가 %1개 미만의 대문자를 포함하고 있습니다 - + The password contains too few uppercase letters 암호가 너무 적은 개수의 대문자를 포함하고 있습니다 - + The password contains less than %1 lowercase letters 암호가 %1개 미만의 소문자를 포함하고 있습니다 - + The password contains too few lowercase letters 암호가 너무 적은 개수의 소문자를 포함하고 있습니다 - + The password contains less than %1 non-alphanumeric characters 암호가 %1개 미만의 영숫자가 아닌 문자를 포함하고 있습니다 - + The password contains too few non-alphanumeric characters 암호가 너무 적은 개수의 영숫자가 아닌 문자를 포함하고 있습니다 - + The password is shorter than %1 characters 암호가 %1 문자보다 짧습니다 - + The password is too short 암호가 너무 짧습니다 - + The password is just rotated old one 암호가 이전 암호로 바뀌었습니다 - + The password contains less than %1 character classes 암호에 포함된 문자 클래스가 %1개 미만입니다 - + The password does not contain enough character classes 암호에 문자 클래스가 충분하지 않습니다 - + The password contains more than %1 same characters consecutively 암호에 동일 문자가 %1개 이상 연속해 있습니다 - + The password contains too many same characters consecutively 암호에 너무 많은 동일 문자가 연속해 있습니다 - + The password contains more than %1 characters of the same class consecutively 암호에 동일 문자 클래스가 %1개 이상 연속해 있습니다. - + The password contains too many characters of the same class consecutively 암호에 동일 문자 클래스가 너무 많이 연속해 있습니다. - + The password contains monotonic sequence longer than %1 characters 암호에 %1개 이상의 단순 문자열이 포함되어 있습니다 - + The password contains too long of a monotonic character sequence 암호에 너무 길게 단순 문자열이 포함되어 있습니다 - + No password supplied 암호가 제공 되지 않음 - + Cannot obtain random numbers from the RNG device RNG 장치에서 임의의 번호를 가져올 수 없습니다. - + Password generation failed - required entropy too low for settings 암호 생성 실패 - 설정에 필요한 엔트로피가 너무 작음 - + The password fails the dictionary check - %1 암호가 사전 검사에 실패했습니다 - %1 - + The password fails the dictionary check 암호가 사전 검사에 실패했습니다. - + Unknown setting - %1 설정되지 않음 - %1 - + Unknown setting 설정되지 않음 - + Bad integer value of setting - %1 설정의 잘못된 정수 값 - %1 - + Bad integer value 잘못된 정수 값 - + Setting %1 is not of integer type 설정값 %1은 정수 유형이 아닙니다. - + Setting is not of integer type 설정값이 정수 형식이 아닙니다 - + Setting %1 is not of string type 설정값 %1은 문자열 유형이 아닙니다. - + Setting is not of string type 설정값이 문자열 유형이 아닙니다. - + Opening the configuration file failed 구성 파일을 열지 못했습니다. - + The configuration file is malformed 구성 파일의 형식이 잘못되었습니다. - + Fatal failure 치명적인 실패 - + Unknown error 알 수 없는 오류 - + Password is empty 비밀번호가 비어 있습니다 @@ -2525,67 +2531,67 @@ The installer will quit and all changes will be lost. PartitionViewStep - + Gathering system information... 시스템 정보 수집 중... - + Partitions 파티션 - + Install %1 <strong>alongside</strong> another operating system. %1을 다른 운영 체제와 <strong>함께</strong> 설치합니다. - + <strong>Erase</strong> disk and install %1. 디스크를 <strong>지우고</strong> %1을 설치합니다. - + <strong>Replace</strong> a partition with %1. 파티션을 %1로 <strong>바꿉니다</strong>. - + <strong>Manual</strong> partitioning. <strong>수동</strong> 파티션 작업 - + Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). 디스크 <strong>%2</strong> (%3)에 다른 운영 체제와 <strong>함께</strong> %1을 설치합니다. - + <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. 디스크 <strong>%2</strong> (%3)를 <strong>지우고</strong> %1을 설치합니다. - + <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. 디스크 <strong>%2</strong> (%3)의 파티션을 %1로 <strong>바꿉니다</strong>. - + <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). 디스크 <strong>%1</strong> (%2) 의 <strong>수동</strong> 파티션 작업입니다. - + Disk <strong>%1</strong> (%2) 디스크 <strong>%1</strong> (%2) - + Current: 현재: - + After: 이후: @@ -2630,12 +2636,12 @@ The installer will quit and all changes will be lost. 암호화된 루트 파티션과 함께 별도의 부팅 파티션이 설정되었지만 부팅 파티션은 암호화되지 않았습니다.<br/><br/>중요한 시스템 파일은 암호화되지 않은 파티션에 보관되기 때문에 이러한 설정과 관련하여 보안 문제가 있습니다.<br/>원하는 경우 계속할 수 있지만 나중에 시스템을 시작하는 동안 파일 시스템 잠금이 해제됩니다.<br/>부팅 파티션을 암호화하려면 돌아가서 다시 생성하여 파티션 생성 창에서 <strong>암호화</strong>를 선택합니다. - + has at least one disk device available. 하나 이상의 디스크 장치를 사용할 수 있습니다. - + There are no partitions to install on. 설치를 위한 파티션이 없습니다. @@ -3540,17 +3546,17 @@ Output: UsersPage - + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>둘 이상의 사용자가 이 컴퓨터를 사용할 경우, 설정 후 계정을 여러 개 만들 수 있습니다.</small> - + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> <small>둘 이상의 사용자가 이 컴퓨터를 사용할 경우 설치 후 계정을 여러 개 만들 수 있습니다.</small> - + Your passwords do not match! 암호가 일치하지 않습니다! @@ -3558,7 +3564,7 @@ Output: UsersViewStep - + Users 사용자 @@ -3847,7 +3853,7 @@ Output: localeq - + Change diff --git a/lang/calamares_lo.ts b/lang/calamares_lo.ts index 0c2b4d224e..e1510837f7 100644 --- a/lang/calamares_lo.ts +++ b/lang/calamares_lo.ts @@ -505,134 +505,134 @@ The installer will quit and all changes will be lost. - + Select storage de&vice: - - - - + + + + Current: - + After: - + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. - + Reuse %1 as home partition for %2. - + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> - + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. - + Boot loader location: - + <strong>Select a partition to install on</strong> - + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. - + The EFI system partition at %1 will be used for starting %2. - + EFI system partition: - + This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. - - - - + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. - - - - + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. - - - - + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. - + This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. - + This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. - + This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. - + No Swap - + Reuse Swap - + Swap (no Hibernate) - + Swap (with Hibernate) - + Swap to file @@ -710,17 +710,17 @@ The installer will quit and all changes will be lost. - + Set timezone to %1/%2. - + The system language will be set to %1. - + The numbers and dates locale will be set to %1. @@ -790,42 +790,42 @@ The installer will quit and all changes will be lost. - + Your username is too long. - + '%1' is not allowed as username. - + Your username must start with a lowercase letter or underscore. - + Only lowercase letters, numbers, underscore and hyphen are allowed. - + Your hostname is too short. - + Your hostname is too long. - + '%1' is not allowed as hostname. - + Only letters, numbers, underscore and hyphen are allowed. @@ -1246,7 +1246,8 @@ The installer will quit and all changes will be lost. - + + Please enter the same passphrase in both boxes. @@ -1698,18 +1699,18 @@ The installer will quit and all changes will be lost. LocalePage - + Region: - + Zone: - - + + &Change... @@ -1787,7 +1788,12 @@ The installer will quit and all changes will be lost. Map - + + Timezone: %1 + + + + Please select your preferred location on the map so the installer can suggest the locale and timezone settings for you. You can fine-tune the suggested settings below. Search the map by dragging to move and using the +/- buttons to zoom in/out or use mouse scrolling for zooming. @@ -1948,247 +1954,247 @@ The installer will quit and all changes will be lost. PWQ - + Password is too short - + Password is too long - + Password is too weak - + Memory allocation error when setting '%1' - + Memory allocation error - + The password is the same as the old one - + The password is a palindrome - + The password differs with case changes only - + The password is too similar to the old one - + The password contains the user name in some form - + The password contains words from the real name of the user in some form - + The password contains forbidden words in some form - + The password contains less than %1 digits - + The password contains too few digits - + The password contains less than %1 uppercase letters - + The password contains too few uppercase letters - + The password contains less than %1 lowercase letters - + The password contains too few lowercase letters - + The password contains less than %1 non-alphanumeric characters - + The password contains too few non-alphanumeric characters - + The password is shorter than %1 characters - + The password is too short - + The password is just rotated old one - + The password contains less than %1 character classes - + The password does not contain enough character classes - + The password contains more than %1 same characters consecutively - + The password contains too many same characters consecutively - + The password contains more than %1 characters of the same class consecutively - + The password contains too many characters of the same class consecutively - + The password contains monotonic sequence longer than %1 characters - + The password contains too long of a monotonic character sequence - + No password supplied - + Cannot obtain random numbers from the RNG device - + Password generation failed - required entropy too low for settings - + The password fails the dictionary check - %1 - + The password fails the dictionary check - + Unknown setting - %1 - + Unknown setting - + Bad integer value of setting - %1 - + Bad integer value - + Setting %1 is not of integer type - + Setting is not of integer type - + Setting %1 is not of string type - + Setting is not of string type - + Opening the configuration file failed - + The configuration file is malformed - + Fatal failure - + Unknown error - + Password is empty @@ -2522,67 +2528,67 @@ The installer will quit and all changes will be lost. PartitionViewStep - + Gathering system information... - + Partitions - + Install %1 <strong>alongside</strong> another operating system. - + <strong>Erase</strong> disk and install %1. - + <strong>Replace</strong> a partition with %1. - + <strong>Manual</strong> partitioning. - + Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). - + <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. - + <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. - + <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). - + Disk <strong>%1</strong> (%2) - + Current: - + After: @@ -2627,12 +2633,12 @@ The installer will quit and all changes will be lost. - + has at least one disk device available. - + There are no partitions to install on. @@ -3534,17 +3540,17 @@ Output: UsersPage - + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> - + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> - + Your passwords do not match! @@ -3552,7 +3558,7 @@ Output: UsersViewStep - + Users @@ -3830,7 +3836,7 @@ Output: localeq - + Change diff --git a/lang/calamares_lt.ts b/lang/calamares_lt.ts index 2b3e6cb269..b7a48772ae 100644 --- a/lang/calamares_lt.ts +++ b/lang/calamares_lt.ts @@ -514,134 +514,134 @@ Diegimo programa užbaigs darbą ir visi pakeitimai bus prarasti. Forma - + Select storage de&vice: Pasirinkite atminties įr&enginį: - - - - + + + + Current: Dabartinis: - + After: Po: - + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. <strong>Rankinis skaidymas</strong><br/>Galite patys kurti ar keisti skaidinių dydžius. - + Reuse %1 as home partition for %2. Pakartotinai naudoti %1 kaip namų skaidinį, skirtą %2. - + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> <strong>Pasirinkite, kurį skaidinį sumažinti, o tuomet vilkite juostą, kad pakeistumėte skaidinio dydį</strong> - + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. %1 bus sumažintas iki %2MiB ir naujas %3MiB skaidinys bus sukurtas sistemai %4. - + Boot loader location: Paleidyklės vieta: - + <strong>Select a partition to install on</strong> <strong>Pasirinkite kuriame skaidinyje įdiegti</strong> - + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. Šioje sistemoje niekur nepavyko rasti EFI skaidinio. Prašome grįžti ir naudoti rankinį skaidymą, kad nustatytumėte %1. - + The EFI system partition at %1 will be used for starting %2. %2 paleidimui bus naudojamas EFI sistemos skaidinys, esantis ties %1. - + EFI system partition: EFI sistemos skaidinys: - + This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Atrodo, kad šiame įrenginyje nėra operacinės sistemos. Ką norėtumėte daryti?<br/>Prieš atliekant bet kokius pakeitimus atminties įrenginyje, jūs galėsite apžvelgti ir patvirtinti savo pasirinkimus. - - - - + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>Ištrinti diską</strong><br/>Tai <font color="red">ištrins</font> visus, pasirinktame atminties įrenginyje, esančius duomenis. - - - - + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Įdiegti šalia</strong><br/>Diegimo programa sumažins skaidinį, kad atlaisvintų vietą sistemai %1. - - - - + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>Pakeisti skaidinį</strong><br/>Pakeičia skaidinį ir įrašo %1. - + This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Šiame atminties įrenginyje jau yra %1. Ką norėtumėte daryti?<br/>Prieš atliekant bet kokius pakeitimus atminties įrenginyje, jūs galėsite apžvelgti ir patvirtinti savo pasirinkimus. - + This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Šiame atminties įrenginyje jau yra operacinė sistema. Ką norėtumėte daryti?<br/>Prieš atliekant bet kokius pakeitimus atminties įrenginyje, jūs galėsite apžvelgti ir patvirtinti savo pasirinkimus. - + This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Šiame atminties įrenginyje jau yra kelios operacinės sistemos. Ką norėtumėte daryti?<br/>Prieš atliekant bet kokius pakeitimus atminties įrenginyje, jūs galėsite apžvelgti ir patvirtinti savo pasirinkimus. - + No Swap Be sukeitimų skaidinio - + Reuse Swap Iš naujo naudoti sukeitimų skaidinį - + Swap (no Hibernate) Sukeitimų skaidinys (be užmigdymo) - + Swap (with Hibernate) Sukeitimų skaidinys (su užmigdymu) - + Swap to file Sukeitimų failas @@ -719,17 +719,17 @@ Diegimo programa užbaigs darbą ir visi pakeitimai bus prarasti. Nustatyti klaviatūros išdėstymą kaip %1/%2. - + Set timezone to %1/%2. - + Nustatyti laiko juostą į %1/%2. - + The system language will be set to %1. Sistemos kalba bus nustatyta į %1. - + The numbers and dates locale will be set to %1. Skaičių ir datų lokalė bus nustatyta į %1. @@ -799,42 +799,42 @@ Diegimo programa užbaigs darbą ir visi pakeitimai bus prarasti. <h1>Jus sveikina %1 diegimo programa</h1> - + Your username is too long. Jūsų naudotojo vardas yra pernelyg ilgas. - + '%1' is not allowed as username. - + Your username must start with a lowercase letter or underscore. Jūsų naudotojo vardas privalo prasidėti mažąja raide arba pabraukimo brūkšniu. - + Only lowercase letters, numbers, underscore and hyphen are allowed. Yra leidžiamos tik mažosios raidės, skaitmenys, pabraukimo brūkšniai ir brūkšneliai. - + Your hostname is too short. Jūsų kompiuterio vardas yra pernelyg trumpas. - + Your hostname is too long. Jūsų kompiuterio vardas yra pernelyg ilgas. - + '%1' is not allowed as hostname. - + Only letters, numbers, underscore and hyphen are allowed. Yra leidžiamos tik raidės, skaitmenys, pabraukimo brūkšniai ir brūkšneliai. @@ -1255,7 +1255,8 @@ Diegimo programa užbaigs darbą ir visi pakeitimai bus prarasti. Patvirtinkite slaptafrazę - + + Please enter the same passphrase in both boxes. Prašome abiejuose langeliuose įrašyti tą pačią slaptafrazę. @@ -1707,18 +1708,18 @@ Diegimo programa užbaigs darbą ir visi pakeitimai bus prarasti. LocalePage - + Region: Regionas: - + Zone: Zona: - - + + &Change... K&eisti... @@ -1796,7 +1797,12 @@ Diegimo programa užbaigs darbą ir visi pakeitimai bus prarasti. Map - + + Timezone: %1 + Laiko juosta: %1 + + + Please select your preferred location on the map so the installer can suggest the locale and timezone settings for you. You can fine-tune the suggested settings below. Search the map by dragging to move and using the +/- buttons to zoom in/out or use mouse scrolling for zooming. @@ -1946,7 +1952,7 @@ Diegimo programa užbaigs darbą ir visi pakeitimai bus prarasti. Timezone: %1 - + Laiko juosta: %1 @@ -1957,247 +1963,247 @@ Diegimo programa užbaigs darbą ir visi pakeitimai bus prarasti. PWQ - + Password is too short Slaptažodis yra per trumpas - + Password is too long Slaptažodis yra per ilgas - + Password is too weak Slaptažodis yra per silpnas - + Memory allocation error when setting '%1' Atminties paskirstymo klaida, nustatant "%1" - + Memory allocation error Atminties paskirstymo klaida - + The password is the same as the old one Slaptažodis yra toks pats kaip ir senas - + The password is a palindrome Slaptažodis yra palindromas - + The password differs with case changes only Slaptažodyje skiriasi tik raidžių dydis - + The password is too similar to the old one Slaptažodis pernelyg panašus į senąjį - + The password contains the user name in some form Slaptažodyje tam tikru pavidalu yra naudotojo vardas - + The password contains words from the real name of the user in some form Slaptažodyje tam tikra forma yra žodžiai iš tikrojo naudotojo vardo - + The password contains forbidden words in some form Slaptažodyje tam tikra forma yra uždrausti žodžiai - + The password contains less than %1 digits Slaptažodyje yra mažiau nei %1 skaitmenys - + The password contains too few digits Slaptažodyje yra per mažai skaitmenų - + The password contains less than %1 uppercase letters Slaptažodyje yra mažiau nei %1 didžiosios raidės - + The password contains too few uppercase letters Slaptažodyje yra per mažai didžiųjų raidžių - + The password contains less than %1 lowercase letters Slaptažodyje yra mažiau nei %1 mažosios raidės - + The password contains too few lowercase letters Slaptažodyje yra per mažai mažųjų raidžių - + The password contains less than %1 non-alphanumeric characters Slaptažodyje yra mažiau nei %1 neraidiniai ir neskaitiniai simboliai - + The password contains too few non-alphanumeric characters Slaptažodyje yra per mažai neraidinių ir neskaitinių simbolių - + The password is shorter than %1 characters Slaptažodyje yra mažiau nei %1 simboliai - + The password is too short Slaptažodis yra per trumpas - + The password is just rotated old one Slaptažodis yra toks pats kaip ir senas, tik apverstas - + The password contains less than %1 character classes Slaptažodyje yra mažiau nei %1 simbolių klasės - + The password does not contain enough character classes Slaptažodyje nėra pakankamai simbolių klasių - + The password contains more than %1 same characters consecutively Slaptažodyje yra daugiau nei %1 tokie patys simboliai iš eilės - + The password contains too many same characters consecutively Slaptažodyje yra per daug tokių pačių simbolių iš eilės - + The password contains more than %1 characters of the same class consecutively Slaptažodyje yra daugiau nei %1 tos pačios klasės simboliai iš eilės - + The password contains too many characters of the same class consecutively Slaptažodyje yra per daug tos pačios klasės simbolių iš eilės - + The password contains monotonic sequence longer than %1 characters Slaptažodyje yra ilgesnė nei %1 simbolių monotoninė seka - + The password contains too long of a monotonic character sequence Slaptažodyje yra per ilga monotoninių simbolių seka - + No password supplied Nepateiktas joks slaptažodis - + Cannot obtain random numbers from the RNG device Nepavyksta gauti atsitiktinių skaičių iš RNG įrenginio - + Password generation failed - required entropy too low for settings Slaptažodžio generavimas nepavyko - reikalinga entropija nustatymams yra per maža - + The password fails the dictionary check - %1 Slaptažodis nepraeina žodyno patikros - %1 - + The password fails the dictionary check Slaptažodis nepraeina žodyno patikros - + Unknown setting - %1 Nežinomas nustatymas - %1 - + Unknown setting Nežinomas nustatymas - + Bad integer value of setting - %1 Bloga nustatymo sveikojo skaičiaus reikšmė - %1 - + Bad integer value Bloga sveikojo skaičiaus reikšmė - + Setting %1 is not of integer type Nustatymas %1 nėra sveikojo skaičiaus tipo - + Setting is not of integer type Nustatymas nėra sveikojo skaičiaus tipo - + Setting %1 is not of string type Nustatymas %1 nėra eilutės tipo - + Setting is not of string type Nustatymas nėra eilutės tipo - + Opening the configuration file failed Konfigūracijos failo atvėrimas nepavyko - + The configuration file is malformed Konfigūracijos failas yra netaisyklingas - + Fatal failure Lemtingoji klaida - + Unknown error Nežinoma klaida - + Password is empty Slaptažodis yra tuščias @@ -2531,67 +2537,67 @@ Diegimo programa užbaigs darbą ir visi pakeitimai bus prarasti. PartitionViewStep - + Gathering system information... Renkama sistemos informacija... - + Partitions Skaidiniai - + Install %1 <strong>alongside</strong> another operating system. Diegti %1 <strong>šalia</strong> kitos operacinės sistemos. - + <strong>Erase</strong> disk and install %1. <strong>Ištrinti</strong> diską ir diegti %1. - + <strong>Replace</strong> a partition with %1. <strong>Pakeisti</strong> skaidinį, įrašant %1. - + <strong>Manual</strong> partitioning. <strong>Rankinis</strong> skaidymas. - + Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). Įdiegti %1 <strong>šalia</strong> kitos operacinės sistemos diske <strong>%2</strong> (%3). - + <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. <strong>Ištrinti</strong> diską <strong>%2</strong> (%3) ir diegti %1. - + <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. <strong>Pakeisti</strong> skaidinį diske <strong>%2</strong> (%3), įrašant %1. - + <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). <strong>Rankinis</strong> skaidymas diske <strong>%1</strong> (%2). - + Disk <strong>%1</strong> (%2) Diskas <strong>%1</strong> (%2) - + Current: Dabartinis: - + After: Po: @@ -2636,12 +2642,12 @@ Diegimo programa užbaigs darbą ir visi pakeitimai bus prarasti. Kartu su užšifruotu šaknies skaidiniu, buvo nustatytas atskiras paleidimo skaidinys, tačiau paleidimo skaidinys nėra užšifruotas.<br/><br/>Dėl tokios sąrankos iškyla tam tikrų saugumo klausimų, kadangi svarbūs sisteminiai failai yra laikomi neužšifruotame skaidinyje.<br/>Jeigu norite, galite tęsti, tačiau failų sistemos atrakinimas įvyks vėliau, sistemos paleidimo metu.<br/>Norėdami užšifruoti paleidimo skaidinį, grįžkite atgal ir sukurkite jį iš naujo bei skaidinių kūrimo lange pažymėkite parinktį <strong>Užšifruoti</strong>. - + has at least one disk device available. turi bent vieną prieinamą disko įrenginį. - + There are no partitions to install on. Nėra skaidinių į kuriuos diegti. @@ -2856,7 +2862,8 @@ Išvestis: <p>This computer does not satisfy some of the recommended requirements for setting up %1.<br/> Setup can continue, but some features might be disabled.</p> - + <p>Šis kompiuteris netenkina kai kurių %1 nustatymui keliamų rekomenduojamų reikalavimų.<br/> + Sąranką galima tęsti, bet kai kurios ypatybės gali būti išjungtos.</p> @@ -2973,7 +2980,8 @@ Išvestis: <p>This computer does not satisfy some of the recommended requirements for setting up %1.<br/> Setup can continue, but some features might be disabled.</p> - + <p>Šis kompiuteris netenkina kai kurių %1 nustatymui keliamų rekomenduojamų reikalavimų.<br/> + Sąranką galima tęsti, bet kai kurios ypatybės gali būti išjungtos.</p> @@ -3439,28 +3447,28 @@ Išvestis: KDE user feedback - + KDE naudotojo grįžtamasis ryšys Configuring KDE user feedback. - + Konfigūruojamas KDE naudotojo grįžtamasis ryšys. Error in KDE user feedback configuration. - + Klaida KDE naudotojo grįžtamojo ryšio konfigūracijoje. Could not configure KDE user feedback correctly, script error %1. - + Nepavyko teisingai sukonfigūruoti KDE naudotojo grįžtamojo ryšio, scenarijaus klaida %1. Could not configure KDE user feedback correctly, Calamares error %1. - + Nepavyko teisingai sukonfigūruoti KDE naudotojo grįžtamojo ryšio, Calamares klaida %1. @@ -3522,12 +3530,12 @@ Išvestis: By selecting this you will send information about your installation and hardware. This information will only be sent <b>once</b> after the installation finishes. - + Tai pažymėdami, išsiųsite informaciją apie savo diegimą ir aparatinę įrangą. Ši informacija bus išsiųsta tik <b>vieną kartą</b>, užbaigus diegimą. By selecting this you will periodically send information about your <b>machine</b> installation, hardware and applications, to %1. - + Tai pažymėdami, jūs periodiškai siųsite informaciją apie savo <b>kompiuterio</b> diegimą, aparatinę įrangą ir programas į %1. @@ -3546,17 +3554,17 @@ Išvestis: UsersPage - + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>Jei šiuo kompiuteriu naudosis keli žmonės, po sąrankos galite sukurti papildomas paskyras.</small> - + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> <small>Jei šiuo kompiuteriu naudosis keli žmonės, po diegimo galite sukurti papildomas paskyras.</small> - + Your passwords do not match! Jūsų slaptažodžiai nesutampa! @@ -3564,7 +3572,7 @@ Išvestis: UsersViewStep - + Users Naudotojai @@ -3853,7 +3861,7 @@ Išvestis: localeq - + Change Keisti diff --git a/lang/calamares_lv.ts b/lang/calamares_lv.ts index cc6a789e98..739a530e23 100644 --- a/lang/calamares_lv.ts +++ b/lang/calamares_lv.ts @@ -509,134 +509,134 @@ The installer will quit and all changes will be lost. - + Select storage de&vice: - - - - + + + + Current: - + After: - + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. - + Reuse %1 as home partition for %2. - + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> - + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. - + Boot loader location: - + <strong>Select a partition to install on</strong> - + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. - + The EFI system partition at %1 will be used for starting %2. - + EFI system partition: - + This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. - - - - + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. - - - - + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. - - - - + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. - + This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. - + This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. - + This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. - + No Swap - + Reuse Swap - + Swap (no Hibernate) - + Swap (with Hibernate) - + Swap to file @@ -714,17 +714,17 @@ The installer will quit and all changes will be lost. - + Set timezone to %1/%2. - + The system language will be set to %1. - + The numbers and dates locale will be set to %1. @@ -794,42 +794,42 @@ The installer will quit and all changes will be lost. - + Your username is too long. - + '%1' is not allowed as username. - + Your username must start with a lowercase letter or underscore. - + Only lowercase letters, numbers, underscore and hyphen are allowed. - + Your hostname is too short. - + Your hostname is too long. - + '%1' is not allowed as hostname. - + Only letters, numbers, underscore and hyphen are allowed. @@ -1250,7 +1250,8 @@ The installer will quit and all changes will be lost. - + + Please enter the same passphrase in both boxes. @@ -1702,18 +1703,18 @@ The installer will quit and all changes will be lost. LocalePage - + Region: - + Zone: - - + + &Change... @@ -1791,7 +1792,12 @@ The installer will quit and all changes will be lost. Map - + + Timezone: %1 + + + + Please select your preferred location on the map so the installer can suggest the locale and timezone settings for you. You can fine-tune the suggested settings below. Search the map by dragging to move and using the +/- buttons to zoom in/out or use mouse scrolling for zooming. @@ -1952,247 +1958,247 @@ The installer will quit and all changes will be lost. PWQ - + Password is too short - + Password is too long - + Password is too weak - + Memory allocation error when setting '%1' - + Memory allocation error - + The password is the same as the old one - + The password is a palindrome - + The password differs with case changes only - + The password is too similar to the old one - + The password contains the user name in some form - + The password contains words from the real name of the user in some form - + The password contains forbidden words in some form - + The password contains less than %1 digits - + The password contains too few digits - + The password contains less than %1 uppercase letters - + The password contains too few uppercase letters - + The password contains less than %1 lowercase letters - + The password contains too few lowercase letters - + The password contains less than %1 non-alphanumeric characters - + The password contains too few non-alphanumeric characters - + The password is shorter than %1 characters - + The password is too short - + The password is just rotated old one - + The password contains less than %1 character classes - + The password does not contain enough character classes - + The password contains more than %1 same characters consecutively - + The password contains too many same characters consecutively - + The password contains more than %1 characters of the same class consecutively - + The password contains too many characters of the same class consecutively - + The password contains monotonic sequence longer than %1 characters - + The password contains too long of a monotonic character sequence - + No password supplied - + Cannot obtain random numbers from the RNG device - + Password generation failed - required entropy too low for settings - + The password fails the dictionary check - %1 - + The password fails the dictionary check - + Unknown setting - %1 - + Unknown setting - + Bad integer value of setting - %1 - + Bad integer value - + Setting %1 is not of integer type - + Setting is not of integer type - + Setting %1 is not of string type - + Setting is not of string type - + Opening the configuration file failed - + The configuration file is malformed - + Fatal failure - + Unknown error - + Password is empty @@ -2526,67 +2532,67 @@ The installer will quit and all changes will be lost. PartitionViewStep - + Gathering system information... - + Partitions - + Install %1 <strong>alongside</strong> another operating system. - + <strong>Erase</strong> disk and install %1. - + <strong>Replace</strong> a partition with %1. - + <strong>Manual</strong> partitioning. - + Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). - + <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. - + <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. - + <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). - + Disk <strong>%1</strong> (%2) - + Current: - + After: @@ -2631,12 +2637,12 @@ The installer will quit and all changes will be lost. - + has at least one disk device available. - + There are no partitions to install on. @@ -3538,17 +3544,17 @@ Output: UsersPage - + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> - + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> - + Your passwords do not match! @@ -3556,7 +3562,7 @@ Output: UsersViewStep - + Users @@ -3834,7 +3840,7 @@ Output: localeq - + Change diff --git a/lang/calamares_mk.ts b/lang/calamares_mk.ts index 36b7ec840b..d7264bcebe 100644 --- a/lang/calamares_mk.ts +++ b/lang/calamares_mk.ts @@ -507,134 +507,134 @@ The installer will quit and all changes will be lost. - + Select storage de&vice: - - - - + + + + Current: - + After: - + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. - + Reuse %1 as home partition for %2. - + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> - + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. - + Boot loader location: - + <strong>Select a partition to install on</strong> - + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. - + The EFI system partition at %1 will be used for starting %2. - + EFI system partition: - + This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. - - - - + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. - - - - + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. - - - - + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. - + This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. - + This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. - + This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. - + No Swap - + Reuse Swap - + Swap (no Hibernate) - + Swap (with Hibernate) - + Swap to file @@ -712,17 +712,17 @@ The installer will quit and all changes will be lost. - + Set timezone to %1/%2. - + The system language will be set to %1. - + The numbers and dates locale will be set to %1. @@ -792,42 +792,42 @@ The installer will quit and all changes will be lost. - + Your username is too long. - + '%1' is not allowed as username. - + Your username must start with a lowercase letter or underscore. - + Only lowercase letters, numbers, underscore and hyphen are allowed. - + Your hostname is too short. - + Your hostname is too long. - + '%1' is not allowed as hostname. - + Only letters, numbers, underscore and hyphen are allowed. @@ -1248,7 +1248,8 @@ The installer will quit and all changes will be lost. - + + Please enter the same passphrase in both boxes. @@ -1700,18 +1701,18 @@ The installer will quit and all changes will be lost. LocalePage - + Region: - + Zone: - - + + &Change... @@ -1789,7 +1790,12 @@ The installer will quit and all changes will be lost. Map - + + Timezone: %1 + + + + Please select your preferred location on the map so the installer can suggest the locale and timezone settings for you. You can fine-tune the suggested settings below. Search the map by dragging to move and using the +/- buttons to zoom in/out or use mouse scrolling for zooming. @@ -1950,247 +1956,247 @@ The installer will quit and all changes will be lost. PWQ - + Password is too short - + Password is too long - + Password is too weak - + Memory allocation error when setting '%1' - + Memory allocation error - + The password is the same as the old one - + The password is a palindrome - + The password differs with case changes only - + The password is too similar to the old one - + The password contains the user name in some form - + The password contains words from the real name of the user in some form - + The password contains forbidden words in some form - + The password contains less than %1 digits - + The password contains too few digits - + The password contains less than %1 uppercase letters - + The password contains too few uppercase letters - + The password contains less than %1 lowercase letters - + The password contains too few lowercase letters - + The password contains less than %1 non-alphanumeric characters - + The password contains too few non-alphanumeric characters - + The password is shorter than %1 characters - + The password is too short - + The password is just rotated old one - + The password contains less than %1 character classes - + The password does not contain enough character classes - + The password contains more than %1 same characters consecutively - + The password contains too many same characters consecutively - + The password contains more than %1 characters of the same class consecutively - + The password contains too many characters of the same class consecutively - + The password contains monotonic sequence longer than %1 characters - + The password contains too long of a monotonic character sequence - + No password supplied - + Cannot obtain random numbers from the RNG device - + Password generation failed - required entropy too low for settings - + The password fails the dictionary check - %1 - + The password fails the dictionary check - + Unknown setting - %1 - + Unknown setting - + Bad integer value of setting - %1 - + Bad integer value - + Setting %1 is not of integer type - + Setting is not of integer type - + Setting %1 is not of string type - + Setting is not of string type - + Opening the configuration file failed - + The configuration file is malformed - + Fatal failure - + Unknown error - + Password is empty @@ -2524,67 +2530,67 @@ The installer will quit and all changes will be lost. PartitionViewStep - + Gathering system information... - + Partitions - + Install %1 <strong>alongside</strong> another operating system. - + <strong>Erase</strong> disk and install %1. - + <strong>Replace</strong> a partition with %1. - + <strong>Manual</strong> partitioning. - + Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). - + <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. - + <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. - + <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). - + Disk <strong>%1</strong> (%2) - + Current: - + After: @@ -2629,12 +2635,12 @@ The installer will quit and all changes will be lost. - + has at least one disk device available. - + There are no partitions to install on. @@ -3536,17 +3542,17 @@ Output: UsersPage - + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> - + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> - + Your passwords do not match! @@ -3554,7 +3560,7 @@ Output: UsersViewStep - + Users @@ -3832,7 +3838,7 @@ Output: localeq - + Change diff --git a/lang/calamares_ml.ts b/lang/calamares_ml.ts index d39a15cfa3..7934628569 100644 --- a/lang/calamares_ml.ts +++ b/lang/calamares_ml.ts @@ -510,134 +510,134 @@ The installer will quit and all changes will be lost. ഫോം - + Select storage de&vice: സംഭരണിയ്ക്കുള്ള ഉപകരണം തിരഞ്ഞെടുക്കൂ: - - - - + + + + Current: നിലവിലുള്ളത്: - + After: ശേഷം: - + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. <strong>സ്വമേധയാ ഉള്ള പാർട്ടീഷനിങ്</strong><br/>നിങ്ങൾക്ക് സ്വയം പാർട്ടീഷനുകൾ സൃഷ്ടിക്കാനോ വലുപ്പം മാറ്റാനോ കഴിയും. - + Reuse %1 as home partition for %2. %2 നുള്ള ഹോം പാർട്ടീഷനായി %1 വീണ്ടും ഉപയോഗിക്കൂ. - + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> <strong>ചുരുക്കുന്നതിന് ഒരു പാർട്ടീഷൻ തിരഞ്ഞെടുക്കുക, എന്നിട്ട് വലുപ്പം മാറ്റാൻ ചുവടെയുള്ള ബാർ വലിക്കുക. - + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. %1 %2MiB ആയി ചുരുങ്ങുകയും %4 ന് ഒരു പുതിയ %3MiB പാർട്ടീഷൻ സൃഷ്ടിക്കുകയും ചെയ്യും. - + Boot loader location: ബൂട്ട് ലോഡറിന്റെ സ്ഥാനം: - + <strong>Select a partition to install on</strong> <strong>ഇൻസ്റ്റാൾ ചെയ്യാനായി ഒരു പാർട്ടീഷൻ തിരഞ്ഞെടുക്കുക</strong> - + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. ഈ സിസ്റ്റത്തിൽ എവിടെയും ഒരു ഇ.എഫ്.ഐ സിസ്റ്റം പാർട്ടീഷൻ കണ്ടെത്താനായില്ല. %1 സജ്ജീകരിക്കുന്നതിന് ദയവായി തിരികെ പോയി മാനുവൽ പാർട്ടീഷനിംഗ് ഉപയോഗിക്കുക. - + The EFI system partition at %1 will be used for starting %2. %1 ലെ ഇഎഫ്ഐ സിസ്റ്റം പാർട്ടീഷൻ %2 ആരംഭിക്കുന്നതിന് ഉപയോഗിക്കും. - + EFI system partition: ഇഎഫ്ഐ സിസ്റ്റം പാർട്ടീഷൻ - + This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. ഈ ഡറ്റോറേജ്‌ ഉപകരണത്തിൽ ഒരു ഓപ്പറേറ്റിംഗ് സിസ്റ്റം ഉണ്ടെന്ന് തോന്നുന്നില്ല. നിങ്ങൾ എന്താണ് ചെയ്യാൻ ആഗ്രഹിക്കുന്നത്?<br/>സ്റ്റോറേജ് ഉപകരണത്തിൽ എന്തെങ്കിലും മാറ്റം വരുത്തുന്നതിനുമുമ്പ് നിങ്ങൾക്ക് നിങ്ങളുടെ ചോയ്‌സുകൾ അവലോകനം ചെയ്യാനും സ്ഥിരീകരിക്കാനും കഴിയും.  - - - - + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>ഡിസ്ക് മായ്ക്കൂ</strong><br/>ഈ പ്രവൃത്തി തെരെഞ്ഞെടുത്ത സ്റ്റോറേജ് ഉപകരണത്തിലെ എല്ലാ ഡാറ്റയും <font color="red">മായ്‌ച്ച്കളയും</font>. - - - - + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>ഇതിനൊപ്പം ഇൻസ്റ്റാൾ ചെയ്യുക</strong><br/>%1 ന് ഇടം നൽകുന്നതിന് ഇൻസ്റ്റാളർ ഒരു പാർട്ടീഷൻ ചുരുക്കും. - - - - + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>ഒരു പാർട്ടീഷൻ പുനഃസ്ഥാപിക്കുക</strong><br/>ഒരു പാർട്ടീഷന് %1 ഉപയോഗിച്ച് പുനഃസ്ഥാപിക്കുന്നു. - + This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. ഈ സ്റ്റോറേജ് ഉപകരണത്തിൽ %1 ഉണ്ട്.നിങ്ങൾ എന്താണ് ചെയ്യാൻ ആഗ്രഹിക്കുന്നത്?<br/>സ്റ്റോറേജ് ഉപകരണത്തിൽ എന്തെങ്കിലും മാറ്റം വരുത്തുന്നതിനുമുമ്പ് നിങ്ങളുടെ ചോയ്‌സുകൾ അവലോകനം ചെയ്യാനും സ്ഥിരീകരിക്കാനും നിങ്ങൾക്ക് കഴിയും. - + This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. ഈ സ്റ്റോറേജ് ഉപകരണത്തിൽ ഇതിനകം ഒരു ഓപ്പറേറ്റിംഗ് സിസ്റ്റം ഉണ്ട്. നിങ്ങൾ എന്താണ് ചെയ്യാൻ ആഗ്രഹിക്കുന്നത്?<br/>സ്റ്റോറേജ് ഉപകരണത്തിൽ എന്തെങ്കിലും മാറ്റം വരുത്തുന്നതിനുമുമ്പ് നിങ്ങൾക്ക് നിങ്ങളുടെ ചോയ്‌സുകൾ അവലോകനം ചെയ്യാനും സ്ഥിരീകരിക്കാനും കഴിയും.  - + This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. ഈ സ്റ്റോറേജ് ഉപകരണത്തിൽ ഒന്നിലധികം ഓപ്പറേറ്റിംഗ് സിസ്റ്റങ്ങളുണ്ട്. നിങ്ങൾ എന്താണ് ചെയ്യാൻ ആഗ്രഹിക്കുന്നത്?<br/>സ്റ്റോറേജ് ഉപകരണത്തിൽ എന്തെങ്കിലും മാറ്റം വരുത്തുന്നതിനുമുമ്പ് നിങ്ങൾക്ക് നിങ്ങളുടെ ചോയ്‌സുകൾ അവലോകനം ചെയ്യാനും സ്ഥിരീകരിക്കാനും കഴിയും.  - + No Swap സ്വാപ്പ് വേണ്ട - + Reuse Swap സ്വാപ്പ് വീണ്ടും ഉപയോഗിക്കൂ - + Swap (no Hibernate) സ്വാപ്പ് (ഹൈബർനേഷൻ ഇല്ല) - + Swap (with Hibernate) സ്വാപ്പ് (ഹൈബർനേഷനോട് കൂടി) - + Swap to file ഫയലിലേക്ക് സ്വാപ്പ് ചെയ്യുക @@ -715,17 +715,17 @@ The installer will quit and all changes will be lost. കീബോർഡ് വിന്യാസം %1%2 എന്നതായി ക്രമീകരിക്കുക. - + Set timezone to %1/%2. - + The system language will be set to %1. സിസ്റ്റം ഭാഷ %1 ആയി സജ്ജമാക്കും. - + The numbers and dates locale will be set to %1. സംഖ്യ & തീയതി രീതി %1 ആയി ക്രമീകരിക്കും. @@ -795,42 +795,42 @@ The installer will quit and all changes will be lost. - + Your username is too long. നിങ്ങളുടെ ഉപയോക്തൃനാമം വളരെ വലുതാണ്. - + '%1' is not allowed as username. - + Your username must start with a lowercase letter or underscore. താങ്കളുടെ ഉപയോക്തൃനാമം ഒരു ചെറിയ അക്ഷരമോ അണ്ടർസ്കോറോ ഉപയോഗിച്ച് വേണം തുടങ്ങാൻ. - + Only lowercase letters, numbers, underscore and hyphen are allowed. ചെറിയ അക്ഷരങ്ങൾ, അക്കങ്ങൾ, അണ്ടർസ്കോർ, ഹൈഫൺ എന്നിവയേ അനുവദിച്ചിട്ടുള്ളൂ. - + Your hostname is too short. നിങ്ങളുടെ ഹോസ്റ്റ്നാമം വളരെ ചെറുതാണ് - + Your hostname is too long. നിങ്ങളുടെ ഹോസ്റ്റ്നാമം ദൈർഘ്യമേറിയതാണ് - + '%1' is not allowed as hostname. - + Only letters, numbers, underscore and hyphen are allowed. അക്ഷരങ്ങൾ, അക്കങ്ങൾ, അണ്ടർസ്കോർ, ഹൈഫൺ എന്നിവയേ അനുവദിച്ചിട്ടുള്ളൂ. @@ -1251,7 +1251,8 @@ The installer will quit and all changes will be lost. രഹസ്യവാചകം സ്ഥിരീകരിക്കുക - + + Please enter the same passphrase in both boxes. രണ്ട് പെട്ടികളിലും ഒരേ രഹസ്യവാചകം നല്‍കുക, @@ -1703,18 +1704,18 @@ The installer will quit and all changes will be lost. LocalePage - + Region: പ്രദേശം: - + Zone: മേഖല: - - + + &Change... മാറ്റുക (&C)... @@ -1792,7 +1793,12 @@ The installer will quit and all changes will be lost. Map - + + Timezone: %1 + + + + Please select your preferred location on the map so the installer can suggest the locale and timezone settings for you. You can fine-tune the suggested settings below. Search the map by dragging to move and using the +/- buttons to zoom in/out or use mouse scrolling for zooming. @@ -1953,247 +1959,247 @@ The installer will quit and all changes will be lost. PWQ - + Password is too short രഹസ്യവാക്ക് വളരെ ചെറുതാണ് - + Password is too long രഹസ്യവാക്ക് വളരെ വലുതാണ് - + Password is too weak രഹസ്യവാക്ക് വളരെ ദുർബലമാണ് - + Memory allocation error when setting '%1' '%1' ക്രമീക്കരിക്കുന്നതിൽ മെമ്മറി പങ്കുവയ്ക്കൽ പിഴവ് - + Memory allocation error മെമ്മറി വിന്യസിക്കുന്നതിൽ പിഴവ് - + The password is the same as the old one രഹസ്യവാക്ക് പഴയയതുതന്നെ ആണ് - + The password is a palindrome രഹസ്യവാക്ക് ഒരു അനുലോമവിലോമപദമാണ് - + The password differs with case changes only പാസ്‌വേഡ് അക്ഷരങ്ങളുടെ കേസ് മാറ്റങ്ങളിൽ മാത്രം വ്യത്യാസപ്പെട്ടിരിക്കുന്നു - + The password is too similar to the old one രഹസ്യവാക്ക് പഴയതിനോട് വളരെ സമാനമാണ് - + The password contains the user name in some form രഹസ്യവാക്ക് ഏതെങ്കിലും രൂപത്തിൽ ഉപയോക്തൃനാമം അടങ്ങിയിരിക്കുന്നു - + The password contains words from the real name of the user in some form രഹസ്യവാക്കിൽഏതെങ്കിലും രൂപത്തിൽ ഉപയോക്താവിന്റെ യഥാർത്ഥ പേരിൽ നിന്നുള്ള വാക്കുകൾ അടങ്ങിയിരിക്കുന്നു - + The password contains forbidden words in some form രഹസ്യവാക്കിൽ ഏതെങ്കിലും രൂപത്തിൽ വിലക്കപ്പെട്ട വാക്കുകൾ അടങ്ങിയിരിക്കുന്നു - + The password contains less than %1 digits രഹസ്യവാക്ക് %1 അക്കത്തിൽ കുറവാണ് - + The password contains too few digits രഹസ്യവാക്കിൽ വളരെ കുറച്ച് അക്കങ്ങൾ അടങ്ങിയിരിക്കുന്നു - + The password contains less than %1 uppercase letters രഹസ്യവാക്കിൽ %1 വലിയക്ഷരങ്ങൾ അടങ്ങിയിരിക്കുന്നു - + The password contains too few uppercase letters രഹസ്യവാക്കിൽ വളരെ കുറച്ചു വലിയക്ഷരങ്ങൾ മാത്രമേ അടങ്ങിയിട്ടുള്ളു - + The password contains less than %1 lowercase letters രഹസ്യവാക്കിൽ %1 -ൽ താഴെ ചെറിയ അക്ഷരങ്ങൾ അടങ്ങിയിരിക്കുന്നു - + The password contains too few lowercase letters രഹസ്യവാക്കിൽ വളരെ കുറച്ചു ചെറിയക്ഷരങ്ങൾ മാത്രമേ അടങ്ങിയിട്ടുള്ളു - + The password contains less than %1 non-alphanumeric characters രഹസ്യവാക്കിൽ ആൽഫാന്യൂമെറിക് ഇതര പ്രതീകങ്ങൾ %1 -ൽ കുറവാണ് - + The password contains too few non-alphanumeric characters രഹസ്യവാക്കിൽ ആൽഫാന്യൂമെറിക് ഇതര പ്രതീകങ്ങൾ വളരെ കുറവാണ് - + The password is shorter than %1 characters പാസ്‌വേഡ് %1 പ്രതീകങ്ങളേക്കാൾ ചെറുതാണ് - + The password is too short രഹസ്യവാക്ക് വളരെ ചെറുതാണ് - + The password is just rotated old one രഹസ്യവാക്ക് പഴയതുതന്നെ തിരിച്ചിട്ടതാണ് - + The password contains less than %1 character classes പാസ്‌വേഡിൽ പ്രതീക ക്ലാസുകൾ %1 ൽ കുറവാണ് - + The password does not contain enough character classes രഹസ്യവാക്കിൽ ആവശ്യത്തിനു അക്ഷരങ്ങൾ ഇല്ല - + The password contains more than %1 same characters consecutively രഹസ്സ്യവാക്കിൽ അടുത്തടുത്തായി ഒരേ പ്രതീകം %1 കൂടുതൽ തവണ അടങ്ങിയിരിക്കുന്നു - + The password contains too many same characters consecutively രഹസ്സ്യവാക്കിൽ അടുത്തടുത്തായി ഒരേ പ്രതീകം ഒരുപാട് തവണ അടങ്ങിയിരിക്കുന്നു. - + The password contains more than %1 characters of the same class consecutively രഹസ്യവാക്കിൽ %1 തവണ ഒരേ തരം അക്ഷരം ആവർത്തിക്കുന്നു - + The password contains too many characters of the same class consecutively രഹസ്യവാക്കിൽ ഒരുപാട് തവണ ഒരേ തരം അക്ഷരം ആവർത്തിക്കുന്നു - + The password contains monotonic sequence longer than %1 characters പാസ്‌വേഡിൽ %1 പ്രതീകങ്ങളേക്കാൾ ദൈർഘ്യമുള്ള മോണോടോണിക് ശ്രേണി അടങ്ങിയിരിക്കുന്നു - + The password contains too long of a monotonic character sequence പാസ്‌വേഡിൽ വളരെ ദൈർഘ്യമുള്ള ഒരു മോണോടോണിക് പ്രതീക ശ്രേണിയുണ്ട് - + No password supplied രഹസ്യവാക്ക് ഒന്നും നല്‍കിയിട്ടില്ല - + Cannot obtain random numbers from the RNG device RNG ഉപകരണത്തിൽ നിന്ന് ആകസ്‌മിക സംഖ്യകൾ എടുക്കാൻ പറ്റുന്നില്ല. - + Password generation failed - required entropy too low for settings രഹസ്യവാക്ക് സൃഷ്ടിക്കുന്നതിൽ പരാജയപ്പെട്ടു - ആവശ്യത്തിനു entropy ഇല്ല. - + The password fails the dictionary check - %1 രഹസ്യവാക്ക് നിഘണ്ടു പരിശോധനയിൽ പരാജയപ്പെടുന്നു - %1 - + The password fails the dictionary check രഹസ്യവാക്ക് നിഘണ്ടു പരിശോധനയിൽ പരാജയപ്പെടുന്നു - + Unknown setting - %1 അജ്ഞാതമായ ക്രമീകരണം - %1 - + Unknown setting അപരിചിതമായ സജ്ജീകരണം - + Bad integer value of setting - %1 ക്രമീകരണത്തിന്റെ ശരിയല്ലാത്ത സംഖ്യാമൂല്യം - %1 - + Bad integer value തെറ്റായ സംഖ്യ - + Setting %1 is not of integer type %1 സജ്ജീകരണം സംഖ്യയല്ല - + Setting is not of integer type സജ്ജീകരണം സംഖ്യയല്ല - + Setting %1 is not of string type %1 സജ്ജീകരണം ഒരു വാക്കല്ലാ - + Setting is not of string type സജ്ജീകരണം ഒരു വാക്കല്ലാ - + Opening the configuration file failed ക്രമീകരണ ഫയൽ തുറക്കുന്നതിൽ പരാജയപ്പെട്ടു - + The configuration file is malformed ക്രമീകരണ ഫയൽ പാഴാണു - + Fatal failure അപകടകരമായ പിഴവ് - + Unknown error അപരിചിതമായ പിശക് - + Password is empty രഹസ്യവാക്ക് ശൂന്യമാണ് @@ -2527,67 +2533,67 @@ The installer will quit and all changes will be lost. PartitionViewStep - + Gathering system information... സിസ്റ്റത്തെക്കുറിച്ചുള്ള വിവരങ്ങൾ ശേഖരിക്കുന്നു... - + Partitions പാർട്ടീഷനുകൾ - + Install %1 <strong>alongside</strong> another operating system. മറ്റൊരു ഓപ്പറേറ്റിംഗ് സിസ്റ്റത്തിനൊപ്പം %1 ഇൻസ്റ്റാൾ ചെയ്യുക. - + <strong>Erase</strong> disk and install %1. ഡിസ്ക് <strong>മായ്ക്കുക</strong>എന്നിട്ട് %1 ഇൻസ്റ്റാൾ ചെയ്യുക. - + <strong>Replace</strong> a partition with %1. ഒരു പാർട്ടീഷൻ %1 ഉപയോഗിച്ച് <strong>പുനഃസ്ഥാപിക്കുക.</strong> - + <strong>Manual</strong> partitioning. <strong>സ്വമേധയാ</strong> ഉള്ള പാർട്ടീഷനിങ്. - + Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). %2 (%3) ഡിസ്കിൽ മറ്റൊരു ഓപ്പറേറ്റിംഗ് സിസ്റ്റത്തിനൊപ്പം %1 ഇൻസ്റ്റാൾ ചെയ്യുക. - + <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. ഡിസ്ക് <strong>%2</strong> (%3) <strong>മായ്‌ച്ച് </strong> %1 ഇൻസ്റ്റാൾ ചെയ്യുക. - + <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. <strong>%2</strong> (%3) ഡിസ്കിലെ ഒരു പാർട്ടീഷൻ %1 ഉപയോഗിച്ച് <strong>മാറ്റിസ്ഥാപിക്കുക</strong>. - + <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). <strong>%1 </strong>(%2) ഡിസ്കിലെ <strong>സ്വമേധയാ</strong> പാർട്ടീഷനിംഗ്. - + Disk <strong>%1</strong> (%2) ഡിസ്ക് <strong>%1</strong> (%2) - + Current: നിലവിലുള്ളത്: - + After: ശേഷം: @@ -2632,12 +2638,12 @@ The installer will quit and all changes will be lost. എൻക്രിപ്റ്റ് ചെയ്ത ഒരു റൂട്ട് പാർട്ടീഷനോടൊപ്പം ഒരു വേർപെടുത്തിയ ബൂട്ട് പാർട്ടീഷനും ക്രമീകരിക്കപ്പെട്ടിരുന്നു, എന്നാൽ ബൂട്ട് പാർട്ടീഷൻ എൻക്രിപ്റ്റ് ചെയ്യപ്പെട്ടതല്ല.<br/><br/>ഇത്തരം സജ്ജീകരണത്തിന്റെ സുരക്ഷ ഉത്കണ്ഠാജനകമാണ്, എന്തെന്നാൽ പ്രധാനപ്പെട്ട സിസ്റ്റം ഫയലുകൾ ഒരു എൻക്രിപ്റ്റ് ചെയ്യപ്പെടാത്ത പാർട്ടീഷനിലാണ് സൂക്ഷിച്ചിട്ടുള്ളത്.<br/> താങ്കൾക്ക് വേണമെങ്കിൽ തുടരാം, പക്ഷേ ഫയൽ സിസ്റ്റം തുറക്കൽ സിസ്റ്റം ആരംഭപ്രക്രിയയിൽ വൈകിയേ സംഭവിക്കൂ.<br/>ബൂട്ട് പാർട്ടീഷൻ എൻക്രിപ്റ്റ് ചെയ്യാനായി, തിരിച്ചു പോയി പാർട്ടീഷൻ നിർമ്മാണ ജാലകത്തിൽ <strong>എൻക്രിപ്റ്റ്</strong> തിരഞ്ഞെടുത്തുകൊണ്ട് അത് വീണ്ടും നിർമ്മിക്കുക. - + has at least one disk device available. ഒരു ഡിസ്ക് ഡിവൈസെങ്കിലും ലഭ്യമാണ്. - + There are no partitions to install on. @@ -3542,17 +3548,17 @@ Output: UsersPage - + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>ഒന്നിലധികം ആളുകൾ ഈ കമ്പ്യൂട്ടർ ഉപയോഗിക്കുമെങ്കിൽ, താങ്കൾക്ക് സജ്ജീകരണത്തിന് ശേഷം നിരവധി അക്കൗണ്ടുകൾ സൃഷ്ടിക്കാം.</small> - + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> <small>ഒന്നിലധികം ആളുകൾ ഈ കമ്പ്യൂട്ടർ ഉപയോഗിക്കുമെങ്കിൽ, താങ്കൾക്ക് ഇൻസ്റ്റളേഷന് ശേഷം നിരവധി അക്കൗണ്ടുകൾ സൃഷ്ടിക്കാം.</small> - + Your passwords do not match! നിങ്ങളുടെ പാസ്‌വേഡുകൾ പൊരുത്തപ്പെടുന്നില്ല! @@ -3560,7 +3566,7 @@ Output: UsersViewStep - + Users ഉപയോക്താക്കൾ @@ -3838,7 +3844,7 @@ Output: localeq - + Change diff --git a/lang/calamares_mr.ts b/lang/calamares_mr.ts index ec245979f4..0f02307611 100644 --- a/lang/calamares_mr.ts +++ b/lang/calamares_mr.ts @@ -507,134 +507,134 @@ The installer will quit and all changes will be lost. स्वरुप - + Select storage de&vice: - - - - + + + + Current: सद्या : - + After: नंतर : - + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. - + Reuse %1 as home partition for %2. - + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> - + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. - + Boot loader location: - + <strong>Select a partition to install on</strong> - + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. - + The EFI system partition at %1 will be used for starting %2. - + EFI system partition: - + This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. - - - - + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. - - - - + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. - - - - + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. - + This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. - + This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. - + This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. - + No Swap - + Reuse Swap - + Swap (no Hibernate) - + Swap (with Hibernate) - + Swap to file @@ -712,17 +712,17 @@ The installer will quit and all changes will be lost. - + Set timezone to %1/%2. - + The system language will be set to %1. - + The numbers and dates locale will be set to %1. @@ -792,42 +792,42 @@ The installer will quit and all changes will be lost. - + Your username is too long. तुमचा वापरकर्तानाव खूप लांब आहे - + '%1' is not allowed as username. - + Your username must start with a lowercase letter or underscore. - + Only lowercase letters, numbers, underscore and hyphen are allowed. - + Your hostname is too short. तुमचा संगणकनाव खूप लहान आहे - + Your hostname is too long. तुमचा संगणकनाव खूप लांब आहे - + '%1' is not allowed as hostname. - + Only letters, numbers, underscore and hyphen are allowed. @@ -1248,7 +1248,8 @@ The installer will quit and all changes will be lost. - + + Please enter the same passphrase in both boxes. @@ -1700,18 +1701,18 @@ The installer will quit and all changes will be lost. LocalePage - + Region: - + Zone: - - + + &Change... @@ -1789,7 +1790,12 @@ The installer will quit and all changes will be lost. Map - + + Timezone: %1 + + + + Please select your preferred location on the map so the installer can suggest the locale and timezone settings for you. You can fine-tune the suggested settings below. Search the map by dragging to move and using the +/- buttons to zoom in/out or use mouse scrolling for zooming. @@ -1950,247 +1956,247 @@ The installer will quit and all changes will be lost. PWQ - + Password is too short परवलीशब्द खूप लहान आहे - + Password is too long परवलीशब्द खूप लांब आहे - + Password is too weak - + Memory allocation error when setting '%1' - + Memory allocation error - + The password is the same as the old one - + The password is a palindrome - + The password differs with case changes only - + The password is too similar to the old one - + The password contains the user name in some form - + The password contains words from the real name of the user in some form - + The password contains forbidden words in some form - + The password contains less than %1 digits - + The password contains too few digits - + The password contains less than %1 uppercase letters - + The password contains too few uppercase letters - + The password contains less than %1 lowercase letters - + The password contains too few lowercase letters - + The password contains less than %1 non-alphanumeric characters - + The password contains too few non-alphanumeric characters - + The password is shorter than %1 characters - + The password is too short - + The password is just rotated old one - + The password contains less than %1 character classes - + The password does not contain enough character classes - + The password contains more than %1 same characters consecutively - + The password contains too many same characters consecutively - + The password contains more than %1 characters of the same class consecutively - + The password contains too many characters of the same class consecutively - + The password contains monotonic sequence longer than %1 characters - + The password contains too long of a monotonic character sequence - + No password supplied - + Cannot obtain random numbers from the RNG device - + Password generation failed - required entropy too low for settings - + The password fails the dictionary check - %1 - + The password fails the dictionary check - + Unknown setting - %1 - + Unknown setting - + Bad integer value of setting - %1 - + Bad integer value - + Setting %1 is not of integer type - + Setting is not of integer type - + Setting %1 is not of string type - + Setting is not of string type - + Opening the configuration file failed - + The configuration file is malformed - + Fatal failure - + Unknown error - + Password is empty @@ -2524,67 +2530,67 @@ The installer will quit and all changes will be lost. PartitionViewStep - + Gathering system information... - + Partitions - + Install %1 <strong>alongside</strong> another operating system. - + <strong>Erase</strong> disk and install %1. - + <strong>Replace</strong> a partition with %1. - + <strong>Manual</strong> partitioning. - + Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). - + <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. - + <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. - + <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). - + Disk <strong>%1</strong> (%2) - + Current: सद्या : - + After: नंतर : @@ -2629,12 +2635,12 @@ The installer will quit and all changes will be lost. - + has at least one disk device available. - + There are no partitions to install on. @@ -3536,17 +3542,17 @@ Output: UsersPage - + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> - + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> - + Your passwords do not match! तुमचा परवलीशब्द जुळत नाही @@ -3554,7 +3560,7 @@ Output: UsersViewStep - + Users वापरकर्ते @@ -3832,7 +3838,7 @@ Output: localeq - + Change diff --git a/lang/calamares_nb.ts b/lang/calamares_nb.ts index 27cf015fae..19685925d0 100644 --- a/lang/calamares_nb.ts +++ b/lang/calamares_nb.ts @@ -508,134 +508,134 @@ Installasjonsprogrammet vil avsluttes og alle endringer vil gå tapt.Form - + Select storage de&vice: - - - - + + + + Current: - + After: - + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. <strong>Manuell partisjonering</strong><br/>Du kan opprette eller endre størrelse på partisjoner selv. - + Reuse %1 as home partition for %2. - + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> - + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. - + Boot loader location: - + <strong>Select a partition to install on</strong> - + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. - + The EFI system partition at %1 will be used for starting %2. - + EFI system partition: - + This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. - - - - + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. - - - - + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. - - - - + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. - + This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. - + This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. - + This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. - + No Swap - + Reuse Swap - + Swap (no Hibernate) - + Swap (with Hibernate) - + Swap to file @@ -713,17 +713,17 @@ Installasjonsprogrammet vil avsluttes og alle endringer vil gå tapt.Sett tastaturoppsett til %1/%2. - + Set timezone to %1/%2. - + The system language will be set to %1. - + The numbers and dates locale will be set to %1. @@ -793,42 +793,42 @@ Installasjonsprogrammet vil avsluttes og alle endringer vil gå tapt. - + Your username is too long. Brukernavnet ditt er for langt. - + '%1' is not allowed as username. - + Your username must start with a lowercase letter or underscore. - + Only lowercase letters, numbers, underscore and hyphen are allowed. - + Your hostname is too short. - + Your hostname is too long. - + '%1' is not allowed as hostname. - + Only letters, numbers, underscore and hyphen are allowed. @@ -1249,7 +1249,8 @@ Installasjonsprogrammet vil avsluttes og alle endringer vil gå tapt. - + + Please enter the same passphrase in both boxes. @@ -1701,18 +1702,18 @@ Installasjonsprogrammet vil avsluttes og alle endringer vil gå tapt. LocalePage - + Region: - + Zone: - - + + &Change... &Endre... @@ -1790,7 +1791,12 @@ Installasjonsprogrammet vil avsluttes og alle endringer vil gå tapt. Map - + + Timezone: %1 + + + + Please select your preferred location on the map so the installer can suggest the locale and timezone settings for you. You can fine-tune the suggested settings below. Search the map by dragging to move and using the +/- buttons to zoom in/out or use mouse scrolling for zooming. @@ -1951,247 +1957,247 @@ Installasjonsprogrammet vil avsluttes og alle endringer vil gå tapt. PWQ - + Password is too short Passordet er for kort - + Password is too long Passordet er for langt - + Password is too weak Passordet er for svakt - + Memory allocation error when setting '%1' - + Memory allocation error - + The password is the same as the old one Passordet er det samme som det gamle - + The password is a palindrome - + The password differs with case changes only - + The password is too similar to the old one Passordet likner for mye på det gamle - + The password contains the user name in some form - + The password contains words from the real name of the user in some form - + The password contains forbidden words in some form - + The password contains less than %1 digits - + The password contains too few digits - + The password contains less than %1 uppercase letters Passordet inneholder mindre enn %1 store bokstaver - + The password contains too few uppercase letters Passordet inneholder for få store bokstaver - + The password contains less than %1 lowercase letters Passordet inneholder mindre enn %1 små bokstaver - + The password contains too few lowercase letters Passordet inneholder for få små bokstaver - + The password contains less than %1 non-alphanumeric characters - + The password contains too few non-alphanumeric characters - + The password is shorter than %1 characters - + The password is too short Passordet er for kort - + The password is just rotated old one - + The password contains less than %1 character classes - + The password does not contain enough character classes - + The password contains more than %1 same characters consecutively - + The password contains too many same characters consecutively Passordet inneholder for mange like tegn etter hverandre - + The password contains more than %1 characters of the same class consecutively - + The password contains too many characters of the same class consecutively - + The password contains monotonic sequence longer than %1 characters - + The password contains too long of a monotonic character sequence - + No password supplied - + Cannot obtain random numbers from the RNG device - + Password generation failed - required entropy too low for settings - + The password fails the dictionary check - %1 - + The password fails the dictionary check - + Unknown setting - %1 - + Unknown setting - + Bad integer value of setting - %1 - + Bad integer value - + Setting %1 is not of integer type - + Setting is not of integer type - + Setting %1 is not of string type - + Setting is not of string type Innstillingen er ikke av type streng - + Opening the configuration file failed - + The configuration file is malformed - + Fatal failure - + Unknown error Ukjent feil - + Password is empty @@ -2525,67 +2531,67 @@ Installasjonsprogrammet vil avsluttes og alle endringer vil gå tapt. PartitionViewStep - + Gathering system information... - + Partitions - + Install %1 <strong>alongside</strong> another operating system. - + <strong>Erase</strong> disk and install %1. - + <strong>Replace</strong> a partition with %1. - + <strong>Manual</strong> partitioning. - + Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). - + <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. - + <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. - + <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). - + Disk <strong>%1</strong> (%2) - + Current: - + After: @@ -2630,12 +2636,12 @@ Installasjonsprogrammet vil avsluttes og alle endringer vil gå tapt. - + has at least one disk device available. - + There are no partitions to install on. @@ -3537,17 +3543,17 @@ Output: UsersPage - + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> - + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> - + Your passwords do not match! @@ -3555,7 +3561,7 @@ Output: UsersViewStep - + Users Brukere @@ -3833,7 +3839,7 @@ Output: localeq - + Change diff --git a/lang/calamares_ne_NP.ts b/lang/calamares_ne_NP.ts index a57f6e26a3..e3eceec761 100644 --- a/lang/calamares_ne_NP.ts +++ b/lang/calamares_ne_NP.ts @@ -507,134 +507,134 @@ The installer will quit and all changes will be lost. - + Select storage de&vice: - - - - + + + + Current: - + After: - + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. - + Reuse %1 as home partition for %2. - + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> - + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. - + Boot loader location: - + <strong>Select a partition to install on</strong> - + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. - + The EFI system partition at %1 will be used for starting %2. - + EFI system partition: - + This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. - - - - + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. - - - - + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. - - - - + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. - + This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. - + This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. - + This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. - + No Swap - + Reuse Swap - + Swap (no Hibernate) - + Swap (with Hibernate) - + Swap to file @@ -712,17 +712,17 @@ The installer will quit and all changes will be lost. - + Set timezone to %1/%2. - + The system language will be set to %1. - + The numbers and dates locale will be set to %1. @@ -792,42 +792,42 @@ The installer will quit and all changes will be lost. - + Your username is too long. - + '%1' is not allowed as username. - + Your username must start with a lowercase letter or underscore. - + Only lowercase letters, numbers, underscore and hyphen are allowed. - + Your hostname is too short. - + Your hostname is too long. - + '%1' is not allowed as hostname. - + Only letters, numbers, underscore and hyphen are allowed. @@ -1248,7 +1248,8 @@ The installer will quit and all changes will be lost. - + + Please enter the same passphrase in both boxes. @@ -1700,18 +1701,18 @@ The installer will quit and all changes will be lost. LocalePage - + Region: - + Zone: - - + + &Change... @@ -1789,7 +1790,12 @@ The installer will quit and all changes will be lost. Map - + + Timezone: %1 + + + + Please select your preferred location on the map so the installer can suggest the locale and timezone settings for you. You can fine-tune the suggested settings below. Search the map by dragging to move and using the +/- buttons to zoom in/out or use mouse scrolling for zooming. @@ -1950,247 +1956,247 @@ The installer will quit and all changes will be lost. PWQ - + Password is too short - + Password is too long - + Password is too weak - + Memory allocation error when setting '%1' - + Memory allocation error - + The password is the same as the old one - + The password is a palindrome - + The password differs with case changes only - + The password is too similar to the old one - + The password contains the user name in some form - + The password contains words from the real name of the user in some form - + The password contains forbidden words in some form - + The password contains less than %1 digits - + The password contains too few digits - + The password contains less than %1 uppercase letters - + The password contains too few uppercase letters - + The password contains less than %1 lowercase letters - + The password contains too few lowercase letters - + The password contains less than %1 non-alphanumeric characters - + The password contains too few non-alphanumeric characters - + The password is shorter than %1 characters - + The password is too short - + The password is just rotated old one - + The password contains less than %1 character classes - + The password does not contain enough character classes - + The password contains more than %1 same characters consecutively - + The password contains too many same characters consecutively - + The password contains more than %1 characters of the same class consecutively - + The password contains too many characters of the same class consecutively - + The password contains monotonic sequence longer than %1 characters - + The password contains too long of a monotonic character sequence - + No password supplied - + Cannot obtain random numbers from the RNG device - + Password generation failed - required entropy too low for settings - + The password fails the dictionary check - %1 - + The password fails the dictionary check - + Unknown setting - %1 - + Unknown setting - + Bad integer value of setting - %1 - + Bad integer value - + Setting %1 is not of integer type - + Setting is not of integer type - + Setting %1 is not of string type - + Setting is not of string type - + Opening the configuration file failed - + The configuration file is malformed - + Fatal failure - + Unknown error - + Password is empty @@ -2524,67 +2530,67 @@ The installer will quit and all changes will be lost. PartitionViewStep - + Gathering system information... - + Partitions - + Install %1 <strong>alongside</strong> another operating system. - + <strong>Erase</strong> disk and install %1. - + <strong>Replace</strong> a partition with %1. - + <strong>Manual</strong> partitioning. - + Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). - + <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. - + <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. - + <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). - + Disk <strong>%1</strong> (%2) - + Current: - + After: @@ -2629,12 +2635,12 @@ The installer will quit and all changes will be lost. - + has at least one disk device available. - + There are no partitions to install on. @@ -3536,17 +3542,17 @@ Output: UsersPage - + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> - + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> - + Your passwords do not match! @@ -3554,7 +3560,7 @@ Output: UsersViewStep - + Users @@ -3832,7 +3838,7 @@ Output: localeq - + Change diff --git a/lang/calamares_nl.ts b/lang/calamares_nl.ts index 086ab72691..feb5c35ce1 100644 --- a/lang/calamares_nl.ts +++ b/lang/calamares_nl.ts @@ -510,134 +510,134 @@ Het installatieprogramma zal afsluiten en alle wijzigingen zullen verloren gaan. Formulier - + Select storage de&vice: Selecteer &opslagmedium: - - - - + + + + Current: Huidig: - + After: Na: - + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. <strong>Handmatig partitioneren</strong><br/>Je maakt of wijzigt zelf de partities. - + Reuse %1 as home partition for %2. Hergebruik %1 als home-partitie voor %2 - + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> <strong>Selecteer een partitie om te verkleinen, en sleep vervolgens de onderste balk om het formaat te wijzigen</strong> - + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. %1 zal verkleind worden tot %2MiB en een nieuwe %3MiB partitie zal worden aangemaakt voor %4. - + Boot loader location: Bootloader locatie: - + <strong>Select a partition to install on</strong> <strong>Selecteer een partitie om op te installeren</strong> - + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. Er werd geen EFI systeempartitie gevonden op dit systeem. Gelieve terug te gaan en manueel te partitioneren om %1 in te stellen. - + The EFI system partition at %1 will be used for starting %2. De EFI systeempartitie op %1 zal gebruikt worden om %2 te starten. - + EFI system partition: EFI systeempartitie: - + This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Dit opslagmedium lijkt geen besturingssysteem te bevatten. Wat wil je doen?<br/>Je zal jouw keuzes kunnen nazien en bevestigen voordat er iets aan het opslagmedium wordt veranderd. - - - - + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>Wis schijf</strong><br/>Dit zal alle huidige gegevens op de geselecteerd opslagmedium <font color="red">verwijderen</font>. - - - - + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Installeer ernaast</strong><br/>Het installatieprogramma zal een partitie verkleinen om plaats te maken voor %1. - - - - + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>Vervang een partitie</strong><br/>Vervangt een partitie met %1. - + This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Dit opslagmedium bevat %1. Wat wil je doen?<br/>Je zal jouw keuzes kunnen nazien en bevestigen voordat er iets aan het opslagmedium wordt veranderd. - + This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Dit opslagmedium bevat reeds een besturingssysteem. Wat wil je doen?<br/>Je zal jouw keuzes kunnen nazien en bevestigen voordat er iets aan het opslagmedium wordt veranderd. - + This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Dit opslagmedium bevat meerdere besturingssystemen. Wat wil je doen?<br/>Je zal jouw keuzes kunnen nazien en bevestigen voordat er iets aan het opslagmedium wordt veranderd. - + No Swap Geen wisselgeheugen - + Reuse Swap Wisselgeheugen hergebruiken - + Swap (no Hibernate) Wisselgeheugen (geen Sluimerstand) - + Swap (with Hibernate) Wisselgeheugen ( met Sluimerstand) - + Swap to file Wisselgeheugen naar bestand @@ -715,17 +715,17 @@ Het installatieprogramma zal afsluiten en alle wijzigingen zullen verloren gaan. Instellen toetsenbord lay-out naar %1/%2. - + Set timezone to %1/%2. Zet tijdzone naar %1/%2. - + The system language will be set to %1. De taal van het systeem zal worden ingesteld op %1. - + The numbers and dates locale will be set to %1. De getal- en datumnotatie worden ingesteld op %1. @@ -795,42 +795,42 @@ Het installatieprogramma zal afsluiten en alle wijzigingen zullen verloren gaan. <h1>Welkom in het %1 installatieprogramma.</h1> - + Your username is too long. De gebruikersnaam is te lang. - + '%1' is not allowed as username. De gebruikersnaam '%1' is niet toegestaan. - + Your username must start with a lowercase letter or underscore. Je gebruikersnaam moet beginnen met een kleine letter of laag streepje. - + Only lowercase letters, numbers, underscore and hyphen are allowed. Alleen kleine letters, nummerse en (laag) streepjes zijn toegestaan. - + Your hostname is too short. De hostnaam is te kort. - + Your hostname is too long. De hostnaam is te lang. - + '%1' is not allowed as hostname. De hostnaam '%1' is niet toegestaan. - + Only letters, numbers, underscore and hyphen are allowed. Alleen letters, nummers en (laag) streepjes zijn toegestaan. @@ -1251,7 +1251,8 @@ Het installatieprogramma zal afsluiten en alle wijzigingen zullen verloren gaan. Bevestig wachtwoordzin - + + Please enter the same passphrase in both boxes. Gelieve in beide velden dezelfde wachtwoordzin in te vullen. @@ -1703,18 +1704,18 @@ Het installatieprogramma zal afsluiten en alle wijzigingen zullen verloren gaan. LocalePage - + Region: Regio: - + Zone: Zone: - - + + &Change... &Aanpassen @@ -1792,7 +1793,12 @@ Het installatieprogramma zal afsluiten en alle wijzigingen zullen verloren gaan. Map - + + Timezone: %1 + Tijdzone: %1 + + + Please select your preferred location on the map so the installer can suggest the locale and timezone settings for you. You can fine-tune the suggested settings below. Search the map by dragging to move and using the +/- buttons to zoom in/out or use mouse scrolling for zooming. @@ -1953,247 +1959,247 @@ Het installatieprogramma zal afsluiten en alle wijzigingen zullen verloren gaan. PWQ - + Password is too short Het wachtwoord is te kort - + Password is too long Het wachtwoord is te lang - + Password is too weak Wachtwoord is te zwak - + Memory allocation error when setting '%1' Foute geheugentoewijzing bij het instellen van %1. - + Memory allocation error Foute geheugentoewijzing - + The password is the same as the old one Het wachtwoord is hetzelfde als het oude wachtwoord - + The password is a palindrome Het wachtwoord is een palindroom - + The password differs with case changes only Het wachtwoord verschilt slechts in hoofdlettergebruik - + The password is too similar to the old one Het wachtwoord lijkt te veel op het oude wachtwoord - + The password contains the user name in some form Het wachtwoord bevat de gebruikersnaam op een of andere manier - + The password contains words from the real name of the user in some form Het wachtwoord bevat woorden van de echte naam van de gebruiker in één of andere vorm. - + The password contains forbidden words in some form Het wachtwoord bevat verboden woorden in één of andere vorm. - + The password contains less than %1 digits Het wachtwoord bevat minder dan %1 cijfers - + The password contains too few digits Het wachtwoord bevat te weinig cijfers - + The password contains less than %1 uppercase letters Het wachtwoord bevat minder dan %1 hoofdletters. - + The password contains too few uppercase letters Het wachtwoord bevat te weinig hoofdletters. - + The password contains less than %1 lowercase letters Het wachtwoord bevat minder dan %1 kleine letters. - + The password contains too few lowercase letters Het wachtwoord bevat te weinig kleine letters. - + The password contains less than %1 non-alphanumeric characters Het wachtwoord bevat minder dan %1 niet-alfanumerieke symbolen. - + The password contains too few non-alphanumeric characters Het wachtwoord bevat te weinig niet-alfanumerieke symbolen. - + The password is shorter than %1 characters Het wachtwoord is korter dan %1 karakters. - + The password is too short Het wachtwoord is te kort. - + The password is just rotated old one Het wachtwoord is enkel omgedraaid. - + The password contains less than %1 character classes Het wachtwoord bevat minder dan %1 karaktergroepen - + The password does not contain enough character classes Het wachtwoord bevat te weinig karaktergroepen - + The password contains more than %1 same characters consecutively Het wachtwoord bevat meer dan %1 dezelfde karakters na elkaar - + The password contains too many same characters consecutively Het wachtwoord bevat te veel dezelfde karakters na elkaar - + The password contains more than %1 characters of the same class consecutively Het wachtwoord bevat meer dan %1 karakters van dezelfde groep na elkaar - + The password contains too many characters of the same class consecutively Het wachtwoord bevat te veel karakters van dezelfde groep na elkaar - + The password contains monotonic sequence longer than %1 characters Het wachtwoord bevat een monotone sequentie van meer dan %1 karakters - + The password contains too long of a monotonic character sequence Het wachtwoord bevat een te lange monotone sequentie van karakters - + No password supplied Geen wachtwoord opgegeven - + Cannot obtain random numbers from the RNG device Kan geen willekeurige nummers verkrijgen van het RNG apparaat - + Password generation failed - required entropy too low for settings Wachtwoord aanmaken mislukt - te weinig wanorde voor de instellingen - + The password fails the dictionary check - %1 Het wachtwoord faalt op de woordenboektest - %1 - + The password fails the dictionary check Het wachtwoord faalt op de woordenboektest - + Unknown setting - %1 Onbekende instelling - %1 - + Unknown setting Onbekende instelling - + Bad integer value of setting - %1 Ongeldige gehele waarde voor instelling - %1 - + Bad integer value Ongeldige gehele waarde - + Setting %1 is not of integer type Instelling %1 is niet van het type integer - + Setting is not of integer type Instelling is niet van het type integer - + Setting %1 is not of string type Instelling %1 is niet van het type string - + Setting is not of string type Instelling is niet van het type string - + Opening the configuration file failed Openen van het configuratiebestand is mislukt - + The configuration file is malformed Het configuratiebestand is ongeldig - + Fatal failure Fatale fout - + Unknown error Onbekende fout - + Password is empty Wachtwoord is leeg @@ -2527,67 +2533,67 @@ Het installatieprogramma zal afsluiten en alle wijzigingen zullen verloren gaan. PartitionViewStep - + Gathering system information... Systeeminformatie verzamelen... - + Partitions Partities - + Install %1 <strong>alongside</strong> another operating system. Installeer %1 <strong>naast</strong> een ander besturingssysteem. - + <strong>Erase</strong> disk and install %1. <strong>Wis</strong> schijf en installeer %1. - + <strong>Replace</strong> a partition with %1. <strong>Vervang</strong> een partitie met %1. - + <strong>Manual</strong> partitioning. <strong>Handmatig</strong> partitioneren. - + Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). Installeer %1 <strong>naast</strong> een ander besturingssysteem op schijf <strong>%2</strong> (%3). - + <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. <strong>Wis</strong> schijf <strong>%2</strong> (%3) en installeer %1. - + <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. <strong>Vervang</strong> een partitie op schijf <strong>%2</strong> (%3) met %1. - + <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). <strong>Handmatig</strong> partitioneren van schijf <strong>%1</strong> (%2). - + Disk <strong>%1</strong> (%2) Schijf <strong>%1</strong> (%2) - + Current: Huidig: - + After: Na: @@ -2632,12 +2638,12 @@ Het installatieprogramma zal afsluiten en alle wijzigingen zullen verloren gaan. Een aparte bootpartitie was ingesteld samen met een versleutelde rootpartitie, maar de bootpartitie zelf is niet versleuteld.<br/><br/>Dit is niet volledig veilig, aangezien belangrijke systeembestanden bewaard worden op een niet-versleutelde partitie.<br/>Je kan doorgaan als je wil, maar het ontgrendelen van bestandssystemen zal tijdens het opstarten later plaatsvinden.<br/>Om de bootpartitie toch te versleutelen: keer terug en maak de bootpartitie opnieuw, waarbij je <strong>Versleutelen</strong> aanvinkt in het venster partitie aanmaken. - + has at least one disk device available. tenminste één schijfapparaat beschikbaar. - + There are no partitions to install on. Er zijn geen partities om op te installeren. @@ -3543,17 +3549,17 @@ De installatie kan niet doorgaan. UsersPage - + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>Als meer dan één persoon deze computer zal gebruiken, kan je meerdere accounts aanmaken na installatie.</small> - + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> <small>Als meer dan één persoon deze computer zal gebruiken, kan je meerdere accounts aanmaken na installatie.</small> - + Your passwords do not match! Je wachtwoorden komen niet overeen! @@ -3561,7 +3567,7 @@ De installatie kan niet doorgaan. UsersViewStep - + Users Gebruikers @@ -3841,7 +3847,7 @@ De systeemstijdinstellingen beïnvloeden de cijfer- en datumsformaat. De huidige localeq - + Change Veranderen diff --git a/lang/calamares_pl.ts b/lang/calamares_pl.ts index 8fa9f21194..2a3828f3c5 100644 --- a/lang/calamares_pl.ts +++ b/lang/calamares_pl.ts @@ -512,134 +512,134 @@ Instalator zostanie zamknięty i wszystkie zmiany zostaną utracone.Formularz - + Select storage de&vice: &Wybierz urządzenie przechowywania: - - - - + + + + Current: Bieżący: - + After: Po: - + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. <strong>Ręczne partycjonowanie</strong><br/>Możesz samodzielnie utworzyć lub zmienić rozmiar istniejących partycji. - + Reuse %1 as home partition for %2. Użyj ponownie %1 jako partycji domowej dla %2. - + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> <strong>Wybierz partycję do zmniejszenia, a następnie przeciągnij dolny pasek, aby zmienić jej rozmiar</strong> - + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. - + Boot loader location: Położenie programu rozruchowego: - + <strong>Select a partition to install on</strong> <strong>Wybierz partycję, na której przeprowadzona będzie instalacja</strong> - + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. Nigdzie w tym systemie nie można odnaleźć partycji systemowej EFI. Prosimy się cofnąć i użyć ręcznego partycjonowania dysku do ustawienia %1. - + The EFI system partition at %1 will be used for starting %2. Partycja systemowa EFI na %1 będzie użyta do uruchamiania %2. - + EFI system partition: Partycja systemowa EFI: - + This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. To urządzenie pamięci masowej prawdopodobnie nie posiada żadnego systemu operacyjnego. Co chcesz zrobić?<br/>Będziesz miał możliwość przejrzenia oraz zatwierdzenia swoich ustawień przed wykonaniem jakichkolwiek zmian na tym urządzeniu. - - - - + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>Wyczyść dysk</strong><br/>Ta operacja <font color="red">usunie</font> wszystkie dane obecnie znajdujące się na wybranym urządzeniu przechowywania. - - - - + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Zainstaluj obok siebie</strong><br/>Instalator zmniejszy partycję, aby zrobić miejsce dla %1. - - - - + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>Zastąp partycję</strong><br/>Zastępowanie partycji poprzez %1. - + This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. To urządzenie pamięci masowej posiada %1. Co chcesz zrobić?<br/>Będziesz miał możliwość przejrzenia oraz zatwierdzenia swoich ustawień przed wykonaniem jakichkolwiek zmian na tym urządzeniu. - + This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. To urządzenie pamięci masowej posiada już system operacyjny. Co chcesz zrobić?<br/>Będziesz miał możliwość przejrzenia oraz zatwierdzenia swoich ustawień przed wykonaniem jakichkolwiek zmian na tym urządzeniu. - + This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. To urządzenie pamięci masowej posiada kilka systemów operacyjnych. Co chcesz zrobić?<br/>Będziesz miał możliwość przejrzenia oraz zatwierdzenia swoich ustawień przed wykonaniem jakichkolwiek zmian na tym urządzeniu. - + No Swap Brak przestrzeni wymiany - + Reuse Swap Użyj ponownie przestrzeni wymiany - + Swap (no Hibernate) Przestrzeń wymiany (bez hibernacji) - + Swap (with Hibernate) Przestrzeń wymiany (z hibernacją) - + Swap to file Przestrzeń wymiany do pliku @@ -717,17 +717,17 @@ Instalator zostanie zamknięty i wszystkie zmiany zostaną utracone.Ustaw model klawiatury na %1/%2. - + Set timezone to %1/%2. - + The system language will be set to %1. Język systemu zostanie ustawiony na %1. - + The numbers and dates locale will be set to %1. Format liczb i daty zostanie ustawiony na %1. @@ -797,42 +797,42 @@ Instalator zostanie zamknięty i wszystkie zmiany zostaną utracone. - + Your username is too long. Twoja nazwa użytkownika jest za długa. - + '%1' is not allowed as username. - + Your username must start with a lowercase letter or underscore. - + Only lowercase letters, numbers, underscore and hyphen are allowed. - + Your hostname is too short. Twoja nazwa komputera jest za krótka. - + Your hostname is too long. Twoja nazwa komputera jest za długa. - + '%1' is not allowed as hostname. - + Only letters, numbers, underscore and hyphen are allowed. @@ -1253,7 +1253,8 @@ Instalator zostanie zamknięty i wszystkie zmiany zostaną utracone.Potwierdź hasło - + + Please enter the same passphrase in both boxes. Użyj tego samego hasła w obu polach. @@ -1705,18 +1706,18 @@ Instalator zostanie zamknięty i wszystkie zmiany zostaną utracone. LocalePage - + Region: Region: - + Zone: Strefa: - - + + &Change... &Zmień... @@ -1794,7 +1795,12 @@ Instalator zostanie zamknięty i wszystkie zmiany zostaną utracone. Map - + + Timezone: %1 + + + + Please select your preferred location on the map so the installer can suggest the locale and timezone settings for you. You can fine-tune the suggested settings below. Search the map by dragging to move and using the +/- buttons to zoom in/out or use mouse scrolling for zooming. @@ -1955,247 +1961,247 @@ Instalator zostanie zamknięty i wszystkie zmiany zostaną utracone. PWQ - + Password is too short Hasło jest zbyt krótkie - + Password is too long Hasło jest zbyt długie - + Password is too weak Hasło jest zbyt słabe - + Memory allocation error when setting '%1' Wystąpił błąd przydzielania pamięci przy ustawieniu '%1' - + Memory allocation error Błąd przydzielania pamięci - + The password is the same as the old one Hasło jest takie samo jak poprzednie - + The password is a palindrome Hasło jest palindromem - + The password differs with case changes only Hasła różnią się tylko wielkością znaków - + The password is too similar to the old one Hasło jest zbyt podobne do poprzedniego - + The password contains the user name in some form Hasło zawiera nazwę użytkownika - + The password contains words from the real name of the user in some form Hasło zawiera fragment pełnej nazwy użytkownika - + The password contains forbidden words in some form Hasło zawiera jeden z niedozwolonych wyrazów - + The password contains less than %1 digits Hasło składa się z mniej niż %1 znaków - + The password contains too few digits Hasło zawiera zbyt mało znaków - + The password contains less than %1 uppercase letters Hasło składa się z mniej niż %1 wielkich liter - + The password contains too few uppercase letters Hasło zawiera zbyt mało wielkich liter - + The password contains less than %1 lowercase letters Hasło składa się z mniej niż %1 małych liter - + The password contains too few lowercase letters Hasło zawiera zbyt mało małych liter - + The password contains less than %1 non-alphanumeric characters Hasło składa się z mniej niż %1 znaków niealfanumerycznych - + The password contains too few non-alphanumeric characters Hasło zawiera zbyt mało znaków niealfanumerycznych - + The password is shorter than %1 characters Hasło zawiera mniej niż %1 znaków - + The password is too short Hasło jest zbyt krótkie - + The password is just rotated old one Hasło jest odwróceniem poprzedniego - + The password contains less than %1 character classes Hasło składa się z mniej niż %1 rodzajów znaków - + The password does not contain enough character classes Hasło zawiera zbyt mało rodzajów znaków - + The password contains more than %1 same characters consecutively Hasło zawiera ponad %1 powtarzających się tych samych znaków - + The password contains too many same characters consecutively Hasło zawiera zbyt wiele powtarzających się znaków - + The password contains more than %1 characters of the same class consecutively Hasło zawiera więcej niż %1 znaków tego samego rodzaju - + The password contains too many characters of the same class consecutively Hasło składa się ze zbyt wielu znaków tego samego rodzaju - + The password contains monotonic sequence longer than %1 characters Hasło zawiera jednakowy ciąg dłuższy niż %1 znaków - + The password contains too long of a monotonic character sequence Hasło zawiera zbyt długi ciąg jednakowych znaków - + No password supplied Nie podano hasła - + Cannot obtain random numbers from the RNG device Nie można uzyskać losowych znaków z urządzenia RNG - + Password generation failed - required entropy too low for settings Błąd tworzenia hasła - wymagana entropia jest zbyt niska dla ustawień - + The password fails the dictionary check - %1 Hasło nie przeszło pomyślnie sprawdzenia słownikowego - %1 - + The password fails the dictionary check Hasło nie przeszło pomyślnie sprawdzenia słownikowego - + Unknown setting - %1 Nieznane ustawienie - %1 - + Unknown setting Nieznane ustawienie - + Bad integer value of setting - %1 Błędna wartość liczby całkowitej ustawienia - %1 - + Bad integer value Błędna wartość liczby całkowitej - + Setting %1 is not of integer type Ustawienie %1 nie jest liczbą całkowitą - + Setting is not of integer type Ustawienie nie jest liczbą całkowitą - + Setting %1 is not of string type Ustawienie %1 nie jest ciągiem znaków - + Setting is not of string type Ustawienie nie jest ciągiem znaków - + Opening the configuration file failed Nie udało się otworzyć pliku konfiguracyjnego - + The configuration file is malformed Plik konfiguracyjny jest uszkodzony - + Fatal failure Błąd krytyczny - + Unknown error Nieznany błąd - + Password is empty @@ -2529,67 +2535,67 @@ Instalator zostanie zamknięty i wszystkie zmiany zostaną utracone. PartitionViewStep - + Gathering system information... Zbieranie informacji o systemie... - + Partitions Partycje - + Install %1 <strong>alongside</strong> another operating system. Zainstaluj %1 <strong>obok</strong> innego systemu operacyjnego. - + <strong>Erase</strong> disk and install %1. <strong>Wyczyść</strong> dysk i zainstaluj %1. - + <strong>Replace</strong> a partition with %1. <strong>Zastąp</strong> partycję poprzez %1. - + <strong>Manual</strong> partitioning. <strong>Ręczne</strong> partycjonowanie. - + Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). Zainstaluj %1 <strong>obok</strong> innego systemu operacyjnego na dysku <strong>%2</strong> (%3). - + <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. <strong>Wyczyść</strong> dysk <strong>%2</strong> (%3) i zainstaluj %1. - + <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. <strong>Zastąp</strong> partycję na dysku <strong>%2</strong> (%3) poprzez %1. - + <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). <strong>Ręczne</strong> partycjonowanie na dysku <strong>%1</strong> (%2). - + Disk <strong>%1</strong> (%2) Dysk <strong>%1</strong> (%2) - + Current: Bieżący: - + After: Po: @@ -2634,12 +2640,12 @@ Instalator zostanie zamknięty i wszystkie zmiany zostaną utracone.Oddzielna partycja rozruchowa została skonfigurowana razem z zaszyfrowaną partycją roota, ale partycja rozruchowa nie jest szyfrowana.<br/><br/>Nie jest to najbezpieczniejsze rozwiązanie, ponieważ ważne pliki systemowe znajdują się na niezaszyfrowanej partycji.<br/>Możesz kontynuować, ale odblokowywanie systemu nastąpi później, w trakcie uruchamiania.<br/>Aby zaszyfrować partycję rozruchową, wróć i utwórz ją ponownie zaznaczając opcję <strong>Szyfruj</strong> w oknie tworzenia partycji. - + has at least one disk device available. - + There are no partitions to install on. @@ -3545,17 +3551,17 @@ i nie uruchomi się UsersPage - + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> - + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> - + Your passwords do not match! Twoje hasła nie są zgodne! @@ -3563,7 +3569,7 @@ i nie uruchomi się UsersViewStep - + Users Użytkownicy @@ -3841,7 +3847,7 @@ i nie uruchomi się localeq - + Change diff --git a/lang/calamares_pt_BR.ts b/lang/calamares_pt_BR.ts index a18e5e0a70..9611c6005b 100644 --- a/lang/calamares_pt_BR.ts +++ b/lang/calamares_pt_BR.ts @@ -510,134 +510,134 @@ O instalador será fechado e todas as alterações serão perdidas.Formulário - + Select storage de&vice: Selecione o dispositi&vo de armazenamento: - - - - + + + + Current: Atual: - + After: Depois: - + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. <strong>Particionamento manual</strong><br/>Você pode criar ou redimensionar partições. - + Reuse %1 as home partition for %2. Reutilizar %1 como partição home para %2. - + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> <strong>Selecione uma partição para reduzir, então arraste a barra de baixo para redimensionar</strong> - + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. %1 será reduzida para %2MiB e uma nova partição de %3MiB será criada para %4. - + Boot loader location: Local do gerenciador de inicialização: - + <strong>Select a partition to install on</strong> <strong>Selecione uma partição para instalação</strong> - + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. Uma partição de sistema EFI não pôde ser encontrada neste dispositivo. Por favor, volte e use o particionamento manual para gerenciar %1. - + The EFI system partition at %1 will be used for starting %2. A partição de sistema EFI em %1 será utilizada para iniciar %2. - + EFI system partition: Partição de sistema EFI: - + This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Parece que não há um sistema operacional neste dispositivo de armazenamento. O que você gostaria de fazer?<br/>Você poderá revisar e confirmar suas opções antes que as alterações sejam feitas no dispositivo de armazenamento. - - - - + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>Apagar disco</strong><br/>Isto <font color="red">excluirá</font> todos os dados no dispositivo de armazenamento selecionado. - - - - + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Instalar lado a lado</strong><br/>O instalador reduzirá uma partição para liberar espaço para %1. - - - - + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>Substituir uma partição</strong><br/>Substitui uma partição com %1. - + This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Este dispositivo de armazenamento possui %1 nele. O que você gostaria de fazer?<br/>Você poderá revisar e confirmar suas opções antes que as alterações sejam feitas no dispositivo de armazenamento. - + This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Já há um sistema operacional neste dispositivo de armazenamento. O que você gostaria de fazer?<br/>Você poderá revisar e confirmar suas opções antes que as alterações sejam feitas no dispositivo de armazenamento. - + This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Há diversos sistemas operacionais neste dispositivo de armazenamento. O que você gostaria de fazer?<br/>Você poderá revisar e confirmar suas opções antes que as alterações sejam feitas no dispositivo de armazenamento. - + No Swap Sem swap - + Reuse Swap Reutilizar swap - + Swap (no Hibernate) Swap (sem hibernação) - + Swap (with Hibernate) Swap (com hibernação) - + Swap to file Swap em arquivo @@ -715,17 +715,17 @@ O instalador será fechado e todas as alterações serão perdidas.Definir o layout do teclado para %1/%2. - + Set timezone to %1/%2. Definir o fuso horário para %1/%2. - + The system language will be set to %1. O idioma do sistema será definido como %1. - + The numbers and dates locale will be set to %1. A localidade dos números e datas será definida como %1. @@ -795,42 +795,42 @@ O instalador será fechado e todas as alterações serão perdidas.<h1>Bem-vindo ao instalador de %1</h1> - + Your username is too long. O nome de usuário é grande demais. - + '%1' is not allowed as username. '%1' não é permitido como nome de usuário. - + Your username must start with a lowercase letter or underscore. Seu nome de usuário deve começar com uma letra minúscula ou com um sublinhado. - + Only lowercase letters, numbers, underscore and hyphen are allowed. É permitido apenas letras minúsculas, números, sublinhado e hífen. - + Your hostname is too short. O nome da máquina é muito curto. - + Your hostname is too long. O nome da máquina é muito grande. - + '%1' is not allowed as hostname. '%1' não é permitido como nome da máquina. - + Only letters, numbers, underscore and hyphen are allowed. É permitido apenas letras, números, sublinhado e hífen. @@ -1251,7 +1251,8 @@ O instalador será fechado e todas as alterações serão perdidas.Confirme a frase-chave - + + Please enter the same passphrase in both boxes. Por favor, insira a mesma frase-chave nos dois campos. @@ -1703,18 +1704,18 @@ O instalador será fechado e todas as alterações serão perdidas. LocalePage - + Region: Região: - + Zone: Área: - - + + &Change... &Mudar... @@ -1792,7 +1793,12 @@ O instalador será fechado e todas as alterações serão perdidas. Map - + + Timezone: %1 + Fuso horário: %1 + + + Please select your preferred location on the map so the installer can suggest the locale and timezone settings for you. You can fine-tune the suggested settings below. Search the map by dragging to move and using the +/- buttons to zoom in/out or use mouse scrolling for zooming. @@ -1955,247 +1961,247 @@ O instalador será fechado e todas as alterações serão perdidas. PWQ - + Password is too short A senha é muito curta - + Password is too long A senha é muito longa - + Password is too weak A senha é muito fraca - + Memory allocation error when setting '%1' Erro de alocação de memória ao definir '% 1' - + Memory allocation error Erro de alocação de memória - + The password is the same as the old one A senha é a mesma que a antiga - + The password is a palindrome A senha é um palíndromo - + The password differs with case changes only A senha difere apenas com mudanças entre maiúsculas ou minúsculas - + The password is too similar to the old one A senha é muito semelhante à antiga - + The password contains the user name in some form A senha contém o nome de usuário em alguma forma - + The password contains words from the real name of the user in some form A senha contém palavras do nome real do usuário - + The password contains forbidden words in some form A senha contém palavras proibidas de alguma forma - + The password contains less than %1 digits A senha contém menos de %1 dígitos - + The password contains too few digits A senha contém poucos dígitos - + The password contains less than %1 uppercase letters A senha contém menos que %1 letras maiúsculas - + The password contains too few uppercase letters A senha contém poucas letras maiúsculas - + The password contains less than %1 lowercase letters A senha contém menos que %1 letras minúsculas - + The password contains too few lowercase letters A senha contém poucas letras minúsculas - + The password contains less than %1 non-alphanumeric characters A senha contém menos que %1 caracteres não alfanuméricos - + The password contains too few non-alphanumeric characters A senha contém poucos caracteres não alfanuméricos - + The password is shorter than %1 characters A senha é menor que %1 caracteres - + The password is too short A senha é muito curta - + The password is just rotated old one A senha é apenas uma antiga modificada - + The password contains less than %1 character classes A senha contém menos de %1 tipos de caracteres - + The password does not contain enough character classes A senha não contém tipos suficientes de caracteres - + The password contains more than %1 same characters consecutively A senha contém mais que %1 caracteres iguais consecutivamente - + The password contains too many same characters consecutively A senha contém muitos caracteres iguais consecutivamente - + The password contains more than %1 characters of the same class consecutively A senha contém mais que %1 caracteres do mesmo tipo consecutivamente - + The password contains too many characters of the same class consecutively A senha contém muitos caracteres da mesma classe consecutivamente - + The password contains monotonic sequence longer than %1 characters A senha contém uma sequência monotônica com mais de %1 caracteres - + The password contains too long of a monotonic character sequence A senha contém uma sequência de caracteres monotônicos muito longa - + No password supplied Nenhuma senha fornecida - + Cannot obtain random numbers from the RNG device Não é possível obter números aleatórios do dispositivo RNG - + Password generation failed - required entropy too low for settings A geração de senha falhou - a entropia requerida é muito baixa para as configurações - + The password fails the dictionary check - %1 A senha falhou na verificação do dicionário - %1 - + The password fails the dictionary check A senha falhou na verificação do dicionário - + Unknown setting - %1 Configuração desconhecida - %1 - + Unknown setting Configuração desconhecida - + Bad integer value of setting - %1 Valor de número inteiro errado na configuração - %1 - + Bad integer value Valor de número inteiro errado - + Setting %1 is not of integer type A configuração %1 não é do tipo inteiro - + Setting is not of integer type A configuração não é de tipo inteiro - + Setting %1 is not of string type A configuração %1 não é do tipo string - + Setting is not of string type A configuração não é do tipo string - + Opening the configuration file failed Falha ao abrir o arquivo de configuração - + The configuration file is malformed O arquivo de configuração está defeituoso - + Fatal failure Falha fatal - + Unknown error Erro desconhecido - + Password is empty A senha está em branco @@ -2529,67 +2535,67 @@ O instalador será fechado e todas as alterações serão perdidas. PartitionViewStep - + Gathering system information... Coletando informações do sistema... - + Partitions Partições - + Install %1 <strong>alongside</strong> another operating system. Instalar %1 <strong>ao lado de</strong> outro sistema operacional. - + <strong>Erase</strong> disk and install %1. <strong>Apagar</strong> disco e instalar %1. - + <strong>Replace</strong> a partition with %1. <strong>Substituir</strong> uma partição com %1. - + <strong>Manual</strong> partitioning. Particionamento <strong>manual</strong>. - + Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). Instalar %1 <strong>ao lado de</strong> outro sistema operacional no disco <strong>%2</strong> (%3). - + <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. <strong>Apagar</strong> disco <strong>%2</strong> (%3) e instalar %1. - + <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. <strong>Substituir</strong> uma partição no disco <strong>%2</strong> (%3) com %1. - + <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). Particionamento <strong>manual</strong> no disco <strong>%1</strong> (%2). - + Disk <strong>%1</strong> (%2) Disco <strong>%1</strong> (%2) - + Current: Atualmente: - + After: Depois: @@ -2634,12 +2640,12 @@ O instalador será fechado e todas as alterações serão perdidas.Uma partição de inicialização separada foi configurada juntamente com uma partição raiz criptografada, mas a partição de inicialização não é criptografada.<br/><br/>Há preocupações de segurança quanto a esse tipo de configuração, porque arquivos de sistema importantes são mantidos em uma partição não criptografada.<br/>Você pode continuar se quiser, mas o desbloqueio do sistema de arquivos acontecerá mais tarde durante a inicialização do sistema.<br/>Para criptografar a partição de inicialização, volte e recrie-a, selecionando <strong>Criptografar</strong> na janela de criação da partição. - + has at least one disk device available. tem pelo menos um dispositivo de disco disponível. - + There are no partitions to install on. Não há partições para instalar. @@ -3547,17 +3553,17 @@ Saída: UsersPage - + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>Se mais de uma pessoa for utilizar este computador, você poderá criar múltiplas contas após terminar a configuração.</small> - + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> <small>Se mais de uma pessoa for utilizar este computador, você poderá criar múltiplas contas após terminar de instalar.</small> - + Your passwords do not match! As senhas não estão iguais! @@ -3565,7 +3571,7 @@ Saída: UsersViewStep - + Users Usuários @@ -3856,7 +3862,7 @@ Saída: localeq - + Change Modificar diff --git a/lang/calamares_pt_PT.ts b/lang/calamares_pt_PT.ts index 338c42831e..569e9f2cb0 100644 --- a/lang/calamares_pt_PT.ts +++ b/lang/calamares_pt_PT.ts @@ -510,134 +510,134 @@ O instalador será encerrado e todas as alterações serão perdidas.Formulário - + Select storage de&vice: Selecione o dis&positivo de armazenamento: - - - - + + + + Current: Atual: - + After: Depois: - + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. <strong>Particionamento manual</strong><br/>Pode criar ou redimensionar partições manualmente. - + Reuse %1 as home partition for %2. Reutilizar %1 como partição home para %2. - + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> <strong>Selecione uma partição para encolher, depois arraste a barra de fundo para redimensionar</strong> - + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. %1 será encolhida para %2MiB e uma nova %3MiB partição será criada para %4. - + Boot loader location: Localização do carregador de arranque: - + <strong>Select a partition to install on</strong> <strong>Selecione uma partição para instalar</strong> - + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. Nenhuma partição de sistema EFI foi encontrada neste sistema. Por favor volte atrás e use o particionamento manual para configurar %1. - + The EFI system partition at %1 will be used for starting %2. A partição de sistema EFI em %1 será usada para iniciar %2. - + EFI system partition: Partição de sistema EFI: - + This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Este dispositivo de armazenamento aparenta não ter um sistema operativo. O que quer fazer?<br/>Poderá rever e confirmar as suas escolhas antes de qualquer alteração ser feita no dispositivo de armazenamento. - - - - + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>Apagar disco</strong><br/>Isto irá <font color="red">apagar</font> todos os dados atualmente apresentados no dispositivo de armazenamento selecionado. - - - - + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Instalar paralelamente</strong><br/>O instalador irá encolher a partição para arranjar espaço para %1. - - - - + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>Substituir a partição</strong><br/>Substitui a partição com %1. - + This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Este dispositivo de armazenamento tem %1 nele. O que quer fazer?<br/>Poderá rever e confirmar as suas escolhas antes de qualquer alteração ser feita no dispositivo de armazenamento. - + This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Este dispositivo de armazenamento já tem um sistema operativo nele. O que quer fazer?<br/>Poderá rever e confirmar as suas escolhas antes de qualquer alteração ser feita no dispositivo de armazenamento. - + This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Este dispositivo de armazenamento tem múltiplos sistemas operativos nele, O que quer fazer?<br/>Poderá rever e confirmar as suas escolhas antes de qualquer alteração ser feita no dispositivo de armazenamento. - + No Swap Sem Swap - + Reuse Swap Reutilizar Swap - + Swap (no Hibernate) Swap (sem Hibernação) - + Swap (with Hibernate) Swap (com Hibernação) - + Swap to file Swap para ficheiro @@ -715,17 +715,17 @@ O instalador será encerrado e todas as alterações serão perdidas.Definir esquema do teclado para %1/%2. - + Set timezone to %1/%2. - + The system language will be set to %1. A linguagem do sistema será definida para %1. - + The numbers and dates locale will be set to %1. Os números e datas locais serão definidos para %1. @@ -795,42 +795,42 @@ O instalador será encerrado e todas as alterações serão perdidas. - + Your username is too long. O seu nome de utilizador é demasiado longo. - + '%1' is not allowed as username. - + Your username must start with a lowercase letter or underscore. O seu nome de utilizador deve começar com uma letra minúscula ou underscore. - + Only lowercase letters, numbers, underscore and hyphen are allowed. Apenas letras minúsculas, números, underscore e hífen são permitidos. - + Your hostname is too short. O nome da sua máquina é demasiado curto. - + Your hostname is too long. O nome da sua máquina é demasiado longo. - + '%1' is not allowed as hostname. - + Only letters, numbers, underscore and hyphen are allowed. Apenas letras, números, underscore e hífen são permitidos. @@ -1251,7 +1251,8 @@ O instalador será encerrado e todas as alterações serão perdidas.Confirmar frase-chave - + + Please enter the same passphrase in both boxes. Por favor insira a mesma frase-passe em ambas as caixas. @@ -1703,18 +1704,18 @@ O instalador será encerrado e todas as alterações serão perdidas. LocalePage - + Region: Região: - + Zone: Zona: - - + + &Change... &Alterar... @@ -1792,7 +1793,12 @@ O instalador será encerrado e todas as alterações serão perdidas. Map - + + Timezone: %1 + + + + Please select your preferred location on the map so the installer can suggest the locale and timezone settings for you. You can fine-tune the suggested settings below. Search the map by dragging to move and using the +/- buttons to zoom in/out or use mouse scrolling for zooming. @@ -1953,247 +1959,247 @@ O instalador será encerrado e todas as alterações serão perdidas. PWQ - + Password is too short A palavra-passe é demasiado curta - + Password is too long A palavra-passe é demasiado longa - + Password is too weak A palavra-passe é demasiado fraca - + Memory allocation error when setting '%1' Erro de alocação de memória quando definido '%1' - + Memory allocation error Erro de alocação de memória - + The password is the same as the old one A palavra-passe é a mesma que a antiga - + The password is a palindrome A palavra-passe é um palíndromo - + The password differs with case changes only A palavra-passe difere com apenas diferenças de maiúsculas e minúsculas - + The password is too similar to the old one A palavra-passe é demasiado semelhante à antiga - + The password contains the user name in some form A palavra passe contém de alguma forma o nome do utilizador - + The password contains words from the real name of the user in some form A palavra passe contém de alguma forma palavras do nome real do utilizador - + The password contains forbidden words in some form A palavra-passe contém de alguma forma palavras proibidas - + The password contains less than %1 digits A palavra-passe contém menos de %1 dígitos - + The password contains too few digits A palavra-passe contém muito poucos dígitos - + The password contains less than %1 uppercase letters A palavra-passe contém menos de %1 letras maiúsculas - + The password contains too few uppercase letters A palavra-passe contém muito poucas letras maiúsculas - + The password contains less than %1 lowercase letters A palavra-passe contém menos de %1 letras minúsculas - + The password contains too few lowercase letters A palavra-passe contém muito poucas letras minúsculas - + The password contains less than %1 non-alphanumeric characters A palavra-passe contém menos de %1 carateres não-alfanuméricos - + The password contains too few non-alphanumeric characters A palavra-passe contém muito pouco carateres não alfa-numéricos - + The password is shorter than %1 characters A palavra-passe é menor do que %1 carateres - + The password is too short A palavra-passe é demasiado pequena - + The password is just rotated old one A palavra-passe é apenas uma antiga alternada - + The password contains less than %1 character classes A palavra-passe contém menos de %1 classe de carateres - + The password does not contain enough character classes A palavra-passe não contém classes de carateres suficientes - + The password contains more than %1 same characters consecutively A palavra-passe contém apenas mais do que %1 carateres iguais consecutivos - + The password contains too many same characters consecutively A palavra-passe contém demasiados carateres iguais consecutivos - + The password contains more than %1 characters of the same class consecutively A palavra-passe contém mais do que %1 carateres consecutivos da mesma classe - + The password contains too many characters of the same class consecutively A palavra-passe contém demasiados carateres consecutivos da mesma classe - + The password contains monotonic sequence longer than %1 characters A palavra-passe contém sequência mono tónica mais longa do que %1 carateres - + The password contains too long of a monotonic character sequence A palavra-passe contém uma sequência mono tónica de carateres demasiado longa - + No password supplied Nenhuma palavra-passe fornecida - + Cannot obtain random numbers from the RNG device Não é possível obter sequência aleatória de números a partir do dispositivo RNG - + Password generation failed - required entropy too low for settings Geração de palavra-passe falhada - entropia obrigatória demasiado baixa para definições - + The password fails the dictionary check - %1 A palavra-passe falha a verificação do dicionário - %1 - + The password fails the dictionary check A palavra-passe falha a verificação do dicionário - + Unknown setting - %1 Definição desconhecida - %1 - + Unknown setting Definição desconhecida - + Bad integer value of setting - %1 Valor inteiro incorreto para definição - %1 - + Bad integer value Valor inteiro incorreto - + Setting %1 is not of integer type Definição %1 não é do tipo inteiro - + Setting is not of integer type Definição não é do tipo inteiro - + Setting %1 is not of string type Definição %1 não é do tipo cadeia de carateres - + Setting is not of string type Definição não é do tipo cadeira de carateres - + Opening the configuration file failed Abertura da configuração de ficheiro falhou - + The configuration file is malformed O ficheiro de configuração está mal formado - + Fatal failure Falha fatal - + Unknown error Erro desconhecido - + Password is empty Palavra-passe está vazia @@ -2527,67 +2533,67 @@ O instalador será encerrado e todas as alterações serão perdidas. PartitionViewStep - + Gathering system information... A recolher informações do sistema... - + Partitions Partições - + Install %1 <strong>alongside</strong> another operating system. Instalar %1 <strong>paralelamente</strong> a outro sistema operativo. - + <strong>Erase</strong> disk and install %1. <strong>Apagar</strong> disco e instalar %1. - + <strong>Replace</strong> a partition with %1. <strong>Substituir</strong> a partição com %1. - + <strong>Manual</strong> partitioning. Particionamento <strong>Manual</strong>. - + Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). Instalar %1 <strong>paralelamente</strong> a outro sistema operativo no disco <strong>%2</strong> (%3). - + <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. <strong>Apagar</strong> disco <strong>%2</strong> (%3) e instalar %1. - + <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. <strong>Substituir</strong> a partição no disco <strong>%2</strong> (%3) com %1. - + <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). Particionamento <strong>Manual</strong> no disco <strong>%1</strong> (%2). - + Disk <strong>%1</strong> (%2) Disco <strong>%1</strong> (%2) - + Current: Atual: - + After: Depois: @@ -2632,12 +2638,12 @@ O instalador será encerrado e todas as alterações serão perdidas.Foi preparada uma partição de arranque separada juntamente com uma partição root encriptada, mas a partição de arranque não está encriptada.<br/><br/>Existem preocupações de segurança com este tipo de configuração, por causa de importantes ficheiros de sistema serem guardados numa partição não encriptada.<br/>Se desejar pode continuar, mas o destrancar do sistema de ficheiros irá ocorrer mais tarde durante o arranque do sistema.<br/>Para encriptar a partição de arranque, volte atrás e recrie-a, e selecione <strong>Encriptar</strong> na janela de criação de partições. - + has at least one disk device available. tem pelo menos um dispositivo de disco disponível. - + There are no partitions to install on. @@ -3542,17 +3548,17 @@ Saída de Dados: UsersPage - + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>Se mais de uma pessoa usar este computador, você pode criar várias contas após a configuração.</small> - + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> <small>Se mais de uma pessoa usar este computador, você pode criar várias contas após a instalação.</small> - + Your passwords do not match! As suas palavras-passe não coincidem! @@ -3560,7 +3566,7 @@ Saída de Dados: UsersViewStep - + Users Utilizadores @@ -3838,7 +3844,7 @@ Saída de Dados: localeq - + Change diff --git a/lang/calamares_ro.ts b/lang/calamares_ro.ts index fb143b5538..828a6ff702 100644 --- a/lang/calamares_ro.ts +++ b/lang/calamares_ro.ts @@ -510,134 +510,134 @@ Programul de instalare va ieși, iar toate modificările vor fi pierdute.Formular - + Select storage de&vice: Selectează dispoziti&vul de stocare: - - - - + + + + Current: Actual: - + After: După: - + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. <strong>Partiționare manuală</strong><br/>Puteți crea sau redimensiona partițiile. - + Reuse %1 as home partition for %2. Reutilizează %1 ca partiție home pentru %2. - + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> <strong>Selectează o partiție de micșorat, apoi trageți bara din jos pentru a redimensiona</strong> - + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. - + Boot loader location: Locație boot loader: - + <strong>Select a partition to install on</strong> <strong>Selectează o partiție pe care să se instaleze</strong> - + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. O partiție de sistem EFI nu poate fi găsită nicăieri în acest sistem. Vă rugăm să reveniți și să partiționați manual pentru a seta %1. - + The EFI system partition at %1 will be used for starting %2. Partiția de sistem EFI de la %1 va fi folosită pentru a porni %2. - + EFI system partition: Partiție de sistem EFI: - + This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Acest dispozitiv de stocare nu pare să aibă un sistem de operare instalat. Ce doriți să faceți?<br/>Veți putea revedea și confirma alegerile făcute înainte să fie realizate schimbări pe dispozitivul de stocare. - - - - + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>Șterge discul</strong><br/>Aceasta va <font color="red">șterge</font> toate datele prezente pe dispozitivul de stocare selectat. - - - - + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Instalează laolaltă</strong><br/>Instalatorul va micșora o partiție pentru a face loc pentru %1. - - - - + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>Înlocuiește o partiție</strong><br/>Înlocuiește o partiție cu %1. - + This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Acest dispozitiv de stocare are %1. Ce doriți să faceți?<br/>Veți putea revedea și confirma alegerile făcute înainte să fie realizate schimbări pe dispozitivul de stocare. - + This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Acest dispozitiv de stocare are deja un sistem de operare instalat. Ce doriți să faceți?<br/>Veți putea revedea și confirma alegerile făcute înainte de se realiza schimbări pe dispozitivul de stocare. - + This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Acest dispozitiv de stocare are mai multe sisteme de operare instalate. Ce doriți să faceți?<br/>Veți putea revedea și confirma alegerile făcute înainte de a se realiza schimbări pe dispozitivul de stocare. - + No Swap - + Reuse Swap - + Swap (no Hibernate) - + Swap (with Hibernate) - + Swap to file @@ -715,17 +715,17 @@ Programul de instalare va ieși, iar toate modificările vor fi pierdute.Setează aranjamentul de tastatură la %1/%2. - + Set timezone to %1/%2. - + The system language will be set to %1. Limba sistemului va fi %1. - + The numbers and dates locale will be set to %1. Formatul numerelor și datelor calendaristice va fi %1. @@ -795,42 +795,42 @@ Programul de instalare va ieși, iar toate modificările vor fi pierdute. - + Your username is too long. Numele de utilizator este prea lung. - + '%1' is not allowed as username. - + Your username must start with a lowercase letter or underscore. - + Only lowercase letters, numbers, underscore and hyphen are allowed. - + Your hostname is too short. Hostname este prea scurt. - + Your hostname is too long. Hostname este prea lung. - + '%1' is not allowed as hostname. - + Only letters, numbers, underscore and hyphen are allowed. @@ -1251,7 +1251,8 @@ Programul de instalare va ieși, iar toate modificările vor fi pierdute.Confirmă fraza secretă - + + Please enter the same passphrase in both boxes. Introduceți aceeași frază secretă în ambele căsuțe. @@ -1703,18 +1704,18 @@ Programul de instalare va ieși, iar toate modificările vor fi pierdute. LocalePage - + Region: Regiune: - + Zone: Zonă: - - + + &Change... S&chimbă @@ -1792,7 +1793,12 @@ Programul de instalare va ieși, iar toate modificările vor fi pierdute. Map - + + Timezone: %1 + + + + Please select your preferred location on the map so the installer can suggest the locale and timezone settings for you. You can fine-tune the suggested settings below. Search the map by dragging to move and using the +/- buttons to zoom in/out or use mouse scrolling for zooming. @@ -1953,102 +1959,102 @@ Programul de instalare va ieși, iar toate modificările vor fi pierdute. PWQ - + Password is too short Parola este prea scurtă - + Password is too long Parola este prea lungă - + Password is too weak Parola este prea slabă - + Memory allocation error when setting '%1' Eroare de alocare a memorie in timpul setării '%1' - + Memory allocation error Eroare de alocare a memoriei - + The password is the same as the old one Parola este aceeasi a si cea veche - + The password is a palindrome Parola este un palindrom - + The password differs with case changes only Parola diferă doar prin schimbăarii ale majusculelor - + The password is too similar to the old one Parola este prea similară cu cea vehe - + The password contains the user name in some form Parola contine numele de utilizator intr-o anume formă - + The password contains words from the real name of the user in some form Parola contine cuvinte din numele real al utilizatorului intr-o anumita formă - + The password contains forbidden words in some form Parola contine cuvinte interzise int-o anumita formă - + The password contains less than %1 digits Parola contine mai putin de %1 caractere - + The password contains too few digits Parola contine prea putine caractere - + The password contains less than %1 uppercase letters Parola contine mai putin de %1 litera cu majusculă - + The password contains too few uppercase letters Parola contine prea putine majuscule - + The password contains less than %1 lowercase letters Parola contine mai putin de %1 minuscule - + The password contains too few lowercase letters Parola contine prea putine minuscule - + The password contains less than %1 non-alphanumeric characters Parola contine mai putin de %1 caractere non-alfanumerice - + The password contains too few non-alphanumeric characters Parola contine prea putine caractere non-alfanumerice @@ -2056,147 +2062,147 @@ Programul de instalare va ieși, iar toate modificările vor fi pierdute. - + The password is shorter than %1 characters Parola este mai scurta de %1 caractere - + The password is too short Parola este prea mica - + The password is just rotated old one Parola este doar cea veche rasturnata - + The password contains less than %1 character classes Parola contine mai putin de %1 clase de caractere - + The password does not contain enough character classes Parola nu contine destule clase de caractere - + The password contains more than %1 same characters consecutively Parola ontine mai mult de %1 caractere identice consecutiv - + The password contains too many same characters consecutively Parola ontine prea multe caractere identice consecutive - + The password contains more than %1 characters of the same class consecutively Parola contine mai mult de %1 caractere ale aceleiaşi clase consecutive - + The password contains too many characters of the same class consecutively Parola contine prea multe caractere ale aceleiaşi clase consecutive - + The password contains monotonic sequence longer than %1 characters Parola ontine o secventa monotonica mai lunga de %1 caractere - + The password contains too long of a monotonic character sequence Parola contine o secventa de caractere monotonica prea lunga - + No password supplied Nicio parola nu a fost furnizata - + Cannot obtain random numbers from the RNG device Nu s-a putut obtine un numar aleator de la dispozitivul RNG - + Password generation failed - required entropy too low for settings Generarea parolei a esuat - necesita entropie prea mica pentru setari - + The password fails the dictionary check - %1 Parola a esuat verificarea dictionarului - %1 - + The password fails the dictionary check Parola a esuat verificarea dictionarului - + Unknown setting - %1 Setare necunoscuta - %1 - + Unknown setting Setare necunoscuta - + Bad integer value of setting - %1 Valoare gresita integrala a setari - %1 - + Bad integer value Valoare gresita integrala a setari - + Setting %1 is not of integer type Setarea %1 nu este de tip integral - + Setting is not of integer type Setarea nu este de tipul integral - + Setting %1 is not of string type Setarea %1 nu este de tipul şir - + Setting is not of string type Setarea nu este de tipul şir - + Opening the configuration file failed Deschiderea fisierului de configuratie a esuat - + The configuration file is malformed Fisierul de configuratie este malformat - + Fatal failure Esec fatal - + Unknown error Eroare necunoscuta - + Password is empty @@ -2530,67 +2536,67 @@ Programul de instalare va ieși, iar toate modificările vor fi pierdute. PartitionViewStep - + Gathering system information... Se adună informații despre sistem... - + Partitions Partiții - + Install %1 <strong>alongside</strong> another operating system. Instalează %1 <strong>laolaltă</strong> cu un alt sistem de operare. - + <strong>Erase</strong> disk and install %1. <strong>Șterge</strong> discul și instalează %1. - + <strong>Replace</strong> a partition with %1. <strong>Înlocuiește</strong> o partiție cu %1. - + <strong>Manual</strong> partitioning. Partiționare <strong>manuală</strong>. - + Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). Instalează %1 <strong>laolaltă</strong> cu un alt sistem de operare pe discul <strong>%2</strong> (%3). - + <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. <strong>Șterge</strong> discul <strong>%2</strong> (%3) și instalează %1. - + <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. <strong>Înlocuiește</strong> o partiție pe discul <strong>%2</strong> (%3) cu %1. - + <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). Partiționare <strong>manuală</strong> a discului <strong>%1</strong> (%2). - + Disk <strong>%1</strong> (%2) Discul <strong>%1</strong> (%2) - + Current: Actual: - + After: După: @@ -2635,12 +2641,12 @@ Programul de instalare va ieși, iar toate modificările vor fi pierdute.A fost creată o partiție de boot împreună cu o partiție root criptată, dar partiția de boot nu este criptată.<br/><br/>Sunt potențiale probleme de securitate cu un astfel de aranjament deoarece importante fișiere de sistem sunt păstrate pe o partiție necriptată.<br/>Puteți continua dacă doriți, dar descuierea sistemului se va petrece mai târziu în timpul pornirii.<br/>Pentru a cripta partiția de boot, reveniți și recreați-o, alegând opțiunea <strong>Criptează</strong> din fereastra de creare de partiții. - + has at least one disk device available. - + There are no partitions to install on. @@ -3545,17 +3551,17 @@ Output UsersPage - + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> - + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> - + Your passwords do not match! Parolele nu se potrivesc! @@ -3563,7 +3569,7 @@ Output UsersViewStep - + Users Utilizatori @@ -3841,7 +3847,7 @@ Output localeq - + Change diff --git a/lang/calamares_ru.ts b/lang/calamares_ru.ts index fbd70e0847..c86827f7f1 100644 --- a/lang/calamares_ru.ts +++ b/lang/calamares_ru.ts @@ -513,134 +513,134 @@ n%1 Форма - + Select storage de&vice: Выбрать устройство &хранения: - - - - + + + + Current: Текущий: - + After: После: - + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. <strong>Ручная разметка</strong><br/>Вы можете самостоятельно создавать разделы или изменять их размеры. - + Reuse %1 as home partition for %2. Использовать %1 как домашний раздел для %2. - + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> <strong>Выберите раздел для уменьшения, затем двигайте ползунок, изменяя размер</strong> - + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. %1 будет уменьшен до %2MB и новый раздел %3MB будет создан для %4. - + Boot loader location: Расположение загрузчика: - + <strong>Select a partition to install on</strong> <strong>Выберите раздел для установки</strong> - + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. Не найдено системного раздела EFI. Пожалуйста, вернитесь назад и выполните ручную разметку %1. - + The EFI system partition at %1 will be used for starting %2. Системный раздел EFI на %1 будет использован для запуска %2. - + EFI system partition: Системный раздел EFI: - + This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Видимо, на этом устройстве нет операционной системы. Что Вы хотите сделать?<br/>Вы сможете изменить или подтвердить свой выбор до того, как на устройстве будут сделаны какие-либо изменения. - - - - + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>Стереть диск</strong><br/>Это <font color="red">удалит</font> все данные, которые сейчас находятся на выбранном устройстве. - - - - + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Установить рядом</strong><br/>Программа установки уменьшит раздел, чтобы освободить место для %1. - - - - + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>Заменить раздел</strong><br/>Меняет раздел на %1. - + This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. На этом устройстве есть %1. Что Вы хотите сделать?<br/>Вы сможете изменить или подтвердить свой выбор до того, как на устройстве будут сделаны какие-либо изменения. - + This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. На этом устройстве уже есть операционная система. Что Вы хотите сделать?<br/>Вы сможете изменить или подтвердить свой выбор до того, как на устройстве будут сделаны какие-либо изменения. - + This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. На этом устройстве есть несколько операционных систем. Что Вы хотите сделать?<br/>Вы сможете изменить или подтвердить свой выбор до того, как на устройстве будут сделаны какие-либо изменения. - + No Swap Без раздела подкачки - + Reuse Swap Использовать существующий раздел подкачки - + Swap (no Hibernate) Swap (без Гибернации) - + Swap (with Hibernate) Swap (с Гибернацией) - + Swap to file Файл подкачки @@ -718,17 +718,17 @@ n%1 Установить раскладку клавиатуры на %1/%2. - + Set timezone to %1/%2. - + The system language will be set to %1. Системным языком будет установлен %1. - + The numbers and dates locale will be set to %1. Региональным форматом чисел и дат будет установлен %1. @@ -798,42 +798,42 @@ n%1 <h1>Добро пожаловать в программу установки %1 .</h1> - + Your username is too long. Ваше имя пользователя слишком длинное. - + '%1' is not allowed as username. - + Your username must start with a lowercase letter or underscore. Ваше имя пользователя должно начинаться со строчной буквы или подчеркивания. - + Only lowercase letters, numbers, underscore and hyphen are allowed. Допускаются только строчные буквы, числа, символы подчёркивания и дефисы. - + Your hostname is too short. Имя вашего компьютера слишком коротко. - + Your hostname is too long. Имя вашего компьютера слишком длинное. - + '%1' is not allowed as hostname. - + Only letters, numbers, underscore and hyphen are allowed. Допускаются только буквы, цифры, символы подчёркивания и дефисы. @@ -1254,7 +1254,8 @@ n%1 Подтвердите пароль - + + Please enter the same passphrase in both boxes. Пожалуйста, введите один и тот же пароль в оба поля. @@ -1706,18 +1707,18 @@ n%1 LocalePage - + Region: Регион: - + Zone: Зона: - - + + &Change... И&зменить... @@ -1795,7 +1796,12 @@ n%1 Map - + + Timezone: %1 + Часовой пояс: %1 + + + Please select your preferred location on the map so the installer can suggest the locale and timezone settings for you. You can fine-tune the suggested settings below. Search the map by dragging to move and using the +/- buttons to zoom in/out or use mouse scrolling for zooming. @@ -1956,247 +1962,247 @@ n%1 PWQ - + Password is too short Слишком короткий пароль - + Password is too long Слишком длинный пароль - + Password is too weak Пароль слишком слабый - + Memory allocation error when setting '%1' Ошибка выделения памяти при установке «%1» - + Memory allocation error Ошибка выделения памяти - + The password is the same as the old one Пароль такой же, как и старый - + The password is a palindrome Пароль является палиндромом - + The password differs with case changes only Пароль отличается только регистром символов - + The password is too similar to the old one Пароль слишком похож на старый - + The password contains the user name in some form Пароль содержит имя пользователя - + The password contains words from the real name of the user in some form Пароль содержит слова из реального имени пользователя - + The password contains forbidden words in some form Пароль содержит запрещённые слова - + The password contains less than %1 digits Пароль содержит менее %1 цифр - + The password contains too few digits В пароле слишком мало цифр - + The password contains less than %1 uppercase letters Пароль содержит менее %1 заглавных букв - + The password contains too few uppercase letters В пароле слишком мало заглавных букв - + The password contains less than %1 lowercase letters Пароль содержит менее %1 строчных букв - + The password contains too few lowercase letters В пароле слишком мало строчных букв - + The password contains less than %1 non-alphanumeric characters Пароль содержит менее %1 не буквенно-цифровых символов - + The password contains too few non-alphanumeric characters В пароле слишком мало не буквенно-цифровых символов - + The password is shorter than %1 characters Пароль короче %1 символов - + The password is too short Пароль слишком короткий - + The password is just rotated old one Новый пароль — это просто перевёрнутый старый - + The password contains less than %1 character classes Пароль содержит менее %1 классов символов - + The password does not contain enough character classes Пароль содержит недостаточно классов символов - + The password contains more than %1 same characters consecutively Пароль содержит более %1 одинаковых последовательных символов - + The password contains too many same characters consecutively Пароль содержит слишком много одинаковых последовательных символов - + The password contains more than %1 characters of the same class consecutively Пароль содержит более %1 символов одного и того же класса последовательно - + The password contains too many characters of the same class consecutively Пароль содержит слишком длинную последовательность символов одного и того же класса - + The password contains monotonic sequence longer than %1 characters Пароль содержит монотонную последовательность длиннее %1 символов - + The password contains too long of a monotonic character sequence Пароль содержит слишком длинную монотонную последовательность символов - + No password supplied Не задан пароль - + Cannot obtain random numbers from the RNG device Не удаётся получить случайные числа с устройства RNG - + Password generation failed - required entropy too low for settings Сбой генерации пароля - слишком низкая энтропия для настроек - + The password fails the dictionary check - %1 Пароль не прошёл проверку на использование словарных слов - %1 - + The password fails the dictionary check Пароль не прошёл проверку на использование словарных слов - + Unknown setting - %1 Неизвестная настройка - %1 - + Unknown setting Неизвестная настройка - + Bad integer value of setting - %1 Недопустимое целое значение свойства - %1 - + Bad integer value Недопустимое целое значение - + Setting %1 is not of integer type Настройка %1 не является целым числом - + Setting is not of integer type Настройка не является целым числом - + Setting %1 is not of string type Настройка %1 не является строкой - + Setting is not of string type Настройка не является строкой - + Opening the configuration file failed Не удалось открыть конфигурационный файл - + The configuration file is malformed Ошибка в структуре конфигурационного файла - + Fatal failure Фатальный сбой - + Unknown error Неизвестная ошибка - + Password is empty Пустой пароль @@ -2530,67 +2536,67 @@ n%1 PartitionViewStep - + Gathering system information... Сбор информации о системе... - + Partitions Разделы - + Install %1 <strong>alongside</strong> another operating system. Установить %1 <strong>параллельно</strong> к другой операционной системе. - + <strong>Erase</strong> disk and install %1. <strong>Очистить</strong> диск и установить %1. - + <strong>Replace</strong> a partition with %1. <strong>Заменить</strong> раздел на %1. - + <strong>Manual</strong> partitioning. <strong>Ручная</strong> разметка. - + Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). Установить %1 <strong>параллельно</strong> к другой операционной системе на диске <strong>%2</strong> (%3). - + <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. <strong>Очистить</strong> диск <strong>%2</strong> (%3) и установить %1. - + <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. <strong>Заменить</strong> раздел на диске <strong>%2</strong> (%3) на %1. - + <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). <strong>Ручная</strong> разметка диска <strong>%1</strong> (%2). - + Disk <strong>%1</strong> (%2) Диск <strong>%1</strong> (%2) - + Current: Текущий: - + After: После: @@ -2635,12 +2641,12 @@ n%1 Включено шифрование корневого раздела, но использован отдельный загрузочный раздел без шифрования.<br/><br/>При такой конфигурации возникают проблемы с безопасностью, потому что важные системные файлы хранятся на разделе без шифрования.<br/>Если хотите, можете продолжить, но файловая система будет разблокирована позднее во время загрузки системы.<br/>Чтобы включить шифрование загрузочного раздела, вернитесь назад и снова создайте его, отметив <strong>Шифровать</strong> в окне создания раздела. - + has at least one disk device available. имеет как минимум одно доступное дисковое устройство. - + There are no partitions to install on. Нет разделов для установки. @@ -3546,17 +3552,17 @@ Output: UsersPage - + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>Если этот компьютер будет использоваться несколькими людьми, вы сможете создать учетные записи для них после установки.</small> - + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> <small>Если этот компьютер используется несколькими людьми, Вы сможете создать соответствующие учетные записи сразу после установки.</small> - + Your passwords do not match! Пароли не совпадают! @@ -3564,7 +3570,7 @@ Output: UsersViewStep - + Users Пользователи @@ -3842,7 +3848,7 @@ Output: localeq - + Change diff --git a/lang/calamares_sk.ts b/lang/calamares_sk.ts index 8b138f46bc..3afe31e157 100644 --- a/lang/calamares_sk.ts +++ b/lang/calamares_sk.ts @@ -514,134 +514,134 @@ Inštalátor sa ukončí a všetky zmeny budú stratené. Forma - + Select storage de&vice: Vyberte úložné &zariadenie: - - - - + + + + Current: Teraz: - + After: Potom: - + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. <strong>Ručné rozdelenie oddielov</strong><br/>Môžete vytvoriť alebo zmeniť veľkosť oddielov podľa seba. - + Reuse %1 as home partition for %2. Opakované použitie oddielu %1 ako domovského pre distribúciu %2. - + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> <strong>Vyberte oddiel na zmenšenie a potom potiahnutím spodného pruhu zmeňte veľkosť</strong> - + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. Oddiel %1 bude zmenšený na %2MiB a nový %3MiB oddiel bude vytvorený pre distribúciu %4. - + Boot loader location: Umiestnenie zavádzača: - + <strong>Select a partition to install on</strong> <strong>Vyberte oddiel, na ktorý sa má inštalovať</strong> - + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. Oddiel systému EFI sa nedá v tomto počítači nájsť. Prosím, prejdite späť a použite ručné rozdelenie oddielov na inštaláciu distribúcie %1. - + The EFI system partition at %1 will be used for starting %2. Oddie lsystému EFI na %1 bude použitý na spustenie distribúcie %2. - + EFI system partition: Oddiel systému EFI: - + This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Zdá sa, že toto úložné zariadenie neobsahuje operačný systém. Čo by ste chceli urobiť?<br/>Budete môcť skontrolovať a potvrdiť vaše voľby pred uplatnením akejkoľvek zmeny na úložnom zariadení. - - - - + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>Vymazanie disku</strong><br/>Týmto sa <font color="red">odstránia</font> všetky údaje momentálne sa nachádzajúce na vybranom úložnom zariadení. - - - - + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Inštalácia popri súčasnom systéme</strong><br/>Inštalátor zmenší oddiel a uvoľní miesto pre distribúciu %1. - - - - + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>Nahradenie oddielu</strong><br/>Nahradí oddiel distribúciou %1. - + This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Toto úložné zariadenie obsahuje operačný systém %1. Čo by ste chceli urobiť?<br/>Budete môcť skontrolovať a potvrdiť vaše voľby pred uplatnením akejkoľvek zmeny na úložnom zariadení. - + This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Toto úložné zariadenie už obsahuje operačný systém. Čo by ste chceli urobiť?<br/>Budete môcť skontrolovať a potvrdiť vaše voľby pred uplatnením akejkoľvek zmeny na úložnom zariadení. - + This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Toto úložné zariadenie obsahuje viacero operačných systémov. Čo by ste chceli urobiť?<br/>Budete môcť skontrolovať a potvrdiť vaše voľby pred uplatnením akejkoľvek zmeny na úložnom zariadení. - + No Swap Bez odkladacieho priestoru - + Reuse Swap Znovu použiť odkladací priestor - + Swap (no Hibernate) Odkladací priestor (bez hibernácie) - + Swap (with Hibernate) Odkladací priestor (s hibernáciou) - + Swap to file Odkladací priestor v súbore @@ -719,17 +719,17 @@ Inštalátor sa ukončí a všetky zmeny budú stratené. Nastavenie rozloženia klávesnice na %1/%2. - + Set timezone to %1/%2. Nastavenie časovej zóny na %1/%2. - + The system language will be set to %1. Jazyk systému bude nastavený na %1. - + The numbers and dates locale will be set to %1. Miestne nastavenie čísel a dátumov bude nastavené na %1. @@ -799,42 +799,42 @@ Inštalátor sa ukončí a všetky zmeny budú stratené. <h1>Vitajte v inštalátore distribúcie %1</h1> - + Your username is too long. Vaše používateľské meno je príliš dlhé. - + '%1' is not allowed as username. - + „%1“ nie je možné použiť ako používateľské meno. - + Your username must start with a lowercase letter or underscore. Vaše používateľské meno musí začínať malým písmenom alebo podčiarkovníkom. - + Only lowercase letters, numbers, underscore and hyphen are allowed. Sú povolené iba malé písmená, číslice, podtržníky a pomlčky. - + Your hostname is too short. Váš názov hostiteľa je príliš krátky. - + Your hostname is too long. Váš názov hostiteľa je príliš dlhý. - + '%1' is not allowed as hostname. - + „%1“ nie je možné použiť ako názov hostiteľa. - + Only letters, numbers, underscore and hyphen are allowed. Sú povolené iba písmená, číslice, podtržníky a pomlčky. @@ -1255,7 +1255,8 @@ Inštalátor sa ukončí a všetky zmeny budú stratené. Potvrdenie hesla - + + Please enter the same passphrase in both boxes. Prosím, zadajte rovnaké heslo do oboch polí. @@ -1707,18 +1708,18 @@ Inštalátor sa ukončí a všetky zmeny budú stratené. LocalePage - + Region: Oblasť: - + Zone: Zóna: - - + + &Change... Z&meniť... @@ -1796,7 +1797,12 @@ Inštalátor sa ukončí a všetky zmeny budú stratené. Map - + + Timezone: %1 + Časová zóna: %1 + + + Please select your preferred location on the map so the installer can suggest the locale and timezone settings for you. You can fine-tune the suggested settings below. Search the map by dragging to move and using the +/- buttons to zoom in/out or use mouse scrolling for zooming. @@ -1957,247 +1963,247 @@ Inštalátor sa ukončí a všetky zmeny budú stratené. PWQ - + Password is too short Heslo je príliš krátke - + Password is too long Heslo je príliš dlhé - + Password is too weak Heslo je príliš slabé - + Memory allocation error when setting '%1' Chyba počas vyhradzovania pamäte pri nastavovaní „%1“ - + Memory allocation error Chyba počas vyhradzovania pamäte - + The password is the same as the old one Heslo je rovnaké ako to staré - + The password is a palindrome Heslo je palindróm - + The password differs with case changes only Heslo sa odlišuje iba vo veľkosti písmen - + The password is too similar to the old one Heslo je príliš podobné ako to staré - + The password contains the user name in some form Heslo obsahuje v nejakom tvare používateľské meno - + The password contains words from the real name of the user in some form Heslo obsahuje v nejakom tvare slová zo skutočného mena používateľa - + The password contains forbidden words in some form Heslo obsahuje zakázané slová v určitom tvare - + The password contains less than %1 digits Heslo obsahuje menej ako %1 číslic - + The password contains too few digits Heslo tiež obsahuje pár číslic - + The password contains less than %1 uppercase letters Heslo obsahuje menej ako %1 veľkých písmen - + The password contains too few uppercase letters Heslo obsahuje príliš málo veľkých písmen - + The password contains less than %1 lowercase letters Heslo obsahuje menej ako %1 malých písmen - + The password contains too few lowercase letters Heslo obsahuje príliš málo malých písmen - + The password contains less than %1 non-alphanumeric characters Heslo obsahuje menej ako% 1 nealfanumerických znakov - + The password contains too few non-alphanumeric characters Heslo obsahuje príliš málo nealfanumerických znakov - + The password is shorter than %1 characters Heslo je kratšie ako %1 znakov - + The password is too short Heslo je príliš krátke - + The password is just rotated old one Heslo je iba obrátené staré heslo - + The password contains less than %1 character classes Heslo obsahuje menej ako %1 triedy znakov - + The password does not contain enough character classes Heslo neobsahuje dostatok tried znakov - + The password contains more than %1 same characters consecutively Heslo obsahuje viac ako% 1 rovnakých znakov za sebou - + The password contains too many same characters consecutively Heslo obsahuje príliš veľa rovnakých znakov - + The password contains more than %1 characters of the same class consecutively Heslo obsahuje postupne viac ako% 1 znakov toho istého typu - + The password contains too many characters of the same class consecutively Heslo obsahuje postupne príliš veľa znakov toho istého typu - + The password contains monotonic sequence longer than %1 characters Heslo obsahuje monotónnu sekvenciu dlhšiu ako %1 znakov - + The password contains too long of a monotonic character sequence Heslo obsahuje príliš dlhú sekvenciu monotónnych znakov - + No password supplied Nebolo poskytnuté žiadne heslo - + Cannot obtain random numbers from the RNG device Nedajú sa získať náhodné čísla zo zariadenia RNG - + Password generation failed - required entropy too low for settings Generovanie hesla zlyhalo - potrebná entropia je príliš nízka na nastavenie - + The password fails the dictionary check - %1 Heslo zlyhalo pri slovníkovej kontrole - %1 - + The password fails the dictionary check Heslo zlyhalo pri slovníkovej kontrole - + Unknown setting - %1 Neznáme nastavenie - %1 - + Unknown setting Neznáme nastavenie - + Bad integer value of setting - %1 Nesprávna celočíselná hodnota nastavenia - %1 - + Bad integer value Nesprávna celočíselná hodnota - + Setting %1 is not of integer type Nastavenie %1 nie je celé číslo - + Setting is not of integer type Nastavenie nie je celé číslo - + Setting %1 is not of string type Nastavenie %1 nie je reťazec - + Setting is not of string type Nastavenie nie je reťazec - + Opening the configuration file failed Zlyhalo otváranie konfiguračného súboru - + The configuration file is malformed Konfiguračný súbor je poškodený - + Fatal failure Závažné zlyhanie - + Unknown error Neznáma chyba - + Password is empty Heslo je prázdne @@ -2531,67 +2537,67 @@ Inštalátor sa ukončí a všetky zmeny budú stratené. PartitionViewStep - + Gathering system information... Zbierajú sa informácie o počítači... - + Partitions Oddiely - + Install %1 <strong>alongside</strong> another operating system. Inštalácia distribúcie %1 <strong>popri</strong> inom operačnom systéme. - + <strong>Erase</strong> disk and install %1. <strong>Vymazanie</strong> disku a inštalácia distribúcie %1. - + <strong>Replace</strong> a partition with %1. <strong>Nahradenie</strong> oddielu distribúciou %1. - + <strong>Manual</strong> partitioning. <strong>Ručné</strong> rozdelenie oddielov. - + Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). Inštalácia distribúcie %1 <strong>popri</strong> inom operačnom systéme na disku <strong>%2</strong> (%3). - + <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. <strong>Vymazanie</strong> disku <strong>%2</strong> (%3) a inštalácia distribúcie %1. - + <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. <strong>Nahradenie</strong> oddielu na disku <strong>%2</strong> (%3) distribúciou %1. - + <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). <strong>Ručné</strong> rozdelenie oddielov na disku <strong>%1</strong> (%2). - + Disk <strong>%1</strong> (%2) Disk <strong>%1</strong> (%2) - + Current: Teraz: - + After: Potom: @@ -2636,12 +2642,12 @@ Inštalátor sa ukončí a všetky zmeny budú stratené. Spolu so zašifrovaným koreňovým oddielom bol nainštalovaný oddelený zavádzací oddiel, ktorý ale nie je zašifrovaný.<br/><br/>S týmto typom inštalácie je ohrozená bezpečnosť, pretože dôležité systémové súbory sú uchovávané na nezašifrovanom oddieli.<br/>Ak si to želáte, môžete pokračovať, ale neskôr, počas spúšťania systému sa vykoná odomknutie systému súborov.<br/>Na zašifrovanie zavádzacieho oddielu prejdite späť a vytvorte ju znovu vybraním voľby <strong>Zašifrovať</strong> v okne vytvárania oddielu. - + has at least one disk device available. má dostupné aspoň jedno diskové zariadenie. - + There are no partitions to install on. Neexistujú žiadne oddiely, na ktoré je možné vykonať inštaláciu. @@ -3442,28 +3448,28 @@ Výstup: KDE user feedback - + Používateľská spätná väzba prostredia KDE Configuring KDE user feedback. - + Nastavuje sa používateľská spätná väzba prostredia KDE. Error in KDE user feedback configuration. - + Chyba pri nastavovaní používateľskej spätnej väzby prostredia KDE. Could not configure KDE user feedback correctly, script error %1. - + Nepodarilo sa správne nastaviť používateľskú spätnú väzbu prostredia KDE. Chyba %1 skriptu. Could not configure KDE user feedback correctly, Calamares error %1. - + Nepodarilo sa správne nastaviť používateľskú spätnú väzbu prostredia KDE. Chyba %1 inštalátora Calamares. @@ -3510,7 +3516,7 @@ Výstup: <html><head/><body><p>Click here to send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> - + <html><head/><body><p>Kliknutím sem neodošlete <span style=" font-weight:600;">absolútne žiadne informácie</span> o vašej inštalácii.</p></body></html> @@ -3549,17 +3555,17 @@ Výstup: UsersPage - + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>Ak bude tento počítač používať viac ako jedna osoba, môžete nastaviť viacero účtov po inštalácii.</small> - + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> <small>Ak bude tento počítač používať viac ako jedna osoba, môžete nastaviť viacero účtov po inštalácii.</small> - + Your passwords do not match! Vaše heslá sa nezhodujú! @@ -3567,7 +3573,7 @@ Výstup: UsersViewStep - + Users Používatelia @@ -3793,13 +3799,15 @@ Výstup: <h1>Languages</h1> </br> The system locale setting affects the language and character set for some command line user interface elements. The current setting is <strong>%1</strong>. - + <h1>Jazyky</h1> </br> + Miestne nastavenie systému ovplyvní jazyk a znakovú sadu pre niektoré prvky používateľského rozhrania príkazového riadku. Aktuálne nastavenie je <strong>%1</strong>. <h1>Locales</h1> </br> The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. - + <h1>Miestne nastavenie</h1> </br> + Miestne nastavenie systému ovplyvní formát čísel a dátumov. Aktuálne nastavenie je <strong>%1</strong>. @@ -3855,7 +3863,7 @@ Výstup: localeq - + Change Zmeniť diff --git a/lang/calamares_sl.ts b/lang/calamares_sl.ts index 0f59bdb5ee..9cef1395d5 100644 --- a/lang/calamares_sl.ts +++ b/lang/calamares_sl.ts @@ -512,134 +512,134 @@ Namestilni program se bo končal in vse spremembe bodo izgubljene. Oblika - + Select storage de&vice: - - - - + + + + Current: - + After: Potem: - + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. - + Reuse %1 as home partition for %2. - + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> - + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. - + Boot loader location: - + <strong>Select a partition to install on</strong> - + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. - + The EFI system partition at %1 will be used for starting %2. - + EFI system partition: - + This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. - - - - + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. - - - - + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. - - - - + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. - + This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. - + This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. - + This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. - + No Swap - + Reuse Swap - + Swap (no Hibernate) - + Swap (with Hibernate) - + Swap to file @@ -717,17 +717,17 @@ Namestilni program se bo končal in vse spremembe bodo izgubljene. Nastavi razporeditev tipkovnice na %1/%2. - + Set timezone to %1/%2. - + The system language will be set to %1. - + The numbers and dates locale will be set to %1. @@ -797,42 +797,42 @@ Namestilni program se bo končal in vse spremembe bodo izgubljene. - + Your username is too long. - + '%1' is not allowed as username. - + Your username must start with a lowercase letter or underscore. - + Only lowercase letters, numbers, underscore and hyphen are allowed. - + Your hostname is too short. - + Your hostname is too long. - + '%1' is not allowed as hostname. - + Only letters, numbers, underscore and hyphen are allowed. @@ -1253,7 +1253,8 @@ Namestilni program se bo končal in vse spremembe bodo izgubljene. - + + Please enter the same passphrase in both boxes. @@ -1705,18 +1706,18 @@ Namestilni program se bo končal in vse spremembe bodo izgubljene. LocalePage - + Region: Območje: - + Zone: Časovni pas: - - + + &Change... @@ -1794,7 +1795,12 @@ Namestilni program se bo končal in vse spremembe bodo izgubljene. Map - + + Timezone: %1 + + + + Please select your preferred location on the map so the installer can suggest the locale and timezone settings for you. You can fine-tune the suggested settings below. Search the map by dragging to move and using the +/- buttons to zoom in/out or use mouse scrolling for zooming. @@ -1955,247 +1961,247 @@ Namestilni program se bo končal in vse spremembe bodo izgubljene. PWQ - + Password is too short - + Password is too long - + Password is too weak - + Memory allocation error when setting '%1' - + Memory allocation error - + The password is the same as the old one - + The password is a palindrome - + The password differs with case changes only - + The password is too similar to the old one - + The password contains the user name in some form - + The password contains words from the real name of the user in some form - + The password contains forbidden words in some form - + The password contains less than %1 digits - + The password contains too few digits - + The password contains less than %1 uppercase letters - + The password contains too few uppercase letters - + The password contains less than %1 lowercase letters - + The password contains too few lowercase letters - + The password contains less than %1 non-alphanumeric characters - + The password contains too few non-alphanumeric characters - + The password is shorter than %1 characters - + The password is too short - + The password is just rotated old one - + The password contains less than %1 character classes - + The password does not contain enough character classes - + The password contains more than %1 same characters consecutively - + The password contains too many same characters consecutively - + The password contains more than %1 characters of the same class consecutively - + The password contains too many characters of the same class consecutively - + The password contains monotonic sequence longer than %1 characters - + The password contains too long of a monotonic character sequence - + No password supplied - + Cannot obtain random numbers from the RNG device - + Password generation failed - required entropy too low for settings - + The password fails the dictionary check - %1 - + The password fails the dictionary check - + Unknown setting - %1 - + Unknown setting - + Bad integer value of setting - %1 - + Bad integer value - + Setting %1 is not of integer type - + Setting is not of integer type - + Setting %1 is not of string type - + Setting is not of string type - + Opening the configuration file failed - + The configuration file is malformed - + Fatal failure - + Unknown error - + Password is empty @@ -2529,67 +2535,67 @@ Namestilni program se bo končal in vse spremembe bodo izgubljene. PartitionViewStep - + Gathering system information... Zbiranje informacij o sistemu ... - + Partitions Razdelki - + Install %1 <strong>alongside</strong> another operating system. - + <strong>Erase</strong> disk and install %1. - + <strong>Replace</strong> a partition with %1. - + <strong>Manual</strong> partitioning. - + Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). - + <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. - + <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. - + <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). - + Disk <strong>%1</strong> (%2) - + Current: - + After: Potem: @@ -2634,12 +2640,12 @@ Namestilni program se bo končal in vse spremembe bodo izgubljene. - + has at least one disk device available. - + There are no partitions to install on. @@ -3541,17 +3547,17 @@ Output: UsersPage - + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> - + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> - + Your passwords do not match! @@ -3559,7 +3565,7 @@ Output: UsersViewStep - + Users @@ -3837,7 +3843,7 @@ Output: localeq - + Change diff --git a/lang/calamares_sq.ts b/lang/calamares_sq.ts index a113727012..c83df20be9 100644 --- a/lang/calamares_sq.ts +++ b/lang/calamares_sq.ts @@ -510,134 +510,134 @@ Instaluesi do të mbyllet dhe krejt ndryshimet do të hidhen tej. Formular - + Select storage de&vice: Përzgjidhni &pajisje depozitimi: - - - - + + + + Current: E tanishmja: - + After: Më Pas: - + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. <strong>Pjesëzim dorazi</strong><br/>Pjesët mund t’i krijoni dhe ripërmasoni ju vetë. - + Reuse %1 as home partition for %2. Ripërdore %1 si pjesën shtëpi për %2. - + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> <strong>Përzgjidhni një pjesë që të zvogëlohet, mandej tërhiqni shtyllën e poshtme që ta ripërmasoni</strong> - + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. %1 do të zvogëlohet në %2MiB dhe për %4 do të krijohet një pjesë e re %3MiB. - + Boot loader location: Vendndodhje ngarkuesi nisjesh: - + <strong>Select a partition to install on</strong> <strong>Përzgjidhni një pjesë ku të instalohet</strong> - + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. Në këtë sistem s’gjendet gjëkundi një pjesë EFI sistemi. Ju lutemi, kthehuni mbrapsht dhe përdorni pjesëtimin dorazi që të rregulloni %1. - + The EFI system partition at %1 will be used for starting %2. Për nisjen e %2 do të përdoret pjesa EFI e sistemit te %1. - + EFI system partition: Pjesë EFI sistemi: - + This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Kjo pajisje depozitimi përmban %1 në të. Ç’do të donit të bënit?<br/>Do të jeni në gjendje të rishqyrtoni dhe ripohoni zgjedhjet tuaja, para se te pajisja e depozitimit të bëhet çfarëdo ndryshimi. - - - - + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>Fshije diskun</strong><br/>Kështu do të <font color=\"red\">fshihen</font> krejt të dhënat të pranishme tani në pajisjen e përzgjedhur. - - - - + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Instaloje në krah të tij</strong><br/>Instaluesi do të zvogëlojë një pjesë për të bërë vend për %1. - - - - + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>Zëvendëso një pjesë</strong><br/>Zëvendëson një pjesë me %1. - + This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Kjo pajisje depozitimi përmban %1 në të. Ç’do të donit të bënit?<br/>Do të jeni në gjendje të rishqyrtoni dhe ripohoni zgjedhjet tuaja, para se te pajisja e depozitimit të bëhet çfarëdo ndryshimi. - + This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Kjo pajisje depozitimi ka tashmë një sistem operativ në të. Ç’do të donit të bënit?<br/>Do të jeni në gjendje të rishqyrtoni dhe ripohoni zgjedhjet tuaja, para se te pajisja e depozitimit të bëhet çfarëdo ndryshimi. - + This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Kjo pajisje depozitimi ka disa sisteme operativë në të. Ç’do të donit të bënit?<br/>Do të jeni në gjendje të rishqyrtoni dhe ripohoni zgjedhjet tuaja, para se te pajisja e depozitimit të bëhet çfarëdo ndryshimi. - + No Swap Pa Swap - + Reuse Swap Ripërdor Swap-in - + Swap (no Hibernate) Swap (pa Hibernate) - + Swap (with Hibernate) Swap (me Hibernate) - + Swap to file Swap në kartelë @@ -715,17 +715,17 @@ Instaluesi do të mbyllet dhe krejt ndryshimet do të hidhen tej. Si model tastiere do të caktohet %1%2. - + Set timezone to %1/%2. Si zonë kohore cakto %1/%2 - + The system language will be set to %1. Si gjuhë sistemi do të caktohet %1. - + The numbers and dates locale will be set to %1. Si vendore për numra dhe data do të vihet %1. @@ -795,42 +795,42 @@ Instaluesi do të mbyllet dhe krejt ndryshimet do të hidhen tej. <h1>Mirë se vini te instaluesi i %1</h1> - + Your username is too long. Emri juaj i përdoruesit është shumë i gjatë. - + '%1' is not allowed as username. '%1' s’lejohet si emër përdoruesi. - + Your username must start with a lowercase letter or underscore. Emri juaj i përdoruesit duhet të fillojë me një shkronjë të vogël ose nënvijë. - + Only lowercase letters, numbers, underscore and hyphen are allowed. Lejohen vetëm shkronja të vogla, numra, nënvijë dhe vijë ndarëse. - + Your hostname is too short. Strehëemri juaj është shumë i shkurtër. - + Your hostname is too long. Strehëemri juaj është shumë i gjatë. - + '%1' is not allowed as hostname. '%1' s’lejohet si strehëemër. - + Only letters, numbers, underscore and hyphen are allowed. Lejohen vetëm shkronja, numra, nënvijë dhe vijë ndarëse. @@ -1251,7 +1251,8 @@ Instaluesi do të mbyllet dhe krejt ndryshimet do të hidhen tej. Ripohoni frazëkalimin - + + Please enter the same passphrase in both boxes. Ju lutemi, jepni të njëjtin frazëkalim në të dy kutizat. @@ -1703,18 +1704,18 @@ Instaluesi do të mbyllet dhe krejt ndryshimet do të hidhen tej. LocalePage - + Region: Rajon: - + Zone: Zonë: - - + + &Change... &Ndryshojeni… @@ -1792,7 +1793,12 @@ Instaluesi do të mbyllet dhe krejt ndryshimet do të hidhen tej. Map - + + Timezone: %1 + Zonë kohore: %1 + + + Please select your preferred location on the map so the installer can suggest the locale and timezone settings for you. You can fine-tune the suggested settings below. Search the map by dragging to move and using the +/- buttons to zoom in/out or use mouse scrolling for zooming. @@ -1953,247 +1959,247 @@ Instaluesi do të mbyllet dhe krejt ndryshimet do të hidhen tej. PWQ - + Password is too short Fjalëkalimi është shumë i shkurtër - + Password is too long Fjalëkalimi është shumë i gjatë - + Password is too weak Fjalëkalimi është shumë i dobët - + Memory allocation error when setting '%1' Gabim caktimi kujtese kur rregullohej '%1' - + Memory allocation error Gabim caktimi kujtese - + The password is the same as the old one Fjalëkalimi është i njëjtë me të vjetrin - + The password is a palindrome Fjalëkalimi është një palindromë - + The password differs with case changes only Fjalëkalimet ndryshojnë vetëm nga shkronja të mëdha apo të vogla - + The password is too similar to the old one Fjalëkalimi është shumë i ngjashëm me të vjetrin - + The password contains the user name in some form Fjalëkalimi, në një farë mënyre, përmban emrin e përdoruesit - + The password contains words from the real name of the user in some form Fjalëkalimi, në një farë mënyre, përmban fjalë nga emri i vërtetë i përdoruesit - + The password contains forbidden words in some form Fjalëkalimi, në një farë mënyre, përmban fjalë të ndaluara - + The password contains less than %1 digits Fjalëkalimi përmban më pak se %1 shifra - + The password contains too few digits Fjalëkalimi përmban shumë pak shifra - + The password contains less than %1 uppercase letters Fjalëkalimi përmban më pak se %1 shkronja të mëdha - + The password contains too few uppercase letters Fjalëkalimi përmban pak shkronja të mëdha - + The password contains less than %1 lowercase letters Fjalëkalimi përmban më pak se %1 shkronja të vogla - + The password contains too few lowercase letters Fjalëkalimi përmban pak shkronja të vogla - + The password contains less than %1 non-alphanumeric characters Fjalëkalimi përmban më pak se %1 shenja jo alfanumerike - + The password contains too few non-alphanumeric characters Fjalëkalimi përmban pak shenja jo alfanumerike - + The password is shorter than %1 characters Fjalëkalimi është më i shkurtër se %1 shenja - + The password is too short Fjalëkalimi është shumë i shkurtër - + The password is just rotated old one Fjalëkalimi është i vjetri i ricikluar - + The password contains less than %1 character classes Fjalëkalimi përmban më pak se %1 klasa shenjash - + The password does not contain enough character classes Fjalëkalimi nuk përmban klasa të mjaftueshme shenjash - + The password contains more than %1 same characters consecutively Fjalëkalimi përmban më shumë se %1 shenja të njëjta njëra pas tjetrës - + The password contains too many same characters consecutively Fjalëkalimi përmban shumë shenja të njëjta njëra pas tjetrës - + The password contains more than %1 characters of the same class consecutively Fjalëkalimi përmban më shumë se %1 shenja të së njëjtës klasë njëra pas tjetrës - + The password contains too many characters of the same class consecutively Fjalëkalimi përmban shumë shenja të së njëjtës klasë njëra pas tjetrës - + The password contains monotonic sequence longer than %1 characters Fjalëkalimi përmban varg monoton më të gjatë se %1 shenja - + The password contains too long of a monotonic character sequence Fjalëkalimi përmban varg monoton shumë të gjatë shenjash - + No password supplied S’u dha fjalëkalim - + Cannot obtain random numbers from the RNG device S’merren dot numra të rëndomtë nga pajisja RNG - + Password generation failed - required entropy too low for settings Prodhimi i fjalëkalimit dështoi - entropi e domosdoshme për rregullimin shumë e ulët - + The password fails the dictionary check - %1 Fjalëkalimi s’kaloi dot kontrollin kundrejt fjalorit - %1 - + The password fails the dictionary check Fjalëkalimi s’kaloi dot kontrollin kundrejt fjalorit - + Unknown setting - %1 Rregullim i panjohur - %1 - + Unknown setting Rregullim i panjohur - + Bad integer value of setting - %1 Vlerë e plotë e gabuar për rregullimin - %1 - + Bad integer value Vlerë e plotë e gabuar - + Setting %1 is not of integer type Rregullimi për %1 s’është numër i plotë - + Setting is not of integer type Rregullimi s’është numër i plotë - + Setting %1 is not of string type Rregullimi për %1 s’është i llojit varg - + Setting is not of string type Rregullimi s’është i llojit varg - + Opening the configuration file failed Dështoi hapja e kartelës së formësimit - + The configuration file is malformed Kartela e formësimit është e keqformuar - + Fatal failure Dështim fatal - + Unknown error Gabim i panjohur - + Password is empty Fjalëkalimi është i zbrazët @@ -2527,67 +2533,67 @@ Instaluesi do të mbyllet dhe krejt ndryshimet do të hidhen tej. PartitionViewStep - + Gathering system information... Po grumbullohen të dhëna mbi sistemin… - + Partitions Pjesë - + Install %1 <strong>alongside</strong> another operating system. Instalojeni %1 <strong>në krah</strong> të një tjetër sistemi operativ. - + <strong>Erase</strong> disk and install %1. <strong>Fshije</strong> diskun dhe instalo %1. - + <strong>Replace</strong> a partition with %1. <strong>Zëvendësojeni</strong> një pjesë me %1. - + <strong>Manual</strong> partitioning. Pjesëtim <strong>dorazi</strong>. - + Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). Instaloje %1 <strong>në krah</strong> të një tjetri sistemi operativ në diskun <strong>%2</strong> (%3). - + <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. <strong>Fshije</strong> diskun <strong>%2</strong> (%3) dhe instalo %1. - + <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. <strong>Zëvendëso</strong> një pjesë te disku <strong>%2</strong> (%3) me %1. - + <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). Pjesëtim <strong>dorazi</strong> në diskun <strong>%1</strong> (%2). - + Disk <strong>%1</strong> (%2) Disku <strong>%1</strong> (%2) - + Current: E tanishmja: - + After: Më Pas: @@ -2632,12 +2638,12 @@ Instaluesi do të mbyllet dhe krejt ndryshimet do të hidhen tej. Tok me pjesën e fshehtëzuar <em>root</em> qe rregulluar edhe një pjesë <em>boot</em> veçmas, por pjesa <em>boot</em> s’është e fshehtëzuar.<br/><br/>Ka preokupime mbi sigurinë e këtij lloj rregullimi, ngaqë kartela të rëndësishme sistemi mbahen në një pjesë të pafshehtëzuar.<br/>Mund të vazhdoni, nëse doni, por shkyçja e sistemit të kartelave do të ndodhë më vonë, gjatë nisjes së sistemit.<br/>Që të fshehtëzoni pjesën <em>boot</em>, kthehuni mbrapsht dhe rikrijojeni, duke përzgjedhur te skena e krijimit të pjesës <strong>Fshehtëzoje</strong>. - + has at least one disk device available. ka të paktën një pajisje disku për përdorim. - + There are no partitions to install on. S’ka pjesë ku të instalohet. @@ -3545,17 +3551,17 @@ Përfundim: UsersPage - + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>Nëse këtë kompjuter do ta përdorë më shumë se një person, mund të krijoni disa llogari, pas rregullimit.</small> - + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> <small>Nëse këtë kompjuter do ta përdorë më shumë se një person, mund të krijoni disa llogari, pas instalimit.</small> - + Your passwords do not match! Fjalëkalimet tuaj s’përputhen! @@ -3563,7 +3569,7 @@ Përfundim: UsersViewStep - + Users Përdorues @@ -3854,7 +3860,7 @@ Përfundim: localeq - + Change Ndryshojeni diff --git a/lang/calamares_sr.ts b/lang/calamares_sr.ts index f5e7cad729..98ee6c7da0 100644 --- a/lang/calamares_sr.ts +++ b/lang/calamares_sr.ts @@ -510,134 +510,134 @@ The installer will quit and all changes will be lost. Форма - + Select storage de&vice: Изаберите у&ређај за смештање: - - - - + + + + Current: Тренутно: - + After: После: - + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. <strong>Ручно партиционисање</strong><br/>Сами можете креирати или мењати партције. - + Reuse %1 as home partition for %2. - + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> - + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. - + Boot loader location: Подизни учитавач на: - + <strong>Select a partition to install on</strong> - + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. - + The EFI system partition at %1 will be used for starting %2. - + EFI system partition: - + This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. - - - - + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. - - - - + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. - - - - + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. - + This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. - + This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. - + This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. - + No Swap - + Reuse Swap - + Swap (no Hibernate) - + Swap (with Hibernate) - + Swap to file @@ -715,17 +715,17 @@ The installer will quit and all changes will be lost. - + Set timezone to %1/%2. - + The system language will be set to %1. Системски језик биће постављен на %1 - + The numbers and dates locale will be set to %1. @@ -795,42 +795,42 @@ The installer will quit and all changes will be lost. - + Your username is too long. Ваше корисничко име је предугачко. - + '%1' is not allowed as username. - + Your username must start with a lowercase letter or underscore. - + Only lowercase letters, numbers, underscore and hyphen are allowed. - + Your hostname is too short. Име вашег "домаћина" - hostname је прекратко. - + Your hostname is too long. Ваше име домаћина је предуго - hostname - + '%1' is not allowed as hostname. - + Only letters, numbers, underscore and hyphen are allowed. @@ -1251,7 +1251,8 @@ The installer will quit and all changes will be lost. - + + Please enter the same passphrase in both boxes. @@ -1703,18 +1704,18 @@ The installer will quit and all changes will be lost. LocalePage - + Region: Регион: - + Zone: Зона: - - + + &Change... &Измени... @@ -1792,7 +1793,12 @@ The installer will quit and all changes will be lost. Map - + + Timezone: %1 + + + + Please select your preferred location on the map so the installer can suggest the locale and timezone settings for you. You can fine-tune the suggested settings below. Search the map by dragging to move and using the +/- buttons to zoom in/out or use mouse scrolling for zooming. @@ -1953,247 +1959,247 @@ The installer will quit and all changes will be lost. PWQ - + Password is too short - + Password is too long - + Password is too weak - + Memory allocation error when setting '%1' - + Memory allocation error - + The password is the same as the old one - + The password is a palindrome - + The password differs with case changes only - + The password is too similar to the old one - + The password contains the user name in some form - + The password contains words from the real name of the user in some form - + The password contains forbidden words in some form - + The password contains less than %1 digits - + The password contains too few digits - + The password contains less than %1 uppercase letters - + The password contains too few uppercase letters - + The password contains less than %1 lowercase letters - + The password contains too few lowercase letters - + The password contains less than %1 non-alphanumeric characters - + The password contains too few non-alphanumeric characters - + The password is shorter than %1 characters - + The password is too short - + The password is just rotated old one - + The password contains less than %1 character classes - + The password does not contain enough character classes - + The password contains more than %1 same characters consecutively - + The password contains too many same characters consecutively - + The password contains more than %1 characters of the same class consecutively - + The password contains too many characters of the same class consecutively - + The password contains monotonic sequence longer than %1 characters - + The password contains too long of a monotonic character sequence - + No password supplied - + Cannot obtain random numbers from the RNG device - + Password generation failed - required entropy too low for settings - + The password fails the dictionary check - %1 - + The password fails the dictionary check - + Unknown setting - %1 - + Unknown setting - + Bad integer value of setting - %1 - + Bad integer value - + Setting %1 is not of integer type - + Setting is not of integer type - + Setting %1 is not of string type - + Setting is not of string type - + Opening the configuration file failed - + The configuration file is malformed - + Fatal failure - + Unknown error - + Password is empty @@ -2527,67 +2533,67 @@ The installer will quit and all changes will be lost. PartitionViewStep - + Gathering system information... - + Partitions - + Install %1 <strong>alongside</strong> another operating system. - + <strong>Erase</strong> disk and install %1. - + <strong>Replace</strong> a partition with %1. - + <strong>Manual</strong> partitioning. - + Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). - + <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. - + <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. - + <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). - + Disk <strong>%1</strong> (%2) - + Current: Тренутно: - + After: После: @@ -2632,12 +2638,12 @@ The installer will quit and all changes will be lost. - + has at least one disk device available. - + There are no partitions to install on. @@ -3539,17 +3545,17 @@ Output: UsersPage - + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> - + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> - + Your passwords do not match! Лозинке се не поклапају! @@ -3557,7 +3563,7 @@ Output: UsersViewStep - + Users Корисници @@ -3835,7 +3841,7 @@ Output: localeq - + Change diff --git a/lang/calamares_sr@latin.ts b/lang/calamares_sr@latin.ts index 431ec89f0a..dd1b1ec69b 100644 --- a/lang/calamares_sr@latin.ts +++ b/lang/calamares_sr@latin.ts @@ -510,134 +510,134 @@ Instaler će se zatvoriti i sve promjene će biti izgubljene. - + Select storage de&vice: - - - - + + + + Current: - + After: Poslije: - + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. - + Reuse %1 as home partition for %2. - + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> - + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. - + Boot loader location: - + <strong>Select a partition to install on</strong> - + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. - + The EFI system partition at %1 will be used for starting %2. - + EFI system partition: - + This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. - - - - + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. - - - - + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. - - - - + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. - + This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. - + This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. - + This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. - + No Swap - + Reuse Swap - + Swap (no Hibernate) - + Swap (with Hibernate) - + Swap to file @@ -715,17 +715,17 @@ Instaler će se zatvoriti i sve promjene će biti izgubljene. - + Set timezone to %1/%2. - + The system language will be set to %1. - + The numbers and dates locale will be set to %1. @@ -795,42 +795,42 @@ Instaler će se zatvoriti i sve promjene će biti izgubljene. - + Your username is too long. - + '%1' is not allowed as username. - + Your username must start with a lowercase letter or underscore. - + Only lowercase letters, numbers, underscore and hyphen are allowed. - + Your hostname is too short. - + Your hostname is too long. - + '%1' is not allowed as hostname. - + Only letters, numbers, underscore and hyphen are allowed. @@ -1251,7 +1251,8 @@ Instaler će se zatvoriti i sve promjene će biti izgubljene. - + + Please enter the same passphrase in both boxes. @@ -1703,18 +1704,18 @@ Instaler će se zatvoriti i sve promjene će biti izgubljene. LocalePage - + Region: Regija: - + Zone: Zona: - - + + &Change... @@ -1792,7 +1793,12 @@ Instaler će se zatvoriti i sve promjene će biti izgubljene. Map - + + Timezone: %1 + + + + Please select your preferred location on the map so the installer can suggest the locale and timezone settings for you. You can fine-tune the suggested settings below. Search the map by dragging to move and using the +/- buttons to zoom in/out or use mouse scrolling for zooming. @@ -1953,247 +1959,247 @@ Instaler će se zatvoriti i sve promjene će biti izgubljene. PWQ - + Password is too short - + Password is too long - + Password is too weak - + Memory allocation error when setting '%1' - + Memory allocation error - + The password is the same as the old one - + The password is a palindrome - + The password differs with case changes only - + The password is too similar to the old one - + The password contains the user name in some form - + The password contains words from the real name of the user in some form - + The password contains forbidden words in some form - + The password contains less than %1 digits - + The password contains too few digits - + The password contains less than %1 uppercase letters - + The password contains too few uppercase letters - + The password contains less than %1 lowercase letters - + The password contains too few lowercase letters - + The password contains less than %1 non-alphanumeric characters - + The password contains too few non-alphanumeric characters - + The password is shorter than %1 characters - + The password is too short - + The password is just rotated old one - + The password contains less than %1 character classes - + The password does not contain enough character classes - + The password contains more than %1 same characters consecutively - + The password contains too many same characters consecutively - + The password contains more than %1 characters of the same class consecutively - + The password contains too many characters of the same class consecutively - + The password contains monotonic sequence longer than %1 characters - + The password contains too long of a monotonic character sequence - + No password supplied - + Cannot obtain random numbers from the RNG device - + Password generation failed - required entropy too low for settings - + The password fails the dictionary check - %1 - + The password fails the dictionary check - + Unknown setting - %1 - + Unknown setting - + Bad integer value of setting - %1 - + Bad integer value - + Setting %1 is not of integer type - + Setting is not of integer type - + Setting %1 is not of string type - + Setting is not of string type - + Opening the configuration file failed - + The configuration file is malformed - + Fatal failure - + Unknown error - + Password is empty @@ -2527,67 +2533,67 @@ Instaler će se zatvoriti i sve promjene će biti izgubljene. PartitionViewStep - + Gathering system information... - + Partitions Particije - + Install %1 <strong>alongside</strong> another operating system. - + <strong>Erase</strong> disk and install %1. - + <strong>Replace</strong> a partition with %1. - + <strong>Manual</strong> partitioning. - + Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). - + <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. - + <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. - + <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). - + Disk <strong>%1</strong> (%2) - + Current: - + After: Poslije: @@ -2632,12 +2638,12 @@ Instaler će se zatvoriti i sve promjene će biti izgubljene. - + has at least one disk device available. - + There are no partitions to install on. @@ -3539,17 +3545,17 @@ Output: UsersPage - + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> - + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> - + Your passwords do not match! Vaše lozinke se ne poklapaju @@ -3557,7 +3563,7 @@ Output: UsersViewStep - + Users Korisnici @@ -3835,7 +3841,7 @@ Output: localeq - + Change diff --git a/lang/calamares_sv.ts b/lang/calamares_sv.ts index c1bc83bc74..2e746aa2f2 100644 --- a/lang/calamares_sv.ts +++ b/lang/calamares_sv.ts @@ -509,134 +509,134 @@ Alla ändringar kommer att gå förlorade. Formulär - + Select storage de&vice: Välj lagringsenhet: - - - - + + + + Current: Nuvarande: - + After: Efter: - + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. <strong>Manuell partitionering</strong><br/>Du kan själv skapa och ändra storlek på partitionerna. - + Reuse %1 as home partition for %2. Återanvänd %1 som hempartition för %2. - + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> <strong>Välj en partition att minska, sen dra i nedre fältet för att ändra storlek</strong> - + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. %1 kommer att förminskas till %2MiB och en ny %3MiB partition kommer att skapas för %4. - + Boot loader location: Sökväg till starthanterare: - + <strong>Select a partition to install on</strong> <strong>Välj en partition att installera på</strong> - + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. Ingen EFI-partition kunde inte hittas på systemet. Gå tillbaka och partitionera din lagringsenhet manuellt för att ställa in %1. - + The EFI system partition at %1 will be used for starting %2. EFI-partitionen %1 kommer att användas för att starta %2. - + EFI system partition: EFI-partition: - + This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Denna lagringsenhet ser inte ut att ha ett operativsystem installerat. Vad vill du göra?<br/>Du kommer kunna granska och bekräfta dina val innan någon ändring görs på lagringseneheten. - - - - + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>Rensa lagringsenhet</strong><br/>Detta kommer <font color="red">radera</font> all existerande data på den valda lagringsenheten. - - - - + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Installera på sidan om</strong><br/>Installationshanteraren kommer krympa en partition för att göra utrymme för %1. - - - - + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>Ersätt en partition</strong><br/>Ersätter en partition med %1. - + This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Denna lagringsenhet har %1 på sig. Vad vill du göra?<br/>Du kommer kunna granska och bekräfta dina val innan någon ändring görs på lagringsenheten. - + This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Denna lagringsenhet har redan ett operativsystem på sig. Vad vill du göra?<br/>Du kommer kunna granska och bekräfta dina val innan någon ändring sker på lagringsenheten. - + This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Denna lagringsenhet har flera operativsystem på sig. Vad vill du göra?<br/>Du kommer kunna granska och bekräfta dina val innan någon ändring sker på lagringsenheten. - + No Swap Ingen Swap - + Reuse Swap Återanvänd Swap - + Swap (no Hibernate) Swap (utan viloläge) - + Swap (with Hibernate) Swap (med viloläge) - + Swap to file Använd en fil som växlingsenhet @@ -714,17 +714,17 @@ Alla ändringar kommer att gå förlorade. Sätt tangentbordslayout till %1/%2. - + Set timezone to %1/%2. Sätt tidszon till %1/%2. - + The system language will be set to %1. Systemspråket kommer ändras till %1. - + The numbers and dates locale will be set to %1. Systemspråket för siffror och datum kommer sättas till %1. @@ -794,42 +794,42 @@ Alla ändringar kommer att gå förlorade. <h1>Välkommen till %1-installeraren</h1> - + Your username is too long. Ditt användarnamn är för långt. - + '%1' is not allowed as username. '%1' är inte tillåtet som användarnamn. - + Your username must start with a lowercase letter or underscore. Ditt användarnamn måste börja med en liten bokstav eller ett understreck. - + Only lowercase letters, numbers, underscore and hyphen are allowed. Endast små bokstäver, nummer, understreck och bindestreck är tillåtet. - + Your hostname is too short. Ditt värdnamn är för kort. - + Your hostname is too long. Ditt värdnamn är för långt. - + '%1' is not allowed as hostname. '%1' är inte tillåtet som värdnamn. - + Only letters, numbers, underscore and hyphen are allowed. Endast bokstäver, nummer, understreck och bindestreck är tillåtet. @@ -1250,7 +1250,8 @@ Alla ändringar kommer att gå förlorade. Bekräfta lösenord - + + Please enter the same passphrase in both boxes. Vänligen skriv samma lösenord i båda fälten. @@ -1702,18 +1703,18 @@ Alla ändringar kommer att gå förlorade. LocalePage - + Region: Region: - + Zone: Zon: - - + + &Change... Ändra... @@ -1791,7 +1792,12 @@ Alla ändringar kommer att gå förlorade. Map - + + Timezone: %1 + Tidszon: %1 + + + Please select your preferred location on the map so the installer can suggest the locale and timezone settings for you. You can fine-tune the suggested settings below. Search the map by dragging to move and using the +/- buttons to zoom in/out or use mouse scrolling for zooming. @@ -1955,247 +1961,247 @@ Sök på kartan genom att dra PWQ - + Password is too short Lösenordet är för kort - + Password is too long Lösenordet är för långt - + Password is too weak Lösenordet är för svagt - + Memory allocation error when setting '%1' Minnesallokerings fel då '%1' skulle ställas in - + Memory allocation error Minnesallokerings fel - + The password is the same as the old one Lösenordet är samma som det gamla - + The password is a palindrome Lösenordet är en palindrom - + The password differs with case changes only Endast stora och små bokstäver skiljer lösenorden åt - + The password is too similar to the old one Lösenordet liknar för mycket det gamla - + The password contains the user name in some form Lösenordet innehåller ditt användarnamn i någon form - + The password contains words from the real name of the user in some form Lösenordet innehåller ord från användarens namn i någon form - + The password contains forbidden words in some form Lösenordet innehåller förbjudna ord i någon form - + The password contains less than %1 digits Lösenordet innehåller mindre än %1 siffror - + The password contains too few digits Lösenordet innehåller för få siffror - + The password contains less than %1 uppercase letters Lösenordet innehåller mindre än %1 stora bokstäver - + The password contains too few uppercase letters Lösenordet innehåller för få stora bokstäver - + The password contains less than %1 lowercase letters Lösenordet innehåller mindre än %1 små bokstäver - + The password contains too few lowercase letters Lösenordet innehåller för få små bokstäver - + The password contains less than %1 non-alphanumeric characters Lösenordet innehåller färre än %1 icke alfanumeriska tecken - + The password contains too few non-alphanumeric characters Lösenordet innehåller för få icke-alfanumeriska tecken - + The password is shorter than %1 characters Lösenordet är kortare än %1 tecken - + The password is too short Detta lösenordet är för kort - + The password is just rotated old one Lösenordet är ett roterat gammalt lösenord - + The password contains less than %1 character classes Lösenordet innehåller färre än %1 teckenklasser - + The password does not contain enough character classes Lösenordet innehåller inte tillräckligt många teckenklasser - + The password contains more than %1 same characters consecutively Lösenordet innehåller fler än %1 likadana tecken i rad - + The password contains too many same characters consecutively Lösenordet innehåller för många liknande tecken efter varandra - + The password contains more than %1 characters of the same class consecutively Lösenordet innehåller fler än %1 tecken från samma klass i rad - + The password contains too many characters of the same class consecutively Lösenordet innehåller för många tecken från samma klass i rad - + The password contains monotonic sequence longer than %1 characters Lösenordet innehåller en monoton sekvens längre än %1 tecken - + The password contains too long of a monotonic character sequence Lösenordet innehåller en för lång monoton teckensekvens - + No password supplied Inget lösenord angivit - + Cannot obtain random numbers from the RNG device Kan inte hämta slumptal från slumptalsgeneratorn - + Password generation failed - required entropy too low for settings Lösenordsgenerering misslyckades - för lite entropi tillgänglig för givna inställningar - + The password fails the dictionary check - %1 Lösenordet klarar inte ordlistekontrollen - %1 - + The password fails the dictionary check Lösenordet klarar inte ordlistekontrollen - + Unknown setting - %1 Okänd inställning - %1 - + Unknown setting Okänd inställning - + Bad integer value of setting - %1 Dåligt heltals värde på inställning - %1 - + Bad integer value Dåligt heltals värde - + Setting %1 is not of integer type Inställning %1 är inte av heltals typ - + Setting is not of integer type Inställning är inte av heltals typ - + Setting %1 is not of string type Inställning %1 är inte av sträng typ - + Setting is not of string type Inställning %1 är inte av sträng typ - + Opening the configuration file failed Öppnande av konfigurationsfilen misslyckades - + The configuration file is malformed Konfigurationsfilen är felaktig - + Fatal failure Fatalt fel - + Unknown error Okänt fel - + Password is empty Lösenordet är blankt @@ -2529,67 +2535,67 @@ Sök på kartan genom att dra PartitionViewStep - + Gathering system information... Samlar systeminformation... - + Partitions Partitioner - + Install %1 <strong>alongside</strong> another operating system. Installera %1 <strong>bredvid</strong> ett annat operativsystem. - + <strong>Erase</strong> disk and install %1. <strong>Rensa</strong> disken och installera %1. - + <strong>Replace</strong> a partition with %1. <strong>Ersätt</strong> en partition med %1. - + <strong>Manual</strong> partitioning. <strong>Manuell</strong> partitionering. - + Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). Installera %1 <strong>bredvid</strong> ett annat operativsystem på disken <strong>%2</strong> (%3). - + <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. <strong>Rensa</strong> disken <strong>%2</strong> (%3) och installera %1. - + <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. <strong>Ersätt</strong> en partition på disken <strong>%2</strong> (%3) med %1. - + <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). <strong>Manuell</strong> partitionering på disken <strong>%1</strong> (%2). - + Disk <strong>%1</strong> (%2) Disk <strong>%1</strong> (%2) - + Current: Nuvarande: - + After: Efter: @@ -2634,12 +2640,12 @@ Sök på kartan genom att dra En separat uppstartspartition skapades tillsammans med den krypterade rootpartitionen, men uppstartspartitionen är inte krypterad.<br/><br/>Det finns säkerhetsproblem med den här inställningen, eftersom viktiga systemfiler sparas på en okrypterad partition.<br/>Du kan fortsätta om du vill, men upplåsning av filsystemet kommer hända senare under uppstart av systemet.<br/>För att kryptera uppstartspartitionen, gå tillbaka och återskapa den, och välj <strong>Kryptera</strong> i fönstret när du skapar partitionen. - + has at least one disk device available. har åtminstone en diskenhet tillgänglig. - + There are no partitions to install on. Det finns inga partitioner att installera på. @@ -3547,17 +3553,17 @@ Installationen kan inte fortsätta.</p> UsersPage - + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>Om mer än en person skall använda datorn så kan du skapa flera användarkonton när inställningarna är klara.</small> - + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> <small>Om mer än en person skall använda datorn så kan du skapa flera användarkonton när installationen är klar.</small> - + Your passwords do not match! Lösenorden överensstämmer inte! @@ -3565,7 +3571,7 @@ Installationen kan inte fortsätta.</p> UsersViewStep - + Users Användare @@ -3856,7 +3862,7 @@ Systems nationella inställningar påverkar nummer och datumformat. Den nuvarand localeq - + Change Ändra diff --git a/lang/calamares_tg.ts b/lang/calamares_tg.ts index d353527a99..c7d0d3501b 100644 --- a/lang/calamares_tg.ts +++ b/lang/calamares_tg.ts @@ -511,134 +511,134 @@ The installer will quit and all changes will be lost. Шакл - + Select storage de&vice: Интихоби дастгоҳи &захирагоҳ: - - - - + + + + Current: Танзимоти ҷорӣ: - + After: Баъд аз тағйир: - + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. <strong>Қисмбандии диск ба таври дастӣ</strong><br/>Шумо худатон метавонед қисмҳои дискро эҷод кунед ё андозаи онҳоро иваз намоед. - + Reuse %1 as home partition for %2. Дубора истифода бурдани %1 ҳамчун диски асосӣ барои %2. - + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> <strong>Қисми дискеро, ки мехоҳед хурдтар кунед, интихоб намоед, пас лавҳаи поёнро барои ивази андоза кашед</strong> - + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. %1 то андозаи %2MiB хурдтар мешавад ва қисми диски нав бо андозаи %3MiB барои %4 эҷод карда мешавад. - + Boot loader location: Ҷойгиршавии боркунандаи роҳандозӣ: - + <strong>Select a partition to install on</strong> <strong>Қисми дискеро барои насб интихоб намоед</strong> - + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. Қисми диски низомии EFI дар дохили низоми ҷорӣ ёфт нашуд. Лутфан, ба қафо гузаред ва барои танзим кардани %1 аз имкони қисмбандии диск ба таври дастӣ истифода баред. - + The EFI system partition at %1 will be used for starting %2. Қисми диски низомии EFI дар %1 барои оғоз кардани %2 истифода бурда мешавад. - + EFI system partition: Қисми диски низомии: - + This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Чунин менамояд, ки ин захирагоҳ низоми амалкунандаро дар бар намегирад. Шумо чӣ кор кардан мехоҳед?<br/>Шумо метавонед пеш аз татбиқ кардани тағйирот ба дастгоҳи захирагоҳ интихоби худро аз назар гузаронед ва тасдиқ кунед. - - - - + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>Пок кардани диск</strong><br/>Ин амал ҳамаи иттилооти ҷориро дар дастгоҳи захирагоҳи интихобшуда <font color="red">нест мекунад</font>. - - - - + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Насбкунии паҳлуӣ</strong><br/>Насбкунанда барои %1 фазоро омода карда, қисми дискеро хурдтар мекунад. - - - - + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>Ивазкунии қисми диск</strong><br/>Қисми дисекро бо %1 иваз мекунад. - + This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Ин захирагоҳ %1-ро дар бар мегирад. Шумо чӣ кор кардан мехоҳед?<br/>Шумо метавонед пеш аз татбиқ кардани тағйирот ба дастгоҳи захирагоҳ интихоби худро аз назар гузаронед ва тасдиқ кунед. - + This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Ин захирагоҳ аллакай низоми амалкунандаро дар бар мегирад. Шумо чӣ кор кардан мехоҳед?<br/>Шумо метавонед пеш аз татбиқ кардани тағйирот ба дастгоҳи захирагоҳ интихоби худро аз назар гузаронед ва тасдиқ кунед. - + This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Ин захирагоҳ якчанд низоми амалкунандаро дар бар мегирад. Шумо чӣ кор кардан мехоҳед?<br/>Шумо метавонед пеш аз татбиқ кардани тағйирот ба дастгоҳи захирагоҳ интихоби худро аз назар гузаронед ва тасдиқ кунед. - + No Swap Бе мубодила - + Reuse Swap Истифодаи муҷаддади мубодила - + Swap (no Hibernate) Мубодила (бе реҷаи Нигаҳдорӣ) - + Swap (with Hibernate) Мубодила (бо реҷаи Нигаҳдорӣ) - + Swap to file Мубодила ба файл @@ -716,17 +716,17 @@ The installer will quit and all changes will be lost. Тарҳбандии клавиатура ба %1 %1/%2 танзим карда мешавад. - + Set timezone to %1/%2. Минтақаи вақт ба %1/%2 танзим карда мешавад. - + The system language will be set to %1. Забони низом ба %1 танзим карда мешавад. - + The numbers and dates locale will be set to %1. Низоми рақамҳо ва санаҳо ба %1 танзим карда мешавад. @@ -796,42 +796,42 @@ The installer will quit and all changes will be lost. <h1>Хуш омадед ба насбкунандаи %1</h1> - + Your username is too long. Номи корбари шумо хеле дароз аст. - + '%1' is not allowed as username. '%1' ҳамчун номи корбар истифода намешавад. - + Your username must start with a lowercase letter or underscore. Номи корбари шумо бояд бо ҳарфи хурд ё зерхат сар шавад. - + Only lowercase letters, numbers, underscore and hyphen are allowed. Шумо метавонед танҳо ҳарфҳои хурд, рақамҳо, зерхат ва нимтиреро истифода баред. - + Your hostname is too short. Номи мизбони шумо хеле кӯтоҳ аст. - + Your hostname is too long. Номи мизбони шумо хеле дароз аст. - + '%1' is not allowed as hostname. '%1' ҳамчун номи мизбон истифода намешавад. - + Only letters, numbers, underscore and hyphen are allowed. Шумо метавонед танҳо ҳарфҳо, рақамҳо, зерхат ва нимтиреро истифода баред. @@ -1252,7 +1252,8 @@ The installer will quit and all changes will be lost. Гузарвожаро тасдиқ намоед - + + Please enter the same passphrase in both boxes. Лутфан, гузарвожаи ягонаро дар ҳар дуи сатр ворид намоед. @@ -1704,18 +1705,18 @@ The installer will quit and all changes will be lost. LocalePage - + Region: Минтақа: - + Zone: Шаҳр: - - + + &Change... &Тағйир додан... @@ -1793,7 +1794,12 @@ The installer will quit and all changes will be lost. Map - + + Timezone: %1 + Минтақаи вақт: %1 + + + Please select your preferred location on the map so the installer can suggest the locale and timezone settings for you. You can fine-tune the suggested settings below. Search the map by dragging to move and using the +/- buttons to zoom in/out or use mouse scrolling for zooming. @@ -1956,247 +1962,247 @@ The installer will quit and all changes will be lost. PWQ - + Password is too short Ниҳонвожа хеле кӯтоҳ аст - + Password is too long Ниҳонвожа хеле дароз аст - + Password is too weak Ниҳонвожа хеле заиф аст - + Memory allocation error when setting '%1' Хатои ҷойдиҳии ҳофиза ҳангоми танзими '%1' ба миён омад - + Memory allocation error Хатои ҷойдиҳии ҳофиза - + The password is the same as the old one Ниҳонвожаи нав ба ниҳонвожаи куҳна менамояд - + The password is a palindrome Ниҳонвожа аз чапу рост як хел хонда мешавад - + The password differs with case changes only Ниҳонвожа танҳо бо ивази ҳарфҳои хурду калон фарқ мекунад - + The password is too similar to the old one Ниҳонвожаи нав хеле ба ниҳонвожаи куҳна менамояд - + The password contains the user name in some form Ниҳонвожа номи корбареро дар бар мегирад - + The password contains words from the real name of the user in some form Ниҳонвожа калимаҳоро аз номи ҳақиқии шумо ё номи корбар дар бар мегирад - + The password contains forbidden words in some form Ниҳонвожа калимаҳои нораворо дар бар мегирад - + The password contains less than %1 digits Ниҳонвожа кам аз %1 рақамро дар бар мегирад - + The password contains too few digits Ниҳонвожа якчанд рақамро дар бар мегирад - + The password contains less than %1 uppercase letters Ниҳонвожа кам аз %1 ҳарфи калонро дар бар мегирад - + The password contains too few uppercase letters Ниҳонвожа якчанд ҳарфи калонро дар бар мегирад - + The password contains less than %1 lowercase letters Ниҳонвожа кам аз %1 ҳарфи хурдро дар бар мегирад - + The password contains too few lowercase letters Ниҳонвожа якчанд ҳарфи хурдро дар бар мегирад - + The password contains less than %1 non-alphanumeric characters Ниҳонвожа кам аз %1 аломати ғайри алифбоӣ-ададиро дар бар мегирад - + The password contains too few non-alphanumeric characters Ниҳонвожа якчанд аломати ғайри алифбоӣ-ададиро дар бар мегирад - + The password is shorter than %1 characters Ниҳонвожа аз %1 аломат кӯтоҳтар аст - + The password is too short Ниҳонвожа хеле кӯтоҳ аст - + The password is just rotated old one Ниҳонвожа ба яке аз ниҳонвожаи куҳна менамояд - + The password contains less than %1 character classes Ниҳонвожа кам аз %1 синфи аломатиро дар бар мегирад - + The password does not contain enough character classes Ниҳонвожа синфҳои аломатии кофиро дар бар намегирад - + The password contains more than %1 same characters consecutively Ниҳонвожа зиёда аз %1 аломати ягонаро пай дар пай дар бар мегирад - + The password contains too many same characters consecutively Ниҳонвожа аз ҳад зиёд аломати ягонаро пай дар пай дар бар мегирад - + The password contains more than %1 characters of the same class consecutively Ниҳонвожа зиёда аз %1 аломатро бо синфи ягона пай дар пай дар бар мегирад - + The password contains too many characters of the same class consecutively Ниҳонвожа бисёр аломатро бо синфи ягона пай дар пай дар бар мегирад - + The password contains monotonic sequence longer than %1 characters Ниҳонвожа пайдарпаии ҳаммонандро аз %1 аломат дарозтар дар бар мегирад - + The password contains too long of a monotonic character sequence Ниҳонвожа аломати пайдарпаии ҳаммонанди дарозро дар бар мегирад - + No password supplied Ниҳонвожа ворид нашудааст - + Cannot obtain random numbers from the RNG device Рақамҳои тасодуфӣ аз дастгоҳи RNG гирифта намешаванд - + Password generation failed - required entropy too low for settings Ниҳонвожа эҷод карда нашуд - энтропияи зарурӣ барои танзимот хеле паст аст - + The password fails the dictionary check - %1 Ниҳонвожа аз санҷиши луғавӣ нагузашт - %1 - + The password fails the dictionary check Ниҳонвожа аз санҷиши луғавӣ нагузашт - + Unknown setting - %1 Танзими номаълум - %1 - + Unknown setting Танзими номаълум - + Bad integer value of setting - %1 Қимати адади бутуни танзим нодуруст аст - %1 - + Bad integer value Қимати адади бутун нодуруст аст - + Setting %1 is not of integer type Танзими %1 ба адади бутун мувофиқат намекунад - + Setting is not of integer type Танзим ба адади бутун мувофиқат намекунад - + Setting %1 is not of string type Танзими %1 ба сатр мувофиқат намекунад - + Setting is not of string type Танзим ба сатр мувофиқат намекунад - + Opening the configuration file failed Файли танзимӣ кушода нашуд - + The configuration file is malformed Файли танзимӣ дар шакли норуруст мебошад - + Fatal failure Хатои ҷиддӣ - + Unknown error Хатои номаълум - + Password is empty Ниҳонвожаро ворид накардед @@ -2530,67 +2536,67 @@ The installer will quit and all changes will be lost. PartitionViewStep - + Gathering system information... Ҷамъкунии иттилооти низомӣ... - + Partitions Қисмҳои диск - + Install %1 <strong>alongside</strong> another operating system. Низоми %1 <strong>ҳамроҳи</strong> низоми амалкунандаи дигар насб карда мешавад. - + <strong>Erase</strong> disk and install %1. <strong>Пок кардани</strong> диск ва насб кардани %1. - + <strong>Replace</strong> a partition with %1. <strong>Иваз кардани</strong> қисми диск бо %1. - + <strong>Manual</strong> partitioning. <strong>Ба таври дастӣ</strong> эҷод кардани қисмҳои диск. - + Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). Низоми %1 <strong>ҳамроҳи</strong> низоми амалкунандаи дигар дар диски <strong>%2</strong> (%3) насб карда мешавад. - + <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. <strong>Пок кардани</strong> диски <strong>%2</strong> (%3) ва насб кардани %1. - + <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. <strong>Иваз кардани</strong> қисми диск дар диски <strong>%2</strong> (%3) бо %1. - + <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). <strong>Ба таври дастӣ</strong> эҷод кардани қисмҳои диск дар диски <strong>%1</strong> (%2). - + Disk <strong>%1</strong> (%2) Диски <strong>%1</strong> (%2) - + Current: Танзимоти ҷорӣ: - + After: Баъд аз тағйир: @@ -2635,12 +2641,12 @@ The installer will quit and all changes will be lost. Қисми диски роҳандозии алоҳида дар як ҷой бо қисми диски реша (root)-и рамзгузоришуда танзим карда шуд, аммо қисми диски роҳандозӣ рамзгузорӣ нашудааст.<br/><br/>Барои ҳамин навъи танзимкунӣ масъалаи амниятӣ аҳамият дорад, зеро ки файлҳои низомии муҳим дар қисми диски рамзгузоринашуда нигоҳ дошта мешаванд.<br/>Агар шумо хоҳед, метавонед идома диҳед, аммо қулфкушоии низоми файлӣ дертар ҳангоми оғози кори низом иҷро карда мешавад.<br/>Барои рамзгзорӣ кардани қисми диски роҳандозӣ ба қафо гузаред ва бо интихоби тугмаи <strong>Рамзгузорӣ</strong> дар равзанаи эҷодкунии қисми диск онро аз нав эҷод намоед. - + has at least one disk device available. ақаллан як дастгоҳи диск дастрас аст. - + There are no partitions to install on. Ягон қисми диск барои насб вуҷуд надорад. @@ -3548,17 +3554,17 @@ Output: UsersPage - + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>Агар зиёда аз як корбар ин компютерро истифода барад, шумо метавонед баъд аз танзимкунӣ якчанд ҳисобро эҷод намоед.</small> - + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> <small>Агар зиёда аз як корбар ин компютерро истифода барад, шумо метавонед баъд аз насбкунӣ якчанд ҳисобро эҷод намоед.</small> - + Your passwords do not match! Ниҳонвожаҳои шумо мувофиқат намекунанд! @@ -3566,7 +3572,7 @@ Output: UsersViewStep - + Users Корбарон @@ -3856,7 +3862,7 @@ Output: localeq - + Change Тағйир додан diff --git a/lang/calamares_th.ts b/lang/calamares_th.ts index b71d0af8fa..ab2e8f9806 100644 --- a/lang/calamares_th.ts +++ b/lang/calamares_th.ts @@ -506,134 +506,134 @@ The installer will quit and all changes will be lost. ฟอร์ม - + Select storage de&vice: - - - - + + + + Current: ปัจจุบัน: - + After: หลัง: - + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. <strong>กำหนดพาร์ทิชันด้วยตนเอง</strong><br/>คุณสามารถสร้างหรือเปลี่ยนขนาดของพาร์ทิชันได้ด้วยตนเอง - + Reuse %1 as home partition for %2. - + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> - + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. - + Boot loader location: ที่อยู่บูตโหลดเดอร์: - + <strong>Select a partition to install on</strong> - + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. ไม่พบพาร์ทิชันสำหรับระบบ EFI อยู่ที่ไหนเลยในระบบนี้ กรุณากลับไปเลือกใช้การแบ่งพาร์ทิชันด้วยตนเอง เพื่อติดตั้ง %1 - + The EFI system partition at %1 will be used for starting %2. พาร์ทิชันสำหรับระบบ EFI ที่ %1 จะถูกใช้เพื่อเริ่มต้น %2 - + EFI system partition: พาร์ทิชันสำหรับระบบ EFI: - + This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. - - - - + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. - - - - + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>ติดตั้งควบคู่กับระบบปฏิบัติการเดิม</strong><br/>ตัวติดตั้งจะลดเนื้อที่พาร์ทิชันเพื่อให้มีเนื้อที่สำหรับ %1 - - - - + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>แทนที่พาร์ทิชัน</strong><br/>แทนที่พาร์ทิชันด้วย %1 - + This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. อุปกรณ์จัดเก็บนี้มีระบบปฏิบัติการ %1 อยู่ คุณต้องการทำอย่างไร?<br/>คุณจะสามารถทบทวนและยืนยันตัวเลือกของคุณก่อนที่จะกระทำการเปลี่ยนแปลงไปยังอุปกรณ์จัดเก็บของคุณ - + This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. อุปกรณ์จัดเก็บนี้มีระบบปฏิบัติการอยู่แล้ว คุณต้องการทำอย่างไร?<br/>คุณจะสามารถทบทวนและยืนยันตัวเลือกของคุณก่อนที่จะกระทำการเปลี่ยนแปลงไปยังอุปกรณ์จัดเก็บของคุณ - + This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. อุปกรณ์จัดเก็บนี้มีหลายระบบปฏิบัติการ คุณต้องการทำอย่างไร?<br/>คุณจะสามารถทบทวนและยืนยันตัวเลือกของคุณก่อนที่จะกระทำการเปลี่ยนแปลงไปยังอุปกรณ์จัดเก็บของคุณ - + No Swap - + Reuse Swap - + Swap (no Hibernate) - + Swap (with Hibernate) - + Swap to file @@ -711,17 +711,17 @@ The installer will quit and all changes will be lost. ตั้งค่าแบบแป้นพิมพ์เป็น %1/%2 - + Set timezone to %1/%2. - + The system language will be set to %1. ภาษาของระบบจะถูกตั้งค่าเป็น %1 - + The numbers and dates locale will be set to %1. @@ -791,42 +791,42 @@ The installer will quit and all changes will be lost. - + Your username is too long. ชื่อผู้ใช้ของคุณยาวเกินไป - + '%1' is not allowed as username. - + Your username must start with a lowercase letter or underscore. - + Only lowercase letters, numbers, underscore and hyphen are allowed. - + Your hostname is too short. ชื่อโฮสต์ของคุณสั้นเกินไป - + Your hostname is too long. ชื่อโฮสต์ของคุณยาวเกินไป - + '%1' is not allowed as hostname. - + Only letters, numbers, underscore and hyphen are allowed. @@ -1247,7 +1247,8 @@ The installer will quit and all changes will be lost. - + + Please enter the same passphrase in both boxes. @@ -1699,18 +1700,18 @@ The installer will quit and all changes will be lost. LocalePage - + Region: ภูมิภาค: - + Zone: โซน: - - + + &Change... &C เปลี่ยนแปลง... @@ -1788,7 +1789,12 @@ The installer will quit and all changes will be lost. Map - + + Timezone: %1 + + + + Please select your preferred location on the map so the installer can suggest the locale and timezone settings for you. You can fine-tune the suggested settings below. Search the map by dragging to move and using the +/- buttons to zoom in/out or use mouse scrolling for zooming. @@ -1949,247 +1955,247 @@ The installer will quit and all changes will be lost. PWQ - + Password is too short รหัสผ่านสั้นเกินไป - + Password is too long รหัสผ่านยาวเกินไป - + Password is too weak รหัสผ่านอ่อนเกินไป - + Memory allocation error when setting '%1' - + Memory allocation error - + The password is the same as the old one รหัสผ่านเหมือนกับรหัสผ่านเก่า - + The password is a palindrome - + The password differs with case changes only - + The password is too similar to the old one รหัสผ่านคล้ายกับรหัสผ่านเก่าจนเกินไป - + The password contains the user name in some form - + The password contains words from the real name of the user in some form - + The password contains forbidden words in some form - + The password contains less than %1 digits - + The password contains too few digits - + The password contains less than %1 uppercase letters - + The password contains too few uppercase letters - + The password contains less than %1 lowercase letters - + The password contains too few lowercase letters - + The password contains less than %1 non-alphanumeric characters - + The password contains too few non-alphanumeric characters - + The password is shorter than %1 characters - + The password is too short รหัสผ่านสั้นเกินไป - + The password is just rotated old one - + The password contains less than %1 character classes - + The password does not contain enough character classes - + The password contains more than %1 same characters consecutively - + The password contains too many same characters consecutively - + The password contains more than %1 characters of the same class consecutively - + The password contains too many characters of the same class consecutively - + The password contains monotonic sequence longer than %1 characters - + The password contains too long of a monotonic character sequence - + No password supplied ไม่ได้กำหนดรหัสผ่าน - + Cannot obtain random numbers from the RNG device - + Password generation failed - required entropy too low for settings - + The password fails the dictionary check - %1 - + The password fails the dictionary check - + Unknown setting - %1 - + Unknown setting - + Bad integer value of setting - %1 - + Bad integer value - + Setting %1 is not of integer type - + Setting is not of integer type - + Setting %1 is not of string type - + Setting is not of string type - + Opening the configuration file failed - + The configuration file is malformed - + Fatal failure - + Unknown error ข้อผิดพลาดที่ไม่รู้จัก - + Password is empty รหัสผ่านว่าง @@ -2523,67 +2529,67 @@ The installer will quit and all changes will be lost. PartitionViewStep - + Gathering system information... กำลังรวบรวมข้อมูลของระบบ... - + Partitions พาร์ทิชัน - + Install %1 <strong>alongside</strong> another operating system. ติดตั้ง %1 <strong>ควบคู่</strong>กับระบบปฏิบัติการเดิม - + <strong>Erase</strong> disk and install %1. - + <strong>Replace</strong> a partition with %1. - + <strong>Manual</strong> partitioning. - + Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). - + <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. - + <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. - + <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). - + Disk <strong>%1</strong> (%2) - + Current: ปัจจุบัน: - + After: หลัง: @@ -2628,12 +2634,12 @@ The installer will quit and all changes will be lost. - + has at least one disk device available. - + There are no partitions to install on. @@ -3535,17 +3541,17 @@ Output: UsersPage - + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> - + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> - + Your passwords do not match! รหัสผ่านของคุณไม่ตรงกัน! @@ -3553,7 +3559,7 @@ Output: UsersViewStep - + Users ผู้ใช้ @@ -3831,7 +3837,7 @@ Output: localeq - + Change diff --git a/lang/calamares_tr_TR.ts b/lang/calamares_tr_TR.ts index 281dc1c0fa..0051487714 100644 --- a/lang/calamares_tr_TR.ts +++ b/lang/calamares_tr_TR.ts @@ -510,135 +510,135 @@ Yükleyiciden çıkınca tüm değişiklikler kaybedilecek. Biçim - + Select storage de&vice: Depolama ay&gıtı seç: - - - - + + + + Current: Geçerli: - + After: Sonra: - + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. <strong>Elle bölümleme</strong><br/>Bölümler oluşturabilir ve boyutlandırabilirsiniz. - + Reuse %1 as home partition for %2. %2 ev bölümü olarak %1 yeniden kullanılsın. - + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> <strong>Küçültmek için bir bölüm seçip alttaki çubuğu sürükleyerek boyutlandır</strong> - + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. %1, %2MB'a küçülecek ve %4 için yeni bir %3MB disk bölümü oluşturulacak. - + Boot loader location: Önyükleyici konumu: - + <strong>Select a partition to install on</strong> <strong>Yükleyeceğin disk bölümünü seç</strong> - + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. Bu sistemde EFI disk bölümü bulunamadı. Lütfen geri dönün ve %1 kurmak için gelişmiş kurulum seçeneğini kullanın. - + The EFI system partition at %1 will be used for starting %2. %1 EFI sistem bölümü %2 başlatmak için kullanılacaktır. - + EFI system partition: EFI sistem bölümü: - + This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Bu depolama aygıtı üzerinde yüklü herhangi bir işletim sistemi tespit etmedik. Ne yapmak istersiniz?<br/>Yaptığınız değişiklikler disk bölümü üzerine uygulanmadan önce gözden geçirme fırsatınız olacak. - - - - + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>Diski sil</strong><br/>Seçili depolama bölümündeki mevcut veriler şu anda <font color="red">silinecektir.</font> - - - - + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Yanına yükleyin</strong><br/>Sistem yükleyici disk bölümünü küçülterek %1 için yer açacak. - - - - + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>Varolan bir disk bölümüne kur</strong><br/>Varolan bir disk bölümü üzerine %1 kur. - + This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Bu depolama aygıtı üzerinde %1 vardır. Ne yapmak istersiniz?<br/>Yaptığınız değişiklikler disk bölümü üzerine uygulanmadan önce gözden geçirme fırsatınız olacak. - + This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Bu depolama aygıtı üzerinde bir işletim sistemi yüklü. Ne yapmak istersiniz? <br/>Yaptığınız değişiklikler disk bölümü üzerine uygulanmadan önce gözden geçirme fırsatınız olacak. - + This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Bu depolama aygıtı üzerinde birden fazla işletim sistemi var. Ne yapmak istersiniz? <br/>Yaptığınız değişiklikler disk bölümü üzerine uygulanmadan önce gözden geçirme fırsatınız olacak. - + No Swap Takas alanı yok - + Reuse Swap Yeniden takas alanı - + Swap (no Hibernate) Takas Alanı (uyku modu yok) - + Swap (with Hibernate) Takas Alanı (uyku moduyla) - + Swap to file Takas alanı dosyası @@ -716,17 +716,17 @@ Yükleyiciden çıkınca tüm değişiklikler kaybedilecek. Alt klavye türevi olarak %1/%2 seçildi. - + Set timezone to %1/%2. %1/%2 Zaman dilimi ayarla. - + The system language will be set to %1. Sistem dili %1 olarak ayarlanacak. - + The numbers and dates locale will be set to %1. Sayılar ve günler için sistem yereli %1 olarak ayarlanacak. @@ -798,42 +798,42 @@ Kurulum devam edebilir fakat bazı özellikler devre dışı kalabilir.<h1>%1 Sistem Yükleyiciye Hoşgeldiniz</h1> - + Your username is too long. Kullanıcı adınız çok uzun. - + '%1' is not allowed as username. '%1' kullanıcı adı olarak izin verilmiyor. - + Your username must start with a lowercase letter or underscore. Kullanıcı adınız küçük harf veya alt çizgi ile başlamalıdır. - + Only lowercase letters, numbers, underscore and hyphen are allowed. Sadece küçük harflere, sayılara, alt çizgi ve kısa çizgilere izin verilir. - + Your hostname is too short. Makine adınız çok kısa. - + Your hostname is too long. Makine adınız çok uzun. - + '%1' is not allowed as hostname. '%1' ana bilgisayar adı olarak kullanılamaz. - + Only letters, numbers, underscore and hyphen are allowed. Sadece harfler, rakamlar, alt çizgi ve kısa çizgi izin verilir. @@ -1254,7 +1254,8 @@ Kurulum devam edebilir fakat bazı özellikler devre dışı kalabilir.Parolayı doğrula - + + Please enter the same passphrase in both boxes. Her iki kutuya da aynı parolayı giriniz. @@ -1707,18 +1708,18 @@ Sistem güç kaynağına bağlı değil. LocalePage - + Region: Bölge: - + Zone: Şehir: - - + + &Change... &Değiştir... @@ -1796,7 +1797,12 @@ Sistem güç kaynağına bağlı değil. Map - + + Timezone: %1 + Zaman dilimi: %1 + + + Please select your preferred location on the map so the installer can suggest the locale and timezone settings for you. You can fine-tune the suggested settings below. Search the map by dragging to move and using the +/- buttons to zoom in/out or use mouse scrolling for zooming. @@ -1959,247 +1965,247 @@ Sistem güç kaynağına bağlı değil. PWQ - + Password is too short Şifre çok kısa - + Password is too long Şifre çok uzun - + Password is too weak Şifre çok zayıf - + Memory allocation error when setting '%1' '%1' ayarlanırken bellek ayırma hatası - + Memory allocation error Bellek ayırma hatası - + The password is the same as the old one Şifre eski şifreyle aynı - + The password is a palindrome Parola eskilerden birinin ters okunuşu olabilir - + The password differs with case changes only Parola sadece vaka değişiklikleri ile farklılık gösterir - + The password is too similar to the old one Parola eski parolaya çok benzer - + The password contains the user name in some form Parola kullanıcı adını bir biçimde içeriyor - + The password contains words from the real name of the user in some form Şifre, kullanıcının gerçek adına ait kelimeleri bazı biçimde içerir - + The password contains forbidden words in some form Şifre, bazı biçimde yasak kelimeler içeriyor - + The password contains less than %1 digits Şifre %1 den az hane içeriyor - + The password contains too few digits Parola çok az basamak içeriyor - + The password contains less than %1 uppercase letters Parola %1 den az büyük harf içeriyor - + The password contains too few uppercase letters Parola çok az harf içermektedir - + The password contains less than %1 lowercase letters Parola %1 den daha küçük harf içermektedir - + The password contains too few lowercase letters Parola çok az küçük harf içeriyor - + The password contains less than %1 non-alphanumeric characters Şifre %1 den az alfasayısal olmayan karakter içeriyor - + The password contains too few non-alphanumeric characters Parola çok az sayıda alfasayısal olmayan karakter içeriyor - + The password is shorter than %1 characters Parola %1 karakterden kısa - + The password is too short Parola çok kısa - + The password is just rotated old one Şifre önceden kullanıldı - + The password contains less than %1 character classes Parola %1 den az karakter sınıfı içeriyor - + The password does not contain enough character classes Parola yeterli sayıda karakter sınıfı içermiyor - + The password contains more than %1 same characters consecutively Şifre, %1 den fazla aynı karakteri ardışık olarak içeriyor - + The password contains too many same characters consecutively Parola ardışık olarak aynı sayıda çok karakter içeriyor - + The password contains more than %1 characters of the same class consecutively Parola, aynı sınıftan %1 den fazla karakter ardışık olarak içeriyor - + The password contains too many characters of the same class consecutively Parola aynı sınıfta çok fazla karakter içeriyor - + The password contains monotonic sequence longer than %1 characters Şifre, %1 karakterden daha uzun monoton dizilim içeriyor - + The password contains too long of a monotonic character sequence Parola çok uzun monoton karakter dizisi içeriyor - + No password supplied Parola sağlanmadı - + Cannot obtain random numbers from the RNG device RNG cihazından rastgele sayılar elde edemiyor - + Password generation failed - required entropy too low for settings Şifre üretimi başarısız oldu - ayarlar için entropi çok düşük gerekli - + The password fails the dictionary check - %1 Parola, sözlüğü kontrolü başarısız - %1 - + The password fails the dictionary check Parola, sözlük onayı başarısız - + Unknown setting - %1 Bilinmeyen ayar - %1 - + Unknown setting Bilinmeyen ayar - + Bad integer value of setting - %1 Ayarın bozuk tam sayı değeri - %1 - + Bad integer value Yanlış tamsayı değeri - + Setting %1 is not of integer type %1 ayarı tamsayı tipinde değil - + Setting is not of integer type Ayar tamsayı tipinde değil - + Setting %1 is not of string type Ayar %1, dizgi tipi değil - + Setting is not of string type Ayar, dizgi tipi değil - + Opening the configuration file failed Yapılandırma dosyasını açma başarısız oldu - + The configuration file is malformed Yapılandırma dosyası hatalı biçimlendirildi - + Fatal failure Ölümcül arıza - + Unknown error Bilinmeyen hata - + Password is empty Şifre boş @@ -2533,67 +2539,67 @@ Sistem güç kaynağına bağlı değil. PartitionViewStep - + Gathering system information... Sistem bilgileri toplanıyor... - + Partitions Disk Bölümleme - + Install %1 <strong>alongside</strong> another operating system. Diğer işletim sisteminin <strong>yanına</strong> %1 yükle. - + <strong>Erase</strong> disk and install %1. Diski <strong>sil</strong> ve %1 yükle. - + <strong>Replace</strong> a partition with %1. %1 ile disk bölümünün üzerine <strong>yaz</strong>. - + <strong>Manual</strong> partitioning. <strong>Manuel</strong> bölümleme. - + Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). <strong>%2</strong> (%3) diskindeki diğer işletim sisteminin <strong>yanına</strong> %1 yükle. - + <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. <strong>%2</strong> (%3) diski <strong>sil</strong> ve %1 yükle. - + <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. <strong>%2</strong> (%3) disk bölümünün %1 ile <strong>üzerine yaz</strong>. - + <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). <strong>%1</strong> (%2) disk bölümünü <strong>manuel</strong> bölümle. - + Disk <strong>%1</strong> (%2) Disk <strong>%1</strong> (%2) - + Current: Geçerli: - + After: Sonra: @@ -2639,12 +2645,12 @@ Sistem güç kaynağına bağlı değil. Önyükleme bölümünü şifrelemek için geri dönün ve bölüm oluşturma penceresinde <strong>Şifreleme</strong>seçeneği ile yeniden oluşturun. - + has at least one disk device available. Mevcut en az bir disk aygıtı var. - + There are no partitions to install on. Kurulacak disk bölümü yok. @@ -3554,17 +3560,17 @@ Kuruluma devam edebilirsiniz fakat bazı özellikler devre dışı kalabilir. UsersPage - + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>Bu bilgisayarı birden fazla kişi kullanacaksa, kurulumdan sonra birden fazla kullanıcı hesabı oluşturabilirsiniz.</small> - + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> <small>Bu bilgisayarı birden fazla kişi kullanacaksa, kurulum bittikten sonra birden fazla kullanıcı hesabı oluşturabilirsiniz.</small> - + Your passwords do not match! Parolanız eşleşmiyor! @@ -3572,7 +3578,7 @@ Kuruluma devam edebilirsiniz fakat bazı özellikler devre dışı kalabilir. UsersViewStep - + Users Kullanıcı Tercihleri @@ -3864,7 +3870,7 @@ Kuruluma devam edebilirsiniz fakat bazı özellikler devre dışı kalabilir. localeq - + Change Değiştir diff --git a/lang/calamares_uk.ts b/lang/calamares_uk.ts index 764ac3f23b..c720f82356 100644 --- a/lang/calamares_uk.ts +++ b/lang/calamares_uk.ts @@ -514,134 +514,134 @@ The installer will quit and all changes will be lost. Форма - + Select storage de&vice: Обрати &пристрій зберігання: - - - - + + + + Current: Зараз: - + After: Після: - + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. <strong>Розподілення вручну</strong><br/>Ви можете створити або змінити розмір розділів власноруч. - + Reuse %1 as home partition for %2. Використати %1 як домашній розділ (home) для %2. - + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> <strong>Оберіть розділ для зменшення, потім тягніть повзунок, щоб змінити розмір</strong> - + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. %1 буде стиснуто до %2 МіБ. Натомість буде створено розділ розміром %3 МіБ для %4. - + Boot loader location: Розташування завантажувача: - + <strong>Select a partition to install on</strong> <strong>Оберіть розділ, на який встановити</strong> - + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. В цій системі не знайдено жодного системного розділу EFI. Щоб встановити %1, будь ласка, поверніться та оберіть розподілення вручну. - + The EFI system partition at %1 will be used for starting %2. Системний розділ EFI %1 буде використано для встановлення %2. - + EFI system partition: Системний розділ EFI: - + This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Цей пристрій зберігання, схоже, не має жодної операційної системи. Що ви бажаєте зробити?<br/>У вас буде можливість переглянути та підтвердити все, що ви обрали перед тим, як будуть зроблені будь-які зміни на пристрої зберігання. - - - - + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>Очистити диск</strong><br/>Це <font color="red">знищить</font> всі данні, присутні на обраному пристрої зберігання. - - - - + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Встановити поруч</strong><br/>Засіб встановлення зменшить розмір розділу, щоб вивільнити простір для %1. - - - - + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>Замінити розділ</strong><br/>Замінити розділу на %1. - + This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. На цьому пристрої зберігання є %1. Що ви бажаєте зробити?<br/>У вас буде можливість переглянути та підтвердити все, що ви обрали перед тим, як будуть зроблені будь-які зміни на пристрої зберігання. - + This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. На цьому пристрої зберігання вже є операційна система. Що ви бажаєте зробити?<br/>У вас буде можливість переглянути та підтвердити все, що ви обрали перед тим, як будуть зроблені будь-які зміни на пристрої зберігання. - + This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. На цьому пристрої зберігання вже є декілька операційних систем. Що ви бажаєте зробити?<br/>У вас буде можливість переглянути та підтвердити все, що ви обрали перед тим, як будуть зроблені будь-які зміни на пристрої зберігання. - + No Swap Без резервної пам'яті - + Reuse Swap Повторно використати резервну пам'ять - + Swap (no Hibernate) Резервна пам'ять (без присипляння) - + Swap (with Hibernate) Резервна пам'ять (із присиплянням) - + Swap to file Резервна пам'ять у файлі @@ -719,17 +719,17 @@ The installer will quit and all changes will be lost. Встановити розкладку клавіатури як %1/%2. - + Set timezone to %1/%2. Встановити часовий пояс %1/%2. - + The system language will be set to %1. Мову %1 буде встановлено як системну. - + The numbers and dates locale will be set to %1. %1 буде встановлено як локаль чисел та дат. @@ -799,42 +799,42 @@ The installer will quit and all changes will be lost. <h1>Ласкаво просимо до засобу встановлення %1</h1> - + Your username is too long. Ваше ім'я задовге. - + '%1' is not allowed as username. «%1» не можна використовувати як ім'я користувача. - + Your username must start with a lowercase letter or underscore. Ваше ім'я користувача має починатися із малої літери або символу підкреслювання. - + Only lowercase letters, numbers, underscore and hyphen are allowed. Можна використовувати лише латинські літери нижнього регістру, цифри, символи підкреслювання та дефіси. - + Your hostname is too short. Назва вузла є надто короткою. - + Your hostname is too long. Назва вузла є надто довгою. - + '%1' is not allowed as hostname. «%1» не можна використовувати як назву вузла. - + Only letters, numbers, underscore and hyphen are allowed. Можна використовувати лише латинські літери, цифри, символи підкреслювання та дефіси. @@ -1255,7 +1255,8 @@ The installer will quit and all changes will be lost. Підтвердження ключової фрази - + + Please enter the same passphrase in both boxes. Будь ласка, введіть однакову ключову фразу у обидва текстові вікна. @@ -1707,18 +1708,18 @@ The installer will quit and all changes will be lost. LocalePage - + Region: Регіон: - + Zone: Зона: - - + + &Change... &Змінити... @@ -1796,7 +1797,12 @@ The installer will quit and all changes will be lost. Map - + + Timezone: %1 + Часовий пояс: %1 + + + Please select your preferred location on the map so the installer can suggest the locale and timezone settings for you. You can fine-tune the suggested settings below. Search the map by dragging to move and using the +/- buttons to zoom in/out or use mouse scrolling for zooming. @@ -1959,248 +1965,248 @@ The installer will quit and all changes will be lost. PWQ - + Password is too short Пароль занадто короткий - + Password is too long Пароль задовгий - + Password is too weak Пароль надто ненадійний - + Memory allocation error when setting '%1' Помилка під час спроби отримати пам'ять для налаштовування «%1» - + Memory allocation error Помилка виділення пам'яті - + The password is the same as the old one Цей пароль такий же як і старий - + The password is a palindrome Пароль є паліндромом - + The password differs with case changes only Паролі відрізняються лише регістром літер - + The password is too similar to the old one Цей пароль надто схожий на попередній - + The password contains the user name in some form Цей пароль якимось чином містить ім'я користувача - + The password contains words from the real name of the user in some form Цей пароль містить слова зі справжнього імені користувача в якійсь із форм - + The password contains forbidden words in some form Пароль містить певні форми заборонених слів - + The password contains less than %1 digits Цей пароль містить менше ніж %1 символ - + The password contains too few digits Цей пароль містить замало символів - + The password contains less than %1 uppercase letters У паролі міститься менше за %1 літер верхнього регістру - + The password contains too few uppercase letters У паролі міститься надто мало літер верхнього регістру - + The password contains less than %1 lowercase letters У паролі міститься менше за %1 літер нижнього регістру - + The password contains too few lowercase letters У паролі міститься надто мало літер нижнього регістру - + The password contains less than %1 non-alphanumeric characters Цей пароль містить менше ніж %1 символів, які не є літерами або цифрами - + The password contains too few non-alphanumeric characters Цей пароль містить надто мало символів, які не є літерами або цифрами - + The password is shorter than %1 characters Пароль є коротшим за %1 символів - + The password is too short Цей пароль занадто короткий - + The password is just rotated old one Пароль є оберненою версією старого пароля - + The password contains less than %1 character classes Пароль складається із символів, які належать до класів, кількість яких менша за %1 - + The password does not contain enough character classes Кількість класів, до яких належать символи пароля, є надто малою - + The password contains more than %1 same characters consecutively У паролі міститься послідовність із понад %1 однакових символів - + The password contains too many same characters consecutively У паролі міститься надто довга послідовність із однакових символів - + The password contains more than %1 characters of the same class consecutively У паролі міститься послідовність із понад %1 символів одного класу - + The password contains too many characters of the same class consecutively У паролі міститься надто довга послідовність із символів одного класу - + The password contains monotonic sequence longer than %1 characters У паролі міститься послідовність із одного символу, яка є довшою за %1 символів - + The password contains too long of a monotonic character sequence У паролі міститься надто довга послідовність із одного символу - + No password supplied Пароль не надано - + Cannot obtain random numbers from the RNG device Не вдалося отримати випадкові числа з пристрою RNG - + Password generation failed - required entropy too low for settings Не вдалося створити пароль — не досягнуто вказаного у параметрах рівня ентропії - + The password fails the dictionary check - %1 Пароль не пройшов перевірки за словником — %1 - + The password fails the dictionary check Пароль не пройшов перевірки за словником - + Unknown setting - %1 Невідомий параметр – %1 - + Unknown setting Невідомий параметр - + Bad integer value of setting - %1 Помилкове цілочисельне значення параметра — %1 - + Bad integer value Помилкове ціле значення - + Setting %1 is not of integer type Значення параметра %1 не належить до типу цілих чисел - + Setting is not of integer type Значення параметра не належить до типу цілих чисел - + Setting %1 is not of string type Значення параметра %1 не належить до рядкового типу - + Setting is not of string type Значення параметра не належить до рядкового типу - + Opening the configuration file failed Не вдалося відкрити файл налаштувань - + The configuration file is malformed Форматування файла налаштувань є помилковим - + Fatal failure Фатальна помилка - + Unknown error Невідома помилка - + Password is empty Пароль є порожнім @@ -2534,67 +2540,67 @@ The installer will quit and all changes will be lost. PartitionViewStep - + Gathering system information... Збір інформації про систему... - + Partitions Розділи - + Install %1 <strong>alongside</strong> another operating system. Встановити %1 <strong>поруч</strong> з іншою операційною системою. - + <strong>Erase</strong> disk and install %1. <strong>Очистити</strong> диск та встановити %1. - + <strong>Replace</strong> a partition with %1. <strong>Замінити</strong> розділ на %1. - + <strong>Manual</strong> partitioning. Розподіл диска <strong>вручну</strong>. - + Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). Встановити %1 <strong>поруч</strong> з іншою операційною системою на диск <strong>%2</strong> (%3). - + <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. <strong>Очистити</strong> диск <strong>%2</strong> (%3) та встановити %1. - + <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. <strong>Замінити</strong> розділ на диску <strong>%2</strong> (%3) на %1. - + <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). Розподіл диска <strong>%1</strong> (%2) <strong>вручну</strong>. - + Disk <strong>%1</strong> (%2) Диск <strong>%1</strong> (%2) - + Current: Зараз: - + After: Після: @@ -2639,12 +2645,12 @@ The installer will quit and all changes will be lost. Було налаштовано окремий завантажувальний розділ поряд із зашифрованим кореневим розділом, але завантажувальний розділ незашифрований.<br/><br/>Існують проблеми з безпекою такого типу, оскільки важливі системні файли зберігаються на незашифрованому розділі.<br/>Ви можете продовжувати, якщо бажаєте, але розблокування файлової системи відбудеться пізніше під час запуску системи.<br/>Щоб зашифрувати завантажувальний розділ, поверніться і створіть його знов, обравши <strong>Зашифрувати</strong> у вікні створення розділів. - + has at least one disk device available. має принаймні один доступний дисковий пристрій. - + There are no partitions to install on. Немає розділів для встановлення. @@ -3552,17 +3558,17 @@ Output: UsersPage - + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>Якщо за цим комп'ютером працюватимуть декілька користувачів, ви можете створити декілька облікових записів після налаштовування.</small> - + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> <small>Якщо за цим комп'ютером працюватимуть декілька користувачів, ви можете створити декілька облікових записів після встановлення.</small> - + Your passwords do not match! Паролі не збігаються! @@ -3570,7 +3576,7 @@ Output: UsersViewStep - + Users Користувачі @@ -3860,7 +3866,7 @@ Output: localeq - + Change Змінити diff --git a/lang/calamares_ur.ts b/lang/calamares_ur.ts index 329e06d5f7..88169cd384 100644 --- a/lang/calamares_ur.ts +++ b/lang/calamares_ur.ts @@ -507,134 +507,134 @@ The installer will quit and all changes will be lost. - + Select storage de&vice: - - - - + + + + Current: - + After: - + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. - + Reuse %1 as home partition for %2. - + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> - + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. - + Boot loader location: - + <strong>Select a partition to install on</strong> - + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. - + The EFI system partition at %1 will be used for starting %2. - + EFI system partition: - + This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. - - - - + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. - - - - + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. - - - - + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. - + This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. - + This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. - + This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. - + No Swap - + Reuse Swap - + Swap (no Hibernate) - + Swap (with Hibernate) - + Swap to file @@ -712,17 +712,17 @@ The installer will quit and all changes will be lost. - + Set timezone to %1/%2. - + The system language will be set to %1. - + The numbers and dates locale will be set to %1. @@ -792,42 +792,42 @@ The installer will quit and all changes will be lost. - + Your username is too long. - + '%1' is not allowed as username. - + Your username must start with a lowercase letter or underscore. - + Only lowercase letters, numbers, underscore and hyphen are allowed. - + Your hostname is too short. - + Your hostname is too long. - + '%1' is not allowed as hostname. - + Only letters, numbers, underscore and hyphen are allowed. @@ -1248,7 +1248,8 @@ The installer will quit and all changes will be lost. - + + Please enter the same passphrase in both boxes. @@ -1700,18 +1701,18 @@ The installer will quit and all changes will be lost. LocalePage - + Region: - + Zone: - - + + &Change... @@ -1789,7 +1790,12 @@ The installer will quit and all changes will be lost. Map - + + Timezone: %1 + + + + Please select your preferred location on the map so the installer can suggest the locale and timezone settings for you. You can fine-tune the suggested settings below. Search the map by dragging to move and using the +/- buttons to zoom in/out or use mouse scrolling for zooming. @@ -1950,247 +1956,247 @@ The installer will quit and all changes will be lost. PWQ - + Password is too short - + Password is too long - + Password is too weak - + Memory allocation error when setting '%1' - + Memory allocation error - + The password is the same as the old one - + The password is a palindrome - + The password differs with case changes only - + The password is too similar to the old one - + The password contains the user name in some form - + The password contains words from the real name of the user in some form - + The password contains forbidden words in some form - + The password contains less than %1 digits - + The password contains too few digits - + The password contains less than %1 uppercase letters - + The password contains too few uppercase letters - + The password contains less than %1 lowercase letters - + The password contains too few lowercase letters - + The password contains less than %1 non-alphanumeric characters - + The password contains too few non-alphanumeric characters - + The password is shorter than %1 characters - + The password is too short - + The password is just rotated old one - + The password contains less than %1 character classes - + The password does not contain enough character classes - + The password contains more than %1 same characters consecutively - + The password contains too many same characters consecutively - + The password contains more than %1 characters of the same class consecutively - + The password contains too many characters of the same class consecutively - + The password contains monotonic sequence longer than %1 characters - + The password contains too long of a monotonic character sequence - + No password supplied - + Cannot obtain random numbers from the RNG device - + Password generation failed - required entropy too low for settings - + The password fails the dictionary check - %1 - + The password fails the dictionary check - + Unknown setting - %1 - + Unknown setting - + Bad integer value of setting - %1 - + Bad integer value - + Setting %1 is not of integer type - + Setting is not of integer type - + Setting %1 is not of string type - + Setting is not of string type - + Opening the configuration file failed - + The configuration file is malformed - + Fatal failure - + Unknown error - + Password is empty @@ -2524,67 +2530,67 @@ The installer will quit and all changes will be lost. PartitionViewStep - + Gathering system information... - + Partitions - + Install %1 <strong>alongside</strong> another operating system. - + <strong>Erase</strong> disk and install %1. - + <strong>Replace</strong> a partition with %1. - + <strong>Manual</strong> partitioning. - + Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). - + <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. - + <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. - + <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). - + Disk <strong>%1</strong> (%2) - + Current: - + After: @@ -2629,12 +2635,12 @@ The installer will quit and all changes will be lost. - + has at least one disk device available. - + There are no partitions to install on. @@ -3536,17 +3542,17 @@ Output: UsersPage - + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> - + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> - + Your passwords do not match! @@ -3554,7 +3560,7 @@ Output: UsersViewStep - + Users @@ -3832,7 +3838,7 @@ Output: localeq - + Change diff --git a/lang/calamares_uz.ts b/lang/calamares_uz.ts index e471101ea8..fadb3b4073 100644 --- a/lang/calamares_uz.ts +++ b/lang/calamares_uz.ts @@ -505,134 +505,134 @@ The installer will quit and all changes will be lost. - + Select storage de&vice: - - - - + + + + Current: - + After: - + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. - + Reuse %1 as home partition for %2. - + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> - + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. - + Boot loader location: - + <strong>Select a partition to install on</strong> - + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. - + The EFI system partition at %1 will be used for starting %2. - + EFI system partition: - + This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. - - - - + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. - - - - + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. - - - - + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. - + This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. - + This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. - + This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. - + No Swap - + Reuse Swap - + Swap (no Hibernate) - + Swap (with Hibernate) - + Swap to file @@ -710,17 +710,17 @@ The installer will quit and all changes will be lost. - + Set timezone to %1/%2. - + The system language will be set to %1. - + The numbers and dates locale will be set to %1. @@ -790,42 +790,42 @@ The installer will quit and all changes will be lost. - + Your username is too long. - + '%1' is not allowed as username. - + Your username must start with a lowercase letter or underscore. - + Only lowercase letters, numbers, underscore and hyphen are allowed. - + Your hostname is too short. - + Your hostname is too long. - + '%1' is not allowed as hostname. - + Only letters, numbers, underscore and hyphen are allowed. @@ -1246,7 +1246,8 @@ The installer will quit and all changes will be lost. - + + Please enter the same passphrase in both boxes. @@ -1698,18 +1699,18 @@ The installer will quit and all changes will be lost. LocalePage - + Region: - + Zone: - - + + &Change... @@ -1787,7 +1788,12 @@ The installer will quit and all changes will be lost. Map - + + Timezone: %1 + + + + Please select your preferred location on the map so the installer can suggest the locale and timezone settings for you. You can fine-tune the suggested settings below. Search the map by dragging to move and using the +/- buttons to zoom in/out or use mouse scrolling for zooming. @@ -1948,247 +1954,247 @@ The installer will quit and all changes will be lost. PWQ - + Password is too short - + Password is too long - + Password is too weak - + Memory allocation error when setting '%1' - + Memory allocation error - + The password is the same as the old one - + The password is a palindrome - + The password differs with case changes only - + The password is too similar to the old one - + The password contains the user name in some form - + The password contains words from the real name of the user in some form - + The password contains forbidden words in some form - + The password contains less than %1 digits - + The password contains too few digits - + The password contains less than %1 uppercase letters - + The password contains too few uppercase letters - + The password contains less than %1 lowercase letters - + The password contains too few lowercase letters - + The password contains less than %1 non-alphanumeric characters - + The password contains too few non-alphanumeric characters - + The password is shorter than %1 characters - + The password is too short - + The password is just rotated old one - + The password contains less than %1 character classes - + The password does not contain enough character classes - + The password contains more than %1 same characters consecutively - + The password contains too many same characters consecutively - + The password contains more than %1 characters of the same class consecutively - + The password contains too many characters of the same class consecutively - + The password contains monotonic sequence longer than %1 characters - + The password contains too long of a monotonic character sequence - + No password supplied - + Cannot obtain random numbers from the RNG device - + Password generation failed - required entropy too low for settings - + The password fails the dictionary check - %1 - + The password fails the dictionary check - + Unknown setting - %1 - + Unknown setting - + Bad integer value of setting - %1 - + Bad integer value - + Setting %1 is not of integer type - + Setting is not of integer type - + Setting %1 is not of string type - + Setting is not of string type - + Opening the configuration file failed - + The configuration file is malformed - + Fatal failure - + Unknown error - + Password is empty @@ -2522,67 +2528,67 @@ The installer will quit and all changes will be lost. PartitionViewStep - + Gathering system information... - + Partitions - + Install %1 <strong>alongside</strong> another operating system. - + <strong>Erase</strong> disk and install %1. - + <strong>Replace</strong> a partition with %1. - + <strong>Manual</strong> partitioning. - + Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). - + <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. - + <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. - + <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). - + Disk <strong>%1</strong> (%2) - + Current: - + After: @@ -2627,12 +2633,12 @@ The installer will quit and all changes will be lost. - + has at least one disk device available. - + There are no partitions to install on. @@ -3534,17 +3540,17 @@ Output: UsersPage - + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> - + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> - + Your passwords do not match! @@ -3552,7 +3558,7 @@ Output: UsersViewStep - + Users @@ -3830,7 +3836,7 @@ Output: localeq - + Change diff --git a/lang/calamares_zh_CN.ts b/lang/calamares_zh_CN.ts index 149f2bc748..141a36247f 100644 --- a/lang/calamares_zh_CN.ts +++ b/lang/calamares_zh_CN.ts @@ -509,134 +509,134 @@ The installer will quit and all changes will be lost. 表单 - + Select storage de&vice: 选择存储器(&V): - - - - + + + + Current: 当前: - + After: 之后: - + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. <strong>手动分区</strong><br/>您可以自行创建或重新调整分区大小。 - + Reuse %1 as home partition for %2. 重复使用 %1 作为 %2 的 home 分区。 - + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> <strong>选择要缩小的分区,然后拖动底栏改变大小</strong> - + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. %1 将会缩减未 %2MiB,然后为 %4 创建一个 %3MiB 分区。 - + Boot loader location: 引导程序位置: - + <strong>Select a partition to install on</strong> <strong>选择要安装到的分区</strong> - + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. 在此系统上找不到任何 EFI 系统分区。请后退到上一步并使用手动分区配置 %1。 - + The EFI system partition at %1 will be used for starting %2. %1 处的 EFI 系统分区将被用来启动 %2。 - + EFI system partition: EFI 系统分区: - + This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. 这个存储器上似乎还没有操作系统。您想要怎么做?<br/>在任何变更应用到存储器上前,您都可以重新查看并确认您的选择。 - - - - + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>抹除磁盘</strong><br/>这将会<font color="red">删除</font>目前选定的存储器上所有的数据。 - - - - + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>并存安装</strong><br/>安装程序将会缩小一个分区,为 %1 腾出空间。 - - - - + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>取代一个分区</strong><br/>以 %1 <strong>替代</strong>一个分区。 - + This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. 这个存储器上已经有 %1 了。您想要怎么做?<br/>在任何变更应用到存储器上前,您都可以重新查看并确认您的选择。 - + This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. 这个存储器上已经有一个操作系统了。您想要怎么做?<br/>在任何变更应用到存储器上前,您都可以重新查看并确认您的选择。 - + This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. 这个存储器上已经有多个操作系统了。您想要怎么做?<br/>在任何变更应用到存储器上前,您都可以重新查看并确认您的选择。 - + No Swap 无交换分区 - + Reuse Swap 重用交换分区 - + Swap (no Hibernate) 交换分区(无休眠) - + Swap (with Hibernate) 交换分区(带休眠) - + Swap to file 交换到文件 @@ -714,17 +714,17 @@ The installer will quit and all changes will be lost. 设置键盘布局为 %1/%2。 - + Set timezone to %1/%2. - + The system language will be set to %1. 系统语言将设置为 %1。 - + The numbers and dates locale will be set to %1. 数字和日期地域将设置为 %1。 @@ -796,42 +796,42 @@ The installer will quit and all changes will be lost. - + Your username is too long. 用户名太长。 - + '%1' is not allowed as username. - + Your username must start with a lowercase letter or underscore. 用户名必须以小写字母或下划线"_"开头 - + Only lowercase letters, numbers, underscore and hyphen are allowed. 只允许小写字母、数组、下划线"_" 和 连字符"-" - + Your hostname is too short. 主机名太短。 - + Your hostname is too long. 主机名太长。 - + '%1' is not allowed as hostname. - + Only letters, numbers, underscore and hyphen are allowed. 只允许字母、数组、下划线"_" 和 连字符"-" @@ -1253,7 +1253,8 @@ The installer will quit and all changes will be lost. 确认密码 - + + Please enter the same passphrase in both boxes. 请在两个输入框中输入同样的密码。 @@ -1705,18 +1706,18 @@ The installer will quit and all changes will be lost. LocalePage - + Region: 地区: - + Zone: 区域: - - + + &Change... 更改 (&C) ... @@ -1794,7 +1795,12 @@ The installer will quit and all changes will be lost. Map - + + Timezone: %1 + + + + Please select your preferred location on the map so the installer can suggest the locale and timezone settings for you. You can fine-tune the suggested settings below. Search the map by dragging to move and using the +/- buttons to zoom in/out or use mouse scrolling for zooming. @@ -1955,247 +1961,247 @@ The installer will quit and all changes will be lost. PWQ - + Password is too short 密码太短 - + Password is too long 密码太长 - + Password is too weak 密码强度太弱 - + Memory allocation error when setting '%1' 设置“%1”时发生内存分配错误 - + Memory allocation error 内存分配错误 - + The password is the same as the old one 新密码和老密码一致 - + The password is a palindrome 新密码为回文 - + The password differs with case changes only 新密码和老密码只有大小写区别 - + The password is too similar to the old one 新密码和老密码过于相似 - + The password contains the user name in some form 新密码包含用户名 - + The password contains words from the real name of the user in some form 新密码包含用户真实姓名 - + The password contains forbidden words in some form 新密码包含不允许使用的词组 - + The password contains less than %1 digits 新密码包含少于 %1 个数字 - + The password contains too few digits 新密码包含太少数字 - + The password contains less than %1 uppercase letters 新密码包含少于 %1 个大写字母 - + The password contains too few uppercase letters 新密码包含太少大写字母 - + The password contains less than %1 lowercase letters 新密码包含少于 %1 个小写字母 - + The password contains too few lowercase letters 新密码包含太少小写字母 - + The password contains less than %1 non-alphanumeric characters 新密码包含少于 %1 个非字母/数字字符 - + The password contains too few non-alphanumeric characters 新密码包含太少非字母/数字字符 - + The password is shorter than %1 characters 新密码短于 %1 位 - + The password is too short 新密码过短 - + The password is just rotated old one 新密码仅对老密码作了字序调整 - + The password contains less than %1 character classes 新密码包含少于 %1 个字符类型 - + The password does not contain enough character classes 新密码包含太少字符类型 - + The password contains more than %1 same characters consecutively 新密码包含超过 %1 个连续的相同字符 - + The password contains too many same characters consecutively 新密码包含过多连续的相同字符 - + The password contains more than %1 characters of the same class consecutively 新密码包含超过 %1 个连续的同类型字符 - + The password contains too many characters of the same class consecutively 新密码包含过多连续的同类型字符 - + The password contains monotonic sequence longer than %1 characters 新密码包含超过 %1 个字符长度的单调序列 - + The password contains too long of a monotonic character sequence 新密码包含过长的单调序列 - + No password supplied 未输入密码 - + Cannot obtain random numbers from the RNG device 无法从随机数生成器 (RNG) 设备获取随机数 - + Password generation failed - required entropy too low for settings 无法生成密码 - 熵值过低 - + The password fails the dictionary check - %1 新密码无法通过字典检查 - %1 - + The password fails the dictionary check 新密码无法通过字典检查 - + Unknown setting - %1 未知设置 - %1 - + Unknown setting 未知设置 - + Bad integer value of setting - %1 设置的整数值非法 - %1 - + Bad integer value 设置的整数值非法 - + Setting %1 is not of integer type 设定值 %1 不是整数类型 - + Setting is not of integer type 设定值不是整数类型 - + Setting %1 is not of string type 设定值 %1 不是字符串类型 - + Setting is not of string type 设定值不是字符串类型 - + Opening the configuration file failed 无法打开配置文件 - + The configuration file is malformed 配置文件格式不正确 - + Fatal failure 致命错误 - + Unknown error 未知错误 - + Password is empty 密码是空 @@ -2529,67 +2535,67 @@ The installer will quit and all changes will be lost. PartitionViewStep - + Gathering system information... 正在收集系统信息... - + Partitions 分区 - + Install %1 <strong>alongside</strong> another operating system. 将 %1 安装在其他操作系统<strong>旁边</strong>。 - + <strong>Erase</strong> disk and install %1. <strong>抹除</strong>磁盘并安装 %1。 - + <strong>Replace</strong> a partition with %1. 以 %1 <strong>替代</strong>一个分区。 - + <strong>Manual</strong> partitioning. <strong>手动</strong>分区 - + Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). 将 %1 安装在磁盘 <strong>%2</strong> (%3) 上的另一个操作系统<strong>旁边</strong>。 - + <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. <strong>抹除</strong> 磁盘 <strong>%2</strong> (%3) 并且安装 %1。 - + <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. 以 %1 <strong>替代</strong> 一个在磁盘 <strong>%2</strong> (%3) 上的分区。 - + <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). 在磁盘 <strong>%1</strong> (%2) 上<strong>手动</strong>分区。 - + Disk <strong>%1</strong> (%2) 磁盘 <strong>%1</strong> (%2) - + Current: 当前: - + After: 之后: @@ -2634,12 +2640,12 @@ The installer will quit and all changes will be lost. 您尝试用单独的引导分区配合已加密的根分区使用,但引导分区未加密。<br/><br/>这种配置方式可能存在安全隐患,因为重要的系统文件存储在了未加密的分区上。<br/>您可以继续保持此配置,但是系统解密将在系统启动时而不是引导时进行。<br/>要加密引导分区,请返回上一步并重新创建此分区,并在分区创建窗口选中 <strong>加密</strong> 选项。 - + has at least one disk device available. 有至少一个可用的磁盘设备。 - + There are no partitions to install on. 无可用于安装的分区。 @@ -3546,17 +3552,17 @@ Output: UsersPage - + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>如果有多人要使用此计算机,您可以在安装后创建多个账户。</small> - + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> <small>如果有多人要使用此计算机,您可以在安装后创建多个账户。</small> - + Your passwords do not match! 密码不匹配! @@ -3564,7 +3570,7 @@ Output: UsersViewStep - + Users 用户 @@ -3853,7 +3859,7 @@ Output: localeq - + Change diff --git a/lang/calamares_zh_TW.ts b/lang/calamares_zh_TW.ts index 5c53795a4f..1fc94c7a12 100644 --- a/lang/calamares_zh_TW.ts +++ b/lang/calamares_zh_TW.ts @@ -508,134 +508,134 @@ The installer will quit and all changes will be lost. 表單 - + Select storage de&vice: 選取儲存裝置(&V): - - - - + + + + Current: 目前: - + After: 之後: - + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. <strong>手動分割</strong><br/>可以自行建立或重新調整分割區大小。 - + Reuse %1 as home partition for %2. 重新使用 %1 作為 %2 的家目錄分割區。 - + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> <strong>選取要縮減的分割區,然後拖曳底部條狀物來調整大小</strong> - + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. %1 會縮減到 %2MiB,並且會為 %4 建立新的 %3MiB 分割區。 - + Boot loader location: 開機載入器位置: - + <strong>Select a partition to install on</strong> <strong>選取分割區以安裝在其上</strong> - + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. 在這個系統找不到 EFI 系統分割區。請回到上一步並使用手動分割以設定 %1。 - + The EFI system partition at %1 will be used for starting %2. 在 %1 的 EFI 系統分割區將會在開始 %2 時使用。 - + EFI system partition: EFI 系統分割區: - + This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. 這個儲存裝置上似乎還沒有作業系統。您想要怎麼做?<br/>在任何變更套用到儲存裝置上前,您都可以重新檢視並確認您的選擇。 - - - - + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>抹除磁碟</strong><br/>這將會<font color="red">刪除</font>目前選取的儲存裝置所有的資料。 - - - - + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>並存安裝</strong><br/>安裝程式會縮小一個分割區,以讓出空間給 %1。 - - - - + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>取代一個分割區</strong><br/>用 %1 取代一個分割區。 - + This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. 這個儲存裝置上已經有 %1 了。您想要怎麼做?<br/>在任何變更套用到儲存裝置上前,您都可以重新檢視並確認您的選擇。 - + This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. 這個儲存裝置上已經有一個作業系統了。您想要怎麼做?<br/>在任何變更套用到儲存裝置上前,您都可以重新檢視並確認您的選擇。 - + This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. 這個儲存裝置上已經有多個作業系統了。您想要怎麼做?<br/>在任何變更套用到儲存裝置上前,您都可以重新檢視並確認您的選擇。 - + No Swap 沒有 Swap - + Reuse Swap 重用 Swap - + Swap (no Hibernate) Swap(沒有冬眠) - + Swap (with Hibernate) Swap(有冬眠) - + Swap to file Swap 到檔案 @@ -713,17 +713,17 @@ The installer will quit and all changes will be lost. 設定鍵盤佈局為 %1/%2 。 - + Set timezone to %1/%2. 設定時區為 %1/%2。 - + The system language will be set to %1. 系統語言會設定為%1。 - + The numbers and dates locale will be set to %1. 數字與日期語系會設定為%1。 @@ -793,42 +793,42 @@ The installer will quit and all changes will be lost. <h1>歡迎使用 %1 安裝程式</h1> - + Your username is too long. 您的使用者名稱太長了。 - + '%1' is not allowed as username. 「%1」無法作為使用者名稱。 - + Your username must start with a lowercase letter or underscore. 您的使用者名稱必須以小寫字母或底線開頭。 - + Only lowercase letters, numbers, underscore and hyphen are allowed. 僅允許小寫字母、數字、底線與連接號。 - + Your hostname is too short. 您的主機名稱太短了。 - + Your hostname is too long. 您的主機名稱太長了。 - + '%1' is not allowed as hostname. 「%1」無法作為主機名稱。 - + Only letters, numbers, underscore and hyphen are allowed. 僅允許字母、數字、底線與連接號。 @@ -1249,7 +1249,8 @@ The installer will quit and all changes will be lost. 確認通關密語 - + + Please enter the same passphrase in both boxes. 請在兩個框框中輸入相同的通關密語。 @@ -1701,18 +1702,18 @@ The installer will quit and all changes will be lost. LocalePage - + Region: 地區 - + Zone: 時區 - - + + &Change... 變更...(&C) @@ -1790,7 +1791,12 @@ The installer will quit and all changes will be lost. Map - + + Timezone: %1 + 時區:%1 + + + Please select your preferred location on the map so the installer can suggest the locale and timezone settings for you. You can fine-tune the suggested settings below. Search the map by dragging to move and using the +/- buttons to zoom in/out or use mouse scrolling for zooming. @@ -1953,247 +1959,247 @@ The installer will quit and all changes will be lost. PWQ - + Password is too short 密碼太短 - + Password is too long 密碼太長 - + Password is too weak 密碼太弱 - + Memory allocation error when setting '%1' 當設定「%1」時記憶體分配錯誤 - + Memory allocation error 記憶體分配錯誤 - + The password is the same as the old one 密碼與舊的相同 - + The password is a palindrome 此密碼為迴文 - + The password differs with case changes only 密碼僅大小寫不同 - + The password is too similar to the old one 密碼與舊的太過相似 - + The password contains the user name in some form 密碼包含某種形式的使用者名稱 - + The password contains words from the real name of the user in some form 密碼包含了某種形式的使用者真實姓名 - + The password contains forbidden words in some form 密碼包含了某種形式的無效文字 - + The password contains less than %1 digits 密碼中的數字少於 %1 個 - + The password contains too few digits 密碼包含的數字太少了 - + The password contains less than %1 uppercase letters 密碼包含少於 %1 個大寫字母 - + The password contains too few uppercase letters 密碼包含的大寫字母太少了 - + The password contains less than %1 lowercase letters 密碼包含少於 %1 個小寫字母 - + The password contains too few lowercase letters 密碼包含的小寫字母太少了 - + The password contains less than %1 non-alphanumeric characters 密碼包含了少於 %1 個非字母與數字的字元 - + The password contains too few non-alphanumeric characters 密碼包含的非字母與數字的字元太少了 - + The password is shorter than %1 characters 密碼短於 %1 個字元 - + The password is too short 密碼太短 - + The password is just rotated old one 密碼只是輪換過的舊密碼 - + The password contains less than %1 character classes 密碼包含了少於 %1 種字元類型 - + The password does not contain enough character classes 密碼未包含足夠的字元類型 - + The password contains more than %1 same characters consecutively 密碼包含了連續超過 %1 個相同字元 - + The password contains too many same characters consecutively 密碼包含連續太多個相同的字元 - + The password contains more than %1 characters of the same class consecutively 密碼包含了連續多於 %1 個相同的字元類型 - + The password contains too many characters of the same class consecutively 密碼包含了連續太多相同類型的字元 - + The password contains monotonic sequence longer than %1 characters 密碼包含了長度超過 %1 個字元的單調序列 - + The password contains too long of a monotonic character sequence 密碼包含了長度過長的單調字元序列 - + No password supplied 未提供密碼 - + Cannot obtain random numbers from the RNG device 無法從 RNG 裝置中取得隨機數 - + Password generation failed - required entropy too low for settings 密碼生成失敗,設定的必要熵太低 - + The password fails the dictionary check - %1 密碼在字典檢查時失敗 - %1 - + The password fails the dictionary check 密碼在字典檢查時失敗 - + Unknown setting - %1 未知的設定 - %1 - + Unknown setting 未知的設定 - + Bad integer value of setting - %1 整數值設定不正確 - %1 - + Bad integer value 整數值不正確 - + Setting %1 is not of integer type 設定 %1 不是整數類型 - + Setting is not of integer type 設定不是整數類型 - + Setting %1 is not of string type 設定 %1 不是字串類型 - + Setting is not of string type 設定不是字串類型 - + Opening the configuration file failed 開啟設定檔失敗 - + The configuration file is malformed 設定檔格式不正確 - + Fatal failure 無法挽回的失敗 - + Unknown error 未知的錯誤 - + Password is empty 密碼為空 @@ -2527,67 +2533,67 @@ The installer will quit and all changes will be lost. PartitionViewStep - + Gathering system information... 蒐集系統資訊中... - + Partitions 分割區 - + Install %1 <strong>alongside</strong> another operating system. 將 %1 安裝在其他作業系統<strong>旁邊</strong>。 - + <strong>Erase</strong> disk and install %1. <strong>抹除</strong>磁碟並安裝 %1。 - + <strong>Replace</strong> a partition with %1. 以 %1 <strong>取代</strong>一個分割區。 - + <strong>Manual</strong> partitioning. <strong>手動</strong>分割 - + Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). 將 %1 安裝在磁碟 <strong>%2</strong> (%3) 上的另一個作業系統<strong>旁邊</strong>。 - + <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. <strong>抹除</strong> 磁碟 <strong>%2</strong> (%3) 並且安裝 %1。 - + <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. 以 %1 <strong>取代</strong> 一個在磁碟 <strong>%2</strong> (%3) 上的分割區。 - + <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). 在磁碟 <strong>%1</strong> (%2) 上<strong>手動</strong>分割。 - + Disk <strong>%1</strong> (%2) 磁碟 <strong>%1</strong> (%2) - + Current: 目前: - + After: 之後: @@ -2632,12 +2638,12 @@ The installer will quit and all changes will be lost. 設定了單獨的開機分割區以及加密的根分割區,但是開機分割區並不會被加密。<br/><br/>這種設定可能會造成安全問題,因為重要的系統檔案是放在未加密的分割區中。<br/>您也可以繼續,但是檔案系統的解鎖會在系統啟動後才發生。<br/>要加密開機分割區,回到上一頁並重新建立它,並在分割區建立視窗選取<strong>加密</strong>。 - + has at least one disk device available. 有至少一個可用的磁碟裝置。 - + There are no partitions to install on. 沒有可用於安裝的分割區。 @@ -3545,17 +3551,17 @@ Output: UsersPage - + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>如果將會有多於一人使用這臺電腦,您可以在安裝後設定多個帳號。</small> - + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> <small>如果將會有多於一人使用這臺電腦,您可以在安裝後設定多個帳號。</small> - + Your passwords do not match! 密碼不符! @@ -3563,7 +3569,7 @@ Output: UsersViewStep - + Users 使用者 @@ -3854,7 +3860,7 @@ Output: localeq - + Change 變更 From 695c1ea190ade8cbc72707d4b8e8ee1befd225ca Mon Sep 17 00:00:00 2001 From: Calamares CI Date: Tue, 18 Aug 2020 14:58:18 +0200 Subject: [PATCH 073/157] i18n: [python] Automatic merge of Transifex translations --- lang/python.pot | 153 ++++++++++-------- lang/python/ar/LC_MESSAGES/python.po | 2 +- lang/python/as/LC_MESSAGES/python.po | 2 +- lang/python/ast/LC_MESSAGES/python.po | 2 +- lang/python/az/LC_MESSAGES/python.po | 2 +- lang/python/az_AZ/LC_MESSAGES/python.po | 2 +- lang/python/be/LC_MESSAGES/python.po | 2 +- lang/python/bg/LC_MESSAGES/python.po | 2 +- lang/python/bn/LC_MESSAGES/python.po | 2 +- lang/python/ca/LC_MESSAGES/python.po | 2 +- lang/python/ca@valencia/LC_MESSAGES/python.po | 2 +- lang/python/cs_CZ/LC_MESSAGES/python.po | 2 +- lang/python/da/LC_MESSAGES/python.po | 2 +- lang/python/de/LC_MESSAGES/python.po | 2 +- lang/python/el/LC_MESSAGES/python.po | 2 +- lang/python/en_GB/LC_MESSAGES/python.po | 2 +- lang/python/eo/LC_MESSAGES/python.po | 2 +- lang/python/es/LC_MESSAGES/python.po | 2 +- lang/python/es_MX/LC_MESSAGES/python.po | 2 +- lang/python/es_PR/LC_MESSAGES/python.po | 2 +- lang/python/et/LC_MESSAGES/python.po | 2 +- lang/python/eu/LC_MESSAGES/python.po | 2 +- lang/python/fa/LC_MESSAGES/python.po | 2 +- lang/python/fi_FI/LC_MESSAGES/python.po | 2 +- lang/python/fr/LC_MESSAGES/python.po | 4 +- lang/python/fr_CH/LC_MESSAGES/python.po | 2 +- lang/python/gl/LC_MESSAGES/python.po | 2 +- lang/python/gu/LC_MESSAGES/python.po | 2 +- lang/python/he/LC_MESSAGES/python.po | 2 +- lang/python/hi/LC_MESSAGES/python.po | 2 +- lang/python/hr/LC_MESSAGES/python.po | 2 +- lang/python/hu/LC_MESSAGES/python.po | 2 +- lang/python/id/LC_MESSAGES/python.po | 2 +- lang/python/ie/LC_MESSAGES/python.po | 2 +- lang/python/is/LC_MESSAGES/python.po | 2 +- lang/python/it_IT/LC_MESSAGES/python.po | 2 +- lang/python/ja/LC_MESSAGES/python.po | 2 +- lang/python/kk/LC_MESSAGES/python.po | 2 +- lang/python/kn/LC_MESSAGES/python.po | 2 +- lang/python/ko/LC_MESSAGES/python.po | 2 +- lang/python/lo/LC_MESSAGES/python.po | 2 +- lang/python/lt/LC_MESSAGES/python.po | 2 +- lang/python/lv/LC_MESSAGES/python.po | 2 +- lang/python/mk/LC_MESSAGES/python.po | 2 +- lang/python/ml/LC_MESSAGES/python.po | 2 +- lang/python/mr/LC_MESSAGES/python.po | 2 +- lang/python/nb/LC_MESSAGES/python.po | 2 +- lang/python/ne_NP/LC_MESSAGES/python.po | 2 +- lang/python/nl/LC_MESSAGES/python.po | 2 +- lang/python/pl/LC_MESSAGES/python.po | 2 +- lang/python/pt_BR/LC_MESSAGES/python.po | 2 +- lang/python/pt_PT/LC_MESSAGES/python.po | 2 +- lang/python/ro/LC_MESSAGES/python.po | 2 +- lang/python/ru/LC_MESSAGES/python.po | 2 +- lang/python/sk/LC_MESSAGES/python.po | 2 +- lang/python/sl/LC_MESSAGES/python.po | 2 +- lang/python/sq/LC_MESSAGES/python.po | 2 +- lang/python/sr/LC_MESSAGES/python.po | 2 +- lang/python/sr@latin/LC_MESSAGES/python.po | 2 +- lang/python/sv/LC_MESSAGES/python.po | 2 +- lang/python/tg/LC_MESSAGES/python.po | 2 +- lang/python/th/LC_MESSAGES/python.po | 2 +- lang/python/tr_TR/LC_MESSAGES/python.po | 2 +- lang/python/uk/LC_MESSAGES/python.po | 2 +- lang/python/ur/LC_MESSAGES/python.po | 2 +- lang/python/uz/LC_MESSAGES/python.po | 2 +- lang/python/zh_CN/LC_MESSAGES/python.po | 2 +- lang/python/zh_TW/LC_MESSAGES/python.po | 2 +- 68 files changed, 152 insertions(+), 137 deletions(-) diff --git a/lang/python.pot b/lang/python.pot index 7e3d85b673..e082c567c4 100644 --- a/lang/python.pot +++ b/lang/python.pot @@ -2,7 +2,7 @@ # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. -# +# #, fuzzy msgid "" msgstr "" @@ -12,19 +12,19 @@ msgstr "" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" -"Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: \n" "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" #: src/modules/grubcfg/main.py:37 msgid "Configure GRUB." -msgstr "" +msgstr "Configure GRUB." #: src/modules/mount/main.py:38 msgid "Mounting partitions." -msgstr "" +msgstr "Mounting partitions." #: src/modules/mount/main.py:150 src/modules/initcpiocfg/main.py:205 #: src/modules/initcpiocfg/main.py:209 @@ -36,172 +36,179 @@ msgstr "" #: src/modules/fstab/main.py:338 src/modules/localecfg/main.py:144 #: src/modules/networkcfg/main.py:48 msgid "Configuration Error" -msgstr "" +msgstr "Configuration Error" #: src/modules/mount/main.py:151 src/modules/initcpiocfg/main.py:206 #: src/modules/luksopenswaphookcfg/main.py:96 src/modules/rawfs/main.py:174 #: src/modules/initramfscfg/main.py:95 src/modules/openrcdmcryptcfg/main.py:79 #: src/modules/fstab/main.py:333 msgid "No partitions are defined for
{!s}
to use." -msgstr "" +msgstr "No partitions are defined for
{!s}
to use." #: src/modules/services-systemd/main.py:35 msgid "Configure systemd services" -msgstr "" +msgstr "Configure systemd services" #: src/modules/services-systemd/main.py:68 #: src/modules/services-openrc/main.py:102 msgid "Cannot modify service" -msgstr "" +msgstr "Cannot modify service" #: src/modules/services-systemd/main.py:69 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" +"systemctl {arg!s} call in chroot returned error code {num!s}." #: src/modules/services-systemd/main.py:72 #: src/modules/services-systemd/main.py:76 msgid "Cannot enable systemd service {name!s}." -msgstr "" +msgstr "Cannot enable systemd service {name!s}." #: src/modules/services-systemd/main.py:74 msgid "Cannot enable systemd target {name!s}." -msgstr "" +msgstr "Cannot enable systemd target {name!s}." #: src/modules/services-systemd/main.py:78 msgid "Cannot disable systemd target {name!s}." -msgstr "" +msgstr "Cannot disable systemd target {name!s}." #: src/modules/services-systemd/main.py:80 msgid "Cannot mask systemd unit {name!s}." -msgstr "" +msgstr "Cannot mask systemd unit {name!s}." #: src/modules/services-systemd/main.py:82 msgid "" -"Unknown systemd commands {command!s} and {suffix!s} for unit {name!s}." +"Unknown systemd commands {command!s} and " +"{suffix!s} for unit {name!s}." msgstr "" +"Unknown systemd commands {command!s} and " +"{suffix!s} for unit {name!s}." #: src/modules/umount/main.py:40 msgid "Unmount file systems." -msgstr "" +msgstr "Unmount file systems." #: src/modules/unpackfs/main.py:44 msgid "Filling up filesystems." -msgstr "" +msgstr "Filling up filesystems." #: src/modules/unpackfs/main.py:257 msgid "rsync failed with error code {}." -msgstr "" +msgstr "rsync failed with error code {}." #: src/modules/unpackfs/main.py:302 msgid "Unpacking image {}/{}, file {}/{}" -msgstr "" +msgstr "Unpacking image {}/{}, file {}/{}" #: src/modules/unpackfs/main.py:317 msgid "Starting to unpack {}" -msgstr "" +msgstr "Starting to unpack {}" #: src/modules/unpackfs/main.py:326 src/modules/unpackfs/main.py:448 msgid "Failed to unpack image \"{}\"" -msgstr "" +msgstr "Failed to unpack image \"{}\"" #: src/modules/unpackfs/main.py:415 msgid "No mount point for root partition" -msgstr "" +msgstr "No mount point for root partition" #: src/modules/unpackfs/main.py:416 msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" -msgstr "" +msgstr "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" #: src/modules/unpackfs/main.py:421 msgid "Bad mount point for root partition" -msgstr "" +msgstr "Bad mount point for root partition" #: src/modules/unpackfs/main.py:422 msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" -msgstr "" +msgstr "rootMountPoint is \"{}\", which does not exist, doing nothing" #: src/modules/unpackfs/main.py:438 src/modules/unpackfs/main.py:442 #: src/modules/unpackfs/main.py:462 msgid "Bad unsquash configuration" -msgstr "" +msgstr "Bad unsquash configuration" #: src/modules/unpackfs/main.py:439 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" -msgstr "" +msgstr "The filesystem for \"{}\" ({}) is not supported by your current kernel" #: src/modules/unpackfs/main.py:443 msgid "The source filesystem \"{}\" does not exist" -msgstr "" +msgstr "The source filesystem \"{}\" does not exist" #: src/modules/unpackfs/main.py:449 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "" +"Failed to find unsquashfs, make sure you have the squashfs-tools package " +"installed" #: src/modules/unpackfs/main.py:463 msgid "The destination \"{}\" in the target system is not a directory" -msgstr "" +msgstr "The destination \"{}\" in the target system is not a directory" #: src/modules/displaymanager/main.py:523 msgid "Cannot write KDM configuration file" -msgstr "" +msgstr "Cannot write KDM configuration file" #: src/modules/displaymanager/main.py:524 msgid "KDM config file {!s} does not exist" -msgstr "" +msgstr "KDM config file {!s} does not exist" #: src/modules/displaymanager/main.py:585 msgid "Cannot write LXDM configuration file" -msgstr "" +msgstr "Cannot write LXDM configuration file" #: src/modules/displaymanager/main.py:586 msgid "LXDM config file {!s} does not exist" -msgstr "" +msgstr "LXDM config file {!s} does not exist" #: src/modules/displaymanager/main.py:669 msgid "Cannot write LightDM configuration file" -msgstr "" +msgstr "Cannot write LightDM configuration file" #: src/modules/displaymanager/main.py:670 msgid "LightDM config file {!s} does not exist" -msgstr "" +msgstr "LightDM config file {!s} does not exist" #: src/modules/displaymanager/main.py:744 msgid "Cannot configure LightDM" -msgstr "" +msgstr "Cannot configure LightDM" #: src/modules/displaymanager/main.py:745 msgid "No LightDM greeter installed." -msgstr "" +msgstr "No LightDM greeter installed." #: src/modules/displaymanager/main.py:776 msgid "Cannot write SLIM configuration file" -msgstr "" +msgstr "Cannot write SLIM configuration file" #: src/modules/displaymanager/main.py:777 msgid "SLIM config file {!s} does not exist" -msgstr "" +msgstr "SLIM config file {!s} does not exist" #: src/modules/displaymanager/main.py:903 msgid "No display managers selected for the displaymanager module." -msgstr "" +msgstr "No display managers selected for the displaymanager module." #: src/modules/displaymanager/main.py:904 msgid "" "The displaymanagers list is empty or undefined in bothglobalstorage and " "displaymanager.conf." msgstr "" +"The displaymanagers list is empty or undefined in bothglobalstorage and " +"displaymanager.conf." #: src/modules/displaymanager/main.py:986 msgid "Display manager configuration was incomplete" -msgstr "" +msgstr "Display manager configuration was incomplete" #: src/modules/initcpiocfg/main.py:37 msgid "Configuring mkinitcpio." -msgstr "" +msgstr "Configuring mkinitcpio." #: src/modules/initcpiocfg/main.py:210 #: src/modules/luksopenswaphookcfg/main.py:100 @@ -209,131 +216,139 @@ msgstr "" #: src/modules/fstab/main.py:339 src/modules/localecfg/main.py:145 #: src/modules/networkcfg/main.py:49 msgid "No root mount point is given for
{!s}
to use." -msgstr "" +msgstr "No root mount point is given for
{!s}
to use." #: src/modules/luksopenswaphookcfg/main.py:35 msgid "Configuring encrypted swap." -msgstr "" +msgstr "Configuring encrypted swap." #: src/modules/rawfs/main.py:35 msgid "Installing data." -msgstr "" +msgstr "Installing data." #: src/modules/services-openrc/main.py:38 msgid "Configure OpenRC services" -msgstr "" +msgstr "Configure OpenRC services" #: src/modules/services-openrc/main.py:66 msgid "Cannot add service {name!s} to run-level {level!s}." -msgstr "" +msgstr "Cannot add service {name!s} to run-level {level!s}." #: src/modules/services-openrc/main.py:68 msgid "Cannot remove service {name!s} from run-level {level!s}." -msgstr "" +msgstr "Cannot remove service {name!s} from run-level {level!s}." #: src/modules/services-openrc/main.py:70 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" +"Unknown service-action {arg!s} for service {name!s} in run-" +"level {level!s}." #: src/modules/services-openrc/main.py:103 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" +"rc-update {arg!s} call in chroot returned error code {num!s}." #: src/modules/services-openrc/main.py:110 msgid "Target runlevel does not exist" -msgstr "" +msgstr "Target runlevel does not exist" #: src/modules/services-openrc/main.py:111 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" +"The path for runlevel {level!s} is {path!s}, which does not " +"exist." #: src/modules/services-openrc/main.py:119 msgid "Target service does not exist" -msgstr "" +msgstr "Target service does not exist" #: src/modules/services-openrc/main.py:120 msgid "" -"The path for service {name!s} is {path!s}, which does not exist." +"The path for service {name!s} is {path!s}, which does not " +"exist." msgstr "" +"The path for service {name!s} is {path!s}, which does not " +"exist." #: src/modules/plymouthcfg/main.py:36 msgid "Configure Plymouth theme" -msgstr "" +msgstr "Configure Plymouth theme" #: src/modules/packages/main.py:59 src/modules/packages/main.py:68 #: src/modules/packages/main.py:78 msgid "Install packages." -msgstr "" +msgstr "Install packages." #: src/modules/packages/main.py:66 #, python-format msgid "Processing packages (%(count)d / %(total)d)" -msgstr "" +msgstr "Processing packages (%(count)d / %(total)d)" #: src/modules/packages/main.py:71 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Installing one package." +msgstr[1] "Installing %(num)d packages." #: src/modules/packages/main.py:74 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Removing one package." +msgstr[1] "Removing %(num)d packages." #: src/modules/bootloader/main.py:51 msgid "Install bootloader." -msgstr "" +msgstr "Install bootloader." #: src/modules/hwclock/main.py:35 msgid "Setting hardware clock." -msgstr "" +msgstr "Setting hardware clock." #: src/modules/dracut/main.py:36 msgid "Creating initramfs with dracut." -msgstr "" +msgstr "Creating initramfs with dracut." #: src/modules/dracut/main.py:58 msgid "Failed to run dracut on the target" -msgstr "" +msgstr "Failed to run dracut on the target" #: src/modules/dracut/main.py:59 msgid "The exit code was {}" -msgstr "" +msgstr "The exit code was {}" #: src/modules/initramfscfg/main.py:41 msgid "Configuring initramfs." -msgstr "" +msgstr "Configuring initramfs." #: src/modules/openrcdmcryptcfg/main.py:34 msgid "Configuring OpenRC dmcrypt service." -msgstr "" +msgstr "Configuring OpenRC dmcrypt service." #: src/modules/fstab/main.py:38 msgid "Writing fstab." -msgstr "" +msgstr "Writing fstab." #: src/modules/dummypython/main.py:44 msgid "Dummy python job." -msgstr "" +msgstr "Dummy python job." #: src/modules/dummypython/main.py:46 src/modules/dummypython/main.py:102 #: src/modules/dummypython/main.py:103 msgid "Dummy python step {}" -msgstr "" +msgstr "Dummy python step {}" #: src/modules/localecfg/main.py:39 msgid "Configuring locales." -msgstr "" +msgstr "Configuring locales." #: src/modules/networkcfg/main.py:37 msgid "Saving network configuration." -msgstr "" +msgstr "Saving network configuration." diff --git a/lang/python/ar/LC_MESSAGES/python.po b/lang/python/ar/LC_MESSAGES/python.po index ab3a2fd93b..43a77b7471 100644 --- a/lang/python/ar/LC_MESSAGES/python.po +++ b/lang/python/ar/LC_MESSAGES/python.po @@ -12,7 +12,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-07-29 11:03+0200\n" +"POT-Creation-Date: 2020-08-09 20:56+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: aboodilankaboot, 2019\n" "Language-Team: Arabic (https://www.transifex.com/calamares/teams/20061/ar/)\n" diff --git a/lang/python/as/LC_MESSAGES/python.po b/lang/python/as/LC_MESSAGES/python.po index feeae11959..fe159e1689 100644 --- a/lang/python/as/LC_MESSAGES/python.po +++ b/lang/python/as/LC_MESSAGES/python.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-07-29 11:03+0200\n" +"POT-Creation-Date: 2020-08-09 20:56+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Deep Jyoti Choudhury , 2020\n" "Language-Team: Assamese (https://www.transifex.com/calamares/teams/20061/as/)\n" diff --git a/lang/python/ast/LC_MESSAGES/python.po b/lang/python/ast/LC_MESSAGES/python.po index c9c7ae5d9f..0a98ff9f81 100644 --- a/lang/python/ast/LC_MESSAGES/python.po +++ b/lang/python/ast/LC_MESSAGES/python.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-07-29 11:03+0200\n" +"POT-Creation-Date: 2020-08-09 20:56+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: enolp , 2020\n" "Language-Team: Asturian (https://www.transifex.com/calamares/teams/20061/ast/)\n" diff --git a/lang/python/az/LC_MESSAGES/python.po b/lang/python/az/LC_MESSAGES/python.po index 1fcf70cbc0..cefa15dc7c 100644 --- a/lang/python/az/LC_MESSAGES/python.po +++ b/lang/python/az/LC_MESSAGES/python.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-07-29 11:03+0200\n" +"POT-Creation-Date: 2020-08-09 20:56+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Xəyyam Qocayev , 2020\n" "Language-Team: Azerbaijani (https://www.transifex.com/calamares/teams/20061/az/)\n" diff --git a/lang/python/az_AZ/LC_MESSAGES/python.po b/lang/python/az_AZ/LC_MESSAGES/python.po index 93063ff7a0..a84f9e7868 100644 --- a/lang/python/az_AZ/LC_MESSAGES/python.po +++ b/lang/python/az_AZ/LC_MESSAGES/python.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-07-29 11:03+0200\n" +"POT-Creation-Date: 2020-08-09 20:56+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Xəyyam Qocayev , 2020\n" "Language-Team: Azerbaijani (Azerbaijan) (https://www.transifex.com/calamares/teams/20061/az_AZ/)\n" diff --git a/lang/python/be/LC_MESSAGES/python.po b/lang/python/be/LC_MESSAGES/python.po index fb1183a06a..5262ed7a01 100644 --- a/lang/python/be/LC_MESSAGES/python.po +++ b/lang/python/be/LC_MESSAGES/python.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-07-29 11:03+0200\n" +"POT-Creation-Date: 2020-08-09 20:56+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Zmicer Turok , 2020\n" "Language-Team: Belarusian (https://www.transifex.com/calamares/teams/20061/be/)\n" diff --git a/lang/python/bg/LC_MESSAGES/python.po b/lang/python/bg/LC_MESSAGES/python.po index 7054ad0131..4fc0eadea7 100644 --- a/lang/python/bg/LC_MESSAGES/python.po +++ b/lang/python/bg/LC_MESSAGES/python.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-07-29 11:03+0200\n" +"POT-Creation-Date: 2020-08-09 20:56+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Georgi Georgiev , 2020\n" "Language-Team: Bulgarian (https://www.transifex.com/calamares/teams/20061/bg/)\n" diff --git a/lang/python/bn/LC_MESSAGES/python.po b/lang/python/bn/LC_MESSAGES/python.po index f131948d9e..fc5d6f1019 100644 --- a/lang/python/bn/LC_MESSAGES/python.po +++ b/lang/python/bn/LC_MESSAGES/python.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-07-29 11:03+0200\n" +"POT-Creation-Date: 2020-08-09 20:56+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: 508a8b0ef95404aa3dc5178f0ccada5e_017b8a4 , 2020\n" "Language-Team: Bengali (https://www.transifex.com/calamares/teams/20061/bn/)\n" diff --git a/lang/python/ca/LC_MESSAGES/python.po b/lang/python/ca/LC_MESSAGES/python.po index a1c60490c1..aae659bb5a 100644 --- a/lang/python/ca/LC_MESSAGES/python.po +++ b/lang/python/ca/LC_MESSAGES/python.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-07-29 11:03+0200\n" +"POT-Creation-Date: 2020-08-09 20:56+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Davidmp , 2020\n" "Language-Team: Catalan (https://www.transifex.com/calamares/teams/20061/ca/)\n" diff --git a/lang/python/ca@valencia/LC_MESSAGES/python.po b/lang/python/ca@valencia/LC_MESSAGES/python.po index 376ceb3e9b..cc4f2c1b2c 100644 --- a/lang/python/ca@valencia/LC_MESSAGES/python.po +++ b/lang/python/ca@valencia/LC_MESSAGES/python.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-07-29 11:03+0200\n" +"POT-Creation-Date: 2020-08-09 20:56+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Language-Team: Catalan (Valencian) (https://www.transifex.com/calamares/teams/20061/ca@valencia/)\n" "MIME-Version: 1.0\n" diff --git a/lang/python/cs_CZ/LC_MESSAGES/python.po b/lang/python/cs_CZ/LC_MESSAGES/python.po index 2d82738f51..5316dae817 100644 --- a/lang/python/cs_CZ/LC_MESSAGES/python.po +++ b/lang/python/cs_CZ/LC_MESSAGES/python.po @@ -12,7 +12,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-07-29 11:03+0200\n" +"POT-Creation-Date: 2020-08-09 20:56+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Pavel Borecki , 2020\n" "Language-Team: Czech (Czech Republic) (https://www.transifex.com/calamares/teams/20061/cs_CZ/)\n" diff --git a/lang/python/da/LC_MESSAGES/python.po b/lang/python/da/LC_MESSAGES/python.po index cd12d0d79a..e4daf8c912 100644 --- a/lang/python/da/LC_MESSAGES/python.po +++ b/lang/python/da/LC_MESSAGES/python.po @@ -12,7 +12,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-07-29 11:03+0200\n" +"POT-Creation-Date: 2020-08-09 20:56+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: scootergrisen, 2020\n" "Language-Team: Danish (https://www.transifex.com/calamares/teams/20061/da/)\n" diff --git a/lang/python/de/LC_MESSAGES/python.po b/lang/python/de/LC_MESSAGES/python.po index f154c41456..506d49cca1 100644 --- a/lang/python/de/LC_MESSAGES/python.po +++ b/lang/python/de/LC_MESSAGES/python.po @@ -13,7 +13,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-07-29 11:03+0200\n" +"POT-Creation-Date: 2020-08-09 20:56+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Christian Spaan, 2020\n" "Language-Team: German (https://www.transifex.com/calamares/teams/20061/de/)\n" diff --git a/lang/python/el/LC_MESSAGES/python.po b/lang/python/el/LC_MESSAGES/python.po index ff6bc27a6e..8145f277ea 100644 --- a/lang/python/el/LC_MESSAGES/python.po +++ b/lang/python/el/LC_MESSAGES/python.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-07-29 11:03+0200\n" +"POT-Creation-Date: 2020-08-09 20:56+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Efstathios Iosifidis , 2017\n" "Language-Team: Greek (https://www.transifex.com/calamares/teams/20061/el/)\n" diff --git a/lang/python/en_GB/LC_MESSAGES/python.po b/lang/python/en_GB/LC_MESSAGES/python.po index b67ebbc731..b35229816e 100644 --- a/lang/python/en_GB/LC_MESSAGES/python.po +++ b/lang/python/en_GB/LC_MESSAGES/python.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-07-29 11:03+0200\n" +"POT-Creation-Date: 2020-08-09 20:56+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Jason Collins , 2018\n" "Language-Team: English (United Kingdom) (https://www.transifex.com/calamares/teams/20061/en_GB/)\n" diff --git a/lang/python/eo/LC_MESSAGES/python.po b/lang/python/eo/LC_MESSAGES/python.po index 93839a43f0..37ab372f25 100644 --- a/lang/python/eo/LC_MESSAGES/python.po +++ b/lang/python/eo/LC_MESSAGES/python.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-07-29 11:03+0200\n" +"POT-Creation-Date: 2020-08-09 20:56+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Kurt Ankh Phoenix , 2018\n" "Language-Team: Esperanto (https://www.transifex.com/calamares/teams/20061/eo/)\n" diff --git a/lang/python/es/LC_MESSAGES/python.po b/lang/python/es/LC_MESSAGES/python.po index 648b8eeb01..e1be580e70 100644 --- a/lang/python/es/LC_MESSAGES/python.po +++ b/lang/python/es/LC_MESSAGES/python.po @@ -16,7 +16,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-07-29 11:03+0200\n" +"POT-Creation-Date: 2020-08-09 20:56+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Pier Jose Gotta Perez , 2020\n" "Language-Team: Spanish (https://www.transifex.com/calamares/teams/20061/es/)\n" diff --git a/lang/python/es_MX/LC_MESSAGES/python.po b/lang/python/es_MX/LC_MESSAGES/python.po index 5e0d9ceb9a..4abed75d40 100644 --- a/lang/python/es_MX/LC_MESSAGES/python.po +++ b/lang/python/es_MX/LC_MESSAGES/python.po @@ -12,7 +12,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-07-29 11:03+0200\n" +"POT-Creation-Date: 2020-08-09 20:56+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Logan 8192 , 2018\n" "Language-Team: Spanish (Mexico) (https://www.transifex.com/calamares/teams/20061/es_MX/)\n" diff --git a/lang/python/es_PR/LC_MESSAGES/python.po b/lang/python/es_PR/LC_MESSAGES/python.po index 5556a6683e..4334657f14 100644 --- a/lang/python/es_PR/LC_MESSAGES/python.po +++ b/lang/python/es_PR/LC_MESSAGES/python.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-07-29 11:03+0200\n" +"POT-Creation-Date: 2020-08-09 20:56+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Language-Team: Spanish (Puerto Rico) (https://www.transifex.com/calamares/teams/20061/es_PR/)\n" "MIME-Version: 1.0\n" diff --git a/lang/python/et/LC_MESSAGES/python.po b/lang/python/et/LC_MESSAGES/python.po index a6a9276306..f7ba3f2f0a 100644 --- a/lang/python/et/LC_MESSAGES/python.po +++ b/lang/python/et/LC_MESSAGES/python.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-07-29 11:03+0200\n" +"POT-Creation-Date: 2020-08-09 20:56+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Madis Otenurm, 2019\n" "Language-Team: Estonian (https://www.transifex.com/calamares/teams/20061/et/)\n" diff --git a/lang/python/eu/LC_MESSAGES/python.po b/lang/python/eu/LC_MESSAGES/python.po index 2051291396..b879e6adfa 100644 --- a/lang/python/eu/LC_MESSAGES/python.po +++ b/lang/python/eu/LC_MESSAGES/python.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-07-29 11:03+0200\n" +"POT-Creation-Date: 2020-08-09 20:56+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Ander Elortondo, 2019\n" "Language-Team: Basque (https://www.transifex.com/calamares/teams/20061/eu/)\n" diff --git a/lang/python/fa/LC_MESSAGES/python.po b/lang/python/fa/LC_MESSAGES/python.po index 71a853cd3d..bb6096cbfb 100644 --- a/lang/python/fa/LC_MESSAGES/python.po +++ b/lang/python/fa/LC_MESSAGES/python.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-07-29 11:03+0200\n" +"POT-Creation-Date: 2020-08-09 20:56+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Danial Behzadi , 2020\n" "Language-Team: Persian (https://www.transifex.com/calamares/teams/20061/fa/)\n" diff --git a/lang/python/fi_FI/LC_MESSAGES/python.po b/lang/python/fi_FI/LC_MESSAGES/python.po index 1895e5fb49..d01c7d81b1 100644 --- a/lang/python/fi_FI/LC_MESSAGES/python.po +++ b/lang/python/fi_FI/LC_MESSAGES/python.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-07-29 11:03+0200\n" +"POT-Creation-Date: 2020-08-09 20:56+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Kimmo Kujansuu , 2020\n" "Language-Team: Finnish (Finland) (https://www.transifex.com/calamares/teams/20061/fi_FI/)\n" diff --git a/lang/python/fr/LC_MESSAGES/python.po b/lang/python/fr/LC_MESSAGES/python.po index e89daf3e98..d4bc08f4cf 100644 --- a/lang/python/fr/LC_MESSAGES/python.po +++ b/lang/python/fr/LC_MESSAGES/python.po @@ -8,7 +8,7 @@ # Abdellah B , 2017 # Aestan , 2018 # Jeremy Gourmel , 2018 -# Aurnytoraink , 2018 +# Aurnytoraink , 2018 # a270031086f2a0d3514bc0cb507b48f6, 2019 # Seboss666 , 2019 # Florian B , 2019 @@ -19,7 +19,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-07-29 11:03+0200\n" +"POT-Creation-Date: 2020-08-09 20:56+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Arnaud Ferraris , 2019\n" "Language-Team: French (https://www.transifex.com/calamares/teams/20061/fr/)\n" diff --git a/lang/python/fr_CH/LC_MESSAGES/python.po b/lang/python/fr_CH/LC_MESSAGES/python.po index f2b66dc6ad..3a078ad62c 100644 --- a/lang/python/fr_CH/LC_MESSAGES/python.po +++ b/lang/python/fr_CH/LC_MESSAGES/python.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-07-29 11:03+0200\n" +"POT-Creation-Date: 2020-08-09 20:56+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Language-Team: French (Switzerland) (https://www.transifex.com/calamares/teams/20061/fr_CH/)\n" "MIME-Version: 1.0\n" diff --git a/lang/python/gl/LC_MESSAGES/python.po b/lang/python/gl/LC_MESSAGES/python.po index f419bffb50..4215df794c 100644 --- a/lang/python/gl/LC_MESSAGES/python.po +++ b/lang/python/gl/LC_MESSAGES/python.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-07-29 11:03+0200\n" +"POT-Creation-Date: 2020-08-09 20:56+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Xosé, 2018\n" "Language-Team: Galician (https://www.transifex.com/calamares/teams/20061/gl/)\n" diff --git a/lang/python/gu/LC_MESSAGES/python.po b/lang/python/gu/LC_MESSAGES/python.po index f51975ca0d..755a686c39 100644 --- a/lang/python/gu/LC_MESSAGES/python.po +++ b/lang/python/gu/LC_MESSAGES/python.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-07-29 11:03+0200\n" +"POT-Creation-Date: 2020-08-09 20:56+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Language-Team: Gujarati (https://www.transifex.com/calamares/teams/20061/gu/)\n" "MIME-Version: 1.0\n" diff --git a/lang/python/he/LC_MESSAGES/python.po b/lang/python/he/LC_MESSAGES/python.po index 3da19651a8..f59dcd1be1 100644 --- a/lang/python/he/LC_MESSAGES/python.po +++ b/lang/python/he/LC_MESSAGES/python.po @@ -12,7 +12,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-07-29 11:03+0200\n" +"POT-Creation-Date: 2020-08-09 20:56+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Yaron Shahrabani , 2020\n" "Language-Team: Hebrew (https://www.transifex.com/calamares/teams/20061/he/)\n" diff --git a/lang/python/hi/LC_MESSAGES/python.po b/lang/python/hi/LC_MESSAGES/python.po index 0c3b7260fe..83157867ec 100644 --- a/lang/python/hi/LC_MESSAGES/python.po +++ b/lang/python/hi/LC_MESSAGES/python.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-07-29 11:03+0200\n" +"POT-Creation-Date: 2020-08-09 20:56+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Panwar108 , 2020\n" "Language-Team: Hindi (https://www.transifex.com/calamares/teams/20061/hi/)\n" diff --git a/lang/python/hr/LC_MESSAGES/python.po b/lang/python/hr/LC_MESSAGES/python.po index 2a49c9c92f..d878870b3c 100644 --- a/lang/python/hr/LC_MESSAGES/python.po +++ b/lang/python/hr/LC_MESSAGES/python.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-07-29 11:03+0200\n" +"POT-Creation-Date: 2020-08-09 20:56+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Lovro Kudelić , 2020\n" "Language-Team: Croatian (https://www.transifex.com/calamares/teams/20061/hr/)\n" diff --git a/lang/python/hu/LC_MESSAGES/python.po b/lang/python/hu/LC_MESSAGES/python.po index 4ea6b83bfe..3434454223 100644 --- a/lang/python/hu/LC_MESSAGES/python.po +++ b/lang/python/hu/LC_MESSAGES/python.po @@ -14,7 +14,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-07-29 11:03+0200\n" +"POT-Creation-Date: 2020-08-09 20:56+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Lajos Pasztor , 2019\n" "Language-Team: Hungarian (https://www.transifex.com/calamares/teams/20061/hu/)\n" diff --git a/lang/python/id/LC_MESSAGES/python.po b/lang/python/id/LC_MESSAGES/python.po index 0bf6f2af76..49e4ff7180 100644 --- a/lang/python/id/LC_MESSAGES/python.po +++ b/lang/python/id/LC_MESSAGES/python.po @@ -13,7 +13,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-07-29 11:03+0200\n" +"POT-Creation-Date: 2020-08-09 20:56+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Wantoyèk , 2018\n" "Language-Team: Indonesian (https://www.transifex.com/calamares/teams/20061/id/)\n" diff --git a/lang/python/ie/LC_MESSAGES/python.po b/lang/python/ie/LC_MESSAGES/python.po index 5921ccf64d..bd9e3ddecc 100644 --- a/lang/python/ie/LC_MESSAGES/python.po +++ b/lang/python/ie/LC_MESSAGES/python.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-07-29 11:03+0200\n" +"POT-Creation-Date: 2020-08-09 20:56+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Caarmi, 2020\n" "Language-Team: Interlingue (https://www.transifex.com/calamares/teams/20061/ie/)\n" diff --git a/lang/python/is/LC_MESSAGES/python.po b/lang/python/is/LC_MESSAGES/python.po index 58eeb89c14..bc61f13da4 100644 --- a/lang/python/is/LC_MESSAGES/python.po +++ b/lang/python/is/LC_MESSAGES/python.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-07-29 11:03+0200\n" +"POT-Creation-Date: 2020-08-09 20:56+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Kristján Magnússon, 2018\n" "Language-Team: Icelandic (https://www.transifex.com/calamares/teams/20061/is/)\n" diff --git a/lang/python/it_IT/LC_MESSAGES/python.po b/lang/python/it_IT/LC_MESSAGES/python.po index 54af2cda9d..cf020cbd21 100644 --- a/lang/python/it_IT/LC_MESSAGES/python.po +++ b/lang/python/it_IT/LC_MESSAGES/python.po @@ -13,7 +13,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-07-29 11:03+0200\n" +"POT-Creation-Date: 2020-08-09 20:56+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Saverio , 2020\n" "Language-Team: Italian (Italy) (https://www.transifex.com/calamares/teams/20061/it_IT/)\n" diff --git a/lang/python/ja/LC_MESSAGES/python.po b/lang/python/ja/LC_MESSAGES/python.po index 2c6ae761fe..0a6b0fec99 100644 --- a/lang/python/ja/LC_MESSAGES/python.po +++ b/lang/python/ja/LC_MESSAGES/python.po @@ -13,7 +13,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-07-29 11:03+0200\n" +"POT-Creation-Date: 2020-08-09 20:56+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: UTUMI Hirosi , 2020\n" "Language-Team: Japanese (https://www.transifex.com/calamares/teams/20061/ja/)\n" diff --git a/lang/python/kk/LC_MESSAGES/python.po b/lang/python/kk/LC_MESSAGES/python.po index 62c8f15d12..3180ad804c 100644 --- a/lang/python/kk/LC_MESSAGES/python.po +++ b/lang/python/kk/LC_MESSAGES/python.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-07-29 11:03+0200\n" +"POT-Creation-Date: 2020-08-09 20:56+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Language-Team: Kazakh (https://www.transifex.com/calamares/teams/20061/kk/)\n" "MIME-Version: 1.0\n" diff --git a/lang/python/kn/LC_MESSAGES/python.po b/lang/python/kn/LC_MESSAGES/python.po index dd1988cabe..e79d9d792f 100644 --- a/lang/python/kn/LC_MESSAGES/python.po +++ b/lang/python/kn/LC_MESSAGES/python.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-07-29 11:03+0200\n" +"POT-Creation-Date: 2020-08-09 20:56+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Language-Team: Kannada (https://www.transifex.com/calamares/teams/20061/kn/)\n" "MIME-Version: 1.0\n" diff --git a/lang/python/ko/LC_MESSAGES/python.po b/lang/python/ko/LC_MESSAGES/python.po index d79730f423..26261ff3f2 100644 --- a/lang/python/ko/LC_MESSAGES/python.po +++ b/lang/python/ko/LC_MESSAGES/python.po @@ -12,7 +12,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-07-29 11:03+0200\n" +"POT-Creation-Date: 2020-08-09 20:56+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: JungHee Lee , 2020\n" "Language-Team: Korean (https://www.transifex.com/calamares/teams/20061/ko/)\n" diff --git a/lang/python/lo/LC_MESSAGES/python.po b/lang/python/lo/LC_MESSAGES/python.po index 70bd331a38..f6089481c4 100644 --- a/lang/python/lo/LC_MESSAGES/python.po +++ b/lang/python/lo/LC_MESSAGES/python.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-07-29 11:03+0200\n" +"POT-Creation-Date: 2020-08-09 20:56+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Language-Team: Lao (https://www.transifex.com/calamares/teams/20061/lo/)\n" "MIME-Version: 1.0\n" diff --git a/lang/python/lt/LC_MESSAGES/python.po b/lang/python/lt/LC_MESSAGES/python.po index db71180d1a..8f7dc3266c 100644 --- a/lang/python/lt/LC_MESSAGES/python.po +++ b/lang/python/lt/LC_MESSAGES/python.po @@ -12,7 +12,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-07-29 11:03+0200\n" +"POT-Creation-Date: 2020-08-09 20:56+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Moo, 2020\n" "Language-Team: Lithuanian (https://www.transifex.com/calamares/teams/20061/lt/)\n" diff --git a/lang/python/lv/LC_MESSAGES/python.po b/lang/python/lv/LC_MESSAGES/python.po index a3f3735304..cb54a3cbb1 100644 --- a/lang/python/lv/LC_MESSAGES/python.po +++ b/lang/python/lv/LC_MESSAGES/python.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-07-29 11:03+0200\n" +"POT-Creation-Date: 2020-08-09 20:56+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Language-Team: Latvian (https://www.transifex.com/calamares/teams/20061/lv/)\n" "MIME-Version: 1.0\n" diff --git a/lang/python/mk/LC_MESSAGES/python.po b/lang/python/mk/LC_MESSAGES/python.po index 12c8488b1c..6439af7954 100644 --- a/lang/python/mk/LC_MESSAGES/python.po +++ b/lang/python/mk/LC_MESSAGES/python.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-07-29 11:03+0200\n" +"POT-Creation-Date: 2020-08-09 20:56+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Martin Ristovski , 2018\n" "Language-Team: Macedonian (https://www.transifex.com/calamares/teams/20061/mk/)\n" diff --git a/lang/python/ml/LC_MESSAGES/python.po b/lang/python/ml/LC_MESSAGES/python.po index b5d0555962..1236bbd4e1 100644 --- a/lang/python/ml/LC_MESSAGES/python.po +++ b/lang/python/ml/LC_MESSAGES/python.po @@ -12,7 +12,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-07-29 11:03+0200\n" +"POT-Creation-Date: 2020-08-09 20:56+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Balasankar C , 2019\n" "Language-Team: Malayalam (https://www.transifex.com/calamares/teams/20061/ml/)\n" diff --git a/lang/python/mr/LC_MESSAGES/python.po b/lang/python/mr/LC_MESSAGES/python.po index 03e31e2bd4..07311bd452 100644 --- a/lang/python/mr/LC_MESSAGES/python.po +++ b/lang/python/mr/LC_MESSAGES/python.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-07-29 11:03+0200\n" +"POT-Creation-Date: 2020-08-09 20:56+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Language-Team: Marathi (https://www.transifex.com/calamares/teams/20061/mr/)\n" "MIME-Version: 1.0\n" diff --git a/lang/python/nb/LC_MESSAGES/python.po b/lang/python/nb/LC_MESSAGES/python.po index cc25bffd4d..50f72e6fd6 100644 --- a/lang/python/nb/LC_MESSAGES/python.po +++ b/lang/python/nb/LC_MESSAGES/python.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-07-29 11:03+0200\n" +"POT-Creation-Date: 2020-08-09 20:56+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: 865ac004d9acf2568b2e4b389e0007c7_fba755c <3516cc82d94f87187da1e036e5f09e42_616112>, 2017\n" "Language-Team: Norwegian Bokmål (https://www.transifex.com/calamares/teams/20061/nb/)\n" diff --git a/lang/python/ne_NP/LC_MESSAGES/python.po b/lang/python/ne_NP/LC_MESSAGES/python.po index 7712c05e13..b06e36b399 100644 --- a/lang/python/ne_NP/LC_MESSAGES/python.po +++ b/lang/python/ne_NP/LC_MESSAGES/python.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-07-29 11:03+0200\n" +"POT-Creation-Date: 2020-08-09 20:56+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Language-Team: Nepali (Nepal) (https://www.transifex.com/calamares/teams/20061/ne_NP/)\n" "MIME-Version: 1.0\n" diff --git a/lang/python/nl/LC_MESSAGES/python.po b/lang/python/nl/LC_MESSAGES/python.po index da5191f21a..37e0a82325 100644 --- a/lang/python/nl/LC_MESSAGES/python.po +++ b/lang/python/nl/LC_MESSAGES/python.po @@ -12,7 +12,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-07-29 11:03+0200\n" +"POT-Creation-Date: 2020-08-09 20:56+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Tristan , 2020\n" "Language-Team: Dutch (https://www.transifex.com/calamares/teams/20061/nl/)\n" diff --git a/lang/python/pl/LC_MESSAGES/python.po b/lang/python/pl/LC_MESSAGES/python.po index 4e6d8ab0fb..0a6b9c293b 100644 --- a/lang/python/pl/LC_MESSAGES/python.po +++ b/lang/python/pl/LC_MESSAGES/python.po @@ -13,7 +13,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-07-29 11:03+0200\n" +"POT-Creation-Date: 2020-08-09 20:56+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Piotr Strębski , 2020\n" "Language-Team: Polish (https://www.transifex.com/calamares/teams/20061/pl/)\n" diff --git a/lang/python/pt_BR/LC_MESSAGES/python.po b/lang/python/pt_BR/LC_MESSAGES/python.po index 760f9f23a5..cda0188e61 100644 --- a/lang/python/pt_BR/LC_MESSAGES/python.po +++ b/lang/python/pt_BR/LC_MESSAGES/python.po @@ -12,7 +12,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-07-29 11:03+0200\n" +"POT-Creation-Date: 2020-08-09 20:56+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Guilherme, 2020\n" "Language-Team: Portuguese (Brazil) (https://www.transifex.com/calamares/teams/20061/pt_BR/)\n" diff --git a/lang/python/pt_PT/LC_MESSAGES/python.po b/lang/python/pt_PT/LC_MESSAGES/python.po index 620c287d79..82ca01395d 100644 --- a/lang/python/pt_PT/LC_MESSAGES/python.po +++ b/lang/python/pt_PT/LC_MESSAGES/python.po @@ -13,7 +13,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-07-29 11:03+0200\n" +"POT-Creation-Date: 2020-08-09 20:56+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Ricardo Simões , 2020\n" "Language-Team: Portuguese (Portugal) (https://www.transifex.com/calamares/teams/20061/pt_PT/)\n" diff --git a/lang/python/ro/LC_MESSAGES/python.po b/lang/python/ro/LC_MESSAGES/python.po index a1f6121362..f79475800e 100644 --- a/lang/python/ro/LC_MESSAGES/python.po +++ b/lang/python/ro/LC_MESSAGES/python.po @@ -12,7 +12,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-07-29 11:03+0200\n" +"POT-Creation-Date: 2020-08-09 20:56+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Sebastian Brici , 2018\n" "Language-Team: Romanian (https://www.transifex.com/calamares/teams/20061/ro/)\n" diff --git a/lang/python/ru/LC_MESSAGES/python.po b/lang/python/ru/LC_MESSAGES/python.po index 531d056b51..6c09a75273 100644 --- a/lang/python/ru/LC_MESSAGES/python.po +++ b/lang/python/ru/LC_MESSAGES/python.po @@ -12,7 +12,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-07-29 11:03+0200\n" +"POT-Creation-Date: 2020-08-09 20:56+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: ZIzA, 2020\n" "Language-Team: Russian (https://www.transifex.com/calamares/teams/20061/ru/)\n" diff --git a/lang/python/sk/LC_MESSAGES/python.po b/lang/python/sk/LC_MESSAGES/python.po index d25ae69f14..09aba970d3 100644 --- a/lang/python/sk/LC_MESSAGES/python.po +++ b/lang/python/sk/LC_MESSAGES/python.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-07-29 11:03+0200\n" +"POT-Creation-Date: 2020-08-09 20:56+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Dušan Kazik , 2020\n" "Language-Team: Slovak (https://www.transifex.com/calamares/teams/20061/sk/)\n" diff --git a/lang/python/sl/LC_MESSAGES/python.po b/lang/python/sl/LC_MESSAGES/python.po index c536dedf7a..060e2dc093 100644 --- a/lang/python/sl/LC_MESSAGES/python.po +++ b/lang/python/sl/LC_MESSAGES/python.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-07-29 11:03+0200\n" +"POT-Creation-Date: 2020-08-09 20:56+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Language-Team: Slovenian (https://www.transifex.com/calamares/teams/20061/sl/)\n" "MIME-Version: 1.0\n" diff --git a/lang/python/sq/LC_MESSAGES/python.po b/lang/python/sq/LC_MESSAGES/python.po index f5062c3f32..218981724e 100644 --- a/lang/python/sq/LC_MESSAGES/python.po +++ b/lang/python/sq/LC_MESSAGES/python.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-07-29 11:03+0200\n" +"POT-Creation-Date: 2020-08-09 20:56+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Besnik Bleta , 2020\n" "Language-Team: Albanian (https://www.transifex.com/calamares/teams/20061/sq/)\n" diff --git a/lang/python/sr/LC_MESSAGES/python.po b/lang/python/sr/LC_MESSAGES/python.po index 656252cb64..35b579c84a 100644 --- a/lang/python/sr/LC_MESSAGES/python.po +++ b/lang/python/sr/LC_MESSAGES/python.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-07-29 11:03+0200\n" +"POT-Creation-Date: 2020-08-09 20:56+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Slobodan Simić , 2020\n" "Language-Team: Serbian (https://www.transifex.com/calamares/teams/20061/sr/)\n" diff --git a/lang/python/sr@latin/LC_MESSAGES/python.po b/lang/python/sr@latin/LC_MESSAGES/python.po index e47ce00c28..5bd01bbee1 100644 --- a/lang/python/sr@latin/LC_MESSAGES/python.po +++ b/lang/python/sr@latin/LC_MESSAGES/python.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-07-29 11:03+0200\n" +"POT-Creation-Date: 2020-08-09 20:56+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Language-Team: Serbian (Latin) (https://www.transifex.com/calamares/teams/20061/sr@latin/)\n" "MIME-Version: 1.0\n" diff --git a/lang/python/sv/LC_MESSAGES/python.po b/lang/python/sv/LC_MESSAGES/python.po index 89da13dcfb..5e36e0ba2e 100644 --- a/lang/python/sv/LC_MESSAGES/python.po +++ b/lang/python/sv/LC_MESSAGES/python.po @@ -13,7 +13,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-07-29 11:03+0200\n" +"POT-Creation-Date: 2020-08-09 20:56+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Tobias Olausson , 2020\n" "Language-Team: Swedish (https://www.transifex.com/calamares/teams/20061/sv/)\n" diff --git a/lang/python/tg/LC_MESSAGES/python.po b/lang/python/tg/LC_MESSAGES/python.po index ea004f80c7..e1a2443dbe 100644 --- a/lang/python/tg/LC_MESSAGES/python.po +++ b/lang/python/tg/LC_MESSAGES/python.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-07-29 11:03+0200\n" +"POT-Creation-Date: 2020-08-09 20:56+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Victor Ibragimov , 2020\n" "Language-Team: Tajik (https://www.transifex.com/calamares/teams/20061/tg/)\n" diff --git a/lang/python/th/LC_MESSAGES/python.po b/lang/python/th/LC_MESSAGES/python.po index c3263f45ff..7f8350835f 100644 --- a/lang/python/th/LC_MESSAGES/python.po +++ b/lang/python/th/LC_MESSAGES/python.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-07-29 11:03+0200\n" +"POT-Creation-Date: 2020-08-09 20:56+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Language-Team: Thai (https://www.transifex.com/calamares/teams/20061/th/)\n" "MIME-Version: 1.0\n" diff --git a/lang/python/tr_TR/LC_MESSAGES/python.po b/lang/python/tr_TR/LC_MESSAGES/python.po index 3d54dcc9c5..a265bd5338 100644 --- a/lang/python/tr_TR/LC_MESSAGES/python.po +++ b/lang/python/tr_TR/LC_MESSAGES/python.po @@ -12,7 +12,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-07-29 11:03+0200\n" +"POT-Creation-Date: 2020-08-09 20:56+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Demiray Muhterem , 2020\n" "Language-Team: Turkish (Turkey) (https://www.transifex.com/calamares/teams/20061/tr_TR/)\n" diff --git a/lang/python/uk/LC_MESSAGES/python.po b/lang/python/uk/LC_MESSAGES/python.po index c4b4b4724d..901e8f9549 100644 --- a/lang/python/uk/LC_MESSAGES/python.po +++ b/lang/python/uk/LC_MESSAGES/python.po @@ -13,7 +13,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-07-29 11:03+0200\n" +"POT-Creation-Date: 2020-08-09 20:56+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Yuri Chornoivan , 2020\n" "Language-Team: Ukrainian (https://www.transifex.com/calamares/teams/20061/uk/)\n" diff --git a/lang/python/ur/LC_MESSAGES/python.po b/lang/python/ur/LC_MESSAGES/python.po index a9dbd6791c..05f74eaa1f 100644 --- a/lang/python/ur/LC_MESSAGES/python.po +++ b/lang/python/ur/LC_MESSAGES/python.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-07-29 11:03+0200\n" +"POT-Creation-Date: 2020-08-09 20:56+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Language-Team: Urdu (https://www.transifex.com/calamares/teams/20061/ur/)\n" "MIME-Version: 1.0\n" diff --git a/lang/python/uz/LC_MESSAGES/python.po b/lang/python/uz/LC_MESSAGES/python.po index dd42181eb4..457cc6c25a 100644 --- a/lang/python/uz/LC_MESSAGES/python.po +++ b/lang/python/uz/LC_MESSAGES/python.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-07-29 11:03+0200\n" +"POT-Creation-Date: 2020-08-09 20:56+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Language-Team: Uzbek (https://www.transifex.com/calamares/teams/20061/uz/)\n" "MIME-Version: 1.0\n" diff --git a/lang/python/zh_CN/LC_MESSAGES/python.po b/lang/python/zh_CN/LC_MESSAGES/python.po index 6db27e5337..33075c4b82 100644 --- a/lang/python/zh_CN/LC_MESSAGES/python.po +++ b/lang/python/zh_CN/LC_MESSAGES/python.po @@ -15,7 +15,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-07-29 11:03+0200\n" +"POT-Creation-Date: 2020-08-09 20:56+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: 玉堂白鹤 , 2020\n" "Language-Team: Chinese (China) (https://www.transifex.com/calamares/teams/20061/zh_CN/)\n" diff --git a/lang/python/zh_TW/LC_MESSAGES/python.po b/lang/python/zh_TW/LC_MESSAGES/python.po index f19e493807..e517986e81 100644 --- a/lang/python/zh_TW/LC_MESSAGES/python.po +++ b/lang/python/zh_TW/LC_MESSAGES/python.po @@ -12,7 +12,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-07-29 11:03+0200\n" +"POT-Creation-Date: 2020-08-09 20:56+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Walter Cheuk , 2020\n" "Language-Team: Chinese (Taiwan) (https://www.transifex.com/calamares/teams/20061/zh_TW/)\n" From 871b56255badb43cbfa6d4f5991408315d005cb7 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Tue, 18 Aug 2020 15:13:43 +0200 Subject: [PATCH 074/157] Changes: correct the release day FIXES #1489 (that's the hotfix for this release) FIXES #1480 (needed to fix the above) --- CHANGES | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGES b/CHANGES index 0de4d532bb..35fa1c929a 100644 --- a/CHANGES +++ b/CHANGES @@ -3,7 +3,7 @@ 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.28.3 (2020-08-17) # +# 3.2.28.3 (2020-08-18) # Another hotfix, for more issues reported by Marco Obaid. Users were not having a password set (#1489) From 117859082eb9faf96b11ef1e6505ea0bbff94be0 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Tue, 18 Aug 2020 16:15:38 +0200 Subject: [PATCH 075/157] [libcalamares] Merge Tests.h into Tests.cpp - no real need for separate file in the utils/ tests --- src/libcalamares/utils/Tests.cpp | 42 ++++++++++++++++++++-- src/libcalamares/utils/Tests.h | 61 -------------------------------- 2 files changed, 39 insertions(+), 64 deletions(-) delete mode 100644 src/libcalamares/utils/Tests.h diff --git a/src/libcalamares/utils/Tests.cpp b/src/libcalamares/utils/Tests.cpp index e5384d44d7..ec7f6889ac 100644 --- a/src/libcalamares/utils/Tests.cpp +++ b/src/libcalamares/utils/Tests.cpp @@ -19,8 +19,6 @@ * */ -#include "Tests.h" - #include "CalamaresUtilsSystem.h" #include "Entropy.h" #include "Logger.h" @@ -40,7 +38,39 @@ #include #include -QTEST_GUILESS_MAIN( LibCalamaresTests ) +class LibCalamaresTests : public QObject +{ + Q_OBJECT +public: + LibCalamaresTests(); + ~LibCalamaresTests() override; + +private Q_SLOTS: + void initTestCase(); + void testDebugLevels(); + + void testLoadSaveYaml(); // Just settings.conf + void testLoadSaveYamlExtended(); // Do a find() in the src dir + + void testCommands(); + + /** @brief Test that all the UMask objects work correctly. */ + void testUmask(); + + /** @brief Tests the entropy functions. */ + void testEntropy(); + void testPrintableEntropy(); + void testOddSizedPrintable(); + + /** @brief Tests the RAII bits. */ + void testBoolSetter(); + + /** @brief Tests the Traits bits. */ + void testTraits(); + +private: + void recursiveCompareMap( const QVariantMap& a, const QVariantMap& b, int depth ); +}; LibCalamaresTests::LibCalamaresTests() {} @@ -365,3 +395,9 @@ LibCalamaresTests::testTraits() QCOMPARE(t.thingify(c1), 2); // Calls c1::do_the_thing() QCOMPARE(t.thingify(c2), -1); } + +QTEST_GUILESS_MAIN( LibCalamaresTests ) + +#include "utils/moc-warnings.h" + +#include "Tests.moc" diff --git a/src/libcalamares/utils/Tests.h b/src/libcalamares/utils/Tests.h deleted file mode 100644 index 98ab028f76..0000000000 --- a/src/libcalamares/utils/Tests.h +++ /dev/null @@ -1,61 +0,0 @@ -/* === This file is part of Calamares - === - * - * SPDX-FileCopyrightText: 2018 Adriaan de Groot - * SPDX-License-Identifier: GPL-3.0-or-later - * - * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . - * - */ - -#ifndef TESTS_H -#define TESTS_H - -#include - -class LibCalamaresTests : public QObject -{ - Q_OBJECT -public: - LibCalamaresTests(); - ~LibCalamaresTests() override; - -private Q_SLOTS: - void initTestCase(); - void testDebugLevels(); - - void testLoadSaveYaml(); // Just settings.conf - void testLoadSaveYamlExtended(); // Do a find() in the src dir - - void testCommands(); - - /** @brief Test that all the UMask objects work correctly. */ - void testUmask(); - - /** @brief Tests the entropy functions. */ - void testEntropy(); - void testPrintableEntropy(); - void testOddSizedPrintable(); - - /** @brief Tests the RAII bits. */ - void testBoolSetter(); - - /** @brief Tests the Traits bits. */ - void testTraits(); - -private: - void recursiveCompareMap( const QVariantMap& a, const QVariantMap& b, int depth ); -}; - -#endif From e55def87e941313367c2235485e9d7bbc019adf9 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Tue, 18 Aug 2020 16:20:34 +0200 Subject: [PATCH 076/157] [libcalamares] Test for Variant methods In advance of PR #1491, test loading and stringlist extraction. - from code, extraction works "normally" - for YAML data, the stringlist isn't actually a stringlist --- src/libcalamares/utils/Tests.cpp | 127 ++++++++++++++++++++++++++----- 1 file changed, 110 insertions(+), 17 deletions(-) diff --git a/src/libcalamares/utils/Tests.cpp b/src/libcalamares/utils/Tests.cpp index ec7f6889ac..862b4d0d7c 100644 --- a/src/libcalamares/utils/Tests.cpp +++ b/src/libcalamares/utils/Tests.cpp @@ -25,6 +25,7 @@ #include "RAII.h" #include "Traits.h" #include "UMask.h" +#include "Variant.h" #include "Yaml.h" #include "GlobalStorage.h" @@ -68,6 +69,11 @@ private Q_SLOTS: /** @brief Tests the Traits bits. */ void testTraits(); + void testVariantStringListCode(); + void testVariantStringListYAMLDashed(); + void testVariantStringListYAMLBracketed(); + + private: void recursiveCompareMap( const QVariantMap& a, const QVariantMap& b, int depth ); }; @@ -351,49 +357,136 @@ LibCalamaresTests::testBoolSetter() * which should call do_the_thing() of its argument if it exists. */ -struct c1 { int do_the_thing() { return 2; } }; -struct c2 { }; +struct c1 +{ + int do_the_thing() { return 2; } +}; +struct c2 +{ +}; -DECLARE_HAS_METHOD(do_the_thing) +DECLARE_HAS_METHOD( do_the_thing ) struct Thinginator { public: /// When class T has function do_the_thing() - template< class T > int thingify( T& t, const std::true_type& ) + template < class T > + int thingify( T& t, const std::true_type& ) { return t.do_the_thing(); } - template< class T > int thingify( T&, const std::false_type& ) + template < class T > + int thingify( T&, const std::false_type& ) { return -1; } - template< class T > int thingify( T& t ) + template < class T > + int thingify( T& t ) { - return thingify(t, has_do_the_thing{}); + return thingify( t, has_do_the_thing< T > {} ); } -} ; +}; void LibCalamaresTests::testTraits() { - has_do_the_thing x{}; - has_do_the_thing y{}; + has_do_the_thing< c1 > x {}; + has_do_the_thing< c2 > y {}; - QVERIFY(x); - QVERIFY(!y); + QVERIFY( x ); + QVERIFY( !y ); - c1 c1{}; - c2 c2{}; + c1 c1 {}; + c2 c2 {}; - QCOMPARE(c1.do_the_thing(), 2); + QCOMPARE( c1.do_the_thing(), 2 ); Thinginator t; - QCOMPARE(t.thingify(c1), 2); // Calls c1::do_the_thing() - QCOMPARE(t.thingify(c2), -1); + QCOMPARE( t.thingify( c1 ), 2 ); // Calls c1::do_the_thing() + QCOMPARE( t.thingify( c2 ), -1 ); +} + +void +LibCalamaresTests::testVariantStringListCode() +{ + using namespace CalamaresUtils; + const QString key( "strings" ); + { + // Things that are not stringlists + QVariantMap m; + QCOMPARE( getStringList( m, key ), QStringList {} ); + m.insert( key, 17 ); + QCOMPARE( getStringList( m, key ), QStringList {} ); + m.insert( key, QString( "more strings" ) ); + QCOMPARE( getStringList( m, key ), QStringList {} ); + m.insert( key, QVariant {} ); + QCOMPARE( getStringList( m, key ), QStringList {} ); + } + + { + // Things that are stringlists + QVariantMap m; + m.insert( key, QStringList { "aap", "noot" } ); + QVERIFY( getStringList( m, key ).contains( "aap" ) ); + QVERIFY( !getStringList( m, key ).contains( "mies" ) ); + } +} + +void +LibCalamaresTests::testVariantStringListYAMLDashed() +{ + using namespace CalamaresUtils; + const QString key( "strings" ); + + // Looks like a stringlist to me + QTemporaryFile f; + QVERIFY( f.open() ); + f.write( R"(--- +strings: + - aap + - noot + - mies +)" ); + f.close(); + bool ok = false; + QVariantMap m = loadYaml( f.fileName(), &ok ); + + QVERIFY( ok ); + QCOMPARE( m.count(), 1 ); + QVERIFY( m.contains( key ) ); + + QVERIFY( getStringList( m, key ).contains( "aap" ) ); + QVERIFY( getStringList( m, key ).contains( "mies" ) ); + QVERIFY( getStringList( m, key ).contains( "lam" ) ); +} + +void +LibCalamaresTests::testVariantStringListYAMLBracketed() +{ + using namespace CalamaresUtils; + const QString key( "strings" ); + + // Looks like a stringlist to me + QTemporaryFile f; + QVERIFY( f.open() ); + f.write( R"(--- +strings: [ aap, noot, mies ] +)" ); + f.close(); + bool ok = false; + QVariantMap m = loadYaml( f.fileName(), &ok ); + + QVERIFY( ok ); + QCOMPARE( m.count(), 1 ); + QVERIFY( m.contains( key ) ); + + QVERIFY( getStringList( m, key ).contains( "aap" ) ); + QVERIFY( getStringList( m, key ).contains( "mies" ) ); + QVERIFY( getStringList( m, key ).contains( "lam" ) ); } QTEST_GUILESS_MAIN( LibCalamaresTests ) From 41e2de85b1092b08b08ca4634b28380948fa72b6 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Tue, 18 Aug 2020 16:43:18 +0200 Subject: [PATCH 077/157] [libcalamares] Fix up test -- 'lam' isn't supposed to be in the loaded data --- src/libcalamares/utils/Tests.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/libcalamares/utils/Tests.cpp b/src/libcalamares/utils/Tests.cpp index 862b4d0d7c..3d1532a67f 100644 --- a/src/libcalamares/utils/Tests.cpp +++ b/src/libcalamares/utils/Tests.cpp @@ -461,7 +461,7 @@ LibCalamaresTests::testVariantStringListYAMLDashed() QVERIFY( getStringList( m, key ).contains( "aap" ) ); QVERIFY( getStringList( m, key ).contains( "mies" ) ); - QVERIFY( getStringList( m, key ).contains( "lam" ) ); + QVERIFY( !getStringList( m, key ).contains( "lam" ) ); } void @@ -486,7 +486,7 @@ strings: [ aap, noot, mies ] QVERIFY( getStringList( m, key ).contains( "aap" ) ); QVERIFY( getStringList( m, key ).contains( "mies" ) ); - QVERIFY( getStringList( m, key ).contains( "lam" ) ); + QVERIFY( !getStringList( m, key ).contains( "lam" ) ); } QTEST_GUILESS_MAIN( LibCalamaresTests ) From 2ac518d8b9e2bccc7e4e96a9f8a0185486348753 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Tue, 18 Aug 2020 16:44:56 +0200 Subject: [PATCH 078/157] [libcalamares] Change in stringlist extraction also changes single-string --- src/libcalamares/utils/Tests.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libcalamares/utils/Tests.cpp b/src/libcalamares/utils/Tests.cpp index 3d1532a67f..706844f703 100644 --- a/src/libcalamares/utils/Tests.cpp +++ b/src/libcalamares/utils/Tests.cpp @@ -422,7 +422,7 @@ LibCalamaresTests::testVariantStringListCode() m.insert( key, 17 ); QCOMPARE( getStringList( m, key ), QStringList {} ); m.insert( key, QString( "more strings" ) ); - QCOMPARE( getStringList( m, key ), QStringList {} ); + QCOMPARE( getStringList( m, key ), QStringList { "more strings" } ); // A single string **can** be considered a stringlist! m.insert( key, QVariant {} ); QCOMPARE( getStringList( m, key ), QStringList {} ); } From 4b4d7f3b10ed97ca2418aa8fe4ce6120422fb9d3 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Tue, 18 Aug 2020 17:17:29 +0200 Subject: [PATCH 079/157] [libcalamares] Print a big fat warning before a typical now-crash situation --- src/libcalamares/JobQueue.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/libcalamares/JobQueue.cpp b/src/libcalamares/JobQueue.cpp index bc3028ae70..e6e46685bc 100644 --- a/src/libcalamares/JobQueue.cpp +++ b/src/libcalamares/JobQueue.cpp @@ -156,6 +156,10 @@ JobQueue* JobQueue::s_instance = nullptr; JobQueue* JobQueue::instance() { + if ( !s_instance ) + { + cWarning() << "Getting nullptr JobQueue instance."; + } return s_instance; } From ab3e393d45367ef64e5b0e5ae97a0b878c5c99e5 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Tue, 18 Aug 2020 17:20:08 +0200 Subject: [PATCH 080/157] [users] Protect against a nullptr deref - there is typically no GS during tests --- src/modules/users/Config.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/modules/users/Config.cpp b/src/modules/users/Config.cpp index 80c6121712..de246950fb 100644 --- a/src/modules/users/Config.cpp +++ b/src/modules/users/Config.cpp @@ -83,7 +83,11 @@ Config::setUserShell( const QString& shell ) return; } // The shell is put into GS because the CreateUser job expects it there - Calamares::JobQueue::instance()->globalStorage()->insert( "userShell", shell ); + auto* gs = Calamares::JobQueue::instance()->globalStorage(); + if ( gs ) + { + gs->insert( "userShell", shell ); + } } static inline void From ecaf97aa60c9c5994b85470a8794e52b545c6800 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Tue, 18 Aug 2020 17:20:37 +0200 Subject: [PATCH 081/157] [users] Tests of config-loading of groups lists --- src/modules/users/Tests.cpp | 43 ++++++++++++++++++++++++++++ src/modules/users/tests/3-wing.conf | 2 ++ src/modules/users/tests/4-audio.conf | 6 ++++ 3 files changed, 51 insertions(+) create mode 100644 src/modules/users/tests/3-wing.conf create mode 100644 src/modules/users/tests/4-audio.conf diff --git a/src/modules/users/Tests.cpp b/src/modules/users/Tests.cpp index 914821f631..f0fc911652 100644 --- a/src/modules/users/Tests.cpp +++ b/src/modules/users/Tests.cpp @@ -21,6 +21,7 @@ #include "JobQueue.h" #include "utils/Logger.h" +#include "utils/Yaml.h" #include @@ -43,6 +44,9 @@ private Q_SLOTS: void initTestCase(); void testDefaultGroups(); + void testDefaultGroupsYAML_data(); + void testDefaultGroupsYAML(); + void testHostActions_data(); void testHostActions(); void testPasswordChecks(); @@ -112,6 +116,45 @@ UserTests::testDefaultGroups() } } +void UserTests::testDefaultGroupsYAML_data() +{ + QTest::addColumn< QString >( "filename" ); + QTest::addColumn< int >("count"); + QTest::addColumn("group"); + + QTest::newRow("users.conf") << "users.conf" << 7 << "video"; + QTest::newRow("dashed list") << "tests/4-audio.conf" << 4 << "audio"; + QTest::newRow("blocked list") << "tests/3-wing.conf" << 3 << "wing"; +} + +void +UserTests::testDefaultGroupsYAML() +{ + if ( !Calamares::JobQueue::instance() ) + { + (void)new Calamares::JobQueue(); + } + + QFETCH(QString, filename); + QFETCH(int, count); + QFETCH(QString, group); + + QFile fi( QString("%1/%2").arg(BUILD_AS_TEST, filename) ); + QVERIFY(fi.exists()); + + bool ok = false; + const auto map = CalamaresUtils::loadYaml(fi, &ok); + QVERIFY(ok); + QVERIFY(map.count() > 0); + + Config c; + c.setConfigurationMap(map); + + QCOMPARE( c.defaultGroups().count(), count); + QVERIFY( c.defaultGroups().contains( group ) ); +} + + void UserTests::testHostActions_data() { diff --git a/src/modules/users/tests/3-wing.conf b/src/modules/users/tests/3-wing.conf new file mode 100644 index 0000000000..3c7dc61afd --- /dev/null +++ b/src/modules/users/tests/3-wing.conf @@ -0,0 +1,2 @@ +--- +defaultGroups: [ wing, wheel, users ] diff --git a/src/modules/users/tests/4-audio.conf b/src/modules/users/tests/4-audio.conf new file mode 100644 index 0000000000..fb7fdb3d28 --- /dev/null +++ b/src/modules/users/tests/4-audio.conf @@ -0,0 +1,6 @@ +--- +defaultGroups: + - users + - lp + - wheel + - audio From 38862660c7af148d31b8cca1c4b58dc3acb4e049 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Tue, 18 Aug 2020 17:20:53 +0200 Subject: [PATCH 082/157] Changes: credit for stringlist fixes --- CHANGES | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/CHANGES b/CHANGES index 9512572094..450705c54c 100644 --- a/CHANGES +++ b/CHANGES @@ -6,10 +6,11 @@ website will have to do for older versions. # 3.2.29 (unreleased) # This release contains contributions from (alphabetically by first name): - - No external contributors yet + - Asif Mahmud Shimon (new contributor! hi!) ## Core ## - - No core changes yet + - Edge case in extracting string-lists from YAML, reported and fixed + by Asif (#1491). ## Modules ## - No module changes yet From 8ad718402424f654812c00b8deccda0dc465af0d Mon Sep 17 00:00:00 2001 From: demmm Date: Tue, 18 Aug 2020 20:06:30 +0200 Subject: [PATCH 083/157] [usersq] users.qml update some config vars reflect changes from users/Config.cpp corrected id missing capital mirror UsersQmlViewStep.cpp/h with the users versions connections are still not made --- src/modules/usersq/UsersQmlViewStep.cpp | 105 ++---------------------- src/modules/usersq/UsersQmlViewStep.h | 6 +- src/modules/usersq/usersq.qml | 18 ++-- 3 files changed, 18 insertions(+), 111 deletions(-) diff --git a/src/modules/usersq/UsersQmlViewStep.cpp b/src/modules/usersq/UsersQmlViewStep.cpp index bb5fbd9a66..963383c103 100644 --- a/src/modules/usersq/UsersQmlViewStep.cpp +++ b/src/modules/usersq/UsersQmlViewStep.cpp @@ -33,30 +33,13 @@ CALAMARES_PLUGIN_FACTORY_DEFINITION( UsersQmlViewStepFactory, registerPlugin< UsersQmlViewStep >(); ) -/*static const NamedEnumTable< SetHostNameJob::Action >& -hostnameActions() -{ - using Action = SetHostNameJob::Action; - - // *INDENT-OFF* - // clang-format off - static const NamedEnumTable< Action > names { - { QStringLiteral( "none" ), Action::None }, - { QStringLiteral( "etcfile" ), Action::EtcHostname }, - { QStringLiteral( "hostnamed" ), Action::SystemdHostname } - }; - // clang-format on - // *INDENT-ON* - - return names; -}*/ - UsersQmlViewStep::UsersQmlViewStep( QObject* parent ) : Calamares::QmlViewStep( parent ) , m_config( new Config(this) ) { + connect( m_config, &Config::readyChanged, this, &UsersQmlViewStep::nextStatusChanged ); + emit nextStatusChanged( true ); - //connect( m_config, &Config::checkReady, this, &UsersQmlViewStep::nextStatusChanged ); } QString @@ -68,8 +51,8 @@ UsersQmlViewStep::prettyName() const bool UsersQmlViewStep::isNextEnabled() const { - //return m_config->isReady(); - return true; + return m_config->isReady(); + //return true; } @@ -105,94 +88,22 @@ void UsersQmlViewStep::onActivate() { //m_config->onActivate(); + //QmlViewStep::onActivate(); } void UsersQmlViewStep::onLeave() { - m_jobs.clear(); - - //m_jobs.append( m_config->createJobs( m_defaultGroups ) ); + m_jobs = m_config->createJobs(); + m_config->finalizeGlobalStorage(); } void UsersQmlViewStep::setConfigurationMap( const QVariantMap& configurationMap ) { - using CalamaresUtils::getBool; - - if ( configurationMap.contains( "defaultGroups" ) - && configurationMap.value( "defaultGroups" ).type() == QVariant::List ) - { - m_defaultGroups = configurationMap.value( "defaultGroups" ).toStringList(); - } - else - { - cWarning() << "Using fallback groups. Please check defaultGroups in users.conf"; - m_defaultGroups = QStringList { "lp", "video", "network", "storage", "wheel", "audio" }; - } - - if ( configurationMap.contains( "autologinGroup" ) - && configurationMap.value( "autologinGroup" ).type() == QVariant::String ) - { - Calamares::JobQueue::instance()->globalStorage()->insert( - "autologinGroup", configurationMap.value( "autologinGroup" ).toString() ); - } - - if ( configurationMap.contains( "sudoersGroup" ) - && configurationMap.value( "sudoersGroup" ).type() == QVariant::String ) - { - Calamares::JobQueue::instance()->globalStorage()->insert( "sudoersGroup", - configurationMap.value( "sudoersGroup" ).toString() ); - } - - bool setRootPassword = getBool( configurationMap, "setRootPassword", true ); - Calamares::JobQueue::instance()->globalStorage()->insert( "setRootPassword", setRootPassword ); - - //m_config->writeRootPassword( setRootPassword ); - //m_config->setAutologinGroup( getBool( configurationMap, "doAutologin", false ) ); - //m_config->setReusePasswordDefault( getBool( configurationMap, "doReusePassword", false ) ); - - if ( configurationMap.contains( "passwordRequirements" ) - && configurationMap.value( "passwordRequirements" ).type() == QVariant::Map ) - { - auto pr_checks( configurationMap.value( "passwordRequirements" ).toMap() ); - - for ( decltype( pr_checks )::const_iterator i = pr_checks.constBegin(); i != pr_checks.constEnd(); ++i ) - { - //m_config->passwordChecks( i.key(), i.value() ); - } - } - - //m_config->setPasswordCheckboxVisible( getBool( configurationMap, "allowWeakPasswords", false ) ); - //m_config->setValidatePasswordDefault( !getBool( configurationMap, "allowWeakPasswordsDefault", false ) ); - - QString shell( QLatin1String( "/bin/bash" ) ); // as if it's not set at all - if ( configurationMap.contains( "userShell" ) ) - { - shell = CalamaresUtils::getString( configurationMap, "userShell" ); - } - // Now it might be explicitly set to empty, which is ok - - Calamares::JobQueue::instance()->globalStorage()->insert( "userShell", shell ); - - /*using Action = SetHostNameJob::Action; - - QString hostnameActionString = CalamaresUtils::getString( configurationMap, "setHostname" ); - if ( hostnameActionString.isEmpty() ) - { - hostnameActionString = QStringLiteral( "EtcFile" ); - } - bool ok = false; - auto hostnameAction = hostnameActions().find( hostnameActionString, ok ); - if ( !ok ) - { - hostnameAction = Action::EtcHostname; - } - - Action hostsfileAction = getBool( configurationMap, "writeHostsFile", true ) ? Action::WriteEtcHosts : Action::None; - m_actions = hostsfileAction | hostnameAction;*/ + m_config->setConfigurationMap( configurationMap ); Calamares::QmlViewStep::setConfigurationMap( configurationMap ); // call parent implementation last setContextProperty( "Users", m_config ); diff --git a/src/modules/usersq/UsersQmlViewStep.h b/src/modules/usersq/UsersQmlViewStep.h index c40b35f476..4636981994 100644 --- a/src/modules/usersq/UsersQmlViewStep.h +++ b/src/modules/usersq/UsersQmlViewStep.h @@ -22,7 +22,6 @@ #define USERSQMLVIEWSTEP_H #include -//#include "SetHostNameJob.h" #include #include @@ -61,10 +60,7 @@ class PLUGINDLLEXPORT UsersQmlViewStep : public Calamares::QmlViewStep private: Config *m_config; - QList< Calamares::job_ptr > m_jobs; - - QStringList m_defaultGroups; - //SetHostNameJob::Actions m_actions; + Calamares::JobList m_jobs; }; CALAMARES_PLUGIN_FACTORY_DECLARATION( UsersQmlViewStepFactory ) diff --git a/src/modules/usersq/usersq.qml b/src/modules/usersq/usersq.qml index 42bb6321db..64cbea85e5 100644 --- a/src/modules/usersq/usersq.qml +++ b/src/modules/usersq/usersq.qml @@ -75,7 +75,7 @@ Kirigami.ScrollablePage { radius: 2 opacity: 0.9 //border.color: _userNameField.text === "" ? Kirigami.Theme.backgroundColor : ( config.fullNameReady ? Kirigami.Theme.backgroundColor : Kirigami.Theme.negativeTextColor) - border.color: _userNameField.text === "" ? "#FBFBFB" : ( config.fullNameReady ? "#FBFBFB" : Kirigami.Theme.negativeTextColor) + border.color: _userNameField.text === "" ? "#FBFBFB" : ( config.fullNameChanged ? "#FBFBFB" : Kirigami.Theme.negativeTextColor) } } } @@ -97,14 +97,14 @@ Kirigami.ScrollablePage { width: parent.width placeholderText: qsTr("Login Name") //text: config.userName - onTextEdited: config.loginNameChanged(text) + onTextEdited: config.loginNameStatusChanged(text) background: Rectangle { color: "#FBFBFB" // Kirigami.Theme.backgroundColor opacity: 0.9 //border.color: _userLoginField.text === "" ? Kirigami.Theme.backgroundColor : ( config.userNameReady ? Kirigami.Theme.backgroundColor : Kirigami.Theme.negativeTextColor) - border.color: _userLoginField.text === "" ? "#FBFBFB" : ( config.userNameReady ? "#FBFBFB" : Kirigami.Theme.negativeTextColor) + border.color: _userLoginField.text === "" ? "#FBFBFB" : ( config.loginNameStatusChanged ? "#FBFBFB" : Kirigami.Theme.negativeTextColor) } } @@ -135,13 +135,13 @@ Kirigami.ScrollablePage { width: parent.width placeholderText: qsTr("Computer Name") text: config.hostName - onTextEdited: config.hostNameChanged(text) + onTextEdited: config.hostNameStatusChanged(text) background: Rectangle { color: "#FBFBFB" // Kirigami.Theme.backgroundColor opacity: 0.9 - //border.color: _hostName.text === "" ? Kirigami.Theme.backgroundColor : ( config.hostNameReady ? Kirigami.Theme.backgroundColor : Kirigami.Theme.negativeTextColor) - border.color: _hostName.text === "" ? "#FBFBFB" : ( config.hostNameReady ? "#FBFBFB" : Kirigami.Theme.negativeTextColor) + //border.color: _hostName.text === "" ? Kirigami.Theme.backgroundColor : ( config.hostNameStatusChanged ? Kirigami.Theme.backgroundColor : Kirigami.Theme.negativeTextColor) + border.color: _hostName.text === "" ? "#FBFBFB" : ( config.hostNameStatusChanged ? "#FBFBFB" : Kirigami.Theme.negativeTextColor) } } @@ -178,14 +178,14 @@ Kirigami.ScrollablePage { echoMode: TextInput.Password passwordMaskDelay: 300 inputMethodHints: Qt.ImhNoAutoUppercase - onTextChanged: config.userPasswordChanged(text, _verificationPasswordField.text) + onTextChanged: config.userPasswordStatusChanged(text, _verificationPasswordField.text) background: Rectangle { color: "#FBFBFB" // Kirigami.Theme.backgroundColor opacity: 0.9 //border.color: _passwordField.text === "" ? Kirigami.Theme.backgroundColor : ( config.passwordReady ? Kirigami.Theme.backgroundColor : Kirigami.Theme.negativeTextColor) - border.color: _passwordField.text === "" ? "#FBFBFB" : ( config.passwordReady ? "#FBFBFB" : Kirigami.Theme.negativeTextColor) + border.color: _passwordField.text === "" ? "#FBFBFB" : ( config.userPasswordStatusChanged ? "#FBFBFB" : Kirigami.Theme.negativeTextColor) } } @@ -204,7 +204,7 @@ Kirigami.ScrollablePage { color: "#FBFBFB" //Kirigami.Theme.backgroundColor opacity: 0.9 //border.color: _verificationpasswordField.text === "" ? Kirigami.Theme.backgroundColor : ( config.passwordReady ? Kirigami.Theme.backgroundColor : Kirigami.Theme.negativeTextColor) - border.color: _verificationpasswordField.text === "" ? "#FBFBFB" : ( config.passwordReady ? "#FBFBFB" : Kirigami.Theme.negativeTextColor) + border.color: _verificationPasswordField.text === "" ? "#FBFBFB" : ( config.userPasswordSecondaryChanged ? "#FBFBFB" : Kirigami.Theme.negativeTextColor) } } } From 08ea51a344ce25cdebfd3e8619dbe2941f4dca36 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Wed, 19 Aug 2020 11:28:53 +0200 Subject: [PATCH 084/157] [partition] Fix tests after removal of single-job-enqueue --- .../partition/tests/PartitionJobTests.cpp | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/modules/partition/tests/PartitionJobTests.cpp b/src/modules/partition/tests/PartitionJobTests.cpp index bd2c6f8794..ae40215dbf 100644 --- a/src/modules/partition/tests/PartitionJobTests.cpp +++ b/src/modules/partition/tests/PartitionJobTests.cpp @@ -223,7 +223,7 @@ PartitionJobTests::queuePartitionTableCreation( PartitionTable::TableType type ) { auto job = new CreatePartitionTableJob( m_device.data(), type ); job->updatePreview(); - m_queue.enqueue( job_ptr( job ) ); + m_queue.enqueue( 1, JobList() << job_ptr( job ) ); } CreatePartitionJob* @@ -275,7 +275,7 @@ PartitionJobTests::testCreatePartition() Partition* partition1 = job->partition(); QVERIFY( partition1 ); job->updatePreview(); - m_queue.enqueue( job_ptr( job ) ); + m_queue.enqueue( 1, JobList() << job_ptr( job ) ); freePartition = firstFreePartition( m_device->partitionTable() ); QVERIFY( freePartition ); @@ -283,7 +283,7 @@ PartitionJobTests::testCreatePartition() Partition* partition2 = job->partition(); QVERIFY( partition2 ); job->updatePreview(); - m_queue.enqueue( job_ptr( job ) ); + m_queue.enqueue( 1, JobList() << job_ptr( job ) ); freePartition = firstFreePartition( m_device->partitionTable() ); QVERIFY( freePartition ); @@ -291,7 +291,7 @@ PartitionJobTests::testCreatePartition() Partition* partition3 = job->partition(); QVERIFY( partition3 ); job->updatePreview(); - m_queue.enqueue( job_ptr( job ) ); + m_queue.enqueue( 1, JobList() << job_ptr( job ) ); QVERIFY( m_runner.run() ); @@ -316,14 +316,14 @@ PartitionJobTests::testCreatePartitionExtended() Partition* partition1 = job->partition(); QVERIFY( partition1 ); job->updatePreview(); - m_queue.enqueue( job_ptr( job ) ); + m_queue.enqueue( 1, JobList() << job_ptr( job ) ); freePartition = firstFreePartition( m_device->partitionTable() ); QVERIFY( freePartition ); job = newCreatePartitionJob( freePartition, PartitionRole( PartitionRole::Extended ), FileSystem::Extended, 10_MiB ); job->updatePreview(); - m_queue.enqueue( job_ptr( job ) ); + m_queue.enqueue( 1, JobList() << job_ptr( job ) ); Partition* extendedPartition = job->partition(); freePartition = firstFreePartition( extendedPartition ); @@ -332,7 +332,7 @@ PartitionJobTests::testCreatePartitionExtended() Partition* partition2 = job->partition(); QVERIFY( partition2 ); job->updatePreview(); - m_queue.enqueue( job_ptr( job ) ); + m_queue.enqueue( 1, JobList() << job_ptr( job ) ); QVERIFY( m_runner.run() ); @@ -394,7 +394,7 @@ PartitionJobTests::testResizePartition() KPM_PARTITION_FLAG( None ) ); CreatePartitionJob* job = new CreatePartitionJob( m_device.data(), partition ); job->updatePreview(); - m_queue.enqueue( job_ptr( job ) ); + m_queue.enqueue( 1, JobList() << job_ptr( job ) ); QVERIFY( m_runner.run() ); } @@ -418,7 +418,7 @@ PartitionJobTests::testResizePartition() // Resize ResizePartitionJob* job = new ResizePartitionJob( m_device.data(), partition, newFirst, newLast ); job->updatePreview(); - m_queue.enqueue( job_ptr( job ) ); + m_queue.enqueue( 1, JobList() << job_ptr( job ) ); QVERIFY( m_runner.run() ); QCOMPARE( partition->firstSector(), newFirst ); From 941b5af3a224256fa7a7b5bb4f5b0dd64676d498 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Wed, 19 Aug 2020 12:54:40 +0200 Subject: [PATCH 085/157] [libcalamares] Rip out the guts of job-queue-running - compute weights and accumulations beforehand - mutex-lock structures so you can enqueue while running jobs - simplify progress reporting calculations - doesn't actually run any jobs --- src/libcalamares/JobQueue.cpp | 179 ++++++++++++++++++---------------- src/libcalamares/JobQueue.h | 1 - 2 files changed, 96 insertions(+), 84 deletions(-) diff --git a/src/libcalamares/JobQueue.cpp b/src/libcalamares/JobQueue.cpp index b78ba32dc9..491e08f7c4 100644 --- a/src/libcalamares/JobQueue.cpp +++ b/src/libcalamares/JobQueue.cpp @@ -28,11 +28,34 @@ #include "Job.h" #include "utils/Logger.h" +#include +#include #include namespace Calamares { +struct WeightedJob +{ + /** @brief Cumulative weight **before** this job starts + * + * This is calculated as jobs come in. + */ + double cumulative = 0.0; + /** @brief Weight of the job within the module's jobs + * + * When a list of jobs is added from a particular module, + * the jobs are weighted relative to that module's overall weight + * **and** the other jobs in the list, so that each job + * gets its share: + * ( job-weight / total-job-weight ) * module-weight + */ + double weight = 0.0; + + job_ptr job; +}; +using WeightedJobList = QList< WeightedJob >; + class JobThread : public QThread { public: @@ -45,106 +68,99 @@ class JobThread : public QThread virtual ~JobThread() override; - void setJobs( JobList&& jobs ) + void finalize() + { + Q_ASSERT( m_runningJobs->isEmpty() ); + QMutexLocker qlock( &m_enqueMutex ); + QMutexLocker rlock( &m_runMutex ); + std::swap( m_runningJobs, m_queuedJobs ); + m_overallQueueWeight + = m_runningJobs->isEmpty() ? 0.0 : ( m_runningJobs->last().cumulative + m_runningJobs->last().weight ); + if ( m_overallQueueWeight < 1 ) + { + m_overallQueueWeight = 1.0; + } + } + + void enqueue( int moduleWeight, const JobList& jobs ) { - m_jobs = jobs; + QMutexLocker qlock( &m_enqueMutex ); + + double cumulative + = m_queuedJobs->isEmpty() ? 0.0 : ( m_queuedJobs->last().cumulative + m_queuedJobs->last().weight ); - qreal totalJobsWeight = 0.0; - for ( auto job : m_jobs ) + double totalJobWeight = std::accumulate( jobs.cbegin(), jobs.cend(), 0.0, []( double total, const job_ptr& j ) { + return total + j->getJobWeight(); + } ); + if ( totalJobWeight < 1 ) { - totalJobsWeight += job->getJobWeight(); + totalJobWeight = 1.0; } - for ( auto job : m_jobs ) + + for ( const auto& j : jobs ) { - qreal jobWeight = qreal( job->getJobWeight() / totalJobsWeight ); - m_jobWeights.append( jobWeight ); + double jobContribution = ( j->getJobWeight() / totalJobWeight ) * moduleWeight; + m_queuedJobs->append( WeightedJob { cumulative, jobContribution, j } ); + cumulative += jobContribution; } } void run() override { - bool anyFailed = false; - QString message; - QString details; + QMutexLocker rlock( &m_runMutex ); + bool failureEncountered = false; m_jobIndex = 0; - for ( auto job : m_jobs ) + for ( const auto& jobitem : *m_runningJobs ) { - if ( anyFailed && !job->isEmergency() ) + if ( failureEncountered && !jobitem.job->isEmergency() ) { - cDebug() << "Skipping non-emergency job" << job->prettyName(); - ++m_jobIndex; - continue; + cDebug() << "Skipping non-emergency job" << jobitem.job->prettyName(); } - - emitProgress(); - cDebug() << "Starting" << ( anyFailed ? "EMERGENCY JOB" : "job" ) << job->prettyName() << "(there are" - << ( m_jobs.count() - m_jobIndex ) << "left)"; - connect( job.data(), &Job::progress, this, &JobThread::emitProgress ); - JobResult result = job->exec(); - if ( !anyFailed && !result ) + else { - anyFailed = true; - message = result.message(); - details = result.details(); + jobProgress( 0.0 ); // 0% for *this job* + cDebug() << "Starting" << ( failureEncountered ? "EMERGENCY JOB" : "job" ) << jobitem.job->prettyName() + << '(' << ( m_jobIndex + 1 ) << '/' << m_runningJobs->count() << ')'; + jobProgress( 1.0 ); // 100% for *this job* } - emitProgress( 1.0 ); - ++m_jobIndex; + m_jobIndex++; } - if ( anyFailed ) - { - emitFailed( message, details ); - } - else - { - emitProgress(); - } - emitFinished(); } -private: - JobList m_jobs; - QList< qreal > m_jobWeights; - JobQueue* m_queue; - int m_jobIndex; - - void emitProgress( qreal jobPercent = 0 ) + void jobProgress( double percentage ) const { - // Make sure jobPercent is reasonable, in case a job messed up its - // percentage computations. - jobPercent = qBound( qreal( 0 ), jobPercent, qreal( 1 ) ); + percentage = qBound( 0.0, percentage, 1.0 ); - int jobCount = m_jobs.size(); - QString message = m_jobIndex < jobCount ? m_jobs.at( m_jobIndex )->prettyStatusMessage() : tr( "Done" ); + QString message; + double progress = 0.0; + if ( m_jobIndex < m_runningJobs->count() ) + { - qreal percent = 1.0; // Pretend we're done, since the if will reset it - if ( m_jobIndex < jobCount ) + const auto& jobitem = m_runningJobs->at( m_jobIndex ); + progress = ( jobitem.cumulative + jobitem.weight * percentage ) / m_overallQueueWeight; + message = jobitem.job->prettyStatusMessage(); + } + else { - qreal cumulativeProgress = 0.0; - for ( auto jobWeight : m_jobWeights.mid( 0, m_jobIndex ) ) - { - cumulativeProgress += jobWeight; - } - percent = cumulativeProgress + ( ( m_jobWeights.at( m_jobIndex ) ) * jobPercent ); - - Logger::CDebug( Logger::LOGVERBOSE ) - << "[JOBQUEUE]: Progress for Job[" << m_jobIndex << "]: " << ( jobPercent * 100 ) << "% completed"; - Logger::CDebug( Logger::LOGVERBOSE ) - << "[JOBQUEUE]: Progress Overall: " << ( cumulativeProgress * 100 ) << "% (accumulated) + " - << ( ( ( m_jobWeights.at( m_jobIndex ) ) * jobPercent ) * 100 ) - << "% (this job) = " << ( percent * 100 ) << "% (total)"; + progress = 1.0; + message = tr( "Done" ); } QMetaObject::invokeMethod( - m_queue, "progress", Qt::QueuedConnection, Q_ARG( qreal, percent ), Q_ARG( QString, message ) ); + m_queue, "progress", Qt::QueuedConnection, Q_ARG( double, progress ), Q_ARG( QString, message ) ); } - void emitFailed( const QString& message, const QString& details ) - { - QMetaObject::invokeMethod( - m_queue, "failed", Qt::QueuedConnection, Q_ARG( QString, message ), Q_ARG( QString, details ) ); - } - void emitFinished() { QMetaObject::invokeMethod( m_queue, "finish", Qt::QueuedConnection ); } +private: + QMutex m_runMutex; + QMutex m_enqueMutex; + + std::unique_ptr< WeightedJobList > m_runningJobs = std::make_unique< WeightedJobList >(); + std::unique_ptr< WeightedJobList > m_queuedJobs = std::make_unique< WeightedJobList >(); + + JobQueue* m_queue; + int m_jobIndex = 0; ///< Index into m_runningJobs + double m_overallQueueWeight = 0.0; ///< cumulation when **all** the jobs are done }; JobThread::~JobThread() {} @@ -152,7 +168,6 @@ JobThread::~JobThread() {} JobQueue* JobQueue::s_instance = nullptr; - JobQueue* JobQueue::instance() { @@ -160,13 +175,6 @@ JobQueue::instance() } -GlobalStorage* -JobQueue::globalStorage() const -{ - return m_storage; -} - - JobQueue::JobQueue( QObject* parent ) : QObject( parent ) , m_thread( new JobThread( this ) ) @@ -197,8 +205,7 @@ void JobQueue::start() { Q_ASSERT( !m_thread->isRunning() ); - m_thread->setJobs( std::move( m_jobs ) ); - m_jobs.clear(); + m_thread->finalize(); m_finished = false; m_thread->start(); } @@ -208,8 +215,8 @@ void JobQueue::enqueue( int moduleWeight, const JobList& jobs ) { Q_ASSERT( !m_thread->isRunning() ); - m_jobs.append( jobs ); - emit queueChanged( m_jobs ); + m_thread->enqueue( moduleWeight, jobs ); + emit queueChanged( jobs ); // FIXME: bogus } void @@ -219,4 +226,10 @@ JobQueue::finish() emit finished(); } +GlobalStorage* +JobQueue::globalStorage() const +{ + return m_storage; +} + } // namespace Calamares diff --git a/src/libcalamares/JobQueue.h b/src/libcalamares/JobQueue.h index 3847b46679..31b5407ef5 100644 --- a/src/libcalamares/JobQueue.h +++ b/src/libcalamares/JobQueue.h @@ -66,7 +66,6 @@ public slots: private: static JobQueue* s_instance; - JobList m_jobs; JobThread* m_thread; GlobalStorage* m_storage; bool m_finished = true; ///< Initially, not running From 521015b1b45344ebf767559a985b7335b21056e7 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Wed, 19 Aug 2020 13:06:50 +0200 Subject: [PATCH 086/157] [libcalamares] Match types to existing qreal usage, signal progress --- src/libcalamares/JobQueue.cpp | 48 +++++++++++++++++++++++++---------- 1 file changed, 35 insertions(+), 13 deletions(-) diff --git a/src/libcalamares/JobQueue.cpp b/src/libcalamares/JobQueue.cpp index 491e08f7c4..17cf118299 100644 --- a/src/libcalamares/JobQueue.cpp +++ b/src/libcalamares/JobQueue.cpp @@ -41,7 +41,7 @@ struct WeightedJob * * This is calculated as jobs come in. */ - double cumulative = 0.0; + qreal cumulative = 0.0; /** @brief Weight of the job within the module's jobs * * When a list of jobs is added from a particular module, @@ -50,7 +50,7 @@ struct WeightedJob * gets its share: * ( job-weight / total-job-weight ) * module-weight */ - double weight = 0.0; + qreal weight = 0.0; job_ptr job; }; @@ -86,12 +86,13 @@ class JobThread : public QThread { QMutexLocker qlock( &m_enqueMutex ); - double cumulative + qreal cumulative = m_queuedJobs->isEmpty() ? 0.0 : ( m_queuedJobs->last().cumulative + m_queuedJobs->last().weight ); - double totalJobWeight = std::accumulate( jobs.cbegin(), jobs.cend(), 0.0, []( double total, const job_ptr& j ) { - return total + j->getJobWeight(); - } ); + qreal totalJobWeight + = std::accumulate( jobs.cbegin(), jobs.cend(), qreal( 0.0 ), []( qreal total, const job_ptr& j ) { + return total + j->getJobWeight(); + } ); if ( totalJobWeight < 1 ) { totalJobWeight = 1.0; @@ -99,7 +100,7 @@ class JobThread : public QThread for ( const auto& j : jobs ) { - double jobContribution = ( j->getJobWeight() / totalJobWeight ) * moduleWeight; + qreal jobContribution = ( j->getJobWeight() / totalJobWeight ) * moduleWeight; m_queuedJobs->append( WeightedJob { cumulative, jobContribution, j } ); cumulative += jobContribution; } @@ -109,6 +110,8 @@ class JobThread : public QThread { QMutexLocker rlock( &m_runMutex ); bool failureEncountered = false; + QString message; ///< Filled in with errors + QString details; m_jobIndex = 0; for ( const auto& jobitem : *m_runningJobs ) @@ -119,21 +122,40 @@ class JobThread : public QThread } else { - jobProgress( 0.0 ); // 0% for *this job* + emitProgress( 0.0 ); // 0% for *this job* cDebug() << "Starting" << ( failureEncountered ? "EMERGENCY JOB" : "job" ) << jobitem.job->prettyName() << '(' << ( m_jobIndex + 1 ) << '/' << m_runningJobs->count() << ')'; - jobProgress( 1.0 ); // 100% for *this job* + connect( jobitem.job.data(), &Job::progress, this, &JobThread::emitProgress ); + auto result = jobitem.job->exec(); + if ( !failureEncountered && !result ) + { + // so this is the first failure + failureEncountered = true; + message = result.message(); + details = result.details(); + } + emitProgress( 1.0 ); // 100% for *this job* } m_jobIndex++; } + if ( failureEncountered ) + { + QMetaObject::invokeMethod( + m_queue, "failed", Qt::QueuedConnection, Q_ARG( QString, message ), Q_ARG( QString, details ) ); + } + else + { + emitProgress( 1.0 ); + } + QMetaObject::invokeMethod( m_queue, "finish", Qt::QueuedConnection ); } - void jobProgress( double percentage ) const + void emitProgress( qreal percentage ) const { percentage = qBound( 0.0, percentage, 1.0 ); QString message; - double progress = 0.0; + qreal progress = 0.0; if ( m_jobIndex < m_runningJobs->count() ) { @@ -147,7 +169,7 @@ class JobThread : public QThread message = tr( "Done" ); } QMetaObject::invokeMethod( - m_queue, "progress", Qt::QueuedConnection, Q_ARG( double, progress ), Q_ARG( QString, message ) ); + m_queue, "progress", Qt::QueuedConnection, Q_ARG( qreal, progress ), Q_ARG( QString, message ) ); } @@ -160,7 +182,7 @@ class JobThread : public QThread JobQueue* m_queue; int m_jobIndex = 0; ///< Index into m_runningJobs - double m_overallQueueWeight = 0.0; ///< cumulation when **all** the jobs are done + qreal m_overallQueueWeight = 0.0; ///< cumulation when **all** the jobs are done }; JobThread::~JobThread() {} From 053321d4d20196b86cbca6d24539c1a20ad5f938 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Wed, 19 Aug 2020 15:07:47 +0200 Subject: [PATCH 087/157] [libcalamares] Test for progress reporting - add a dummy job class for tests - run a queue with 3 jobs from 2 modules to check progress reporting --- src/libcalamares/Tests.cpp | 163 ++++++++++++++++++++++++++++++++++++- 1 file changed, 161 insertions(+), 2 deletions(-) diff --git a/src/libcalamares/Tests.cpp b/src/libcalamares/Tests.cpp index 5903dfde66..68e1112c65 100644 --- a/src/libcalamares/Tests.cpp +++ b/src/libcalamares/Tests.cpp @@ -20,9 +20,9 @@ */ #include "GlobalStorage.h" +#include "JobQueue.h" #include "Settings.h" #include "modulesystem/InstanceKey.h" - #include "utils/Logger.h" #include @@ -46,6 +46,8 @@ private Q_SLOTS: void testInstanceDescription(); void testSettings(); + + void testJobQueue(); }; void @@ -341,7 +343,7 @@ TestLibCalamares::testInstanceDescription() { QVariantMap m; m.insert( "module", "welcome" ); - m.insert( "weight", 1); + m.insert( "weight", 1 ); InstanceDescription d = InstanceDescription::fromSettings( m ); QVERIFY( d.isValid() ); @@ -480,6 +482,163 @@ branding: default # needed for it to be considered valid } } +constexpr const std::chrono::milliseconds MAX_TEST_DURATION( 3000 ); +constexpr const int MAX_TEST_SLEEP( 2 ); // seconds, < MAX_TEST_DURATION + +Q_STATIC_ASSERT( std::chrono::seconds( MAX_TEST_SLEEP ) < MAX_TEST_DURATION ); + +class DummyJob : public Calamares::Job +{ +public: + DummyJob( QObject* parent ) + : Calamares::Job( parent ) + { + } + virtual ~DummyJob() override; + + QString prettyName() const override; + Calamares::JobResult exec() override; +}; + +DummyJob::~DummyJob() {} + +QString +DummyJob::prettyName() const +{ + return QString( "DummyJob" ); +} + +Calamares::JobResult +DummyJob::exec() +{ + cDebug() << "Starting DummyJob"; + progress( 0.5 ); + QThread::sleep( MAX_TEST_SLEEP ); + cDebug() << ".. continuing DummyJob"; + progress( 0.75 ); + return Calamares::JobResult::ok(); +} + + +void +TestLibCalamares::testJobQueue() +{ + // Run an empty queue + { + Calamares::JobQueue q; + QVERIFY( !q.isRunning() ); + + QSignalSpy spy_progress( &q, &Calamares::JobQueue::progress ); + QSignalSpy spy_finished( &q, &Calamares::JobQueue::finished ); + QSignalSpy spy_failed( &q, &Calamares::JobQueue::failed ); + + QEventLoop loop; + connect( &q, &Calamares::JobQueue::finished, &loop, &QEventLoop::quit ); + QTimer::singleShot( MAX_TEST_DURATION, &loop, &QEventLoop::quit ); + q.start(); + QVERIFY( q.isRunning() ); + loop.exec(); + QVERIFY( !q.isRunning() ); + QCOMPARE( spy_finished.count(), 1 ); + QCOMPARE( spy_failed.count(), 0 ); + QCOMPARE( spy_progress.count(), 1 ); // just one, 100% at queue end + } + + // Run a dummy queue + { + Calamares::JobQueue q; + QVERIFY( !q.isRunning() ); + + q.enqueue( 8, Calamares::JobList() << Calamares::job_ptr( new DummyJob( this ) ) ); + QSignalSpy spy_progress( &q, &Calamares::JobQueue::progress ); + QSignalSpy spy_finished( &q, &Calamares::JobQueue::finished ); + QSignalSpy spy_failed( &q, &Calamares::JobQueue::failed ); + + QEventLoop loop; + connect( &q, &Calamares::JobQueue::finished, &loop, &QEventLoop::quit ); + QTimer::singleShot( MAX_TEST_DURATION, &loop, &QEventLoop::quit ); + q.start(); + QVERIFY( q.isRunning() ); + loop.exec(); + QVERIFY( !q.isRunning() ); + QCOMPARE( spy_finished.count(), 1 ); + QCOMPARE( spy_failed.count(), 0 ); + // 0% by the queue at job start + // 50% by the job itself + // 90% by the job itself + // 100% by the queue at job end + // 100% by the queue at queue end + QCOMPARE( spy_progress.count(), 5 ); + } + + { + Calamares::JobQueue q; + QVERIFY( !q.isRunning() ); + + q.enqueue( 8, Calamares::JobList() << Calamares::job_ptr( new DummyJob( this ) ) ); + q.enqueue( 12, + Calamares::JobList() << Calamares::job_ptr( new DummyJob( this ) ) + << Calamares::job_ptr( new DummyJob( this ) ) ); + QSignalSpy spy_progress( &q, &Calamares::JobQueue::progress ); + QSignalSpy spy_finished( &q, &Calamares::JobQueue::finished ); + QSignalSpy spy_failed( &q, &Calamares::JobQueue::failed ); + + QEventLoop loop; + connect( &q, &Calamares::JobQueue::finished, &loop, &QEventLoop::quit ); + // Run the loop longer because the jobs take longer (there are 3 of them) + QTimer::singleShot( 3 * MAX_TEST_DURATION, &loop, &QEventLoop::quit ); + q.start(); + QVERIFY( q.isRunning() ); + loop.exec(); + QVERIFY( !q.isRunning() ); + QCOMPARE( spy_finished.count(), 1 ); + QCOMPARE( spy_failed.count(), 0 ); + // 0% by the queue at job start + // 50% by the job itself + // 90% by the job itself + // 100% by the queue at job end + // 4 more for the next job + // 4 more for the next job + // 100% by the queue at queue end + QCOMPARE( spy_progress.count(), 13 ); + + /* Consider how progress will be reported: + * + * - the first module has weight 8, so the 1 job it has has weight 8 + * - the second module has weight 12, so each of its two jobs has weight 6 + * + * Total weight of the modules is 20. So the events are + * + * Job Progress Overall Weight Consumed Overall Progress + * 1 0 0 0.00 + * 1 50 4 0.20 + * 1 75 6 0.30 + * 1 100 8 0.40 + * 2 0 8 0.40 + * 2 50 11 (8 + 50% of 6) 0.55 + * 2 75 12.5 0.625 + * 2 100 14 0.70 + * 3 0 14 0.70 + * 3 50 17 0.85 + * 3 75 18.5 0.925 + * 3 100 20 1.00 + * - 100 20 1.00 + */ + cDebug() << "Progress signals:"; + qreal overallProgress = 0.0; + for ( const auto& e : spy_progress ) + { + QCOMPARE( e.count(), 2 ); + const auto v = e.first(); + QVERIFY( v.canConvert< qreal >() ); + qreal progress = v.toReal(); + cDebug() << Logger::SubEntry << progress; + QVERIFY( progress >= overallProgress ); // Doesn't go backwards + overallProgress = progress; + } + } +} + QTEST_GUILESS_MAIN( TestLibCalamares ) From 9d395e82f0e1f25af53154f90f14f29961013e37 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Wed, 19 Aug 2020 15:32:19 +0200 Subject: [PATCH 088/157] [libcalamares] Try to avoid progress going backwards This is more a test-inspired hack than anything else: since signals are delivered asynchronously, we can end up delivering progress signals out-of-order, and then the signal spy lists them wrong: progress goes backwards. Insert a tiny delay between jobs to allow signals to be delivered in-order. --- src/libcalamares/JobQueue.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libcalamares/JobQueue.cpp b/src/libcalamares/JobQueue.cpp index 17cf118299..efe0392e53 100644 --- a/src/libcalamares/JobQueue.cpp +++ b/src/libcalamares/JobQueue.cpp @@ -134,6 +134,7 @@ class JobThread : public QThread message = result.message(); details = result.details(); } + QThread::msleep( 16 ); // Very brief rest before reporting the job as complete emitProgress( 1.0 ); // 100% for *this job* } m_jobIndex++; @@ -158,7 +159,6 @@ class JobThread : public QThread qreal progress = 0.0; if ( m_jobIndex < m_runningJobs->count() ) { - const auto& jobitem = m_runningJobs->at( m_jobIndex ); progress = ( jobitem.cumulative + jobitem.weight * percentage ) / m_overallQueueWeight; message = jobitem.job->prettyStatusMessage(); From 65f71524e06c05daa1c08ada36a22260336d68bb Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Wed, 19 Aug 2020 16:32:06 +0200 Subject: [PATCH 089/157] Changes: mention module-weights --- CHANGES | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/CHANGES b/CHANGES index 450705c54c..4b7fe62ddb 100644 --- a/CHANGES +++ b/CHANGES @@ -11,9 +11,17 @@ This release contains contributions from (alphabetically by first name): ## Core ## - Edge case in extracting string-lists from YAML, reported and fixed by Asif (#1491). + - Progress reporting is now more flexible. Modules can have a weight + assigned to them in the descriptor; module instances can have a weight + assigned which overrides the module descriptor. When jobs are run + for a module instance, the jobs report progress pro-rated by the + module's weight. Or in other words, it is now possible to tweak + the amount of the overall progress bar that different modules fill. + The default settings give unpackfs a weight of 12. (#1176) ## Modules ## - - No module changes yet + - The *users* module did not read the *defaultGroups* correctly. + Fixed by the string-lists change mentioned above. # 3.2.28.3 (2020-08-18) # From cf1ee2cffe153a0478ea4e7cfdd6957dd9b1ebcf Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Wed, 19 Aug 2020 16:50:40 +0200 Subject: [PATCH 090/157] Docs: explain how module weights work --- src/modules/README.md | 36 +++++++++++++++++++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/src/modules/README.md b/src/modules/README.md index 1220c7398b..bf74506ee4 100644 --- a/src/modules/README.md +++ b/src/modules/README.md @@ -57,7 +57,7 @@ Module descriptors for process modules **must** have the following key: - *command* (the command to run) Module descriptors for process modules **may** have the following keys: - *timeout* (how long, in seconds, to wait for the command to run) -- *chroos* (if true, run the command in the target system rather than the host) +- *chroot* (if true, run the command in the target system rather than the host) Module descriptors **may** have the following keys: - *emergency* (a boolean value, set to true to mark the module @@ -124,6 +124,40 @@ All sample module configuration files are installed in files with the same name placed manually (or by the packager) in `/etc/calamares/modules`. +### Module Weights + +During the *exec* phase of an installation, where jobs are run and +things happen to the target system, there is a running progress bar. +It goes from 0% to 100% while all of the jobs for that exec phase +are run. Generally, one module creates on job, but this varies a little +(e.g. the partition module can spawn a whole bunch of jobs to +deal with each disk, and the users module has separate jobs for +the regular user and the root user). + +By default, modules all "weigh" the same, and each job is equal. +A typical installation has about 30 modules in the exec phase, +so there may be 40 jobs or so: each job represents 2.5% of the +overall progress of the installation. + +The consequence is that the *unpackfs* module, which needs to write +a few hundred MB to disk, gets 2.5% of the progress, and the *machineid* +module, which is essentially instantaneous, also gets 2.5% of the progress. +This makes progress reporting seem weird and uneven, and suggests to users +that Calamares may be "hanging" during the unpackfs stage. + +A module may be assigned a different "weight" in the `module.desc` +file (or via the CMake macros for adding plugins). This gives the +module more space in the overall progress: for instance, the *unpackfs* +module now has a weight of 12, so (assuming there are 38 modules +in the exec phase with a weight of 1, and *unpackfs* with a weight of 12) +regular modules get 2% (1 in 50 total weight) of the overall progress +bar, and the *unpackfs* module gets 24% (12 in 50). While this doesn't +speed anything up, it does make the progress in the unpackfs module more +visible. + +It is also possible to set a weight on a specific module **instance**, +which can be done in `settings.conf`. This overrides any weight +set in the module descriptor. ## C++ modules From 4a9f409422995c0785756513a96ee9c0c9883e85 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Wed, 19 Aug 2020 17:03:06 +0200 Subject: [PATCH 091/157] Docs: explain that instances may also exist for weight-setting --- settings.conf | 33 ++++++++++++++++++++++++++------- 1 file changed, 26 insertions(+), 7 deletions(-) diff --git a/settings.conf b/settings.conf index 8bff023737..1c73ea3814 100644 --- a/settings.conf +++ b/settings.conf @@ -26,11 +26,29 @@ modules-search: [ local ] # Instances section. This section is optional, and it defines custom instances -# for modules of any kind. An instance entry has an module name, an instance -# name, and a configuration file name. The primary goal of this mechanism is -# to allow loading multiple instances of the same module, with different -# configuration. If you don't need this, the instances section can safely be -# left empty. +# for modules of any kind. An instance entry has these keys: +# - *module* name, which matches the module name from the module descriptor +# (usually the name of the directory under `src/modules/`, but third- +# party modules may diverge. +# - *id* (optional) an identifier to distinguish this instance from +# all the others. If none is given, the name of the module is used. +# Together, the module and id form an instance key (see below). +# - *config* (optional) a filename for the configuration. If none is +# given, *module*`.conf` is used (e.g. `welcome.conf` for the welcome +# module) +# - *weight* (optional) In the *exec* phase of the sequence, progress +# is reported as jobs are completed. The jobs from a single module +# together contribute the full weight of that module. The overall +# progress (0 .. 100%) is divided up according to the weight of each +# module. Give modules that take a lot of time to complete, a larger +# weight to keep the overall progress moving along steadily. This +# weight overrides a weight given in the module descriptor. If no weight +# is given, uses the value from the module descriptor, or 1 if there +# isn't one there either. +# +# The primary goal of this mechanism is to allow loading multiple instances +# of the same module, with different configuration. If you don't need this, +# the instances section can safely be left empty. # # Module name plus instance name makes an instance key, e.g. # "webview@owncloud", where "webview" is the module name (for the webview @@ -43,10 +61,11 @@ modules-search: [ local ] # mentioning a module without a full instance key (e.g. "welcome") # means that implicit module. # -# An instance must specify its configuration file (e.g. `webview-home.conf`). +# An instance may specify its configuration file (e.g. `webview-home.conf`). # The implicit instances all have configuration files named `.conf`. # This (implict) way matches the source examples, where the welcome -# module contains an example `welcome.conf`. +# module contains an example `welcome.conf`. Specify a *config* for +# any module (also implicit instances) to change which file is used. # # For more information on running module instances, run Calamares in debug # mode and check the Modules page in the Debug information interface. From 41769c879466b3d4a488e4aac93535f893c96cfa Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Wed, 19 Aug 2020 21:12:40 +0200 Subject: [PATCH 092/157] [packages] Alphabetize package manager implementations --- src/modules/packages/main.py | 184 ++++++++++++++++++----------------- 1 file changed, 95 insertions(+), 89 deletions(-) diff --git a/src/modules/packages/main.py b/src/modules/packages/main.py index 4f746dccce..908d778b2a 100644 --- a/src/modules/packages/main.py +++ b/src/modules/packages/main.py @@ -161,63 +161,50 @@ def remove_package(self, packagedata): self.run(packagedata["post-script"]) -class PMPackageKit(PackageManager): - backend = "packagekit" +### PACKAGE MANAGER IMPLEMENTATIONS +# +# Keep these alphabetical (presumably both by class name and backend name), +# even the Dummy implementation. +# + +class PMApk(PackageManager): + backend = "apk" def install(self, pkgs, from_local=False): for pkg in pkgs: - check_target_env_call(["pkcon", "-py", "install", pkg]) + check_target_env_call(["apk", "add", pkg]) def remove(self, pkgs): for pkg in pkgs: - check_target_env_call(["pkcon", "-py", "remove", pkg]) + check_target_env_call(["apk", "del", pkg]) def update_db(self): - check_target_env_call(["pkcon", "refresh"]) + check_target_env_call(["apk", "update"]) def update_system(self): - check_target_env_call(["pkcon", "-py", "update"]) + check_target_env_call(["apk", "upgrade", "--available"]) -class PMZypp(PackageManager): - backend = "zypp" +class PMApt(PackageManager): + backend = "apt" def install(self, pkgs, from_local=False): - check_target_env_call(["zypper", "--non-interactive", - "--quiet-install", "install", - "--auto-agree-with-licenses", - "install"] + pkgs) + check_target_env_call(["apt-get", "-q", "-y", "install"] + pkgs) def remove(self, pkgs): - check_target_env_call(["zypper", "--non-interactive", + check_target_env_call(["apt-get", "--purge", "-q", "-y", "remove"] + pkgs) + check_target_env_call(["apt-get", "--purge", "-q", "-y", + "autoremove"]) def update_db(self): - check_target_env_call(["zypper", "--non-interactive", "update"]) + check_target_env_call(["apt-get", "update"]) def update_system(self): # Doesn't need to update the system explicitly pass -class PMYum(PackageManager): - backend = "yum" - - def install(self, pkgs, from_local=False): - check_target_env_call(["yum", "-y", "install"] + pkgs) - - def remove(self, pkgs): - check_target_env_call(["yum", "--disablerepo=*", "-C", "-y", - "remove"] + pkgs) - - def update_db(self): - # Doesn't need updates - pass - - def update_system(self): - check_target_env_call(["yum", "-y", "upgrade"]) - - class PMDnf(PackageManager): backend = "dnf" @@ -238,60 +225,62 @@ def update_system(self): check_target_env_call(["dnf", "-y", "upgrade"]) -class PMUrpmi(PackageManager): - backend = "urpmi" +class PMDummy(PackageManager): + backend = "dummy" def install(self, pkgs, from_local=False): - check_target_env_call(["urpmi", "--download-all", "--no-suggests", - "--no-verify-rpm", "--fastunsafe", - "--ignoresize", "--nolock", - "--auto"] + pkgs) + from time import sleep + libcalamares.utils.debug("Dummy backend: Installing " + str(pkgs)) + sleep(3) def remove(self, pkgs): - check_target_env_call(["urpme", "--auto"] + pkgs) + from time import sleep + libcalamares.utils.debug("Dummy backend: Removing " + str(pkgs)) + sleep(3) def update_db(self): - check_target_env_call(["urpmi.update", "-a"]) + libcalamares.utils.debug("Dummy backend: Updating DB") def update_system(self): - # Doesn't need to update the system explicitly - pass + libcalamares.utils.debug("Dummy backend: Updating System") + def run(self, script): + libcalamares.utils.debug("Dummy backend: Running script '" + str(script) + "'") -class PMApt(PackageManager): - backend = "apt" + +class PMEntropy(PackageManager): + backend = "entropy" def install(self, pkgs, from_local=False): - check_target_env_call(["apt-get", "-q", "-y", "install"] + pkgs) + check_target_env_call(["equo", "i"] + pkgs) def remove(self, pkgs): - check_target_env_call(["apt-get", "--purge", "-q", "-y", - "remove"] + pkgs) - check_target_env_call(["apt-get", "--purge", "-q", "-y", - "autoremove"]) + check_target_env_call(["equo", "rm"] + pkgs) def update_db(self): - check_target_env_call(["apt-get", "update"]) + check_target_env_call(["equo", "update"]) def update_system(self): # Doesn't need to update the system explicitly pass -class PMXbps(PackageManager): - backend = "xbps" +class PMPackageKit(PackageManager): + backend = "packagekit" def install(self, pkgs, from_local=False): - check_target_env_call(["xbps-install", "-Sy"] + pkgs) + for pkg in pkgs: + check_target_env_call(["pkcon", "-py", "install", pkg]) def remove(self, pkgs): - check_target_env_call(["xbps-remove", "-Ry", "--noconfirm"] + pkgs) + for pkg in pkgs: + check_target_env_call(["pkcon", "-py", "remove", pkg]) def update_db(self): - check_target_env_call(["xbps-install", "-S"]) + check_target_env_call(["pkcon", "refresh"]) def update_system(self): - check_target_env_call(["xbps", "-Suy"]) + check_target_env_call(["pkcon", "-py", "update"]) class PMPacman(PackageManager): @@ -341,6 +330,23 @@ def update_system(self): check_target_env_call([self.backend, "upgrade", "--no-confirm"]) +class PMPisi(PackageManager): + backend = "pisi" + + def install(self, pkgs, from_local=False): + check_target_env_call(["pisi", "install" "-y"] + pkgs) + + def remove(self, pkgs): + check_target_env_call(["pisi", "remove", "-y"] + pkgs) + + def update_db(self): + check_target_env_call(["pisi", "update-repo"]) + + def update_system(self): + # Doesn't need to update the system explicitly + pass + + class PMPortage(PackageManager): backend = "portage" @@ -359,79 +365,79 @@ def update_system(self): pass -class PMEntropy(PackageManager): - backend = "entropy" +class PMUrpmi(PackageManager): + backend = "urpmi" def install(self, pkgs, from_local=False): - check_target_env_call(["equo", "i"] + pkgs) + check_target_env_call(["urpmi", "--download-all", "--no-suggests", + "--no-verify-rpm", "--fastunsafe", + "--ignoresize", "--nolock", + "--auto"] + pkgs) def remove(self, pkgs): - check_target_env_call(["equo", "rm"] + pkgs) + check_target_env_call(["urpme", "--auto"] + pkgs) def update_db(self): - check_target_env_call(["equo", "update"]) + check_target_env_call(["urpmi.update", "-a"]) def update_system(self): # Doesn't need to update the system explicitly pass -class PMDummy(PackageManager): - backend = "dummy" +class PMXbps(PackageManager): + backend = "xbps" def install(self, pkgs, from_local=False): - from time import sleep - libcalamares.utils.debug("Dummy backend: Installing " + str(pkgs)) - sleep(3) + check_target_env_call(["xbps-install", "-Sy"] + pkgs) def remove(self, pkgs): - from time import sleep - libcalamares.utils.debug("Dummy backend: Removing " + str(pkgs)) - sleep(3) + check_target_env_call(["xbps-remove", "-Ry", "--noconfirm"] + pkgs) def update_db(self): - libcalamares.utils.debug("Dummy backend: Updating DB") + check_target_env_call(["xbps-install", "-S"]) def update_system(self): - libcalamares.utils.debug("Dummy backend: Updating System") - - def run(self, script): - libcalamares.utils.debug("Dummy backend: Running script '" + str(script) + "'") + check_target_env_call(["xbps", "-Suy"]) -class PMPisi(PackageManager): - backend = "pisi" +class PMYum(PackageManager): + backend = "yum" def install(self, pkgs, from_local=False): - check_target_env_call(["pisi", "install" "-y"] + pkgs) + check_target_env_call(["yum", "-y", "install"] + pkgs) def remove(self, pkgs): - check_target_env_call(["pisi", "remove", "-y"] + pkgs) + check_target_env_call(["yum", "--disablerepo=*", "-C", "-y", + "remove"] + pkgs) def update_db(self): - check_target_env_call(["pisi", "update-repo"]) + # Doesn't need updates + pass def update_system(self): - # Doesn't need to update the system explicitly - pass + check_target_env_call(["yum", "-y", "upgrade"]) -class PMApk(PackageManager): - backend = "apk" +class PMZypp(PackageManager): + backend = "zypp" def install(self, pkgs, from_local=False): - for pkg in pkgs: - check_target_env_call(["apk", "add", pkg]) + check_target_env_call(["zypper", "--non-interactive", + "--quiet-install", "install", + "--auto-agree-with-licenses", + "install"] + pkgs) def remove(self, pkgs): - for pkg in pkgs: - check_target_env_call(["apk", "del", pkg]) + check_target_env_call(["zypper", "--non-interactive", + "remove"] + pkgs) def update_db(self): - check_target_env_call(["apk", "update"]) + check_target_env_call(["zypper", "--non-interactive", "update"]) def update_system(self): - check_target_env_call(["apk", "upgrade", "--available"]) + # Doesn't need to update the system explicitly + pass # Collect all the subclasses of PackageManager defined above, From 559bb6f27a63d39c4c79423f43e39e6793f0e224 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Thu, 20 Aug 2020 17:24:23 +0200 Subject: [PATCH 093/157] Changes: pre-release housekeeping --- CHANGES | 2 +- CMakeLists.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGES b/CHANGES index 4b7fe62ddb..10ada97407 100644 --- a/CHANGES +++ b/CHANGES @@ -3,7 +3,7 @@ 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.29 (unreleased) # +# 3.2.29 (2020-08-20) # This release contains contributions from (alphabetically by first name): - Asif Mahmud Shimon (new contributor! hi!) diff --git a/CMakeLists.txt b/CMakeLists.txt index f425a6f387..5c8904be51 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -49,7 +49,7 @@ project( CALAMARES VERSION 3.2.29 LANGUAGES C CXX ) -set( CALAMARES_VERSION_RC 1 ) # Set to 0 during release cycle, 1 during development +set( CALAMARES_VERSION_RC 0 ) # Set to 0 during release cycle, 1 during development ### OPTIONS # From 3ae4ccf402cb7ed5a583ce501261479fa52c27e5 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Thu, 20 Aug 2020 18:03:16 +0200 Subject: [PATCH 094/157] Changes: post-release housekeeping --- CHANGES | 12 ++++++++++++ CMakeLists.txt | 4 ++-- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/CHANGES b/CHANGES index 10ada97407..b4e4fd5c0d 100644 --- a/CHANGES +++ b/CHANGES @@ -3,6 +3,18 @@ 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.30 (unreleased) # + +This release contains contributions from (alphabetically by first name): + - No external contributors yet + +## Core ## + - No core changes yet + +## Modules ## + - No module changes yet + + # 3.2.29 (2020-08-20) # This release contains contributions from (alphabetically by first name): diff --git a/CMakeLists.txt b/CMakeLists.txt index 5c8904be51..16ea24fc7a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -46,10 +46,10 @@ # TODO:3.3: Require CMake 3.12 cmake_minimum_required( VERSION 3.3 FATAL_ERROR ) project( CALAMARES - VERSION 3.2.29 + VERSION 3.2.30 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 # From 2b86d2481c8f17c4b5ef8dffd240868cb80ae405 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Thu, 20 Aug 2020 22:28:52 +0200 Subject: [PATCH 095/157] [libcalamares] finish() is a private implementation detail for the job queue --- src/libcalamares/JobQueue.h | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/libcalamares/JobQueue.h b/src/libcalamares/JobQueue.h index 31b5407ef5..278d50d44b 100644 --- a/src/libcalamares/JobQueue.h +++ b/src/libcalamares/JobQueue.h @@ -50,20 +50,25 @@ class DLLEXPORT JobQueue : public QObject * of the module. */ void enqueue( int moduleWeight, const JobList& jobs ); + /** @brief Starts all the jobs that are enqueued. + * + * After this, isRunning() returns @c true until + * finished() is emitted. + */ void start(); bool isRunning() const { return !m_finished; } -public slots: - void finish(); - signals: void queueChanged( const JobList& jobs ); + void progress( qreal percent, const QString& prettyName ); void finished(); void failed( const QString& message, const QString& details ); private: + void finish(); + static JobQueue* s_instance; JobThread* m_thread; From 42417ed3b2c633c4f1dc514c4e5c77f8f74c07ef Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Thu, 20 Aug 2020 22:30:12 +0200 Subject: [PATCH 096/157] [libcalamares] Rip out the broken jobqueue information signals (break build) --- src/libcalamares/JobQueue.cpp | 1 - src/libcalamares/JobQueue.h | 2 -- 2 files changed, 3 deletions(-) diff --git a/src/libcalamares/JobQueue.cpp b/src/libcalamares/JobQueue.cpp index b39b437596..64c73434e8 100644 --- a/src/libcalamares/JobQueue.cpp +++ b/src/libcalamares/JobQueue.cpp @@ -242,7 +242,6 @@ JobQueue::enqueue( int moduleWeight, const JobList& jobs ) { Q_ASSERT( !m_thread->isRunning() ); m_thread->enqueue( moduleWeight, jobs ); - emit queueChanged( jobs ); // FIXME: bogus } void diff --git a/src/libcalamares/JobQueue.h b/src/libcalamares/JobQueue.h index 278d50d44b..23977b78fe 100644 --- a/src/libcalamares/JobQueue.h +++ b/src/libcalamares/JobQueue.h @@ -60,8 +60,6 @@ class DLLEXPORT JobQueue : public QObject bool isRunning() const { return !m_finished; } signals: - void queueChanged( const JobList& jobs ); - void progress( qreal percent, const QString& prettyName ); void finished(); void failed( const QString& message, const QString& details ); From 4a45eb847d420be9cfd88453a904cf333ee36471 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Tue, 25 Aug 2020 23:43:15 +0200 Subject: [PATCH 097/157] CI: fix edge cases for calamaresstyle - no format-10 - skip empty directories (otherwise astyle gets no file-paramaters and then hangs on stdin) --- ci/calamaresstyle | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/ci/calamaresstyle b/ci/calamaresstyle index 44f9fe91f1..19f4a152a6 100755 --- a/ci/calamaresstyle +++ b/ci/calamaresstyle @@ -1,7 +1,12 @@ #!/bin/sh # # Calls astyle with settings matching Calamares coding style -# Requires astyle >= 2.04 and clang-format-7 +# Requires astyle >= 2.04 and clang-format-7 -8 or -9 +# +# Clang-format-10 is **not** supported, since it changes a default +# that re-introduces a space into empty function bodies; this +# can be turned off with a style setting, but that breaks +# older format versions which don't recognize the setting. # # You can pass in directory names, in which case the files # in that directory (NOT below it) are processed. @@ -38,8 +43,10 @@ done style_some() { - $AS --options=$(dirname $0)/astylerc --quiet "$@" - $CF -i -style=file "$@" + if test -n "$*" ; then + $AS --options=$(dirname $0)/astylerc --quiet "$@" + $CF -i -style=file "$@" + fi } if test "x$any_dirs" = "xyes" ; then From 2609e0589808154a93a5eeb09fc0b8e297170423 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Fri, 21 Aug 2020 22:29:03 +0200 Subject: [PATCH 098/157] CMake: remove unused module --- CMakeModules/IncludeKPMCore.cmake | 17 ----------------- 1 file changed, 17 deletions(-) delete mode 100644 CMakeModules/IncludeKPMCore.cmake diff --git a/CMakeModules/IncludeKPMCore.cmake b/CMakeModules/IncludeKPMCore.cmake deleted file mode 100644 index 4b4b8b3f29..0000000000 --- a/CMakeModules/IncludeKPMCore.cmake +++ /dev/null @@ -1,17 +0,0 @@ -# Shared CMake core for finding KPMCore -# -# This is wrapped into a CMake include file because there's a bunch of -# pre-requisites that need searching for before looking for KPMCore. -# If you just do find_package( KPMCore ) without finding the things -# it links against first, you get CMake errors. -# -# -find_package(ECM 5.10.0 REQUIRED NO_MODULE) -set(CMAKE_MODULE_PATH ${ECM_MODULE_PATH} ${CMAKE_MODULE_PATH}) - -include(KDEInstallDirs) -include(GenerateExportHeader) -find_package( KF5 REQUIRED CoreAddons ) -find_package( KF5 REQUIRED Config I18n Service WidgetsAddons ) - -find_package( KPMcore 3.2 REQUIRED ) From 31aa8be620e1b2df7add869bbb8c5feeb52623b8 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Fri, 21 Aug 2020 19:36:02 +0200 Subject: [PATCH 099/157] [locale] Remove unused original images - These haven't been used in the module, and just take up space and now add licensing annoyance as well --- src/modules/locale/images/orig/bg.png | Bin 177324 -> 0 bytes .../locale/images/orig/timezone_-1.0.png | Bin 8012 -> 0 bytes .../locale/images/orig/timezone_-10.0.png | Bin 7783 -> 0 bytes .../locale/images/orig/timezone_-11.0.png | Bin 7406 -> 0 bytes .../locale/images/orig/timezone_-2.0.png | Bin 4333 -> 0 bytes .../locale/images/orig/timezone_-3.0.png | Bin 13615 -> 0 bytes .../locale/images/orig/timezone_-3.5.png | Bin 740 -> 0 bytes .../locale/images/orig/timezone_-4.0.png | Bin 15084 -> 0 bytes .../locale/images/orig/timezone_-4.5.png | Bin 1900 -> 0 bytes .../locale/images/orig/timezone_-5.0.png | Bin 19166 -> 0 bytes .../locale/images/orig/timezone_-5.5.png | Bin 437 -> 0 bytes .../locale/images/orig/timezone_-6.0.png | Bin 13764 -> 0 bytes .../locale/images/orig/timezone_-7.0.png | Bin 11977 -> 0 bytes .../locale/images/orig/timezone_-8.0.png | Bin 6801 -> 0 bytes .../locale/images/orig/timezone_-9.0.png | Bin 7908 -> 0 bytes .../locale/images/orig/timezone_-9.5.png | Bin 437 -> 0 bytes .../locale/images/orig/timezone_0.0.png | Bin 11074 -> 0 bytes .../locale/images/orig/timezone_1.0.png | Bin 15458 -> 0 bytes .../locale/images/orig/timezone_10.0.png | Bin 12829 -> 0 bytes .../locale/images/orig/timezone_10.5.png | Bin 421 -> 0 bytes .../locale/images/orig/timezone_11.0.png | Bin 12113 -> 0 bytes .../locale/images/orig/timezone_11.5.png | Bin 446 -> 0 bytes .../locale/images/orig/timezone_12.0.png | Bin 7130 -> 0 bytes .../locale/images/orig/timezone_12.75.png | Bin 409 -> 0 bytes .../locale/images/orig/timezone_13.0.png | Bin 621 -> 0 bytes .../locale/images/orig/timezone_2.0.png | Bin 12854 -> 0 bytes .../locale/images/orig/timezone_3.0.png | Bin 17475 -> 0 bytes .../locale/images/orig/timezone_3.5.png | Bin 2142 -> 0 bytes .../locale/images/orig/timezone_4.0.png | Bin 4954 -> 0 bytes .../locale/images/orig/timezone_4.5.png | Bin 1773 -> 0 bytes .../locale/images/orig/timezone_5.0.png | Bin 14539 -> 0 bytes .../locale/images/orig/timezone_5.5.png | Bin 6099 -> 0 bytes .../locale/images/orig/timezone_5.75.png | Bin 2885 -> 0 bytes .../locale/images/orig/timezone_6.0.png | Bin 8441 -> 0 bytes .../locale/images/orig/timezone_6.5.png | Bin 1609 -> 0 bytes .../locale/images/orig/timezone_7.0.png | Bin 14412 -> 0 bytes .../locale/images/orig/timezone_8.0.png | Bin 16725 -> 0 bytes .../locale/images/orig/timezone_9.0.png | Bin 12608 -> 0 bytes .../locale/images/orig/timezone_9.5.png | Bin 1959 -> 0 bytes 39 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 src/modules/locale/images/orig/bg.png delete mode 100644 src/modules/locale/images/orig/timezone_-1.0.png delete mode 100644 src/modules/locale/images/orig/timezone_-10.0.png delete mode 100644 src/modules/locale/images/orig/timezone_-11.0.png delete mode 100644 src/modules/locale/images/orig/timezone_-2.0.png delete mode 100644 src/modules/locale/images/orig/timezone_-3.0.png delete mode 100644 src/modules/locale/images/orig/timezone_-3.5.png delete mode 100644 src/modules/locale/images/orig/timezone_-4.0.png delete mode 100644 src/modules/locale/images/orig/timezone_-4.5.png delete mode 100644 src/modules/locale/images/orig/timezone_-5.0.png delete mode 100644 src/modules/locale/images/orig/timezone_-5.5.png delete mode 100644 src/modules/locale/images/orig/timezone_-6.0.png delete mode 100644 src/modules/locale/images/orig/timezone_-7.0.png delete mode 100644 src/modules/locale/images/orig/timezone_-8.0.png delete mode 100644 src/modules/locale/images/orig/timezone_-9.0.png delete mode 100644 src/modules/locale/images/orig/timezone_-9.5.png delete mode 100644 src/modules/locale/images/orig/timezone_0.0.png delete mode 100644 src/modules/locale/images/orig/timezone_1.0.png delete mode 100644 src/modules/locale/images/orig/timezone_10.0.png delete mode 100644 src/modules/locale/images/orig/timezone_10.5.png delete mode 100644 src/modules/locale/images/orig/timezone_11.0.png delete mode 100644 src/modules/locale/images/orig/timezone_11.5.png delete mode 100644 src/modules/locale/images/orig/timezone_12.0.png delete mode 100644 src/modules/locale/images/orig/timezone_12.75.png delete mode 100644 src/modules/locale/images/orig/timezone_13.0.png delete mode 100644 src/modules/locale/images/orig/timezone_2.0.png delete mode 100644 src/modules/locale/images/orig/timezone_3.0.png delete mode 100644 src/modules/locale/images/orig/timezone_3.5.png delete mode 100644 src/modules/locale/images/orig/timezone_4.0.png delete mode 100644 src/modules/locale/images/orig/timezone_4.5.png delete mode 100644 src/modules/locale/images/orig/timezone_5.0.png delete mode 100644 src/modules/locale/images/orig/timezone_5.5.png delete mode 100644 src/modules/locale/images/orig/timezone_5.75.png delete mode 100644 src/modules/locale/images/orig/timezone_6.0.png delete mode 100644 src/modules/locale/images/orig/timezone_6.5.png delete mode 100644 src/modules/locale/images/orig/timezone_7.0.png delete mode 100644 src/modules/locale/images/orig/timezone_8.0.png delete mode 100644 src/modules/locale/images/orig/timezone_9.0.png delete mode 100644 src/modules/locale/images/orig/timezone_9.5.png diff --git a/src/modules/locale/images/orig/bg.png b/src/modules/locale/images/orig/bg.png deleted file mode 100644 index d7479bf9692fd966253ec90c50d46e1e8df223cf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 177324 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 z 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

$XaZHn=k2VHAV`$ux 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

YKqG0mA|ndXZW zaHlu<8RQ%l8oo0A-9AbBwW5RLGTZzoYo;WN+_AyAv`;VDrtA$$Cjp zzz8{UbDeoml8%h|GfUbjP?9xez|&OvU=iZUEG(*h!?9p?<7txDuw3lTA)l2|Rj16R zK}F1|T*|N}SYRGlyB}W_V681JT>)Sz*liSEAp8{?K^WGP{r!MHd~$HeKI2HZwl;Q) z>W1%H`}lU}bnb*joM9GeW(HCuYwHL6SL?t$ra|YH8D4)wfF(oMR-5&;>NvkFfTg~g zIbA4Vmh5CKkd^{lb^*2sVc^ch4ho?_kKY@n-Xdits_J}(Bc$%`I-%cZKg)j^3{x$*tqR3@#aC^m^CS(&{ed5f9h40ba<`Gb@G*_!C7%RYR6m zy^v7hT7|CUh6?otJ^MK+izTH$7L)n+g^sW8R?t=bc0o&yt(#j+boUzMc2hDTek3>A z(BTGSF~jo|{jYa#v7T>qg^KFk4V?jS68o12V{P*zJkUf=(G67XOnO`nRR5|A5Kicm z;kCiZ)$&#^jiO6Llf9b-SPFN_qRU1<{+-Xxo^nNsm5hu7Za0*X3Rjp9hIbmi`E^E~ zl%Zl`u$m2C(a_VhP8Bplhl=m~A%09e&0iLqCGS@Z3YI&{wl%nB8hU1cf&3(Jc54e5ef=(zz-8>U7&+F;mZnzMFK^#|>|ovq?U!pP%=98?OXW4HK#2la zel{FK3&XzEaxkS@W_UHb?WZ1KU0irIMVvdrFO9*9pDrXqG8+TZDmB2C@>z)DEh+Iv zkPaN-H!=5iKcROIgc^zdwQ;hh!v|}%w6eLjzE{!imnk-aTHX6qW8v9#gckFQ8)Z%7 z@IwU+QbHa8U@=al%2{Wp^wg71l&Da2W7LbQS@Wc*H9RR$dKn(1d9Al{TZsF%L9mx< zP)$hd3YhO(12kiOz%lBclVy*;%tIVDIwtrC19DF1f&0Pr)qFDrbP(S^1-) zc^~vF;CaDdv$RZtLyB8Wj}{ufPZq#ZnN!HKj-k1wmE9_5FsqhgYT1e=dJOq>hKrcZ zF>{eqU4-KoT~o){xBy^rweDMc;Phy5)9+o*Z`4fK6%x9fKqrJrKVwBNe|B)~Fs?xZd9Y+YxNSTC+p z17Y+OR~H>d>Kcy$>|tqf?GNAN{`%8f^IsJdd-wYF-p(HK#N6uPm^VkTOnZnG8mu8E zNx&1tl~D^8?Qek|YsyNr8%ivz5i?u@UI}%6Qp{kfjX17dUl_oOpDt7gMuRV<0vW{I zz5QG}9xoZ3{HTJz%81qmYRD|Feu6X^#E)Ze%Gv_z63*a;$x)DWo1;J6IW%2VKZZe) z^6g{~AT4r{j2x|mO_Q-lBd8*p>LS{d(SH5_0l8uV|E{2&l{8P#aUEASt4or=B=H{0+TYEyqjidh?8A6 zo>k-K)+lfDkNQ^aJ+lyCI>jS5DxDEqhq0ZM6rn|ZdcF7X;DiUEYG=?BUTbhgxE2Zp zal!$Y2*}W;n?E|LMP>}gY#lxTSQb%oU)??Z%j=g%2PcJ;P6&*3MhnbE+EFG(yy zb|4~j`YNr#`aJrv**?d^;OgPo^-tahOKh+iR^O&ScKBKGrW;B{7~o^7!6{Je}xX; z3v+X1_ZVq3Wg-WCEz=F21ddPs?a%jV3oYSVwC+`G@K>hnQ_=nD$CJb1QBQu&fNnRc zF<9YTk*s0)G(u>oi5#NFh&3j7%Z`t%YuMeR`f&w zR(u>8ja4>lu?!vnek@iWx~OH4CG{QA1!Jy ze7v~&nsrDtH!4%2)acx^4P{bsQr4eQK3L!BgKR5^HZqr00&Gl?88i2HSIwSv1A11F z*eUWm2d67KBzte)DuxIc8LQlIHaA;O`sLqELW*CP+;j*R(nYdoL8s9vwys8`?jEi3bnM!vnoEY}6xa zvfm&B4_Fyq$!Z86tkeOlYe(uCtO&`SjPiaYj}-dZE0rU4edL$EIT}-ke=MTGKYRySdfm3T4$8*F{=$>CiCBW&y}z!<8RVl>rv@ z7I|#cc10R`=PV{T!s;IbSjuW3RNEa;@^A+a*4mRRZ^QvJPVVf6lD_>Vcgv z`%PYJdA)1WH|6Z}mfMZC2Y0Of_bOpS-P8KF>@g&3=2=CS~*hmYY*+1f)*y)$KP0m;`XfOR#iBn%|j zrz9$Ql^dEvvARf;aT?8P4Ayx0C;FhJ0oHE;u*@V@9VFJ^*SW1dLxC4ho+j8lN4^J3 zDwDQ7br@@HWtHVNiNbbD^w-xmzsatp7MjTm5}uJCy@{bPSL6yHuPLMDp=4v8Oo{b1!T+m z2JyHbV6r8}Q|Vwl=rca?-tMxcf2M6PL7fNArS27^*VbeDjR$AD>|B-L#54=njRV$q=uQ-$Zs|dZ?A9s=#fZgAMSI62+~X9<6(6B zPXnw}0xUg)Bm2@9#rpDQSbDz6Yo3{1xttPN04z9w-vnSiTv|#Jg9T0UYx8h~$PLL`_gr$2*EGN~0jvwVNHG|Fg+ zvB>gpX7Dde1FZNA7K~0=U3XcX>n~aMK+KQ(U_Bxe|b@UN;1kl2HsH z?5so?pvP#pT+<)$M~)8;j}MMd4v**_$dn6rZj^Bd2A!Z^)Bg5Og}sM6NRn8})`8(9 zca@EXtfG5udF9=!S3f>}+&4CpX&W;13_@9@YSb-KP9XjN6|uhMK^Fyy~sT& zyMn{$8JPSg$NqhOE3Sj0p@c^<5c&j^X0Q@zm7|>8AxG&1_me>FSFmZ=rme}w24X2* z5&T_yq%mTj+{&tYw6+=F`wa$b(i6zG^^mDyCDt7}RM6Q|HMcGjYaTM1OxvI@y!v17 z-UK6SB~3_PymAz!0agMLDHhLroNy>)Zj)33ti-ik7uEKL*jAmA84uEk%P`u-L8?jB z^fAp2bh?IqekrSBsfj+1>$mwQtJ3q0I(QTMm9v405x=a z5sbfneiexxFHxk9qIB})#0OVUor~DylsmDEVk1C%N+WGC+Dja z1FXagEzPd$7R^TEf7A=vl>?6MFjxWGuFi=Mu=Ks1^9hsor^wLr?ck8}v>ag+G}Mft>#yvLjQG}?`WJv%@~`F; zp#)g{{BTJp_xPhk#`&{g8bHB9A;!|2HasZfvTJCvI6>tk*Fa@|RnpKL9~2vkZXRiX zl`?>3_A64&b0`(LTk6D*?&pN1?l1}ftVGPHlI~Uow~<8V?8)g_VYTaaaaX3*b*How zb*h}9%)<81A7EKx`U7qdE_$5VEr|fjTtCP}PocnMaFOTrs{tbb7VW)xHQ}UdL34i~ z^5;8cB!%C6{B3kITwYwt1z_0*Ss7|;*ZZ?fBtD=BJj5dwf}yrnDN8emQQ-6#s?|ktUJ4+ugf(?H3t91Ew-_~ zTU-MLD$}VdiD@7NHd=$ZHN%`VdT-Zv`kQ*EHQz4{U`Z6IdJ*c8@a$>spKy*yytpqC zetPAOkaJ|7;)@DL05Y5!(e0hXS5Kezy5~=i&YZ(@dG#JaXuVH}G8$BQr%I0MwxzHp zvW_DSuu=xFEFUAWYDT{;>U8u@J`=Kl_$!(GE3%j^(bPS~^p)yTmqdV7Q02-f?V*-7 zqs+w>;c+64sPXe>uw<(oF1r5sq?gzvoxw88+cU~~*VnhCs_)7GE9uZ2JCdXQ!_%YV zIB!D&PkC%%O%E7R0W8&;SKc*J($0-TCX_b17W?ShqaDoTbOLvPM8Ko{NwTo?zU*5cm-}(vo zb$YOe1paT?jbCL}WlMnGBz5ajfED%crNp(pbL7`(g9PT{C!y)pasPt7D}d!yz8G~S zaXU}wzq}N{A`{Eplp<0ma+ zglVurC_s8$z+lNQ$-F5oO3%e5(UnRbE2p(E+X@L0I(?PfFuC$@@9(c(%q{J_d-=jQ z^>93}`uyp$z1^dMiFtCsqy81jN~1ouv816TRskV*uJ^VSeU2iqrfj4ctkg4D(ZMR8 z1ERFEn+^=$6}EQ|1)o2D8fPMqzb9*hX%LOx-l})ra40t;s_SJzS+YL&@yS_Md3UC@ z??FZXU26~aHi}(WsPu~fSn7Zkz*6#9`8=o3Zb=7NstX}E4*5a4d0Z!b%n0NvCwK6u z4I;k$>!%k#TI+g1PBKNPydMcAY3EP50$t@)4UBr`kj@BI4e<*yT# z`a#_f#ZD+s$S?r9B(XG1KS2!{H&>;-hhY|ba*(|Wo|B>O8j9rM+8}Fm;u>V$1i&H` zdj#BR?whsu&M0Y+J_}t+q#eoTiI9TtBKqTiIG0yy>0=F}QYmKlE&nYz-5+4Ov zW|Qh;a-E&`}pW=%)5Zj;OzLUyk-2! z*%NPYCBr&^OO|Magr}L&KC>w1w?Tk0S;Zxc)Ajg#B64`u{yhz_QVp<_f1T<8T{-ww zR%7pQ5d0J$Inn%NWohMDGlI7fwcI9#uuK6$vfxV66dXyp?|ZVaKf&!3HsP2MeP&9HPCJ#a+9 z4d+}MS;_pMe0phWAN=P}ug{HM#D#9(Jnn{!Pbnld^`A%uz)~2aygjhLchon&LK3X1 zBOnn)0szYlt-=>^S5gR01YoC7(CPq7G$jO#x{J7l?Gw;})ZB0y1^h?=U?tLOitV@n z3v?BZENlU~2ffSas5B8(NJI=L8pg8TTpmno-1HdFDC_GUiZph59eqIvt+|B_9^=UV zqLnVPyYaAJUE8a41Od_H4M+VCcXp5LeUTy|($dRBIT*T{mun6JX@He74c3QBtRORm zY@YMLHt=$F^T9(6_>U5_;C3H z`j90w@#@WY@H#v%uC8v$H10K1gegW>d@iDv z+UA~&(ry~vu)Ik}Kt)_(P|2f6cJ)w6!$@n7?~M?_Kq07qrvl#}T67HtitS@Lb!i6c z_rqZ6OQ+Ntg02`0w=KOh^J{c;Rdyt53`ZpmwA3VhEPnhXL;uU$H<6jStg?1SU{=*& zu3#>t4?7#OJ3^Mt74%QzCvt9w5Feq)YC-KVJ`RPA9@VNmPLYF_|dc3=LT-!B; zrcDB@PcvA0T2Mxu0s;Mqb$}&H|6K0HM;iyN{j(NfVy3Iq6;$N+s<#o>n**(AH!5+$ zk(J68_kaHUdimjYal`1z(aGZS_Wa@&8;w0v;76J?%`9&H`qOLY@Is+xX2k9TX^U7pj!<5y3$+=_UGi^hDV$uaOlmUVS` z1>QRqnZf;inx#OkC3{VUj(gJBIe}s(TLP@s-vhw9ZO+mE&0$YwiG#Zawm^ztq>5Q&(kE3y} z2;K}jH)j~@9HW29YD6PnkWLYP(E!Vw8H~Ao7K$7(PHC8Y-nDdk1M_ke@oFAdjARl5 ziH}BR)TbxM0pCM`aUCSoR0j&bi2(dEy1@Z?5l_H5z@O&pC{o z0}Lr(uq4}5&=}|%ov(AvSX*eZ983gYnbRylg($9V#aJ#_;Rx4vPg|M;Z+phk4jIz`D+LplPGX(IShA@2p0)4moEBh~y<=p1 zbC1F+mLDZy!LQ}%$?0rlZf|QFZDwkWuQ-6DFSke~7|C}^9HM>iFhwLRgkLzo;5C4_fkU5KDF4(>psyGYeZqs$fAX(_6#hJ^u1`qje=C z62K%$tOr#?cPxFy^`m3H`GV>JvV^3Knz|?JJG_9(#g#4EFc}@K8z)Mdyo_d1%sfGB z#);4)j6IYPo)5Ywyy>k%n3ZO*QaNFnD`JXcssb)CBMt0JtCPRwH2?ee6}>}&$ERnk zE6QaQCn`klP~SIAFd$r@T#=&1S2wV8R@R-Z{XaiwhExY&MHj-~L5h$s(l%XcB!7dv z@|zoFu#^LqY;gH~K|5v#42)~imZzc(Gdz~;Y(prXAc;9a#Q3L2M>8`ErIqbpKWMmX z?adY{miP2kvrK)u^J_taD(*qt-OPK;b!i{0FO|VEqbu7r%f?V@&%C-BRg zHy1v8kR`;Ix72P3YI!6ux1*3QmDJW*#g8|^V4V}Bqme3s&1v*lg!fH?DMCU|$bv)o z_saIk8i%*E(M_tsP(wD-&&DT>3m}PMYIG+~iOD3`fYyQkgXm$m@ckL3w0 z!;=qt7Hlo!ZvT=myt1`<;192i2bR$vU;z@Ec_j2$0n&w(N1hy>@tA0BBaeWYmY>h% z6D4A^8i$kySSg*b%v}hi-cEWaDk=*%4IanoA(K(me6)WAcf|s8c6dnh-Jcb@x?zBY z=j08s7cf}MD;s~yYe!2#c@F1FpsOz)VDZSykEX6_sQ_4@6I?neoaPK)hgFhoo+)eC zT3b6kJfye*utoELS4mY|VcEcAVn%-Le|&HICclk`3XWeS2R%~WP9UL`%v{${_#bcL zr9SzqFSu~e+Kt5nlcX#GV=*&3xyJ!p{5}n^J_jdvU4Elcf(TDHrqGzCllx#X<7Aq{jK<=}8;|6goiLySx;dFpOhGh*JDSgrxJW z!a6r=)1YeRz$YDIJ5hke|EdEv^z1$3OS4Pc_1$6Q;OPAcX>zVAd=1y9j`sjdu_KlJ<@L+G-D4^QqiVZaH)S$ozNMmuF=X#~HN*2uTdQk3or6=fSXx-xENXDi zE^Hp|9oKh-u+GY=cDE1CwDw0RGi>Xh=^S0Ca)wD^fH8$UZCcNarU6!}7%UxQ>8`{9 zp}O;Mi$X}ShfLA6x2kb~Ub)a$v@XF;UEa^B0a!PIA47zxC+iKS2xWK6ta2AC%A3o3xGR2?f(9eb&Wwfu+uH}*+sCk3j~-EwMTh33 zpex1|mPJ+e-v9mA;%^Ha_pH6lDjYm3s5A&w#e>3o0!8Vtvp;Y#GpEY9-n{k)7w%ho zl;xvrm7|(Ho0ss9dG4eERw@CO`J(7+e9Vy{Y8eQ9GU}P3r4l2YkeB}E0G50bK=gdN zzc&+^`|<1~PD3-{R{Ex+&!1V|XK<*3#9|QY_4{H-Pl~eNP_h6PyFG_Wbu%j9M5AlU zrd1IV2>~ovo+iKDHFdCm{P)){Cc~?i7Qc}bl+=_&ESlCx0W26C$MF1%r_aK3oB5*o zI$1Rdu!xTWEY%YY0+2h(D)19-3*M=9x>5{Ht|Iv2^8`f(@DhKG9f7uv>Z3<%2CgA9 zrEur#HT6ZPw_IM`^+(pR{eX*-dMq&3{mS9&s!?VoBrNdffUUB|@!7@AAEoC^u@@?fIfd~?x{w0HJB7{RP~>QDH)TDZ`5-Lgk9K!iSz$GjOJyxCt^Xmj{y`;t zgB!|$afLv^46wdfA1s~2Hm%<`BXVc7{7};64=r5H#+^k4riuhKuUPg2t>CVJRy!LT zV0tO+y?)yqmMBCs-2=Y=_nq}tP7}kM>jIT7byuoIKcV-ou5KO0f+21n!&iO7Ve&Xk ziR?=3M*^%tl_E5+;(F-UC=IYu0I=d-kBC|203`yNPurQAIcl(!Ae9qgZYrXKO;;uZ<8eER)$A%n%A8#%z4K083p;E}yK1xv&w|%`jMeifZ%BbJrkBk@ZL0 zSHM`TAF`l<4HZBu^e9Q`mLn}0>1*EAKY1&+`P+iF9||2fGUU~ZrARy+E7{720E;i> zFbW%=fAq*nIM%hhe<*P=AF?-gCG;*4oxw8Ied}=^W2FIB3K%R64d}Q^J!ks()=}5~ z@`2pSftk5AJgDRZm>Pg}sQ~%y@9r1Z4csp7&Z-y^SM39gWwvv=Y^xl7$uMJ6HuO-V znp>dWC4Nj8V5u^@?Ar11z)~o(Zf)a7pLzs}-a#-}vdN8-Kfw*Lc*VR6cqKuh1FQ=e zEK?#Nj2#PizJS=FLLnvNBPGB>|25)Y`{m8c$*Fav%~B^fvPC`9@P*TiU@16bahA6)rP(t#2%nXLUW6v2Q3H!$cyYU=tEj5mNT3jxUsTl6rEer< zAkl4eduz9}uIEqp8u07F(Gfv9&v=r!l2fRzS`z?kQZiUSlsF@^tDwdUcg{@_i7ew$ z1VqS>$zPatx%>EyVzAWC_2MKZa7Kk*>6vD*QUI{b&`RMdX)0S}7tpHCjX4q34?h%l zIr;)GpFVl3(%+vMz*64sUIh3KPeI-Aeev{Y;<2WboZzwymLz3Wdj` z$rK^S3`i(z4Q_28(iNw&BUl`RP4bc{fW<#50ai4*FSJkWgfhdtgaDQfA&s*W%rPXH zV-o9?#)54atXkK!cj}S7XI9#CDS&0B?+9J|ujKPYY_~x@l&`U+)$g5J>z`Q4G0+w4 z)EIhpMkFB`r^mk5ZE&H0x$wK6!%OXi^;HsROEQW8Un8z>xjR`GR_J&6fzU;yWX& zxT#h-u`D5s{Wp1Sp((@VoNISgfR+4FG&{Fqt?&KQ{f5l)9v)CRP70YB;flD@aIv}%ll%_ zG{8y;zzXZvLgA`HaFwAzWKf@0W8(9)yP)Ae0+LJ zkHVS`FJA#qbA_?g2q*Z;mjzht#4Kr#X{`kOFcsVBsWYBo5)`@XdKEHV&3!ZWo(MXG zbNNA)A{5|H<_7}>2;qf>QofD%qp~fIt+w$*?mBFg&7w&zg0a}J#86QbV>KCFZi-`e zt|kWSVjfS1o!$!op*a@{+ing-I6aHw;7ErjquFBOMpe(G{BNsLP=urHL)AbDR;hj`UDc|GXYrC z>)gt&`_sMpOpC!Yp(2Hsl1))1(9tJG-JYKG5byuK(8-wj`PGXHEr<^H4{O^D{TcO2 zOm51zxx7OMScJ48G@gMujXY%AduC3K&ZZZ(i<$yyfOVq)i-Q+m#OS7?`7Z?Dd&wHJ zoWWORmJjAs4cS^I#(j(4;PTAeqn+&olFKUV{n-L6WeUxh!%2HFjU<+UE4iV*l2u&LO=RL3mdq`Bx=(j{$1G}6rc$fwkd2A03HM3G)BAd zfgcz=(u}mWd%AaG3DYcTj3AWg3SdnWpH2~8gt121uxhd@MQG_A1~qgQ)L|kCNv)nNVNoXZ+>aJv`I8c zts@Y;j~g(H_ZX+l4-P2RdcdUtR*EOAI8LNo7r{(;IpB=4o*Zk(i?b8SV5L5`uU)_> z`&axAd*{K`MzU?;zkJ`Cxs#s9HpwO@fe1D^gCv5$WRnphV~j=4HqJH<6YpK`eO)D$ z%W5oyBs8+=wa(INWLavdtE+bHv(G-ypPZ!GT5;qy8DmE(oynq0*$0 zSQQ3|^=n>>AhE=bKLG$1eJ3+ZoU&#R?jJ-#;+r<-#w@Dm=FIl=hW@4t`w1YL0{7

wXssz&t31J%RCai_w+<$}>lVPeOn{~CYcF2}ASGuu zxxE)nkcQJr`*JD=svP6xO(V@+Q{Dxi&$mrGI4&;54QwgZHZQ>emcAne5t6BI>Kv!+ zjPIz78-hl=j+w$2xhr%f{jM6iX6BbS+xnIa4+VjWNZysSdUUTS^&i7G8nvC7L#v;x z?wsu%duVSqXl8t{3_?!0GmOso_~P!76?iO(^MFR|k(ipo0$65o8K1}EmnnFxVvT~9 z5kObE`bvL|sft^}SbB<@N8O=SZojgsLH&lWRi)E2F}vP!ZvjPopbMkF$4*h>*n_oQ z&%7^R_>N-lzO=GEGQ9@mT3FeVUSUj3(%;LnX-J3(OCRWhJeO_eQm|nxYCD3#ihGI> z-4*48m`}<&nkfB6?>5}KmfH$@A>3j{q{$5cOBL!`04sb3OGhN~my{$HRS`wiZj5;n zgu!B^dGKK4`}78!KM}p=)iI>8^fOSkzTO0zd%*_STiU938ygrMU;+D#k2_c7ZpK*hEP0EpyZy%W zZ6c^NsHA5%r|lebAb#sF*}ijNep0t8_4k>thqW?-KV>N1l^>cW(2edH_6-n~MUA6> zzI(H=vG?@x(7(<)5{m70d;^i3PA?F=0t&Le4}ZqK?L$ zUgBI`UO|X(rbdd;$t{kFn23~VM5r3(M2W7}9&Ubrs}{|^l(**#h|eQAQ2AR~4Aunz zmX5_W5{u!TX79RL*fu&b|L42Yb35J2(em-_+e-piyeI1%6x5A^)-=&-5YriI9y5)L z?w?45zKbd$q_JRY_XPUCQ&YM#V5xOf=N!J4=Y$fI1`UcNu(xRd3(zL&knT^f?e88` zb$Hlb3LUDYE1Dg~cZ{9P!uz}_H%zAOtWLEVE4owvf zPid=ZV25t@tYa(%vor-1OOm61$-B69*Wuv~N-1vV95{gPK|*J%AI%f9dZ7YXl>n^p z7%Ua$Tqd(#rodQchZP+^NvvAkK6iBRgi|Du$uoMQP#u^;Jt=uCKg^O*AP*WpJ?0B} zT7%nra(sf57AZoi2)R)!9aF`PqX@RDoRd(O04ydQ<>wwcz*R^n0OPEVXGX4=Xe@vg zOMs;qEPGdm-MPK)qpVNAfms?~J%7IG^Wj=Vl^>mLm{Z8*?QU-FY;15Ky%nOVBE-@A z>G83ApD2=pFaG}cZpyPvnH%~WNneR2x#Rt#_veXM zP>oO`y0f{twzBg2(i}jZK7LZ((2F-Rm)-zRl}wn%MGxAqDgl;MxU&GC96e@8f2lvo z>Vx&n()JX)`;$RK(-#32(|t+HWOc_3+!Y@o6}v(#Vu{=@3t*}73BcllQrE%|EovCW zSE$83{a|$q&49Vv={Ezgqz>}utmb4y5e!kG5d?5B`<>~%$)6DbEQWEeU<7H@=$(JG zw!TNZKoZ}$gQ6z75QAklfY3$Zg_6WF6#7%rwE-(^k@}oy?peUVJiB@XcLI4&iJLAW zfOX~xfecu=d0+e4PQjmkjw+Y;#gpgrxP4ZSt1qCCnK(F`2GhQ+2D8i&sIe?*o|u~T zx%wB7x!~kpP&+caxZ&uX#}kX55+nziXn0Q(!ZSi0>wgL_*Ku>m5d-#OQnLV7tN@mt zB1}fSQr!0D=@Sr@4uG(y!W{BocNeQFvUmshLvC&14+$iCE@bIotOzDA3Efz3L03kb zlnbIO*;Ykgt+AJMy2mo@P6i&EIYnPF_BhD6YXPjtQ-lF4JBS}eV)b!%W9@Obq35G0 zz6%l9aF7C)14dl9%LoR;vvJQ7RFj{<@&l~T78tX_J-NvBTd3Nx=Y7L7KW8<`f(f~G z4gy#zuG-s|liGVD1S>J0L* z0aj=WQ;ozDMhwD7bPRySN8sMhPfhADqk5E+QF4C%Dcb;86OjWfeHe+ty*{%_Ne4!9 zBURZxTi#}TeS%XY-pQCTaoW-{0Q9fA#XO5AXi( zj}NqpODc3E+1i<5Wit~+l{4MoFJJ+zNEs|$y2OByN-XJa;7GHzZLXhFdCDa|+}$-9 zU&X$?_tw_lwLAx~$q%sZm;jb$ohlXX*Ya9l82Q1MXRdTPZzugIShmYuyn3B2xH|7qlEnWQClOSKH@?E%M7!0?YJtln^XXc&qWBn=G$`* zuVmGXN+(jqU}aWB1+dH*3*lZbCse|D2LidJPUsObsi)3^(4it}MBvx_(w1v*Ss6W? zm3BNkY=NnSlb5o0Sy~9va`rEkHjm#Za7e)&%#*oWB7sT0(Ot1#wHylST7^aR!&CI(3c7V^7zc5stFHi6Z$7tIKtXlUxr}#SUt4=7 zGJ_XQ1^)N<53_SC`FGm#%N$uHE!m}x47($_uoW4ZL{}n}BUF&h(_-XU04v%QA&=rt zlm_Vj9?5K?vdTJ8DY0Oj1F&{>B#f4Ec>wE|oR-Y+0G1?flWZOBJrlrm^GE|VZuqwI zE4q`5y3F}ORg|M_8dRN-7Cd9M%DHrarIwF$(O;F0BhH?wXU9)e)68!eU@3nr#{bFV zCqHB~8=HY(j1_zr=m6_{5=)F~B^mNtsB11!5df@EvUef*%BmTY=`1=L^RIX`l(tdF z0O|;QQ0t6c2mqMyqX$^}x;Vov2To@s;ea3mw^N?i6Pbj`B}>srhLe`7e~H1d=G!l6 z@#t=)dIV{_FxCr1;FJRHF9iW^oa>5ZC69$oe(@HlE9e&_cU$kCci&$rZJm;)VMKx8 z{Xzgcerwh+d5iLH7Ql*p!cv5U5D!Wpth8e1=;*|6r*GeAP>H6zBnQdtaBMc)CUaU_}G4%p{i5?PZm99qjGDPXK`R`q}eI&+`AO6k$a$z>)_+DMEUr zq!zV7h??J!_Rq8P56KS-NuSCO>Hte;u+DCeLs-q8FCAcsMGY|=JMdJ>FN(TGCYMR? z%Io;e11!B-sG)uAMj<+8QIG-0p>@%b>ui`BEVI|BSu(^kx=U1K084$4azST$aSbfv zPGE0kszHP0qQV`iJ3(U@+=CG($e^M{{uu*+Wj-4fm zT&{F^bvyVkHH4QouQaVQzLi}@XKG0&UytBx6Y?jxX>(9@D50*ljq?ziVs3(B%l~|M z+cmtLU2XITqvEFCJzLxiO8e~OWgatEBs!6EasL>g)k+b{39BqxfTfH^5rp2hcibNu z17PWJhYmIfq)yL+K0I=7gPEYRki+W`O%I&|+xGeRFX7jSfv%R8*7C|7w+kCn3RP+jFpc5E@{e#06l1 zyuGulzZP^LZ|4TjstVR%sV}12xU=dPRJe7I23^(X9`O8<)9SAutoxK7G~3FAXz(0_ z@GO88+xTRl-!Q?Hh+(q5esFVhmoa&D02ZTHlDL$5wD(TuRQ9EdnlNsJpiYHmfE7ML zXx0mvjW#2juXKO~|MF=4;Lp?7ZT(Azp{U-<4|qT{8X>7H{>+MAgB7|nhBOrBF~lxP zyWy2qz<;8;VQGlD0F8NO)u6yPLh8vW= zcBEr)i6OGMvJJ+P61GBd!jym>>^~lxSHz={=vr2tl- zHQ_MSPG*^VZs7rBPuu~P8X^8ZxFo5Y+DDS@-2w~&u!b_lMK=SiBF(0Ox|tN4^Yt@h zaSC!6+S%H(Rd=TpcW0fIA4CbN0G4@E`Xy*(0j$ddSPWW{Idm1QbB!JD9Z6HYD*~`| zjKz&MGxzX+^F?EF;k2xau`ZM%R73h)jy9V4%FJNhaZI-lE@OP9+U5YKcr<&bbKTic zMGde*M*v`bX&0qKQJqOT(-Hm)pW+2z0TsC$&HSM}Fo_R5W^AXFTiLavcb%Ty-J{jD z-QwoS^0w)%t%L576`T4^MbviA{q_FM_V!_R&3JyS87u%|e*G8=Gjg$5M!nG;h$ICc zci8~T-r|+LK2RKADEKdFrEVCaJ(iEX^-c5hg(rWnVmUyM}*n>r6Gu zE%4dngM(Ak3z%FmZHL4P)5Kxjx0PAk^6y(UoGM%~XO303!c{CktPK)cNzFl#whCGR zD~13|$*>gh2|A$)ufA>YulJ{M23X3tU$zaIUwB9%72*VL2Sx>pN_Gf_T?AY7#v?%D$OdKQBfa}AbiYcFdfKqof}UAC(3|9pHG ze}KgpJKQ~Jat{8SQT;=D9pF1qKx!0ni-PNZyOM00*JEW&U)Gyc&~|@(;l;@_=u)-^ zQ{LqU=g_Sp2f{u@U+MWl9>ecEVF9eT0W7wThzEYkYIbx_JbR4D{p(8+M#s7-k?YIj z!{g3gPeaGV?K=bT2uhQB(G;PI5a=TM`ASD7CJd)=l_!WWiYvh4G0c3b`Z5}{((urE z3|5FASI1SM+Yj-r4dXJr;Ay#Itdyos+A7=FAi^j-j5)v>&A2e3eIv6m+&=gvV}n>$Il zbwA#&6FI?d5`wJ#0$M4)YEt=t1c?kR1}o+OOPzzRbBF#RkM`l!%QyopM%2UA^?%(c z`Sn+-4&U3c)g*-Dx>Be!vJ@gX=PkpY&DrDE=20<(({t*{EO?*Xypm{0>) z2Uv+PUnzv3!x9;KuRrtLo(KRdw7VA(mR3LqSm(aK`8e3?LNnDUsGCr2w0R9lE6P9+ z&TG*@$R`04_LkTHEYwTPTw>kz=#o9X;xzh5WPpWcPA!ud9OU2a!cYoQU1A_)Qc<>E zMv}#wKw^>R)8$qWW1u%^t#en<#ih0HQY**|qPP<1%AmXb(8`3X%tOusSeFE_G@bh( z7U#JY?%ka|R8a8*SePpoRk(i2s7I4$w9yn6i#fPF3l^MFA#JX>&CQt$C0F2;(sF_? z!T`HfdXEH?D4V#)pFAnh)o11I7QjkmfCZhOY-=m3>Mp8s_YQk#0iLh`3k3!LU61wE zRVK{nd+n=A?Ss9;%9i1@vR;`q7Ykeh0xTUN=&k=`oK0LM7QhM(v(z(TGFZ_VFDVYt z+(w&cidtrb-^8>?uALc%kUu5>3z~|Vi#j7HE7cJx$aDEy1X$`?;L+d*SZwr-hMF}! zf4?{S$|>t@NT!HyZzbenSq*|s`}h|0kvTmc0|vl}!D7u3-=5i){g{%LG_T z=RO3@bGxK#cx3kXQ&ET)M+S?s!5=efQ;Iq{2LoNzNOUEe-Fk8Y04s#xgI7w7#a#e= z2T?&;5gd?V1hX3sV#Q$X zZ0*}>dQ(ffvpufw@F6p#hfueawGG53s`b6Eg>|VfzTPqWe(j)}#7w z9WB6W^#d$$#$D&^@RYB$cd4);*fx#FZ;!$9clHP%hLI+qWJ-d}yV@k2&EUsLK}baWN8F|Ytuya1N6IneD! z+Z$aYpz}DV2oLrSe#vPT{$~T=p*)4I#PDFim;si#-7K${e#jDL$xs!kW^`pSScz&h ziVxNl_h4#?`+A}4{urHA1PYIr(P;GX>f~f&Z7oIsi}~}#(f(m|>o7eEg^Sy0A_FY* zjme{ato}6-0ao-8J;2g`J_(!5!B?R7s%)MbLNzZRV*{}6^yM{7b&ovYKEax+6wg&r zu%KVmZx3LpzH+J-EWOmdva*iCSGLE2dBUekX7M5m*e^;2(HW2;M1ut-2Hx6OT~*Sq zbDc%s8yc)V5ww0kA^OMXCdu-=aDYlUkGJV6M~xSc%DCiMykhQW$28 z)FP+v(H3dzD+{m?_|re9-g*B9+aWk}Jf_(v1E zl_CdUs+_O@R)RKr7Iuv66(!;QU0U7Z(xZ=W)FgJb0G7g76Q1Q?^Bgq4m)*nU*p3ol zsfohyB&sFG2&vx)VKf>g1*40_d9(mlSVDL`_V zB%-CS61<=AN+GF+adN^?xtah=S~PF0@8nkW z+$!tSr_ksD7SkQuaX=FLdXaC^Me6SpX{m09Fu*#qvy^?$^AwbbH(Q#LUiykAxs~42&f>%j4Z$ zywD_h8LRTB(-$wtCKs_4rMWLwiqb|wXE$|#714h0Y}VWYSP2WTm>DQng3e?pqA1|A ze#vZju;P{U$}qw@bS)T zG{j!&~r1dg;uYb zirv)cD>H)?{U*=?SP2fW2+GVE4`6NvB)P(0vRmsNLr;$%%aL;h8Lan$!78Y{cdM+| z53m|_faQn=V5Ql+GAl>=hduxK@MgxlROXz$9tFTs7g3qHGvVVvzUJE>pIy(X^`ANa zWC5(N24KmSWUyA|;G#qvP@34WfC&;DV6ikxg?nmo``-5MhgYvKR^SeYJ^H7h6+xpC zR?y0(-tTYK8En6{g37zg0$6beSfNR*$vn~2kA)4hx__rtx3v#oQUwXhQo&f_F@`3J z@T~1UWAsf*wsjixRh7SZP>zk*0xZG;SYL(6T|UBKam69AgoAWHqw)K+>dlR9wvJa* zgGGwaGrRgjW)n&LvluK#vgv#dDa>Ms4z2N;S!XE&ErwPSTA zv&^w=079pMwYBwYIgLq0?I`O-ZIm$Y(C8~3Er4~^7%T;_$U@-RVYK?L7`#>9{jby- z+{~{kz@i@fS>OHHpL1F-17I=oZ&9#W-iHi}6eM$XQlUeC4TK^$rd*ybNMB9T7B9~* z<(X*go~v}uLt*fU2VcgWuK-{%4bgScFvqX!e`1snz9cz_oA5sc zu&6im%q;nQ+og3q*9)AipxJ@y;vo9UVzA-{u)-&?U_+T?Q;NG%@*BP0h2Kx##xO7Q znzs_RMkO^}Nd*o@zF0Gi+EPAUpLs0?>*@lm7H_sNi7luzT7ARKL*6W}_>df2J%A+z zScg?D12+oW1DW&*RYhn9SQjtN9_Oc~44*eA#QiwJRo3@lNM-WHQXA%~q2b_67Qp%{8LSAj7YPoqIQjF$yvhX2C?Vv(y9Z|eJbjDn6~qIcRT1$G(aQy1 zK6vmbIj^CscamH_XT?p68MojkK3hSp6k#Hy2!kvem~F-UFbFLEDYK!~HNa}|P86cX zYJ~j#;dFR(mNW#`3^@DKp`0plRXoU~VF9cw3$PSz$qGeqzYG85zF+g4?LFfV^KuAX zDS(9lYjb@ky~LGL;^s!+c987|H6JVo&u~R@*=g5|awA{#2j}Ku-c!Lq($JMxcB12X zo(VfYI4%1WXI72+*7sjLeO6FE#wN-FSYIoH6+t92z*2)XD1uugX&w!X99PdI4o0}E z`{GSssjB;zr!QU<+;KU&#?tLn{JPl>W#i4w-bI*;>hzVxU?l*9Wlj|OO>0@zl58C} zbL!{jmOhHc05LK9`0L&2*2Z>LnJd}WPGO3k9OTm#y0SD_SC+w204uw40NlWj#?{Bw zJ-MLe=-^nupyx5yjBc*2{c(Bh#cg<#vfprJsSR>z4Lrab6MB;KYG5L zFZ;vVB|EFcm{_o4ql$<@MUW;|u=fTk_J}k;m4C#isFC-#42_hD(hdq*of0g zn-*F6e0i}LTGdy1VYh?Tg5*08+Kf&PiU`)d2Q2AEFm=E?8qv)X(iI;UyL?@Klo?1Y zT0yZ2oSF?z&Q8w{kBkou2D*Dk-1Y4X^P%70U3|K{cz=4z-v5IlSSK@c%a4osgV=#6 zz{2dBZS?i_4jsJSN>jOD^qmm8GS&rg%nKuw{&+JW`vO=9r>(7TqfmEwodjE$y~Cx7 z-NFY;0M?I=U`1To$24|78s-{4jwJ^yNlRYd^vC;4M6e*hN|XcE%>~W~U+rvd7nQm5 z^zNLp7EA}2BC%A5#}#)pS46Oq3b1%yXVnQYxNx`+u7eL1&jtp^Anc2?7h$=Yn_E&p zYf9I6NZG+|x?0fCCY_Yo#R$NtR=G{l%G;6^b#te-sN6P+mA_OAoF>!2!8DDX9C;%&Y081Xk zqQ?m_x8iuw!#ta-srztu_u}N1orluZ^76Xc+)U`I75PV;d!^DVz04O!0G5bgNq|+| zN8_o~MV5?$iq`hNQv}aWqBoqE)V}28B(Z?S=ndEWa^qE+%AHSq?Zeps zS2SQ@umeo-ujpgM)jcs0th{nBPeQjiLTGS}mU{wNrYT*q{GcfIECB1r16HYX+~^*! zYzU$m@k$K9f?G_v7oLsSlOY`gg*(h46BVO|dH4GA3Ib!XlY^h%Um!V%s=X1{tAVJa zVQj1lz)Hdtp}aaFQZooOWoaCv{)zMBH@99Su&T|@E)|=wx31^tYM9a$zgpl?0G0r( zD8N#qh!ar+njD=+2M4$4gs^k_C->Wassc z(bkSCgfu@WtJKK=OLmGdKD5Gc!-t@^k1}kMzbAGeoSI-UQ%OAMe44r%IdP z?gH*0x*rNy^a*($4OpyB4lO8=UFP+51?Yh z$=TFAQ(B2MVU@6h_beLB4MhQ1$q86UF>rwO1>92$9bLVnXGaoV-$;XUBFS=bniXk5 z$VV)$?x)2LENRs8O2z1klU}hYTL6{-tSbSlz}%fx>g^twIyroEUAzY}L8ufERYF<~ z%5*#j;@}A0=gV_@L+_))T7|A5$IybTH;%6Ys(}0GmJoQUq&9%RqOqY3kv51QF^|!T zJ@_x#rAu}KV4pOnTL_3ol)};igPw-47S3CPV z!vO0SLu*hFgP>2G&#LEGrR0=?$6ZLF|H4Q85zUha?Io7(?~d;9PUlMbx>RH(>{#5yE~;oC|2BxOYkDW zgS$hEL-FDiEn2J;2oPFa0~B|PYoWNi%P)Ms?>zG+e`L-~&e=UH*X}L5x6y&xv+5s- z0p7v~&OaUeu&yUE?q2@=qr(FxMubhus@uU6-7dsfR&+)j823g~%Cw-##hVu<^Qj;|Y9i<&H*Ty60slJun~h`xT~G@ISg&=?9Ds#Mo9d>?zjj#`(9 z<&=o+m`@^BfHjgfUQXPG@t*aL@lzV%0g!i7hNw!BIgoBi6U!?pW=C1t*l?B1HQf%P zVgV`L^J^(Rzc~3eIB}t55U-L|N&9#ie|W#R*hoYNHT|8zB%Hc>rGqaOr1>Ja`eFLyuC@7EogVsd&oICkei<`!;C!?BN`Ed^uAw z5`SJK#64?9G3-srLB4*d!>N)IcJ`|=*c`@0BjWx~;R*N?nQUv^ji6$VN!MKE&rB(~ zfx=^F-bz8A2cl)XsLmG&UT~RwVi5e&_dFq|`{WVu2w)58ovd_8}@+g%`L7nq>F`iy7MD0u^c>SZ{W0)+$^8Mp|0*tvdaX2UmRY(f6cCxdz zkg<9tHRSRy_L`3iddC^S4oV+Kv}g!mHsp+yb}_)#6G)};HC%^@3h@ZX z%n4BDpjX7k0s=^-EC~g=PscSG+J4;8?{4BxsywHe-}q;(xmRHZlNV~qu@lI%{V|9d z-ObQI33i5c!TQAUdgBA6ja#;Wzwhm5)tF%GVMSJYC6OR6dub9Z^N>^-f0cqTyYPv} z03}wi`H+yWyV%WM^3c0(Klov^Z|uL+qT0zzpwX^b%C(N`%DrF#E+{=n^|+C65_4^e z!MiKqJ-QbL*+&iARjX^*25iUcYtOxs{rglEP5J0@6J0bwEGvV^$)Oho`7f~3%({da_^ zS!{az>l3ua&%h}4#Ih(9inn8XjKR{Q3Hk^u^=NoF3=3jWK?4=T<34|Xb2$?aeIl7e zs{v)9vhcqX7ZUC;l%9Ax3z3KT75Bh)zW%P0kDxwHo6zeOxHI|J!9of?&C(09F90}Ug;vSL(J`TB`Eir*H!E(WxM^MNXeIRN|7S9lSAV%BVGSlraN=`6A==qWKC($ z?Q?O~o^-YBXAG8agc2%TAK-EKT(z>1PF3B#0+DofnDI_Q6VhPa6{>jPtH-g;m6qdJq0|*AXwL0aX=fjB02B43g{-r4d-Jn zCOYJsm!r1FN$e{3QSM=#=FYf|(3#Cg`Ypn?C(Q!+uJ#{s9ZOjMg-RAgi0f)k+BW){ zKqALJa#&Egw1QYCVb|tnI3gLbNxPq}!Qz=`9;&-f4sY@+0sa&L91F6Pt61GOvLrFT^I;sTAUum(n+C?Jbpc?+=@Mw#pthvEZ-wyv5Xoq5Zo-K$E_;3d0!$cD zh&L^`K>l66eF2(Vn5Gy~SReEj`+H_mU=RIw(Mes}GROL=xiNhY-uPHU*Dp22pzUveB!}0aHpF7zAw+GrL!XU zL

  • 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 SN8uI${!x}!m#dNihyFjNFJd16 diff --git a/src/modules/locale/images/orig/timezone_-1.0.png b/src/modules/locale/images/orig/timezone_-1.0.png deleted file mode 100644 index fb00d83c566412badd7a6e4776f3a1f2fd4cee17..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8012 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 G-2Wfd9=AvU diff --git a/src/modules/locale/images/orig/timezone_-10.0.png b/src/modules/locale/images/orig/timezone_-10.0.png deleted file mode 100644 index 472eb888aab6a16941bd3fbbf3a48bdb49429d1e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7783 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 WLzC2^W2Jx#Ajop`!N)bsqK5;G8la6<-V?@R*o$ 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 g$0o#6A(r+KCZgpuW8N-F0AxsAoIof_hkn`eWx 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 b1micP6n`%AO7khlNFFLbQYuz_@%DcJL}K43 diff --git a/src/modules/locale/images/orig/timezone_11.5.png b/src/modules/locale/images/orig/timezone_11.5.png deleted file mode 100644 index afdedd7e0427e9ef5d0e86f973fa84b5b9b4bb18..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 446 zcmeAS@N?(olHy`uVBq!ia0y~yU{+vYV4TUq3>0Z*@i-5pn2Vh}LpV4%Za?&Y0OWEO zctjR6Ft9BGVMf=xhCl{`WQl7;NpOBzNqJ&XDnogBxn5>oc5!lIL8@MUQTpt6Hc~)E z1_3@HuK)l42QnEN7#Kns7>pShEE!}hWlFbtly3H@-Q(SIII!`6f7{W(rb7W8r-FLU zg|Y?dZ~)cwl?3?(GcYkRvvP74Ry5wa{qofrF%J)*%rj3H$B>F!Z?6UlIs{0xTztEr ziEaBKUWFzZqZbe6YK1s)8SkH2tW@)R11C`R00PfR3rz*JBEKaEEu8RnXSyg)lVe?y lt-gHF$s4;tUc>|DS1>l8E=Z diff --git a/src/modules/locale/images/orig/timezone_12.0.png b/src/modules/locale/images/orig/timezone_12.0.png deleted file mode 100644 index d0b35317ed0c66020bf8e1d00a57c78eba9fa180..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7130 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 JZgJ)Ie*+o9@{j-k diff --git a/src/modules/locale/images/orig/timezone_12.75.png b/src/modules/locale/images/orig/timezone_12.75.png deleted file mode 100644 index 4f74a8582a8c48014dbc687709f48405312f6662..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 409 zcmeAS@N?(olHy`uVBq!ia0y~yU{+vYV4TUq3>0Z*@i-5pn2Vh}LpV4%Za?&Y0OWEO zctjR6Ft9BGVMf=xhCl{`WQl7;NpOBzNqJ&XDnogBxn5>oc5!lIL8@MUQTpt6Hc~)E ziUB?$uK)l4k6mPyGTSYEiF591=fbt_#T(qpws_R+^6owx+H)@S^tbd-kToSie!&c4 zidwcVA;~i)ST76%3SRYeaSW-r_4cA6FN1=>fdkYASTIY~1D z)eRbOVEV0lv90Yr#nZUj5;_!9rdX~9g*7rziFvk~>p$Ccvj~u=r>mdKI;Vst08>;{ AsQ>@~ diff --git a/src/modules/locale/images/orig/timezone_13.0.png b/src/modules/locale/images/orig/timezone_13.0.png deleted file mode 100644 index fe2f134cd3118897171f4ef4e05aba996e87cad5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 621 zcmeAS@N?(olHy`uVBq!ia0y~yU{+vYV4TUp3>0zuvh*B~VlH;_4B_D5xc$)o0g%gC z;1OBOz`(W$gc)7$8Uh&%k|nMYCBgY=CFO}lsSM@i<$9TU*~Q6;1*v-ZMd`EO*+>Bu zSqAuoxc>kDAIJm&2Zn%tgM_ILY5lg@bDXjlJLN2LsNd^Xv&*}Br+4d-!1m)o9Vdf3 zP6cRNfs7N|?0B*-tAfsu(rKtfX9$YlDAnLmE~I3z2#73l0PPZ!6Kid%0l zALl&az{7B`_}s?-Nq>c&MF|+I>f~sGZ5`%>gH-PK>?aMkYT_PB0I5%V9?CssXl`&k zppYP7z#+lH!^Fl2U7|fw2%DGmsMz5m72B%4!f1 zk+2aF5hq?Ia~5Nxmu@eN-z)+@s}&fKGyOY-s2ar^2M zrf=)w;&N@5_&MV8Iihp2fkYRt5}kibM0}Nvh)sqF_#`8XNd@{vyyqM0{HYc=~r(!eIXn?tFV>cztXg;|aekmWY^k z82r>v6fVLFyc-ySYvtiB)^OOLWugW@AOfdJ^j{C4V8SQ={Q(#UoHwv(|KkI&#IvUV z{s7DyTsIN8fd6_>s6Fb5H*C`3YwW9ackE85oSU1wlSBpdk+}eU8eI6Hvb>5)Dls4W zF+qoc4Nxv1;VRp|ngjI5Ci8dwXPPDG=RcYOS3-Q7pqam#ll|Ye<>l3Xh5tt^u+UFt zq>7EH3y;E+Qu^(z@3U%%yJ_p-4<)O~G`S>9#NF)eHVPes<0#&-Yzp$Z$)yBk(i3JV zljL9Y_=w~Zy}iJMN)O)iNgKseMoO5E(dKFuKJHW_G2^n)sE29mt8%W(27er#o*Wgd z*ecg;F_)K4W%zb)HdQUHM<)7o|I#zL>#wczq^<2C!GLDWFT`b1VZ6$g7OzlQ-e+mZ zL&1-v2JG#pG3f4Be9$AycP>;kQF;^G)k%C9tXe^Mh#+}H7H8HlchfbsZat%K+&(t0 zF4&$?RUTNc!SF1dBY94bV%OyRI|NlR=?V zk#K0XShk6L*C-8fn`m0tia;>>Hrbf2qn4Y@wpe+b6wqq9PD}T05NtELpdIB%d)erZ z`N5|UNhou4c&7j3UvDd!1L%Bx-EEkJA)4Q$Q6bSyipKrc3ajq}CX(U)u5-t}a#d7n ziW4zhg!%Z%BFCD8M)TX|=axUCeztA@&{00>S}EtRb)FyCU||wkN{67_wl*p`);gip zPB8xs;%3J_vSaRS*a_~;=V}7aWf#u6WVc8@Ryuk=le?mvdCc%-SQT+ncMQq%acf;G zMhLEZJ`L_tJD}1_yG0n6?i=mX6p5?M$lLqx3wUd>?&mD#s?bpZZY`Wqf(*mh4ywkQ z8g*lD<#GmHU8*b*5!Q)HtF6sPNOJ4T4dnytdmjzHt_|QB+0?ViLBEx`Feq9CNu1Pf zcA_{S4HHxGooPmtXHlqgO6^pU;a9iyQmobXp#D{>s)_!y$@N=J^KQB(M;ZTw!$Xw5 zDwiMx7ceO)@J+2OI=0Un7=2S$onJ;8u;O@V|7oX)0gOQ;pIaC2Q+pa1xhr@bd}~|xX}%mU z;>*hY5%++9R$@o<74(JEMLHpWBsDl)OI^+bLFGBuw(bvIJHtP&UGsA@-+#$>WE;;; zBq_IUO^&Rj+eh94{47wwHg+OUb9VYuS4v-4vC5(MRDcJBKNR$0HG|#MP~#maDW2Cp zFcNwFM6gu1sQ&D=I8Wp55*@} zbw^!;N=bm(I6upzPR{+=GH1bV@#o~_Q`;IX0Z(w4-}B&3i~8!LIz#M2bnbQ`B(eh~;tpH%XvT!t1}N6y3UjWaUcX}zPU zwEJ0A?4~pr?<|p#CPF(QY6FIJkz+ACOL3QCUaYkuMS5)~e~%Iap-I$IDJ$i&SW?NNj3K;k+1CfZBXE9X5N?`z$W|G8AT3~hkU#ryLf#n+`cC04Mjs9lrFqPT_W_! zq&C=7HJn`J&b`hOw(p<6ABz3Gogt784j`2|&TLwDlD|5XFP|@qh}nOFJsk*#f6VlM z_3IA}kF7d<7(p&hpVGvCCrdD+hKPj-m=+_0C4M*dbCW5Me z3rfkCP{EL9HgRN;e4t{fYD;k=CG<_4qoyX?{I15>V=;ewB*cLjIM0|g4-^cgby>Fg z?fkLrpn)}(|7&7of+$NCbB z)oT`A|7z&AHhW^U5#wp+*B=VF=owR`tmH*q1kbjZIYEOTSN96sl#4cnoN(%aKac~s zVy;r{$X5lL0sal07k8ngTakJbv(Ob~->uDk_u(=Vb?c@-7B-l8rx3xi{D7=&$u=6m z%)j$jvP|WDT0kFNPzcz}IWjGoEM9)iY1>}Sej{VwOh9x(m{XX zZ2$DYRLR@oyas173g^l_8JRU9Hj2ipsKUi`Nj|WByW|rmxD)}?YlUbvwD4fvCv;P z?)h}Ye7Y!G?cwdv@g6uOC14HR%VAMdA9t3xk|@_0#0hTcxp6vTG7w1mN{{%n3h zagkyc8p%lT*?w2O;D$BodUpv|YMNlG*eTP6Kt;&qtcxU&^yg+o6)(!v*PBDJX(~&c2*j z@m6QzlaVi`fFT_eQAdPW_g$&Jcu}_?3J8t6&U!y?XZJP?CdN_ZsU(43>Aqm5L|^j9wBNu!9&&oQyHg` zd|>ClgB+)=U=jfwNWfOBT&<0kU|g`9z&R8zf#@5^Wn^Q$^ggXwT(yiL`^>Gkw(xnh zwb;cr5n%_x;_bnmD>0)=2CqyyRZy1!4YC#Mz>n>%8b=qaYYSRTqx4dC>VYmnb2duB zufsPYg}}Y2d6Rw+d9&fcO69MgeNRg%E>axe6jqMopbDLwPoAL`MPlz<6Zry07l{Cx zuQ$Fj9G*B9K~CkfD#rIyEQXw>1*%`9)cI4dP184`q6b5oF=gqY+Iz2O8pWTO@eeG0 zowtO3(P|q12#OFb)?rVs!q>dJs1D&%)ays&jh!6VPwGz9oC8~P?4W)tJEe@RBc1l@ z9Um#1*DC8q8pcM?8WH8ea=DBwPjz!n%tlwyBBx98rnOSD5kf+tdJ^J zJ5>h=AYA=8z+;vF0(g+EWB>7bIl8<*%c>?KQ)Y6xiS;;OJF(q#Z+ZfV#e7k*>hy#V z>w*t|qlmBlWe;W^K-V@Wr9%ZE@-Q4EO+fGA8eK}B+|P9-uFGE7=r)tAxg+Q2++}{IlP74xdRv z6Z=t5Z6w_M*Tgl%7^*Z|Xz?Q0`g)L6@A&nLwP3tB@*IaJk69vpk##aVuuhquW5+JG zoB8NUp5vYptk>4)wCb$%CIo7IclSJC%Xw@JSBfWY1Bo-{kd~GIP`ni;@~nhTNFC5( zAbGYWB+hw$JRbijV=l|a^tr}!CdolFo2)Bm!#*BdHbN~v?!8c=HcgXGSHKqXbGDhd zm&3_Ms^UfcVr`VTd~xKD6mG&iM)B7&8tH)gdHtQ>l4rL;&2uCaM?WOlkF(ufgyPc{2Ge4u zr%%HJ>=lZfj+anHZ+<|G)J?~&72w=%>FT_xVvRmw-2JGzx!Y$VUQZ5eZkALq^kpA^ zI&2QzG1>3XA6v*JR90U~I+u^Ukd@vOaa6SHm!6R;tB$@egSC8chOM-dk@2k_O$lEZ z$QkJwm%@HqWw!cq=`5)pkjQl@h_%mx@h&C6-^Z?v;}P2(A?#FSazMpY(Z;?MWh-H} zSwoA8VCnKJMfGZAY?bErP8Qd%S@hDoS@;1a1m@-+B#OOPY)JwNvPs{0tAkM-Jd#fA#BVZZ*)W*S1F3n~ zCRWt6S2PSwB<+wp%f|WH=LeGbIPi0g6nISPxLrry{suk<<5x1b9B(TaO~b}25uJeG z^`BgZ7!?zgb&Oh52cc zxR^xj>a}}-gzp#FEH&P3%UL#1abT9>cC1xSYp|mF7(#8$dzHR7_eP?}K09Vq2Nmnq zo?sfNM+~AMMpq3kJNEl^g~m6fI{3|RUB(ajLXLiqzNptB)LZetrZzT@d=~rB^|`*Q z2?S&WT}moN-QZWY9b3)5(5*w=WDK|r;Jm5tr^^jWBA8=+1&9TJ`sTqxb2vQl{(~z2 zWt4f^8_u%=?k!)ysauAU@l6NmG3}Vip|k*RcP%F6a{lu6gXFZ+xo<*gri@iN1AOI) zP<+5}Svr!wBCi+oCQ^3*KKb+vIG~H!gjaa)%&UJVr}E4YvQXM6)E;Xmhx@SH0Hi$g(L`-W`c3 zkJHtKPj73xfu}t7{M#l8TxP%Ns`P+|)mqYN`W0IBN!pXO4w<*VkTm`W%L?V>2ccvN zPBsTiqY-W2gl1XEy0*$K(V4Fq&5tBgs&dxM*%#X(iqc~rlfH3U;y*@h;3i$#0)G}M zh;%pXRNc{?8bA5Kn1wR5sA3r?T#DL^s!#p#F@Ch&0G;t+`2XC32EIGg^2SnrgFzFuTHUDb# z`9zKnp}(Zu$N@!&!b8084{&XfPd_?QJ{gU2#FreTHWzS1sHPdvMsVZq_U?P44btrV z_WnM>leOkP-J6K}9!dxPk{Q4KT+o>;zNEZ2D-ie-;u4nV5I4*3<+FFr1heW&<;(LH z4TzNLI4qz#Oy>Yy;={)E`K*QMA2~iNxD>~dAJ_O$gqC%Kl>w&`Jo(7{{Z2&A65#Xx zyiZXzaA!x=L+eEf9^ar#_eqn%1NFOiHUyvC>LZ2wUT1!K8|gGXlW1=ZQI&KR^e)<~ zq%Tz{s*^~re~Il(3y^d%oPednuU+?*E$Dn&M5|qoQcg^K~uSPg4m9K|VMS4BL zp7t@;4PW=UhEuP8fxx}t0jw@HH&3)lqgU{V;Tu#eopG)R<6sIyoQ z(iJ+h&(24;E?9lsGwtRBaTK<~ym_;?zq0Q}dj-$-q-?}OhzX+z*teRrG%Jb4;1L>L zO5NCXABg=k5^jbCPCAH^fkq*pZo5Xi`Ej6eC??ik6ZgPYcjt3z0&_q@J=cj_SeQb$ zS^{DLI?DGk+jRC!|9)L%Y?tA4q&j!+a$BtUlL*8B=O|oqv6I*8vH~y_KEO8Jgz!pd<>O*bD`@sh0mtMQmzS27};@e6rz74c0P$-S;NzUj{^44Pjx2)V(Zf> zvxWs&nr8k$X2~?v;$Vm~Fcw1^BF_tK9t1UQSj9 z%ZS(fUJF;2m1?21`{u`O0KdWS-qcbm8Pn%OG+A5x`X;s8uah9(_L_<%Zk#SYn{Puq z_2agy4p@#w)6z&yqJ9<9nPo_iVLSBGce1kky6f6-Dc#KA*wm|`r26-%1x$J*Uih7e zJgLgYz>3$>$Mp-!%vsxmve!_p8TOLit9zlXrZ+w3GdA`*mTSj4>+zrPCxeNaEU9}o z8-*UMN8+J{%b2XP!hnjqHbO0aAR=-{Ca{6-LK5QuBV~s49e#8Fw$iz*zPC&AoE8o$ z?;a)TJu(P>r5rlKSocr_1IC<+zLF}ux&FEAk-}w%-3x$wsg2So}B{MQM~C%K%56@WZNet~-6DyydFR6)PlkmklzivaPpC4lhuh z9_&w;-DQ&&U5P8kT;ME{f4Blcfaed5<%M}^vjXZ3D;2M@-i9t3V;07$Pg9Yl>O(z~ z$p*tTaNO>((?6rs{#!ZwuY32WjG!Gmsq9VZ7A>2GGj98#Rx4%*q!d8S z%8l5N@Ig;w4zxt@V0;BxTAWA>;o?IhDA!@wx2e;ww1BKO$j z-79mE&=U2-kKN4mt9FLqeOFksi7^}wI;%aA=oy*kRgX$f(_hg&-yFNvf}~2$D9d+jCV3Ub)#aB$%BpUbQmwznkA5=80Z35U^thpbum*rG+ zWc$Vq1!Oh%kqO)U#zmaudO}ar`jOXW3vjHYF};gwebvVXwS^$PNk*c^KJFa-*x+$e z8Kp(^S*vYzM=3~27VC_UNBTVCTdYb;$9s+UPuIgMlLc!EZXf5Q^!piS(UCrNX&}!|xqd8(q?1bXng#ef!4yzC80*BEIam ze(cVG)l&wpp=CeQ{dLRPgU;*x+-@&s!n1B4PL-V;R{ZSSVzpl&1r36}AJsQZL4i5H zfJlaDHP`vKng4*QuzHl6TF>HA17uMlpN}thXe9sNDP;$jE0|w`^etX=)9i zC#SOO^X2#*7?CNiR}{uchOE`VUpi7uubw6cIa8zl$aK8>$PkUhY%#>BF8}<-1Syr4;FSl<|V_v^p27fQ% zq?J8-AMdy%CiA-!+wEw&B`WBckU;)7RB? z_KHgjTm1S+Ig5097p>Yo^w4bW&|ZU;^6~89K%{@_yh+?JajX2FT)} zDN$*XvmHcAipY4+ePc)akG`NWJ-Yh!daXM;Xt@W#?4@bf!&&let_jT4zFvb*Q@Hw@ z;d2&Q20o)Lrl!X0%zN6Cscdfm zRqma^XNnoMUkl)uW5AMjj11&4MOk&87QZctm#8`n1hAn)(9cvSX%XAAG$AuGZSUjL zNHQpO7q%|rPL(dkJf8SFR`o+X;tQIt6|3kyD*AV7=F<9G;R|Gj~&N@0Fu_x=-&#J!0# zMv>-un$)EODj#7z*7~bxze_O<8?%N&KB_EdbsCL3yKiu_2SW}oc@@nKGO}Kez#AKs z&lo7_h2;n}<(+Sel^s93-5BJ`O)fSW>M;;6-IKv2kSg|k`%0i%oo~HSOi=XeU(Pvo z)eR~6X*OddtJq)D)lR6(XIjW(mBm#Yg|e2J3Park@{rdFL~70Vhrb*~3!Qt%sA2}? z(%xMFsdSmZR2mTWJeEjk*c(4C!54ai0pVhdpp&WI``U+-h6RR2Yh4%4x^5HE@7tk| zHk6PJZAJvfzk{9v9zGE)BCg{9QloOBq|k~5G}&|Wk@Qt!CmyKCBc(Q0z+Tv7dTRDK zc_yL=rh3j5$l}aIvUKw&_-?H@kSQK0yl3Sn19z1|@i>!=>k91A$wrOpEb<*D?I#Kf zl||Nmo~ASvI_n~vZI|8u-8$G~X>PutB4n1!4UkV%6Ij7A;U@!d0BEE0ibr$tj*CQ~ zr4nzPE=!Bl&81Erzqn(skM-Xr^p<(ZI-a)+(sQ-sF}U3p%SFP;^ICCTzx>r>m%Tr= zZ{aPCkCom{wlQ~;fDYC&>KE`UCNZ-~EG5^3nf6#*q39jX6iii;DL~h`z=qqwzPs)- zSeOI=Pq?uwfSQ{zhK7?qPaUWtYC*jk$<%c_oMOi!;g<}9MV_@TLCnG9rG|(z3Nn5l zW{t&+k;h1>%hBD05+pi&Z*X1!K6+5H@Z21Xn>B%7R3Hh0-n!_XB>%lTlSo9~P;j^; zHNv)wfF#yzA|ZnIzv(5e*#p?>2uMTzg)WO5ipFVBB0!3-6}abf`>4W&Kpmy8QJ2*F zv<#!W1!>sQSR5q#L_vhtOFhMq0)+`Ob~maO#MN^+oEE!Ql{0WPdZ<$wMeH!`~YaY!4SYOizdCmMa;Yz zr>W}V6Pwa3eP${hV2_o@d-v%=^4v}>|57~u+c~}db^fy?sCLIIrqWXhF?t>DuoBFAnB+E;GDS!p(Vs`<6=1kyj( zg@7QRTm+DBqg-310WLZ+GIjiu7GVmBz9H0ch=%b6X^aBW4W50fjdzi$P2`Cr+_zc|Ai?Kl|-Io$;=fGa>;0FZlc z@u2EX^NjXwwPpsiio0W0h0lHagJNy*#p3u?UB9q&^7{q^v(?co<2FXn1zx|~I9T3s?$^w%Z_3JhD4K~%iEqu{n_NrJ_^u^n^3@;mk%ufMu%F@xFQHk-R<%=R>YRbR24%~O{ zmgb43rSvE?FyX2o_&3pK+pWObluujh^mB0vb!loR_Y)c&^1ztNSN z;t?VSu7(8@5dLCNnAFw!<1DM{V|&2kALVak(}rBY*Pb@mI5`{8UAtmRjoVDQ-*jkc z4q_uSBpyc`(;}}7(K_pxT}?@!1HJJ`M+qK)K56(%5l^ejFU9M+gDJ8<_VgN`0{%MS z3aNivn|r?$@{|y*2<9F~k4^w}O0(4?$_YkOf+d7&z0<18>SnG^+>b9ng-aq5j6{#V zmNIJMh5=rP&dgUiQV=wZ0}>!>A86I##(!Z(=M7H9RTcs(-V};SHvN#I4%J&O`Cct@!q5ikqvv(s(O(J3Nr~ zye$QT4f>kMaMR~;(Cl{V;=iG~W_y98qsJo>grWlBHS_t(yetT=6IJgGGWxR23HZ1g z{ez~~_-uZN93djz0`48El}BWu@xs2kj^ zPv`Q+irN~fs}+#EKnMVfY5&1Gw7RvO9EXPs{=SG13+B6$6pIdzt$TSfh$UV5NLMJJ z3m)*~GlojYy1IpLZBx`f!*wOAjzh&YcN^G0zf|9gJg>M|W^#<6=~>=gxuffUOM`Rg zYeBwl{Z8X(-t};Jqhr!Uwl=&y&U!zY#`vLw2X?KcvHA1pT3wfo2*33Pyr+>OQRXX2W^GNgQ)_4hv-pf^T~ zRxG`Zhbd+cx+n?SS$-hI!{_hvdst(lKQY^ZrSA5Ewe{+a!q_#j6J8#Cv#lj%4DoK} z+FxZV8sCISFe;$iR7R7_nts;UYVKBrIeoC*J?ck`FOmcM^8DI4i^teiAQSiqQMcgR z*x&n<*twHDsXc2?IO0vgxvSSSQ?z(k3(9agP#(aiuOdu7jDUBUwsFNm2rB}RlW{_% z?<-6)uSFmrQ(rXI5-=IR9oA;CEfNk-Yem4SGzfSS_6M2bZ*OL{5Z|DuzfdW;DR+Tb zAamitOp^1MHzTWW@Kb+l?xvexX=_K%6d!m*vNkOVal;<$LXZkB&YuqAekm)XT2~0$ z9+B;>hFbh`ZRhClD$AjGFwFX%(pZuNLT;l4_r!E z?4r|%;NBodN*T`b1Mq`YMs6m>)|%Hr^&2u!(LoUYcPU?*;6q{-{R%vHB%#urDAJgGzl;ex!?vdmkKYyxHibI z+}NOa7TUywD@LZy3x)Uwmt#7#r=!u`^DQe>I$IC!s-7k2R)Ja!+pgFYw??G-UZ^K5 zf|f?Y2)G&hl8|U$WwY*zp)rPOK|3N+_0AZ#K%z(NZBCb_e}e=dz$U=1vJz5xATNH~ zkHsp1tP?xxDM9@C4toBRg`Oq=r5D!x`-y%Z)a2;dzvAT<-!)&tAX$}U%Ybiju#%Ct}AZuf$5t)o9Mah$;&2# zPRbiyQ7i2fRDWl&a2uw8_C&=Ba>I=NRUr@E7@x;!>EEHsZ~NP3F#oH?2wr&9N4_&6 z>{F-H$y{QuRUiNiQ3-VzKhQYawmk9oTQ&J3g~E3sjxG}m3b2jN10(;_`MGjBHgn;s zV`TtXJ-c+8_vxrx$;7aR`ybn6?Ir~v$5*C;A#~u$LIUYj?||E9)|^u02c(>m=?rCi z7ISC&CiPiNO*Q%IyGW2DV;>2D-Q3ameNYZuQ!qTjZS_uX*Yh}eratmfGh6(ib+!fH z=kB({Rvp^f6b}5~kOhCefRq|T14jqw%}3^X>S4+~+JP1gqXjjd!&S{^#oucip+cpw zQI^PZW>)Iz+;yjiX1L|DwlIQP{DOeg=k`_%Ppg zq-73014NQn_F_#RK2}N@6O_aILpufl`~U)=Sk!R4&uhLVHkaY-wdce}+KmQ7V8zm7 z;dj~l>jag(b#b>u8uo0a>!V5(-zvR+vcEn zsO(+n1=h*(#cOD3;0mv*bizAQX(^d>MVd2x0nsn0s5DSCz~~LsrYhyf}JnW@xo*TnzF+xh>weGXy(*^^Ua zE>^=o6OH`B5C5VH#gB($R)A|Q>V#|WKvYC++Tit$(<^Z(l4R03iS4)IeeXbv^z+V!>hl=Wi_#)=j`T{+ISe62kTnh6SQAa3=j{ kaG>R1rT<4SYQOPRPMI|?5T33JM8J=doSJO$lb1pN2ZWJu>;M1& diff --git a/src/modules/locale/images/orig/timezone_3.0.png b/src/modules/locale/images/orig/timezone_3.0.png deleted file mode 100644 index eda59dce11a571c2bdd5be2e018c013eada16fd2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17475 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 QYo$(LG1-i(`i_Es0naJ(YybcN diff --git a/src/modules/locale/images/orig/timezone_4.0.png b/src/modules/locale/images/orig/timezone_4.0.png deleted file mode 100644 index 483dc53423bfd040f6b41b442b4dff51cdc6912b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4954 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 diff --git a/src/modules/locale/images/orig/timezone_4.5.png b/src/modules/locale/images/orig/timezone_4.5.png deleted file mode 100644 index e09ed90bb2f36763a2f76b24a68b816c73f6865a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1773 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 diff --git a/src/modules/locale/images/orig/timezone_5.5.png b/src/modules/locale/images/orig/timezone_5.5.png deleted file mode 100644 index f904cc29887cb83d0c02d0af7c9aecc13de64ac5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6099 zcmeHL`CC$H|2}3#Q)AS$IAuw_zB6WS&OqnxnzLmKz zr9-ZWib#Y=Wol`P8!nhyxnSasfQZ0*ocC||{_wr7xGt{q9IkVo^E~(GzVFX{`0F=k zd#%lTHv<5mb?)pbR{+pF000`9n>K>KTtDo-3Le%+*`B+&3H-!wy7DJ@{@t~+-cbOs zv0&}1aeBxM8~}TwPkTkX;ew+Hmm`A!0)b!>7J-QhynHRl1Q!{SJ$rmF0BHYq?$pVP zu{kqCVK4k+5+)bay6yjY{P>FgfBs&-D;C&u%er$|H-hr?#?FLO7%H>2tMtc?-JQOs zzcmi`mTGGl-u&~=KXz%ZbX;q+K6qi{@0zzxp7|XJ_`%lpHl0@|j6px;9JJlouOJ+d z$L9&_1~4-Wvam5OPYD-sds~9M)4*l^YpjR}9xgQ>JOKbVep$C305<7;8-By#8wvh@ zh@r7W7XbQI`<80`6?g%uFL!Hf!!%PWBS33hOOH!my~|9`jczFPPGdYLA}&phRU2hb z?E!Agyi?R)9~&mkS}7s^964umlC4QPX+?5|YF;&6&uAvkX!emY;ri>JKl;fFI59XD z$@=)mh9Padi{Z4tkxIRM)_@W~sK>R>IjP^3c*2y8AJJo*b+|NH@$jr=etbtB$6kWB z=Y9V+a^rd+w2YI|E~&$QzCdP)SL=DvvfcQhSYM97&l2IGlyqcG#pv-@EE8jRJ6yE( z)yw4cU|Bu2KUbt{;0aT4(d0?3l%bjc|De;2uEzaazuN{p)pLINWxfzUP#AsM^WX^g zYwelBCvaB$Qr1`H5Ts2|65{-9eyQM|kz-gujo_tp%3j+~!BX_zf@($Q-0je~@gS6P zwZPhkT>1;0jm#$#jXlyRJ)uW+0vi}?bgiOX&zI^E-s}67sqv_l(sQ*o?Jl%GaqYn~ zyHU~om|1VczKN*+JZfDFHB|TyJm6Uo2X-|;?{1^^6Xwd zOJ5wj^Ds$!A7N&us(anTj~liCp={jh{L9EH8)O;(Jj-}4*OfjTzB>N~J)8KNMB~(T z(>2^2ZveoIrE!ql&t&APMKUv37GL!niT`lRaHnDsHR5#1Mwqe>oM}4QJ7&C4M->}7 zH0I(7YNN??BsBLDjUt-p80y?&9?;|Pw@3wPBZ;JBvsTJ=RR!s9T z+^H*p<1hK6LjK-1^pcD>`B%>NKlM)lHy#*3)94aR6ZxnWiYsO1!9Av1c)Gf!s|ruG zWCHnebvYZRrMrF8&;MMjmAYs;QWh=GiA#XBkLM|gOSWdn1nI|mLMo&+FMg{Hps@~! zzG#vz8ty_QbhC$vEwU8Vsj#Ot?u52=sF#tv80($DrzGnIn`Ed_KepF>2%g096)^cN zUH#W2q;bjPkUVh(CgNTO^nc4crpiv<|DqWYmDtPo?~f}Rp3kQJn-Lxu6lXX7agc_- zu5#hMAQarxTj%!b2P3fNh}ief*lmLpb)dh$?;e-|C6%;N#AYs6@1YYBl?p@@e&*w? zR~Of+>icA)L)hzxBS>FCoIp`KYc>BDu~z9J zV;_3tSoesv?15wJ%^-BvQ>{C0Z~&-GIHZ-@^~UAVp%} z4q@f@N3kAZPcO#HzN5kC`I=jt=kf=lt~eN&>rgKqn&@6l=dHdWlSU)dnXY^9WI<{} z+CeU17oIteEN2bLGNUk6hTO)%*$C&}7FSA_mz9+VcRI@uw$g*uHYsCZnnI#Fu9GDD zlt?N2O4IZ(_k)m3V7ODeyv!|p*s)iNBO53oBlT}Hx5Zuti8WuB6WzEydG}^{y&??} zCq_Z0>*h>o8F45yS#}buxM4)8>YPex5gBR^C5U%;s;A2pwO=22!F=P#E^re3lTq_u zvk?ndTUj8Y70gw>YKv4r7Dff95mN@bB!@=}84y#%Xm1}vrPMbZl->n&b{qg+S&-)B z>V$M9%2F-0J%}`Jt+uVo$j>CD(IGRxTA|3HHGZtCO1B-JJ*90c_q^fa-MNHj>iFwO z@qpA6q^nviPTo2pW_gDwX&C4sXqry;RnxrrlAGGRyg^xQz;&@~?0t1=IKOGx-x6Lm zw+qIN3DO}O_a9_!*$q@Wfs6ez3~5)QTyWPijydVWI>_&QrK@3U@XF&OT2z^tK?Y6_`esYq zvn=7PfUyF01o6u=dzhD}i-EbD12su~Y@W~BvV!y~IXX*q-^)CzLwz#DY3yTW4Y;x5 z1qSJnZS|@Or14I1w_CMCU<62A!l&iV~(H^{$u;Tv>(>`ZA@ii>0)FQ`b~?V@0lRimcv zKkG2&{D~v*wlgAbnkzO!<1AI+#~?OND)L0@2%nNbvA+^8&XdcFX{-GC0wUGwS3doC z_WQq98bHSxnVB*fYq>ct$hEA9m$Wpu;M8rr3ogeIt3ns*UInw}+&vJfouw zlfs^+BELo@$A@+c$rlapV=OpW(+-3QI8&_yDDq>UYi{zUW(?b@9@)@ng0|{VKCkWT zSHsypzI(%%HtoexZ}*)cB!N?;62>u z8q~`j7*br>=s%Ps=f7{V17)i?noXTx6)EFsOm&+E#7{0E>9Uqzlw|yf|Gq*)1E`(+ z0v)a_MqyFC-EJA21(B&VX=isxv|5rlmw3AGXH!cZNpETA=P62q&S5mDn^ec7mQx(n zlRz40fJ%5q2d$;jy*}Z!Khu_>1{N?viJw{0R zGALkrkcJAO28r{EI9RCyLVs?Sq<>Y^XZHnp&g1@-ZvLC5xzu8<4R@|QS zJcd)iW*(C<2kAzRAh~MzIV(Fhf!&T2a8|#>qF3m2?PKO;zB^ z`g|Lb0_rDg+1nb-K@xdn=M-y0)pSqPktqC}Xi*+Aj0lgctDml?lxfeZSLA3Bs0SPL zid~TR^-#N@b7h$l$yxr6Mz8cfy|j)Uc!*;Y-^1BD!&+V`O&LgI}YO$~N_Aq1eZFXy}^50K~*0PcZXc&Jz*niwH z?CJ}mWYPZi@Df9Y=9UNMYewJ0fK;mW0lnD;pEY7B;QMEEwvU1vyWQt$;=L+ir;tAl zwu)wsTWo9I1BOj%;x)M@1|<6(ye{1%?06MuKUG3yH!lT*scS7h)gFeX`AUdlZ7h7^ zc8hn&e(@+62*y2ZQntLMuV0IcK9o35hp%wcu^*`(y?b>^Oy2tp(E4b5xCKsy8g6Th z!Fr;Q^6r7CBL0@7_`ceD%U0LY^F1)#J*7tSDd9#WNPSBiGreET|A{NJi{iOD%#~u| zXK~!zTd$ehls;p111&LP{?vlT;6Fh7$5rO^f={U7f2fsb-ETRiEG=_p2lh*JD-(VI zGm^buqAJ%hxz{O&MV)IEM%ly!=zeNE2`**-1zn>MM=*h%;q;bAv?>;pR&$)&)}M!K zKhp&E)0bY3+d*JeiboZ*Z+vT|aF(Bddh|C3kgxjojc2kw@4g_u(&r@AQ)yi1INhSoTkAUB|R)H8!7I#LD-!6ZGjcXox2lkrOM{M+Kd<$5hPa71=gcQ`Vgy75S z`{**h52M>u^%>djVZSJ=3sg|UMhwOoX*5>7YDZ7V8SqdkZ3GoY#f(6!rgbG0+9*Vw+F@O6Mm zrqv}bI{FG|KGMI3pjTRCfX!D7z_^CaL09ZHQ)=( zfwzwgVJI6blzL%8YJlG*JzJmu3f~4h2F(9qK1F>`WSCbkxD@v89f-{b(bA&kFE2(7 zZN~(ZTP*kNDAfPkc_dLg!*#96pelJeD@v}D*h1bsQJq>Hn=Izbp1HQ_qZY25 z@mXIFxT`f=>~aF~JZ+GXwrhiv14!5=tq?+9qnTT2E?L)v`GvapMD{T@d!&TXeE z1K$N@ia5ZH{Vpcytwl&De=hy^KNrFxhie^XIUvE(#06#6(wlb`o$a$EG$x+keeikX z&OOCH6d(7DF<{HS9dBukos58A;7?(pzOfF(9pxc$iQI4#KOREVpMQ6Kt>b8 zu*e9TcfA3|W_Vexjx%$<7AM6dzectnimw{pZ#}AX`_kF&h z+rEEKVa40pZ1%9c>W^oB9^dzUYy7-Bc3byuf0KLQtDpkIfqkDYuHRGsc;4^(A9wdU zXTSgRJ^!-}|MTto|6aWDUT^d9t^fZoJ5%2=uj>bvC*P*J&)@ZZ-|f8m!^V#-;tKPh zU%K~mv;N*sSHtz+&H49CecsQTLeChlpHwViNQl2V=i2*wcW3IyzPq9=b|Q_%d8g@xfp__DQ`Pan^(KEFG!_V<^YFQ4@u7uS9q`rqL0 z-J832)P6g38R(#z$LH&7er~t7`?$LPN_69O{{{wz-!f_G|Cr zB4cB|W**;T&VM^y|4&MJ`TOgSE##^m@;~2K{oui=WAEP8y!##h=V$z@y9c&%3ILrs zd)u;yjqdOFyneCKnP2XnO~HQyp4HXWpX0Bahuyc;TW6!bY4>LHGlvc4{JeZx{`a-z z^J=Z+d15AiS7U6bef#OVy`O*d<(G*P*X#<;N1M;9f7e=XSMumbbN;^4&(_`lJ0?uM zdeq?j=MS%r-rcX8tY44|ER%OA#_&z_p1wZu)-1oeXWsAs|9!UQ-@?PQ+3oh16+F#- zY_U#9?65)KWfYkJ~rY0)l+9nEEmhbQpqP`2AW~ z_WWq%6PFv&3yVIv!PD8#I=#Hlv|BKxL=|`4RoX7P{aUiq_Q_+u#g)D)j_Q@R8+Lww zy!Z9X@GB$W{cIUFPwd~koGRIoc7H@Y2o4eBoS3_aZr)wl=Y1N`+jl4#nR(-2!PCnQ zVs_J=&+5_KBgikSbM!$yI7JJB#JxQW8vGfZ6g3^f*8#_NU+m|SFU=x^wUvA)dv&MO zUU6%QAO{IxkhsFO?U3|}ZzajGPZJ|)Z1zqb!Wsx|gP;pXjG)-x)dOdQ7+6RM!eX?% zA}6v(=~Bj}4ckQ_NHP(8y0bwE^S62|CK+p8%-Q?s%Yp`Gmn3k3446SYqSDu`uir2> z=3hn-#Cf>$ug$~YMeI%Rw8oF4?d}6{dsjrjz|sug==zhQoK(St^^TR_In~z6U{E6! zen)+WFehHHJk+peQZIQJYW$j9aB@4tNO4vOie1l8f}facz43Q?nPviCr;7xqSkJ2r zWA<*qW5F4pgs1R6By2IFzvM~W8pyr3U&hpKJ@C}wBLbUm!aZl#ye8L7&Ja_3HLKm~ z)GU$3s~biLRd{il9AD#CaU>Y_8ky#jmFpT#zJc6{ z=KgfpKi2)@8|dXPhyT67M*K?@N#hju{zkF=;2a?L!#(Q}!Lw+7!z?bE*OKo*-llH_ zRt+ueE>~^1Gn1BN5KieYF{e~yvh^F6fy=DzBdSWe2&AngJv(aX%se8qz=14W_Y`&* zG8!EqF~>uib26N(zjv{y#|+$W2kihBie=^2=GA!*+VshT@K}3gfEdLhRBJi6 zca=}BCyy-7XLW1gZ@?r4R z<&6R%@<(l9Ic`VTyZ|LiuMnz(YXj=l1lI^|8rUcDD%iq?!1MQ9@q}!r)iJBSw>8Tt z#kJKXGwl)b?lb^DckAMifOZ0L>tQ^ucB&x;SAaMRw#WYo=;FwZ&m)-|oAkc4hV{)H z`CEJ0A6!ZS(h(b(@xJ7dn8hUf5k72DDD=|-Fx721rF5o!xYnMA=Gw|;(B2u$2F7k4 z1%?XQ&kUxssPEo*1W@1m_41K+R6fm~IZzr!HzM!&lu`3)7bISx1iy%tOsS9BxSaLn zMa)03k@XcoR}cmNDNg?HA@F~6=1k*0VF;Q_jAQ9Xtas)qXEz|&T~26Djx0fyaH9Vm zZdcfRik4+LP6(3r?&6Lh6tc^nvxTRarROXu$tsxXOICQF<|BF_a4Q*~4*C_c=jNO? z5?GrI6+ahz<-JEw*IS6K+FKoMRbQ{n?5TG;hqX1&xWz43*ji@yd+||1uCjoBF4!_o z9xz;Im$METs&+s~K?7IIQz=EldGS&gTNs-@7dD>54yt zjW{W;c}&u(Cg-eEoL_&9ku(^qbLzu3=%vmwffm9H^hv6#dGT~*_&~yZR!XZj ztSZ_REhixzRsv#0xJ0X}M}wXGSb<4i6IH}io%U#XpkOdwx~YFmqZ9zKl>E^1VPY^@ z_ts~X`a&>xAu`v2H;*W9YUf99KAuO=%Y0C-_H(DIIICrM?|SU|4LlOFRqhkz!CT=C zn|qp5I%YqoNg5x&vp@A!vKCgUXF694#fT>b^`VX(dMckYnPRUuVt}}5aS_uK|3>3l z*j})z)g_nwX{(skY||_!$~STeJjSIMi<8SjN@Qd>o(x80d4r}f=X+@vE0xi)D@Djn!l`E?fOI*_ak!SmX;-@l<_SmW3`odS4Tj990y19 ztV}0ljzf;&F8EE~6BeHtyhh|dOO5rM$o(R<^M{Z^q~e|;)7VDI3Aa;FY5zs?A=vmU zL)hjk8+(KoK$q4zdh5|=Q>LQ5Bx{$|p6TItSx^{W|Gp#?W}9D@{|k$kMInVZW@9yF zvP?Qkio;T^Ng{b;WHkCW*F4`ZR+fl@13hqWXG`(XzY)NIn95j zC~=9(^18^DUsAhnDh!7WD3d}tkL7Ya97{?g*`L~~G$N+|8VPqG%NUDtqZ~yQ*Df5u zih|&3axN-<0us~>uhzEoW(6JQkz5{gkfpjm<@^1|m8ajcE}gAGSG!f#1%-!O64Tj- z8mVODD&56qML>3lD-W=1kkNlUeco6fi9Z-`|ius!<=1|q2 zo;MK+`&xRhMggf*bQ+Nz$-6JswZS`xzA|^*yXL5T*jXSAuy>bggKmscV6^M(3qdBU zU0xt@ien0cu9?9+wBg$wypMG5r!z@E6cD4W-|luKajlM|ZD zVtU8^);*3{C` zeaEj)Q;7WYnPZPK^*yG)kbk}Eb`(!#r>ZLKQ_xte*`p5i5Dx}qQ}3)5 z#YcrP<_b`W2XniQ?@z_P^^v*R>zk>@WmzhmOgzpUDyyWA=kkYB-UA*VuoUe7n@-tj zRG;Z(?vD?qXJdSOo_a+ATPvv4ud==fcDo2g!8v48f|doejK9E*&-NLt)ix*4G?|P) zJxiDb3~;)Y)j%lO3bomsWPq9nDPo88PT6lztkiq9DN4A{*^S~N6 zj-~UbYhO7em@S98r@p@0g*}U<19_`0gzo0xT$QF48F%Y4<`B z+x+WWElU$8AAf&Gcq;J!2v!PAP$ld%WU$Vr7+$+2p6Eb6lYB0~3`bqRwLbRfOEh_e z*K{M76ZQL>EO{=$@Dj=h)&i3sf@b>H6>AY!oO&&#a?=IP_Ao*cOc);A}NIbD}>W zSUS^Rj;O1p8=sza;54tNwKuuN&<@0>_h-y6#ws=fA>{s4XZ9}&mD65KCC%{?sOvf1 zH8v)qiceb7F5z?XcOYce-{At>@)6xC2JSxu1k4zDd)2#w!|Bl_a|eE*<%GHG=mLt1 za#&AoWm4DjcNB(fM)to7u{(32>h85-L>t{rf3|?_F%`!mE;TL<1s%;Ri|udp3ln<& zD6J)9DS-Q_C^rWkHKV>1r?pFQ7d!<65@bSQ=bV1o_1*cB*o#psA%&xcd`{+Sr>-|| zIP>Cki~lP%o>N;+28_R!VNT&_`rFu6AB#haY%K? zNM54UD6az`eLeT+b;z0?p}oT7b>+G(J`iEOjtV_~s{K-mQbmZCRa?YfcXyypq>qtS zxeDm-FZ5JsZ*3{o_<|QBIq4lR1c1hG>nAHiDC-LrZf=fWBD$Q_c2TA)NP4s9WABc` zL10*{7z{h9CaUt=i|Dzxm%F~etf)&(!wNu|EQ%x|{pB>@Ek4#$h+G;;Qs3;U+b5%b z{5KN>nw-(sT|rQPwWoRVEP8D4w3>tU+^KVH{~z;I+WFWIe+VeX#?`(AE2*|u5wnon z5FI`tMqP?SZOxvS(@Z)^YA8EVF*hHGtklA2VVq-DFRxxYj~`h~mCLQ&!kU)oa$#Zy z{pU}hqbO~@{atusFW1wasgtX^d;*>Rae30 znu_qfzd^(|CR70Mpm`Yy0a;;25uMaJ^wh*mjs&fYs}OO=?v4cxw%$|H9(PrxK01yN zJvYP^BwA6${f@iycLf*R@$2w&{>Hz6G6{Df+JN&_CcXmTbPk(-9N(q$Zk8uNQhm4y z^Fe|EXX1#qA<1(%cJq(B7B$~eMZ`K1Z3|^7j)5wo2Nz5U; zvX$M8Co15^ZJxb2bCnjp_8^a>1JX}jA#2sPn=!H4ujX`T;*GRd6kW zt&dex*GCU72eYEak%-#J_Fh7X6Ms>UK-%Cetp}+Vb7Nn$|9T2?Pr}9A9@ZAylXr22 z9Vf>%uAGfENx5ooAn)HW8Qh;!w>a*nSB{gA&J<`Q*WQD<`s3LqZief$hDCHt+3krV zvi3eO35^iJjgRo8_EI9k&5=3UGn*mep8NBnmD$hpvVnkJ1N-`a^}=N|igfG2ZH*mO zmJc1GPixVUaemtNgOKgyu)I}dHZ ze3D+(T^5HOnZz+k?`36za?+?n=}|z~BUIVmFlBLVK##A@Ckm3zvudhwo2_L1nu*rc zty?qbw+^Hj^YCb(@tieA!1+8^vpoNbJ%Z3&Zne-UonL68-d<@f;WJW|<0P3K5o*%R zIdJZb?rMYZFT)D8#Y;4z(wFMQOS+D_GKB~99>OQCT&B_QdHK*1BV=+qqJ`=$32$#$@&8QfB$dER|>nvRG3b z;5?&Igj^80hO13TlS#Ef80+%2-3k#hxa*F@x8Zi>Yq9qQw=PB(;8u*A zE9VD1iQ13i<46sj$bpsF_a`%4*lD?&qu}dL@)FpyfaZJh_0(OeUiLf*h!{uq`l|N$ zB5G!9@#rcZ?hBgTVi?AM=I}+NDGk(I7=8Oz1L`a6hU>>G?aZ5&+^R<%i}PO~yvCo; zi0K+=(`&v-dBKkS<7Fp_k+mO5$lg)yk@l&SWbG6DJ zplMFvTL9^`jDQ1LJ=fmO+iO6e$^*c%;uQ|2u9KK7USI3>8C-sJau zdIxa21|~6QxnQ5Jgh3$n{v*UFoV1YneWDtqQp-#?f8Sg!bvzp;Yg|)}F5K?gCLl$# zOpUD(;shNBD<&>KcY%|VnXJW!s-B;l)4T4id!8Gc63|`SOlI`wipBVxP-Dd8K>g5d zQuRfJu#w4vE2)kf%TF5wkN7?<{L# z8@XHrR6>7EQEIn>ad@f9YGJc;#t5$lS8mwmA!5ju((j&Df4ytqlO|#2EP-&_6+p~Hom+< ztdD9N+x#(D>&*|?%vOS*@nt-|nsw1q-Y|&wVp(5hJ4YZqAo7U-H~W#Q>AN;2SBEhq zoFB4PeyQM~Un(dkM6AyOv8E9|u7CsSN`KH06qUoJx!^b&gMlaC0O!`{+0B1phX!Oh-a1Ix_{gFsSbC-? z?c(G$kpvzYLrpF<53yQIfg({th$>D_SZ!yUfI7ikJ_jDJ9rDFhAE+7kBY|%D!q?`lMK;6p1>Z>u=L4l#uDlq&w;sDgbvUA~Nqt z@Sa$s1t2+P+o4C9GABiuWEQ~GqoSv?43^U+KYq&CAbu06Cj~IdSbAqLw<$(sQMLdi zu~OkvPR>V(#=0*(hlFr&(Vqp;ra^O0PjzNlR>1MII~q(s7%WPNKw~?)>%-ejQ^XW8 zSRsX-jAQ}s^Ft)03~?J>#XHRadisouxHq)l2&)S!%XI_bLr44yCk;hf`8}?&_*Y=h z!pfOvj|(b?a1G0Ksw&KIeM^c9ANH%b2;lm$IL@CEW+{_zPG7tmp(Hr+DJ#-)3x&q3 zj!%+a)0`icPnMIFSDB0AJTTqqepvc9fyJ-?mZ5}ve%xy1u(YwY`t-^(@r5(*DI1^l zmXH}P{5gvDR{srTx(nZHuI#xhP@C>wZ-OitAny>>)K=B~QP?MG(*n@{-IyVo`JbLv zkw#VcnCF}oKUy94+ib%c-zS4s7ZmIBSFK%J1W5g~n{vI^ZylfZ!Acqr|0qbxStSu^ zqKf*5P!H)D?zVUQx&p!`u|9nUVe{lFLUfpuC@n#6caI_fOF&XZv)qlPo~iA zUCt(*BJn}GMVWOTj6nG@ox)f1lT!%&N~T zP(dt08h2!wm=Ty;<@u2#ZtuQ#nfqU+RH$PJoUIc=_Q2sECdN1V2?S1lR?Kp!qj^(F zPFlWj*yoH3ZOk=j=Rtb#SPPVLw`RiyF`Am-s}?G*x(N z0m6SD;Jbi|9d*e+cOEo)L!x18!Bg2~jZYZe_zDu*wXK;>$ribYh=yF{{;$__G*}~p z(NptI#-gZ|ja{*@OSj%`gLb|TjK>*lJl|(nrsH<#$~?;x72xp9DX{fuKi=U^=;Sc} zHPjc8Frc8nL2cGbhyhRW%8kxB@#3|*k%CB`pWGGy1`~n z=M#K}Wm7=~D~oNkC5Tz|Wc5d{ALXK$9%(qgEECaHFPKD+te`9(V_HVc)AiU4C&+5k zD`r5$g)L|{%ze23=)}xgI9-kT^iGIRU%3%X(A!bZ3;pE@Srm(PRNKnZ+QMvRjnFya6)$^?(> zJD~}X?0!jfeC93v?u$;rWcA4%+L$PlJc$4g!=JKN&|CY@n@yHK8)q*F(N`jWxKeW@ z6fwyX2tny>(X8>XK*00wOkRo4jp^}ejXDcYS(syd7FNV)f+CJ|HVEBP+QY=S^haeL zm(-+;1Bf+>pt1779Jq-8FMR%s-;B*vN!wiS0*g4qZ%q5Pc!e}PPTp8F%_YrpT-Cv9 zySN=7je&qwxA3hN$&Xg=aKh3&fpYubw$ny-h(Tiqt`+NvDdLazGP;aK5q%Sl$)Gq2 zxqf)LPn~OIN-w#0a>|;YTV1WdYxBy_C0Kl9!!$O8)&yua)kHR&=%rVUEGOi8#zj;tWc8UkfnMA3-I8W8z4 zs-hV=1aTvh+)Pt8(v+<yE_ zqaDoD>kPDmp=x8Kwlh=O>2MvAXeU$N02k?KC+l!0BejE(*2PY{!Ak35Dch(Jz#CO< zbRz?^6Y5#%H(BXj?DU(QBR5z_x>y}|M$>`x^>$%x_URIy6 zrgyWm`gl40+?;-1W;Z7X;#WiCl;2LR#u-`ud=aOy~fto zZtYqJhjm}9U+=PEqpO?O4qt-5e*lS0rUW5$I)lv>28Zm4+%FQv#Y-e|xiUqSmXVQ} znOkt;#EFx|C8ejoFITHI7i#M2>MveuY;0<7X=&GWc6Iml>HBXF3=RzqkBp7ozyEOj z(ZrKqetrJOitKYaKwJ39wsetuzLVP}s=GIaASLfXk+V>@+YwqoFrJ(zg^ zqIE2|se~HmP<%CiQdh)ATyGt(mF7LPK5N}VC6S`3(0Nlp$6d$zJyyz^0u*FJU`0SnI!Zyv*0!-xF!&4EPeI7fbb*rh>Pr?F# zke6Q_K?B04IwVRQ5`xvAk$9h)`h6X-Ku{gQ1h%SjdqY6Yk6$H-XkavJF5z79W}SQL zy{)JSyGVaOUbf3j-Cx^dxRkU4TczD5_)@oK%Fd)pA=_P(7(Qjl`OTUre7Z1le`b>n z;d5e7Sq!&#YJ+o#iK}w<&-M}IL1iV_u`=2*NI>n|C0{Y2o0%>hCZx7sNtJ@pGewn_ zj|qNt9_ZjBs>8eOOOCxA8Rg5O_5d&Q3XS%O7KrMDRyoR-t9#w5$B&=Xc$-vRan=kM zP1kLn_j5*%V)o9By&HX~t1r7d=z)=LSG*p!axBR4I-r~eTD#zL^S3kb_0Ww8Mfq-%<#CKljqQXZ@%77E4rCiNdWgq z<%ioE)jHO6s0bd}ffjE6rLSJ87fi)l U2cK!{#4_V!5i*l>(Le0SUvD*69smFU diff --git a/src/modules/locale/images/orig/timezone_7.0.png b/src/modules/locale/images/orig/timezone_7.0.png deleted file mode 100644 index 239115af9bd7e3c508a86102c587276ee58b7961..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14412 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 diff --git a/src/modules/locale/images/orig/timezone_8.0.png b/src/modules/locale/images/orig/timezone_8.0.png deleted file mode 100644 index 3627686fda461cb759874807eb4b299ce93da6e7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16725 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 pTmAh1%EkZSCI1z_|Bsar?ti4E&_Z5% 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 diff --git a/src/modules/locale/images/orig/timezone_9.5.png b/src/modules/locale/images/orig/timezone_9.5.png deleted file mode 100644 index 1c3290c088b95243f4e4b553a39400887c483563..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1959 zcmeAS@N?(olHy`uVBq!ia0y~yU{+vYV4TUp3>0zuvh*B~VlH;_4B_D5xc$)o0g%gC z;1OBOz`(W$gc)7$8Uh&%k|nMYCBgY=CFO}lsSM@i<$9TU*~Q6;1*v-ZMd`EO*+>CR zy&m8b;>vHq|NsAgAPGm>k#cahQIe8tg|1h<0Z>FMQqH4RU)o*FI7L}EM!_ae!?VsH zpv~AaOD&|!)W6jjsM5V!FTBqjNCtPA0;Pb0A>C$Sz2*rsZGdFPV#nC2)`_!ifsFVW zHYxM$(-u0UFLKCQ>I7tGFLMHl=dX4xSOY?73mo!SyX3BL&RFD_x5}kpt!vJ5XP|h_ z3g^PLZa|elM)3ysqIGUSK@elTd+8<*koa(E0FdATe;^x# zjs`Xz3IHl-Jr)Q=Ek^=@BCSUQ+fM`mxj+)AtL=CYkO4#;Cxbgq1p`Gu>{G#=r-C7Z zKt|{3kgn4q?I(kPWcQhn?z2D?+5<%ALiaD0KLSh#(@KK;f`L)Z#LU9N%Er#l&cVsa z$;HLP%gf8h$1fl#BrGl=B_%7TsG_c+p{=cFYG!F=?c(C<;pye$=N}Lp8WtWN85JEJ z8y6p+n3$N9nweKtT~k-z+}7US**9V0{P_zOFIll>?Ut?Ewr}6D@4%7cCr+L^efrGh z%U7;lzjgcez55RyK791-`K#A&-n@PL?)~R)-@kwV@$=80fB(E~mn~*sU|Hbl;uunK z>+SW>d}&9KhQRl?GK129;MkOzGk5AOy|e7hncm6o`qw7Ao{PFW_16`*SC;z9Z!f>f zvODXe#t@X+!@$DC#Ms#2;Gm!&Ai%-F!omc?goGd}QB+|F!OTNag&~Bn6|M@4kTL^` z1A$5z;L73FVhUk+gNYGCh+3ZIIKqM9aO6ORx)(zT!)FZ+7($pn!{UDopJDMVlOYp4 zxL_{9h!Oz~G@%dSB~hCazMbejyqT$yMYw$Ke7UgrTf0kKKC|(%GEH?`8@=^mq{v>& zy*baH_+DmVGJNn0mzfsUE+9bW}=V|PX= z1Wem4_WrTk`$l0Frl;b+UL57!=y2`N<@tgfxxQcDT7MLN^0=>$sqvbFoaAW^+FsftU|8+x7i{h zMiUvU8#&z$0v=8Zy01Voh~(d>Ab>y(4iEU5D?hw?cQ*NFlY>I0|F@MVpEkW&wCmS0 zw?>Dqoc2m?dv2DX*5W9=sB~!-ru{Pu_lg|rp6T!PI<(OtW_|Thy;W*7gc_~cLx*o4^VcEM3wzz~859wK-#gkYNCnf1^5I>rSP`X35+ SdVK|!rVO60elF{r5}E+;s&tD0 From b65b5228e11f38e07ef821ac3afe8d39cb02118b Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Tue, 25 Aug 2020 14:22:44 +0200 Subject: [PATCH 100/157] [welcome] Don't apply code-style to other C-code --- src/modules/welcome/checker/partman_devices.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/modules/welcome/checker/partman_devices.c b/src/modules/welcome/checker/partman_devices.c index 4fd3dd4c0c..caee5759ce 100644 --- a/src/modules/welcome/checker/partman_devices.c +++ b/src/modules/welcome/checker/partman_devices.c @@ -19,6 +19,10 @@ * along with Calamares. If not, see . */ +/* This is third-party ancient C code. Don't format it. */ +/* *INDENT-OFF* */ +/* clang-format off */ + #include "partman_devices.h" #include From d6d3b4148449eb0d41ef71dedead791eca33bffd Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Mon, 24 Aug 2020 17:36:18 +0200 Subject: [PATCH 101/157] [webview] Missing Config include This was causing CI builds to fail, since WEBVIEW_WITH_WEBKIT is defined only in the Config file, not on the command-line. This crept in accidentally while trying to get rid of that config file entirely. --- src/modules/webview/WebViewStep.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/modules/webview/WebViewStep.cpp b/src/modules/webview/WebViewStep.cpp index 50c270b09a..e1261433cf 100644 --- a/src/modules/webview/WebViewStep.cpp +++ b/src/modules/webview/WebViewStep.cpp @@ -17,6 +17,7 @@ * along with Calamares. If not, see . */ +#include "WebViewConfig.h" #include "WebViewStep.h" #include From 0b3298fa44b2957103963d28fb0ed8500a618cd7 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Wed, 26 Aug 2020 00:19:27 +0200 Subject: [PATCH 102/157] REUSE: LICENSES/ files For proper REUSE compliance, untangle the lists of licenses and place a single copy of each license in LICENSES/ . The License-Identifier in each source file refers to these licenses, and FileCopyrightText provides the context, "above notices" and similar attribution data. --- LICENSES/{BSD2 => BSD-2-Clause.txt} | 0 LICENSES/BSD3-SameGame | 49 -- LICENSES/CC-BY-4.0.txt | 324 ++++++++++++++ LICENSES/CC0-1.0.txt | 119 +++++ LICENSE => LICENSES/GPL-3.0-or-later.txt | 0 LICENSES/GPLv2+-libpwquality | 383 ---------------- LICENSES/GPLv3+-ImageRegistry | 16 - LICENSES/{LGPLv2-KDAB => LGPL-2.0-only.txt} | 0 LICENSES/LGPL-2.1-only.txt | 467 ++++++++++++++++++++ LICENSES/LGPL-3.0-or-later.txt | 163 +++++++ LICENSES/LGPLv2.1-Presentation | 83 ---- LICENSES/LGPLv2.1-Presentation-Exception | 22 - LICENSES/LGPLv3-Breeze | 209 --------- LICENSES/MIT-QtWaitingSpinner | 21 - LICENSES/MIT.txt | 19 + 15 files changed, 1092 insertions(+), 783 deletions(-) rename LICENSES/{BSD2 => BSD-2-Clause.txt} (100%) delete mode 100644 LICENSES/BSD3-SameGame create mode 100644 LICENSES/CC-BY-4.0.txt create mode 100644 LICENSES/CC0-1.0.txt rename LICENSE => LICENSES/GPL-3.0-or-later.txt (100%) delete mode 100644 LICENSES/GPLv2+-libpwquality delete mode 100644 LICENSES/GPLv3+-ImageRegistry rename LICENSES/{LGPLv2-KDAB => LGPL-2.0-only.txt} (100%) create mode 100644 LICENSES/LGPL-2.1-only.txt create mode 100644 LICENSES/LGPL-3.0-or-later.txt delete mode 100644 LICENSES/LGPLv2.1-Presentation delete mode 100644 LICENSES/LGPLv2.1-Presentation-Exception delete mode 100644 LICENSES/LGPLv3-Breeze delete mode 100644 LICENSES/MIT-QtWaitingSpinner create mode 100644 LICENSES/MIT.txt diff --git a/LICENSES/BSD2 b/LICENSES/BSD-2-Clause.txt similarity index 100% rename from LICENSES/BSD2 rename to LICENSES/BSD-2-Clause.txt diff --git a/LICENSES/BSD3-SameGame b/LICENSES/BSD3-SameGame deleted file mode 100644 index 9aefc27c53..0000000000 --- a/LICENSES/BSD3-SameGame +++ /dev/null @@ -1,49 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the examples of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:BSD$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** BSD License Usage -** Alternatively, you may use this file under the terms of the BSD license -** as follows: -** -** "Redistribution and use in source and binary forms, with or without -** modification, are permitted provided that the following conditions are -** met: -** * Redistributions of source code must retain the above copyright -** notice, this list of conditions and the following disclaimer. -** * Redistributions in binary form must reproduce the above copyright -** notice, this list of conditions and the following disclaimer in -** the documentation and/or other materials provided with the -** distribution. -** * Neither the name of The Qt Company Ltd nor the names of its -** contributors may be used to endorse or promote products derived -** from this software without specific prior written permission. -** -** -** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." -** -** $QT_END_LICENSE$ -** -****************************************************************************/ diff --git a/LICENSES/CC-BY-4.0.txt b/LICENSES/CC-BY-4.0.txt new file mode 100644 index 0000000000..3f92dfc5fd --- /dev/null +++ b/LICENSES/CC-BY-4.0.txt @@ -0,0 +1,324 @@ +Creative Commons Attribution 4.0 International Creative Commons Corporation +("Creative Commons") is not a law firm and does not provide legal services +or legal advice. Distribution of Creative Commons public licenses does not +create a lawyer-client or other relationship. Creative Commons makes its licenses +and related information available on an "as-is" basis. Creative Commons gives +no warranties regarding its licenses, any material licensed under their terms +and conditions, or any related information. Creative Commons disclaims all +liability for damages resulting from their use to the fullest extent possible. + +Using Creative Commons Public Licenses + +Creative Commons public licenses provide a standard set of terms and conditions +that creators and other rights holders may use to share original works of +authorship and other material subject to copyright and certain other rights +specified in the public license below. The following considerations are for +informational purposes only, are not exhaustive, and do not form part of our +licenses. + +Considerations for licensors: Our public licenses are intended for use by +those authorized to give the public permission to use material in ways otherwise +restricted by copyright and certain other rights. Our licenses are irrevocable. +Licensors should read and understand the terms and conditions of the license +they choose before applying it. Licensors should also secure all rights necessary +before applying our licenses so that the public can reuse the material as +expected. Licensors should clearly mark any material not subject to the license. +This includes other CC-licensed material, or material used under an exception +or limitation to copyright. More considerations for licensors : wiki.creativecommons.org/Considerations_for_licensors + +Considerations for the public: By using one of our public licenses, a licensor +grants the public permission to use the licensed material under specified +terms and conditions. If the licensor's permission is not necessary for any +reason–for example, because of any applicable exception or limitation to copyright–then +that use is not regulated by the license. Our licenses grant only permissions +under copyright and certain other rights that a licensor has authority to +grant. Use of the licensed material may still be restricted for other reasons, +including because others have copyright or other rights in the material. A +licensor may make special requests, such as asking that all changes be marked +or described. Although not required by our licenses, you are encouraged to +respect those requests where reasonable. More considerations for the public +: wiki.creativecommons.org/Considerations_for_licensees Creative Commons Attribution +4.0 International Public License + +By exercising the Licensed Rights (defined below), You accept and agree to +be bound by the terms and conditions of this Creative Commons Attribution +4.0 International Public License ("Public License"). To the extent this Public +License may be interpreted as a contract, You are granted the Licensed Rights +in consideration of Your acceptance of these terms and conditions, and the +Licensor grants You such rights in consideration of benefits the Licensor +receives from making the Licensed Material available under these terms and +conditions. + +Section 1 – Definitions. + +a. Adapted Material means material subject to Copyright and Similar Rights +that is derived from or based upon the Licensed Material and in which the +Licensed Material is translated, altered, arranged, transformed, or otherwise +modified in a manner requiring permission under the Copyright and Similar +Rights held by the Licensor. For purposes of this Public License, where the +Licensed Material is a musical work, performance, or sound recording, Adapted +Material is always produced where the Licensed Material is synched in timed +relation with a moving image. + +b. Adapter's License means the license You apply to Your Copyright and Similar +Rights in Your contributions to Adapted Material in accordance with the terms +and conditions of this Public License. + +c. Copyright and Similar Rights means copyright and/or similar rights closely +related to copyright including, without limitation, performance, broadcast, +sound recording, and Sui Generis Database Rights, without regard to how the +rights are labeled or categorized. For purposes of this Public License, the +rights specified in Section 2(b)(1)-(2) are not Copyright and Similar Rights. + +d. Effective Technological Measures means those measures that, in the absence +of proper authority, may not be circumvented under laws fulfilling obligations +under Article 11 of the WIPO Copyright Treaty adopted on December 20, 1996, +and/or similar international agreements. + +e. Exceptions and Limitations means fair use, fair dealing, and/or any other +exception or limitation to Copyright and Similar Rights that applies to Your +use of the Licensed Material. + +f. Licensed Material means the artistic or literary work, database, or other +material to which the Licensor applied this Public License. + +g. Licensed Rights means the rights granted to You subject to the terms and +conditions of this Public License, which are limited to all Copyright and +Similar Rights that apply to Your use of the Licensed Material and that the +Licensor has authority to license. + +h. Licensor means the individual(s) or entity(ies) granting rights under this +Public License. + +i. Share means to provide material to the public by any means or process that +requires permission under the Licensed Rights, such as reproduction, public +display, public performance, distribution, dissemination, communication, or +importation, and to make material available to the public including in ways +that members of the public may access the material from a place and at a time +individually chosen by them. + +j. Sui Generis Database Rights means rights other than copyright resulting +from Directive 96/9/EC of the European Parliament and of the Council of 11 +March 1996 on the legal protection of databases, as amended and/or succeeded, +as well as other essentially equivalent rights anywhere in the world. + +k. You means the individual or entity exercising the Licensed Rights under +this Public License. Your has a corresponding meaning. + +Section 2 – Scope. + + a. License grant. + +1. Subject to the terms and conditions of this Public License, the Licensor +hereby grants You a worldwide, royalty-free, non-sublicensable, non-exclusive, +irrevocable license to exercise the Licensed Rights in the Licensed Material +to: + + A. reproduce and Share the Licensed Material, in whole or in part; and + + B. produce, reproduce, and Share Adapted Material. + +2. Exceptions and Limitations. For the avoidance of doubt, where Exceptions +and Limitations apply to Your use, this Public License does not apply, and +You do not need to comply with its terms and conditions. + + 3. Term. The term of this Public License is specified in Section 6(a). + +4. Media and formats; technical modifications allowed. The Licensor authorizes +You to exercise the Licensed Rights in all media and formats whether now known +or hereafter created, and to make technical modifications necessary to do +so. The Licensor waives and/or agrees not to assert any right or authority +to forbid You from making technical modifications necessary to exercise the +Licensed Rights, including technical modifications necessary to circumvent +Effective Technological Measures. For purposes of this Public License, simply +making modifications authorized by this Section 2(a)(4) never produces Adapted +Material. + + 5. Downstream recipients. + +A. Offer from the Licensor – Licensed Material. Every recipient of the Licensed +Material automatically receives an offer from the Licensor to exercise the +Licensed Rights under the terms and conditions of this Public License. + +B. No downstream restrictions. You may not offer or impose any additional +or different terms or conditions on, or apply any Effective Technological +Measures to, the Licensed Material if doing so restricts exercise of the Licensed +Rights by any recipient of the Licensed Material. + +6. No endorsement. Nothing in this Public License constitutes or may be construed +as permission to assert or imply that You are, or that Your use of the Licensed +Material is, connected with, or sponsored, endorsed, or granted official status +by, the Licensor or others designated to receive attribution as provided in +Section 3(a)(1)(A)(i). + + b. Other rights. + +1. Moral rights, such as the right of integrity, are not licensed under this +Public License, nor are publicity, privacy, and/or other similar personality +rights; however, to the extent possible, the Licensor waives and/or agrees +not to assert any such rights held by the Licensor to the limited extent necessary +to allow You to exercise the Licensed Rights, but not otherwise. + +2. Patent and trademark rights are not licensed under this Public License. + +3. To the extent possible, the Licensor waives any right to collect royalties +from You for the exercise of the Licensed Rights, whether directly or through +a collecting society under any voluntary or waivable statutory or compulsory +licensing scheme. In all other cases the Licensor expressly reserves any right +to collect such royalties. + +Section 3 – License Conditions. + +Your exercise of the Licensed Rights is expressly made subject to the following +conditions. + + a. Attribution. + +1. If You Share the Licensed Material (including in modified form), You must: + +A. retain the following if it is supplied by the Licensor with the Licensed +Material: + +i. identification of the creator(s) of the Licensed Material and any others +designated to receive attribution, in any reasonable manner requested by the +Licensor (including by pseudonym if designated); + + ii. a copyright notice; + + iii. a notice that refers to this Public License; + + iv. a notice that refers to the disclaimer of warranties; + +v. a URI or hyperlink to the Licensed Material to the extent reasonably practicable; + +B. indicate if You modified the Licensed Material and retain an indication +of any previous modifications; and + +C. indicate the Licensed Material is licensed under this Public License, and +include the text of, or the URI or hyperlink to, this Public License. + +2. You may satisfy the conditions in Section 3(a)(1) in any reasonable manner +based on the medium, means, and context in which You Share the Licensed Material. +For example, it may be reasonable to satisfy the conditions by providing a +URI or hyperlink to a resource that includes the required information. + +3. If requested by the Licensor, You must remove any of the information required +by Section 3(a)(1)(A) to the extent reasonably practicable. + +4. If You Share Adapted Material You produce, the Adapter's License You apply +must not prevent recipients of the Adapted Material from complying with this +Public License. + +Section 4 – Sui Generis Database Rights. + +Where the Licensed Rights include Sui Generis Database Rights that apply to +Your use of the Licensed Material: + +a. for the avoidance of doubt, Section 2(a)(1) grants You the right to extract, +reuse, reproduce, and Share all or a substantial portion of the contents of +the database; + +b. if You include all or a substantial portion of the database contents in +a database in which You have Sui Generis Database Rights, then the database +in which You have Sui Generis Database Rights (but not its individual contents) +is Adapted Material; and + +c. You must comply with the conditions in Section 3(a) if You Share all or +a substantial portion of the contents of the database. + +For the avoidance of doubt, this Section 4 supplements and does not replace +Your obligations under this Public License where the Licensed Rights include +other Copyright and Similar Rights. + +Section 5 – Disclaimer of Warranties and Limitation of Liability. + +a. Unless otherwise separately undertaken by the Licensor, to the extent possible, +the Licensor offers the Licensed Material as-is and as-available, and makes +no representations or warranties of any kind concerning the Licensed Material, +whether express, implied, statutory, or other. This includes, without limitation, +warranties of title, merchantability, fitness for a particular purpose, non-infringement, +absence of latent or other defects, accuracy, or the presence or absence of +errors, whether or not known or discoverable. Where disclaimers of warranties +are not allowed in full or in part, this disclaimer may not apply to You. + +b. To the extent possible, in no event will the Licensor be liable to You +on any legal theory (including, without limitation, negligence) or otherwise +for any direct, special, indirect, incidental, consequential, punitive, exemplary, +or other losses, costs, expenses, or damages arising out of this Public License +or use of the Licensed Material, even if the Licensor has been advised of +the possibility of such losses, costs, expenses, or damages. Where a limitation +of liability is not allowed in full or in part, this limitation may not apply +to You. + +c. The disclaimer of warranties and limitation of liability provided above +shall be interpreted in a manner that, to the extent possible, most closely +approximates an absolute disclaimer and waiver of all liability. + +Section 6 – Term and Termination. + +a. This Public License applies for the term of the Copyright and Similar Rights +licensed here. However, if You fail to comply with this Public License, then +Your rights under this Public License terminate automatically. + +b. Where Your right to use the Licensed Material has terminated under Section +6(a), it reinstates: + +1. automatically as of the date the violation is cured, provided it is cured +within 30 days of Your discovery of the violation; or + + 2. upon express reinstatement by the Licensor. + +c. For the avoidance of doubt, this Section 6(b) does not affect any right +the Licensor may have to seek remedies for Your violations of this Public +License. + +d. For the avoidance of doubt, the Licensor may also offer the Licensed Material +under separate terms or conditions or stop distributing the Licensed Material +at any time; however, doing so will not terminate this Public License. + + e. Sections 1, 5, 6, 7, and 8 survive termination of this Public License. + +Section 7 – Other Terms and Conditions. + +a. The Licensor shall not be bound by any additional or different terms or +conditions communicated by You unless expressly agreed. + +b. Any arrangements, understandings, or agreements regarding the Licensed +Material not stated herein are separate from and independent of the terms +and conditions of this Public License. + +Section 8 – Interpretation. + +a. For the avoidance of doubt, this Public License does not, and shall not +be interpreted to, reduce, limit, restrict, or impose conditions on any use +of the Licensed Material that could lawfully be made without permission under +this Public License. + +b. To the extent possible, if any provision of this Public License is deemed +unenforceable, it shall be automatically reformed to the minimum extent necessary +to make it enforceable. If the provision cannot be reformed, it shall be severed +from this Public License without affecting the enforceability of the remaining +terms and conditions. + +c. No term or condition of this Public License will be waived and no failure +to comply consented to unless expressly agreed to by the Licensor. + +d. Nothing in this Public License constitutes or may be interpreted as a limitation +upon, or waiver of, any privileges and immunities that apply to the Licensor +or You, including from the legal processes of any jurisdiction or authority. + +Creative Commons is not a party to its public licenses. Notwithstanding, Creative +Commons may elect to apply one of its public licenses to material it publishes +and in those instances will be considered the "Licensor." The text of the +Creative Commons public licenses is dedicated to the public domain under the +CC0 Public Domain Dedication. Except for the limited purpose of indicating +that material is shared under a Creative Commons public license or as otherwise +permitted by the Creative Commons policies published at creativecommons.org/policies, +Creative Commons does not authorize the use of the trademark "Creative Commons" +or any other trademark or logo of Creative Commons without its prior written +consent including, without limitation, in connection with any unauthorized +modifications to any of its public licenses or any other arrangements, understandings, +or agreements concerning use of licensed material. For the avoidance of doubt, +this paragraph does not form part of the public licenses. + +Creative Commons may be contacted at creativecommons.org. diff --git a/LICENSES/CC0-1.0.txt b/LICENSES/CC0-1.0.txt new file mode 100644 index 0000000000..a343ccd433 --- /dev/null +++ b/LICENSES/CC0-1.0.txt @@ -0,0 +1,119 @@ +Creative Commons Legal Code + +CC0 1.0 Universal CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES +NOT PROVIDE LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE +AN ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS INFORMATION +ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES REGARDING THE USE +OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED HEREUNDER, AND DISCLAIMS +LIABILITY FOR DAMAGES RESULTING FROM THE USE OF THIS DOCUMENT OR THE INFORMATION +OR WORKS PROVIDED HEREUNDER. + +Statement of Purpose + +The laws of most jurisdictions throughout the world automatically confer exclusive +Copyright and Related Rights (defined below) upon the creator and subsequent +owner(s) (each and all, an "owner") of an original work of authorship and/or +a database (each, a "Work"). + +Certain owners wish to permanently relinquish those rights to a Work for the +purpose of contributing to a commons of creative, cultural and scientific +works ("Commons") that the public can reliably and without fear of later claims +of infringement build upon, modify, incorporate in other works, reuse and +redistribute as freely as possible in any form whatsoever and for any purposes, +including without limitation commercial purposes. These owners may contribute +to the Commons to promote the ideal of a free culture and the further production +of creative, cultural and scientific works, or to gain reputation or greater +distribution for their Work in part through the use and efforts of others. + +For these and/or other purposes and motivations, and without any expectation +of additional consideration or compensation, the person associating CC0 with +a Work (the "Affirmer"), to the extent that he or she is an owner of Copyright +and Related Rights in the Work, voluntarily elects to apply CC0 to the Work +and publicly distribute the Work under its terms, with knowledge of his or +her Copyright and Related Rights in the Work and the meaning and intended +legal effect of CC0 on those rights. + +1. Copyright and Related Rights. A Work made available under CC0 may be protected +by copyright and related or neighboring rights ("Copyright and Related Rights"). +Copyright and Related Rights include, but are not limited to, the following: + +i. the right to reproduce, adapt, distribute, perform, display, communicate, +and translate a Work; + + ii. moral rights retained by the original author(s) and/or performer(s); + +iii. publicity and privacy rights pertaining to a person's image or likeness +depicted in a Work; + +iv. rights protecting against unfair competition in regards to a Work, subject +to the limitations in paragraph 4(a), below; + +v. rights protecting the extraction, dissemination, use and reuse of data +in a Work; + +vi. database rights (such as those arising under Directive 96/9/EC of the +European Parliament and of the Council of 11 March 1996 on the legal protection +of databases, and under any national implementation thereof, including any +amended or successor version of such directive); and + +vii. other similar, equivalent or corresponding rights throughout the world +based on applicable law or treaty, and any national implementations thereof. + +2. Waiver. To the greatest extent permitted by, but not in contravention of, +applicable law, Affirmer hereby overtly, fully, permanently, irrevocably and +unconditionally waives, abandons, and surrenders all of Affirmer's Copyright +and Related Rights and associated claims and causes of action, whether now +known or unknown (including existing as well as future claims and causes of +action), in the Work (i) in all territories worldwide, (ii) for the maximum +duration provided by applicable law or treaty (including future time extensions), +(iii) in any current or future medium and for any number of copies, and (iv) +for any purpose whatsoever, including without limitation commercial, advertising +or promotional purposes (the "Waiver"). Affirmer makes the Waiver for the +benefit of each member of the public at large and to the detriment of Affirmer's +heirs and successors, fully intending that such Waiver shall not be subject +to revocation, rescission, cancellation, termination, or any other legal or +equitable action to disrupt the quiet enjoyment of the Work by the public +as contemplated by Affirmer's express Statement of Purpose. + +3. Public License Fallback. Should any part of the Waiver for any reason be +judged legally invalid or ineffective under applicable law, then the Waiver +shall be preserved to the maximum extent permitted taking into account Affirmer's +express Statement of Purpose. In addition, to the extent the Waiver is so +judged Affirmer hereby grants to each affected person a royalty-free, non +transferable, non sublicensable, non exclusive, irrevocable and unconditional +license to exercise Affirmer's Copyright and Related Rights in the Work (i) +in all territories worldwide, (ii) for the maximum duration provided by applicable +law or treaty (including future time extensions), (iii) in any current or +future medium and for any number of copies, and (iv) for any purpose whatsoever, +including without limitation commercial, advertising or promotional purposes +(the "License"). The License shall be deemed effective as of the date CC0 +was applied by Affirmer to the Work. Should any part of the License for any +reason be judged legally invalid or ineffective under applicable law, such +partial invalidity or ineffectiveness shall not invalidate the remainder of +the License, and in such case Affirmer hereby affirms that he or she will +not (i) exercise any of his or her remaining Copyright and Related Rights +in the Work or (ii) assert any associated claims and causes of action with +respect to the Work, in either case contrary to Affirmer's express Statement +of Purpose. + + 4. Limitations and Disclaimers. + +a. No trademark or patent rights held by Affirmer are waived, abandoned, surrendered, +licensed or otherwise affected by this document. + +b. Affirmer offers the Work as-is and makes no representations or warranties +of any kind concerning the Work, express, implied, statutory or otherwise, +including without limitation warranties of title, merchantability, fitness +for a particular purpose, non infringement, or the absence of latent or other +defects, accuracy, or the present or absence of errors, whether or not discoverable, +all to the greatest extent permissible under applicable law. + +c. Affirmer disclaims responsibility for clearing rights of other persons +that may apply to the Work or any use thereof, including without limitation +any person's Copyright and Related Rights in the Work. Further, Affirmer disclaims +responsibility for obtaining any necessary consents, permissions or other +rights required for any use of the Work. + +d. Affirmer understands and acknowledges that Creative Commons is not a party +to this document and has no duty or obligation with respect to this CC0 or +use of the Work. diff --git a/LICENSE b/LICENSES/GPL-3.0-or-later.txt similarity index 100% rename from LICENSE rename to LICENSES/GPL-3.0-or-later.txt diff --git a/LICENSES/GPLv2+-libpwquality b/LICENSES/GPLv2+-libpwquality deleted file mode 100644 index 5d19846567..0000000000 --- a/LICENSES/GPLv2+-libpwquality +++ /dev/null @@ -1,383 +0,0 @@ -Unless otherwise *explicitly* stated the following text describes the -licensed conditions under which the contents of this libpwquality release -may be distributed: - -------------------------------------------------------------------------- -Redistribution and use in source and binary forms of libpwquality, with -or without modification, are permitted provided that the following -conditions are met: - -1. Redistributions of source code must retain any existing copyright - notice, and this entire permission notice in its entirety, - including the disclaimer of warranties. - -2. Redistributions in binary form must reproduce all prior and current - copyright notices, this list of conditions, and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - -3. The name of any author may not be used to endorse or promote - products derived from this software without their specific prior - written permission. - -ALTERNATIVELY, this product may be distributed under the terms of the -GNU General Public License version 2 or later, in which case the provisions -of the GNU GPL are required INSTEAD OF the above restrictions. - -THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED -WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. -IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, -INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, -BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS -OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR -TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE -USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -The full text of the GNU GENERAL PUBLIC LICENSE Version 2 is included -below. - -------------------------------------------------------------------------- - - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc. - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Library General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) year name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - , 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Library General -Public License instead of this License. diff --git a/LICENSES/GPLv3+-ImageRegistry b/LICENSES/GPLv3+-ImageRegistry deleted file mode 100644 index 362e897663..0000000000 --- a/LICENSES/GPLv3+-ImageRegistry +++ /dev/null @@ -1,16 +0,0 @@ -/* - * Copyright 2012, Christian Muehlhaeuser - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ diff --git a/LICENSES/LGPLv2-KDAB b/LICENSES/LGPL-2.0-only.txt similarity index 100% rename from LICENSES/LGPLv2-KDAB rename to LICENSES/LGPL-2.0-only.txt diff --git a/LICENSES/LGPL-2.1-only.txt b/LICENSES/LGPL-2.1-only.txt new file mode 100644 index 0000000000..130dffb311 --- /dev/null +++ b/LICENSES/LGPL-2.1-only.txt @@ -0,0 +1,467 @@ +GNU LESSER GENERAL PUBLIC LICENSE + +Version 2.1, February 1999 + +Copyright (C) 1991, 1999 Free Software Foundation, Inc. + +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +Everyone is permitted to copy and distribute verbatim copies of this license +document, but changing it is not allowed. + +[This is the first released version of the Lesser GPL. It also counts as the +successor of the GNU Library Public License, version 2, hence the version +number 2.1.] + +Preamble + +The licenses for most software are designed to take away your freedom to share +and change it. By contrast, the GNU General Public Licenses are intended to +guarantee your freedom to share and change free software--to make sure the +software is free for all its users. + +This license, the Lesser General Public License, applies to some specially +designated software packages--typically libraries--of the Free Software Foundation +and other authors who decide to use it. You can use it too, but we suggest +you first think carefully about whether this license or the ordinary General +Public License is the better strategy to use in any particular case, based +on the explanations below. + +When we speak of free software, we are referring to freedom of use, not price. +Our General Public Licenses are designed to make sure that you have the freedom +to distribute copies of free software (and charge for this service if you +wish); that you receive source code or can get it if you want it; that you +can change the software and use pieces of it in new free programs; and that +you are informed that you can do these things. + +To protect your rights, we need to make restrictions that forbid distributors +to deny you these rights or to ask you to surrender these rights. These restrictions +translate to certain responsibilities for you if you distribute copies of +the library or if you modify it. + +For example, if you distribute copies of the library, whether gratis or for +a fee, you must give the recipients all the rights that we gave you. You must +make sure that they, too, receive or can get the source code. If you link +other code with the library, you must provide complete object files to the +recipients, so that they can relink them with the library after making changes +to the library and recompiling it. And you must show them these terms so they +know their rights. + +We protect your rights with a two-step method: (1) we copyright the library, +and (2) we offer you this license, which gives you legal permission to copy, +distribute and/or modify the library. + +To protect each distributor, we want to make it very clear that there is no +warranty for the free library. Also, if the library is modified by someone +else and passed on, the recipients should know that what they have is not +the original version, so that the original author's reputation will not be +affected by problems that might be introduced by others. + +Finally, software patents pose a constant threat to the existence of any free +program. We wish to make sure that a company cannot effectively restrict the +users of a free program by obtaining a restrictive license from a patent holder. +Therefore, we insist that any patent license obtained for a version of the +library must be consistent with the full freedom of use specified in this +license. + +Most GNU software, including some libraries, is covered by the ordinary GNU +General Public License. This license, the GNU Lesser General Public License, +applies to certain designated libraries, and is quite different from the ordinary +General Public License. We use this license for certain libraries in order +to permit linking those libraries into non-free programs. + +When a program is linked with a library, whether statically or using a shared +library, the combination of the two is legally speaking a combined work, a +derivative of the original library. The ordinary General Public License therefore +permits such linking only if the entire combination fits its criteria of freedom. +The Lesser General Public License permits more lax criteria for linking other +code with the library. + +We call this license the "Lesser" General Public License because it does Less +to protect the user's freedom than the ordinary General Public License. It +also provides other free software developers Less of an advantage over competing +non-free programs. These disadvantages are the reason we use the ordinary +General Public License for many libraries. However, the Lesser license provides +advantages in certain special circumstances. + +For example, on rare occasions, there may be a special need to encourage the +widest possible use of a certain library, so that it becomes a de-facto standard. +To achieve this, non-free programs must be allowed to use the library. A more +frequent case is that a free library does the same job as widely used non-free +libraries. In this case, there is little to gain by limiting the free library +to free software only, so we use the Lesser General Public License. + +In other cases, permission to use a particular library in non-free programs +enables a greater number of people to use a large body of free software. For +example, permission to use the GNU C Library in non-free programs enables +many more people to use the whole GNU operating system, as well as its variant, +the GNU/Linux operating system. + +Although the Lesser General Public License is Less protective of the users' +freedom, it does ensure that the user of a program that is linked with the +Library has the freedom and the wherewithal to run that program using a modified +version of the Library. + +The precise terms and conditions for copying, distribution and modification +follow. Pay close attention to the difference between a "work based on the +library" and a "work that uses the library". The former contains code derived +from the library, whereas the latter must be combined with the library in +order to run. + +TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + +0. This License Agreement applies to any software library or other program +which contains a notice placed by the copyright holder or other authorized +party saying it may be distributed under the terms of this Lesser General +Public License (also called "this License"). Each licensee is addressed as +"you". + +A "library" means a collection of software functions and/or data prepared +so as to be conveniently linked with application programs (which use some +of those functions and data) to form executables. + +The "Library", below, refers to any such software library or work which has +been distributed under these terms. A "work based on the Library" means either +the Library or any derivative work under copyright law: that is to say, a +work containing the Library or a portion of it, either verbatim or with modifications +and/or translated straightforwardly into another language. (Hereinafter, translation +is included without limitation in the term "modification".) + +"Source code" for a work means the preferred form of the work for making modifications +to it. For a library, complete source code means all the source code for all +modules it contains, plus any associated interface definition files, plus +the scripts used to control compilation and installation of the library. + +Activities other than copying, distribution and modification are not covered +by this License; they are outside its scope. The act of running a program +using the Library is not restricted, and output from such a program is covered +only if its contents constitute a work based on the Library (independent of +the use of the Library in a tool for writing it). Whether that is true depends +on what the Library does and what the program that uses the Library does. + +1. You may copy and distribute verbatim copies of the Library's complete source +code as you receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice and disclaimer +of warranty; keep intact all the notices that refer to this License and to +the absence of any warranty; and distribute a copy of this License along with +the Library. + +You may charge a fee for the physical act of transferring a copy, and you +may at your option offer warranty protection in exchange for a fee. + +2. You may modify your copy or copies of the Library or any portion of it, +thus forming a work based on the Library, and copy and distribute such modifications +or work under the terms of Section 1 above, provided that you also meet all +of these conditions: + + a) The modified work must itself be a software library. + +b) You must cause the files modified to carry prominent notices stating that +you changed the files and the date of any change. + +c) You must cause the whole of the work to be licensed at no charge to all +third parties under the terms of this License. + +d) If a facility in the modified Library refers to a function or a table of +data to be supplied by an application program that uses the facility, other +than as an argument passed when the facility is invoked, then you must make +a good faith effort to ensure that, in the event an application does not supply +such function or table, the facility still operates, and performs whatever +part of its purpose remains meaningful. + +(For example, a function in a library to compute square roots has a purpose +that is entirely well-defined independent of the application. Therefore, Subsection +2d requires that any application-supplied function or table used by this function +must be optional: if the application does not supply it, the square root function +must still compute square roots.) + +These requirements apply to the modified work as a whole. If identifiable +sections of that work are not derived from the Library, and can be reasonably +considered independent and separate works in themselves, then this License, +and its terms, do not apply to those sections when you distribute them as +separate works. But when you distribute the same sections as part of a whole +which is a work based on the Library, the distribution of the whole must be +on the terms of this License, whose permissions for other licensees extend +to the entire whole, and thus to each and every part regardless of who wrote +it. + +Thus, it is not the intent of this section to claim rights or contest your +rights to work written entirely by you; rather, the intent is to exercise +the right to control the distribution of derivative or collective works based +on the Library. + +In addition, mere aggregation of another work not based on the Library with +the Library (or with a work based on the Library) on a volume of a storage +or distribution medium does not bring the other work under the scope of this +License. + +3. You may opt to apply the terms of the ordinary GNU General Public License +instead of this License to a given copy of the Library. To do this, you must +alter all the notices that refer to this License, so that they refer to the +ordinary GNU General Public License, version 2, instead of to this License. +(If a newer version than version 2 of the ordinary GNU General Public License +has appeared, then you can specify that version instead if you wish.) Do not +make any other change in these notices. + +Once this change is made in a given copy, it is irreversible for that copy, +so the ordinary GNU General Public License applies to all subsequent copies +and derivative works made from that copy. + +This option is useful when you wish to copy part of the code of the Library +into a program that is not a library. + +4. You may copy and distribute the Library (or a portion or derivative of +it, under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you accompany it with the complete corresponding +machine-readable source code, which must be distributed under the terms of +Sections 1 and 2 above on a medium customarily used for software interchange. + +If distribution of object code is made by offering access to copy from a designated +place, then offering equivalent access to copy the source code from the same +place satisfies the requirement to distribute the source code, even though +third parties are not compelled to copy the source along with the object code. + +5. A program that contains no derivative of any portion of the Library, but +is designed to work with the Library by being compiled or linked with it, +is called a "work that uses the Library". Such a work, in isolation, is not +a derivative work of the Library, and therefore falls outside the scope of +this License. + +However, linking a "work that uses the Library" with the Library creates an +executable that is a derivative of the Library (because it contains portions +of the Library), rather than a "work that uses the library". The executable +is therefore covered by this License. Section 6 states terms for distribution +of such executables. + +When a "work that uses the Library" uses material from a header file that +is part of the Library, the object code for the work may be a derivative work +of the Library even though the source code is not. Whether this is true is +especially significant if the work can be linked without the Library, or if +the work is itself a library. The threshold for this to be true is not precisely +defined by law. + +If such an object file uses only numerical parameters, data structure layouts +and accessors, and small macros and small inline functions (ten lines or less +in length), then the use of the object file is unrestricted, regardless of +whether it is legally a derivative work. (Executables containing this object +code plus portions of the Library will still fall under Section 6.) + +Otherwise, if the work is a derivative of the Library, you may distribute +the object code for the work under the terms of Section 6. Any executables +containing that work also fall under Section 6, whether or not they are linked +directly with the Library itself. + +6. As an exception to the Sections above, you may also combine or link a "work +that uses the Library" with the Library to produce a work containing portions +of the Library, and distribute that work under terms of your choice, provided +that the terms permit modification of the work for the customer's own use +and reverse engineering for debugging such modifications. + +You must give prominent notice with each copy of the work that the Library +is used in it and that the Library and its use are covered by this License. +You must supply a copy of this License. If the work during execution displays +copyright notices, you must include the copyright notice for the Library among +them, as well as a reference directing the user to the copy of this License. +Also, you must do one of these things: + +a) Accompany the work with the complete corresponding machine-readable source +code for the Library including whatever changes were used in the work (which +must be distributed under Sections 1 and 2 above); and, if the work is an +executable linked with the Library, with the complete machine-readable "work +that uses the Library", as object code and/or source code, so that the user +can modify the Library and then relink to produce a modified executable containing +the modified Library. (It is understood that the user who changes the contents +of definitions files in the Library will not necessarily be able to recompile +the application to use the modified definitions.) + +b) Use a suitable shared library mechanism for linking with the Library. A +suitable mechanism is one that (1) uses at run time a copy of the library +already present on the user's computer system, rather than copying library +functions into the executable, and (2) will operate properly with a modified +version of the library, if the user installs one, as long as the modified +version is interface-compatible with the version that the work was made with. + +c) Accompany the work with a written offer, valid for at least three years, +to give the same user the materials specified in Subsection 6a, above, for +a charge no more than the cost of performing this distribution. + +d) If distribution of the work is made by offering access to copy from a designated +place, offer equivalent access to copy the above specified materials from +the same place. + +e) Verify that the user has already received a copy of these materials or +that you have already sent this user a copy. + +For an executable, the required form of the "work that uses the Library" must +include any data and utility programs needed for reproducing the executable +from it. However, as a special exception, the materials to be distributed +need not include anything that is normally distributed (in either source or +binary form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component itself +accompanies the executable. + +It may happen that this requirement contradicts the license restrictions of +other proprietary libraries that do not normally accompany the operating system. +Such a contradiction means you cannot use both them and the Library together +in an executable that you distribute. + +7. You may place library facilities that are a work based on the Library side-by-side +in a single library together with other library facilities not covered by +this License, and distribute such a combined library, provided that the separate +distribution of the work based on the Library and of the other library facilities +is otherwise permitted, and provided that you do these two things: + +a) Accompany the combined library with a copy of the same work based on the +Library, uncombined with any other library facilities. This must be distributed +under the terms of the Sections above. + +b) Give prominent notice with the combined library of the fact that part of +it is a work based on the Library, and explaining where to find the accompanying +uncombined form of the same work. + +8. You may not copy, modify, sublicense, link with, or distribute the Library +except as expressly provided under this License. Any attempt otherwise to +copy, modify, sublicense, link with, or distribute the Library is void, and +will automatically terminate your rights under this License. However, parties +who have received copies, or rights, from you under this License will not +have their licenses terminated so long as such parties remain in full compliance. + +9. You are not required to accept this License, since you have not signed +it. However, nothing else grants you permission to modify or distribute the +Library or its derivative works. These actions are prohibited by law if you +do not accept this License. Therefore, by modifying or distributing the Library +(or any work based on the Library), you indicate your acceptance of this License +to do so, and all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + +10. Each time you redistribute the Library (or any work based on the Library), +the recipient automatically receives a license from the original licensor +to copy, distribute, link with or modify the Library subject to these terms +and conditions. You may not impose any further restrictions on the recipients' +exercise of the rights granted herein. You are not responsible for enforcing +compliance by third parties with this License. + +11. If, as a consequence of a court judgment or allegation of patent infringement +or for any other reason (not limited to patent issues), conditions are imposed +on you (whether by court order, agreement or otherwise) that contradict the +conditions of this License, they do not excuse you from the conditions of +this License. If you cannot distribute so as to satisfy simultaneously your +obligations under this License and any other pertinent obligations, then as +a consequence you may not distribute the Library at all. For example, if a +patent license would not permit royalty-free redistribution of the Library +by all those who receive copies directly or indirectly through you, then the +only way you could satisfy both it and this License would be to refrain entirely +from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under any +particular circumstance, the balance of the section is intended to apply, +and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any patents +or other property right claims or to contest validity of any such claims; +this section has the sole purpose of protecting the integrity of the free +software distribution system which is implemented by public license practices. +Many people have made generous contributions to the wide range of software +distributed through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing to +distribute software through any other system and a licensee cannot impose +that choice. + +This section is intended to make thoroughly clear what is believed to be a +consequence of the rest of this License. + +12. If the distribution and/or use of the Library is restricted in certain +countries either by patents or by copyrighted interfaces, the original copyright +holder who places the Library under this License may add an explicit geographical +distribution limitation excluding those countries, so that distribution is +permitted only in or among countries not thus excluded. In such case, this +License incorporates the limitation as if written in the body of this License. + +13. The Free Software Foundation may publish revised and/or new versions of +the Lesser General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to address +new problems or concerns. + +Each version is given a distinguishing version number. If the Library specifies +a version number of this License which applies to it and "any later version", +you have the option of following the terms and conditions either of that version +or of any later version published by the Free Software Foundation. If the +Library does not specify a license version number, you may choose any version +ever published by the Free Software Foundation. + +14. If you wish to incorporate parts of the Library into other free programs +whose distribution conditions are incompatible with these, write to the author +to ask for permission. For software which is copyrighted by the Free Software +Foundation, write to the Free Software Foundation; we sometimes make exceptions +for this. Our decision will be guided by the two goals of preserving the free +status of all derivatives of our free software and of promoting the sharing +and reuse of software generally. + + NO WARRANTY + +15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR +THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE +STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY +"AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE +OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + +16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE +THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE +OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA +OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES +OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH +HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +END OF TERMS AND CONDITIONS + +How to Apply These Terms to Your New Libraries + +If you develop a new library, and you want it to be of the greatest possible +use to the public, we recommend making it free software that everyone can +redistribute and change. You can do so by permitting redistribution under +these terms (or, alternatively, under the terms of the ordinary General Public +License). + +To apply these terms, attach the following notices to the library. It is safest +to attach them to the start of each source file to most effectively convey +the exclusion of warranty; and each file should have at least the "copyright" +line and a pointer to where the full notice is found. + +< one line to give the library's name and an idea of what it does. > + +Copyright (C) < year > < name of author > + +This library is free software; you can redistribute it and/or modify it under +the terms of the GNU Lesser General Public License as published by the Free +Software Foundation; either version 2.1 of the License, or (at your option) +any later version. + +This library is distributed in the hope that it will be useful, but WITHOUT +ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more +details. + +You should have received a copy of the GNU Lesser General Public License along +with this library; if not, write to the Free Software Foundation, Inc., 51 +Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Also add information +on how to contact you by electronic and paper mail. + +You should also get your employer (if you work as a programmer) or your school, +if any, to sign a "copyright disclaimer" for the library, if necessary. Here +is a sample; alter the names: + +Yoyodyne, Inc., hereby disclaims all copyright interest in + +the library `Frob' (a library for tweaking knobs) written + +by James Random Hacker. + +< signature of Ty Coon > , 1 April 1990 + +Ty Coon, President of Vice + +That's all there is to it! diff --git a/LICENSES/LGPL-3.0-or-later.txt b/LICENSES/LGPL-3.0-or-later.txt new file mode 100644 index 0000000000..bd405afbef --- /dev/null +++ b/LICENSES/LGPL-3.0-or-later.txt @@ -0,0 +1,163 @@ +GNU LESSER GENERAL PUBLIC LICENSE + +Version 3, 29 June 2007 + +Copyright (C) 2007 Free Software Foundation, Inc. + +Everyone is permitted to copy and distribute verbatim copies of this license +document, but changing it is not allowed. + +This version of the GNU Lesser General Public License incorporates the terms +and conditions of version 3 of the GNU General Public License, supplemented +by the additional permissions listed below. + + 0. Additional Definitions. + + + +As used herein, "this License" refers to version 3 of the GNU Lesser General +Public License, and the "GNU GPL" refers to version 3 of the GNU General Public +License. + + + +"The Library" refers to a covered work governed by this License, other than +an Application or a Combined Work as defined below. + + + +An "Application" is any work that makes use of an interface provided by the +Library, but which is not otherwise based on the Library. Defining a subclass +of a class defined by the Library is deemed a mode of using an interface provided +by the Library. + + + +A "Combined Work" is a work produced by combining or linking an Application +with the Library. The particular version of the Library with which the Combined +Work was made is also called the "Linked Version". + + + +The "Minimal Corresponding Source" for a Combined Work means the Corresponding +Source for the Combined Work, excluding any source code for portions of the +Combined Work that, considered in isolation, are based on the Application, +and not on the Linked Version. + + + +The "Corresponding Application Code" for a Combined Work means the object +code and/or source code for the Application, including any data and utility +programs needed for reproducing the Combined Work from the Application, but +excluding the System Libraries of the Combined Work. + + 1. Exception to Section 3 of the GNU GPL. + +You may convey a covered work under sections 3 and 4 of this License without +being bound by section 3 of the GNU GPL. + + 2. Conveying Modified Versions. + +If you modify a copy of the Library, and, in your modifications, a facility +refers to a function or data to be supplied by an Application that uses the +facility (other than as an argument passed when the facility is invoked), +then you may convey a copy of the modified version: + +a) under this License, provided that you make a good faith effort to ensure +that, in the event an Application does not supply the function or data, the +facility still operates, and performs whatever part of its purpose remains +meaningful, or + +b) under the GNU GPL, with none of the additional permissions of this License +applicable to that copy. + + 3. Object Code Incorporating Material from Library Header Files. + +The object code form of an Application may incorporate material from a header +file that is part of the Library. You may convey such object code under terms +of your choice, provided that, if the incorporated material is not limited +to numerical parameters, data structure layouts and accessors, or small macros, +inline functions and templates (ten or fewer lines in length), you do both +of the following: + +a) Give prominent notice with each copy of the object code that the Library +is used in it and that the Library and its use are covered by this License. + +b) Accompany the object code with a copy of the GNU GPL and this license document. + + 4. Combined Works. + +You may convey a Combined Work under terms of your choice that, taken together, +effectively do not restrict modification of the portions of the Library contained +in the Combined Work and reverse engineering for debugging such modifications, +if you also do each of the following: + +a) Give prominent notice with each copy of the Combined Work that the Library +is used in it and that the Library and its use are covered by this License. + +b) Accompany the Combined Work with a copy of the GNU GPL and this license +document. + +c) For a Combined Work that displays copyright notices during execution, include +the copyright notice for the Library among these notices, as well as a reference +directing the user to the copies of the GNU GPL and this license document. + + d) Do one of the following: + +0) Convey the Minimal Corresponding Source under the terms of this License, +and the Corresponding Application Code in a form suitable for, and under terms +that permit, the user to recombine or relink the Application with a modified +version of the Linked Version to produce a modified Combined Work, in the +manner specified by section 6 of the GNU GPL for conveying Corresponding Source. + +1) Use a suitable shared library mechanism for linking with the Library. A +suitable mechanism is one that (a) uses at run time a copy of the Library +already present on the user's computer system, and (b) will operate properly +with a modified version of the Library that is interface-compatible with the +Linked Version. + +e) Provide Installation Information, but only if you would otherwise be required +to provide such information under section 6 of the GNU GPL, and only to the +extent that such information is necessary to install and execute a modified +version of the Combined Work produced by recombining or relinking the Application +with a modified version of the Linked Version. (If you use option 4d0, the +Installation Information must accompany the Minimal Corresponding Source and +Corresponding Application Code. If you use option 4d1, you must provide the +Installation Information in the manner specified by section 6 of the GNU GPL +for conveying Corresponding Source.) + + 5. Combined Libraries. + +You may place library facilities that are a work based on the Library side +by side in a single library together with other library facilities that are +not Applications and are not covered by this License, and convey such a combined +library under terms of your choice, if you do both of the following: + +a) Accompany the combined library with a copy of the same work based on the +Library, uncombined with any other library facilities, conveyed under the +terms of this License. + +b) Give prominent notice with the combined library that part of it is a work +based on the Library, and explaining where to find the accompanying uncombined +form of the same work. + + 6. Revised Versions of the GNU Lesser General Public License. + +The Free Software Foundation may publish revised and/or new versions of the +GNU Lesser General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to address +new problems or concerns. + +Each version is given a distinguishing version number. If the Library as you +received it specifies that a certain numbered version of the GNU Lesser General +Public License "or any later version" applies to it, you have the option of +following the terms and conditions either of that published version or of +any later version published by the Free Software Foundation. If the Library +as you received it does not specify a version number of the GNU Lesser General +Public License, you may choose any version of the GNU Lesser General Public +License ever published by the Free Software Foundation. + +If the Library as you received it specifies that a proxy can decide whether +future versions of the GNU Lesser General Public License shall apply, that +proxy's public statement of acceptance of any version is permanent authorization +for you to choose that version for the Library. diff --git a/LICENSES/LGPLv2.1-Presentation b/LICENSES/LGPLv2.1-Presentation deleted file mode 100644 index 1bb6461eb8..0000000000 --- a/LICENSES/LGPLv2.1-Presentation +++ /dev/null @@ -1,83 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies). -** Contact: http://www.qt-project.org/legal -** -** This file is part of the QML Presentation System. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and Digia. For licensing terms and -** conditions see http://qt.digia.com/licensing. For further information -** use the contact form at http://qt.digia.com/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Digia gives you certain additional -** rights. These rights are described in the Digia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3.0 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU General Public License version 3.0 requirements will be -** met: http://www.gnu.org/copyleft/gpl.html. -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - - -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the QML Presentation System. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and Digia. For licensing terms and -** conditions see http://qt.digia.com/licensing. For further information -** use the contact form at http://qt.digia.com/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Digia gives you certain additional -** rights. These rights are described in the Digia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3.0 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU General Public License version 3.0 requirements will be -** met: http://www.gnu.org/copyleft/gpl.html. -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - diff --git a/LICENSES/LGPLv2.1-Presentation-Exception b/LICENSES/LGPLv2.1-Presentation-Exception deleted file mode 100644 index 7e2e30ff9b..0000000000 --- a/LICENSES/LGPLv2.1-Presentation-Exception +++ /dev/null @@ -1,22 +0,0 @@ -Digia Qt LGPL Exception version 1.1 - -As an additional permission to the GNU Lesser General Public License version -2.1, the object code form of a "work that uses the Library" may incorporate -material from a header file that is part of the Library. You may distribute -such object code under terms of your choice, provided that: - (i) the header files of the Library have not been modified; and - (ii) the incorporated material is limited to numerical parameters, data - structure layouts, accessors, macros, inline functions and - templates; and - (iii) you comply with the terms of Section 6 of the GNU Lesser General - Public License version 2.1. - -Moreover, you may apply this exception to a modified version of the Library, -provided that such modification does not involve copying material from the -Library into the modified Library's header files unless such material is -limited to (i) numerical parameters; (ii) data structure layouts; -(iii) accessors; and (iv) small macros, templates and inline functions of -five lines or less in length. - -Furthermore, you are not required to apply this additional permission to a -modified version of the Library. diff --git a/LICENSES/LGPLv3-Breeze b/LICENSES/LGPLv3-Breeze deleted file mode 100644 index 63d73657ce..0000000000 --- a/LICENSES/LGPLv3-Breeze +++ /dev/null @@ -1,209 +0,0 @@ -The Breeze Icon Theme in icons/ - - Copyright (C) 2014 Uri Herrera and others - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 3 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library. If not, see . - -Clarification: - - The GNU Lesser General Public License or LGPL is written for - software libraries in the first place. We expressly want the LGPL to - be valid for this artwork library too. - - KDE Breeze theme icons is a special kind of software library, it is an - artwork library, it's elements can be used in a Graphical User Interface, or - GUI. - - Source code, for this library means: - - where they exist, SVG; - - otherwise, if applicable, the multi-layered formats xcf or psd, or - otherwise png. - - The LGPL in some sections obliges you to make the files carry - notices. With images this is in some cases impossible or hardly useful. - - With this library a notice is placed at a prominent place in the directory - containing the elements. You may follow this practice. - - The exception in section 5 of the GNU Lesser General Public License covers - the use of elements of this art library in a GUI. - - https://vdesign.kde.org/ - ------ - GNU LESSER GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - - This version of the GNU Lesser General Public License incorporates -the terms and conditions of version 3 of the GNU General Public -License, supplemented by the additional permissions listed below. - - 0. Additional Definitions. - - As used herein, "this License" refers to version 3 of the GNU Lesser -General Public License, and the "GNU GPL" refers to version 3 of the GNU -General Public License. - - "The Library" refers to a covered work governed by this License, -other than an Application or a Combined Work as defined below. - - An "Application" is any work that makes use of an interface provided -by the Library, but which is not otherwise based on the Library. -Defining a subclass of a class defined by the Library is deemed a mode -of using an interface provided by the Library. - - A "Combined Work" is a work produced by combining or linking an -Application with the Library. The particular version of the Library -with which the Combined Work was made is also called the "Linked -Version". - - The "Minimal Corresponding Source" for a Combined Work means the -Corresponding Source for the Combined Work, excluding any source code -for portions of the Combined Work that, considered in isolation, are -based on the Application, and not on the Linked Version. - - The "Corresponding Application Code" for a Combined Work means the -object code and/or source code for the Application, including any data -and utility programs needed for reproducing the Combined Work from the -Application, but excluding the System Libraries of the Combined Work. - - 1. Exception to Section 3 of the GNU GPL. - - You may convey a covered work under sections 3 and 4 of this License -without being bound by section 3 of the GNU GPL. - - 2. Conveying Modified Versions. - - If you modify a copy of the Library, and, in your modifications, a -facility refers to a function or data to be supplied by an Application -that uses the facility (other than as an argument passed when the -facility is invoked), then you may convey a copy of the modified -version: - - a) under this License, provided that you make a good faith effort to - ensure that, in the event an Application does not supply the - function or data, the facility still operates, and performs - whatever part of its purpose remains meaningful, or - - b) under the GNU GPL, with none of the additional permissions of - this License applicable to that copy. - - 3. Object Code Incorporating Material from Library Header Files. - - The object code form of an Application may incorporate material from -a header file that is part of the Library. You may convey such object -code under terms of your choice, provided that, if the incorporated -material is not limited to numerical parameters, data structure -layouts and accessors, or small macros, inline functions and templates -(ten or fewer lines in length), you do both of the following: - - a) Give prominent notice with each copy of the object code that the - Library is used in it and that the Library and its use are - covered by this License. - - b) Accompany the object code with a copy of the GNU GPL and this license - document. - - 4. Combined Works. - - You may convey a Combined Work under terms of your choice that, -taken together, effectively do not restrict modification of the -portions of the Library contained in the Combined Work and reverse -engineering for debugging such modifications, if you also do each of -the following: - - a) Give prominent notice with each copy of the Combined Work that - the Library is used in it and that the Library and its use are - covered by this License. - - b) Accompany the Combined Work with a copy of the GNU GPL and this license - document. - - c) For a Combined Work that displays copyright notices during - execution, include the copyright notice for the Library among - these notices, as well as a reference directing the user to the - copies of the GNU GPL and this license document. - - d) Do one of the following: - - 0) Convey the Minimal Corresponding Source under the terms of this - License, and the Corresponding Application Code in a form - suitable for, and under terms that permit, the user to - recombine or relink the Application with a modified version of - the Linked Version to produce a modified Combined Work, in the - manner specified by section 6 of the GNU GPL for conveying - Corresponding Source. - - 1) Use a suitable shared library mechanism for linking with the - Library. A suitable mechanism is one that (a) uses at run time - a copy of the Library already present on the user's computer - system, and (b) will operate properly with a modified version - of the Library that is interface-compatible with the Linked - Version. - - e) Provide Installation Information, but only if you would otherwise - be required to provide such information under section 6 of the - GNU GPL, and only to the extent that such information is - necessary to install and execute a modified version of the - Combined Work produced by recombining or relinking the - Application with a modified version of the Linked Version. (If - you use option 4d0, the Installation Information must accompany - the Minimal Corresponding Source and Corresponding Application - Code. If you use option 4d1, you must provide the Installation - Information in the manner specified by section 6 of the GNU GPL - for conveying Corresponding Source.) - - 5. Combined Libraries. - - You may place library facilities that are a work based on the -Library side by side in a single library together with other library -facilities that are not Applications and are not covered by this -License, and convey such a combined library under terms of your -choice, if you do both of the following: - - a) Accompany the combined library with a copy of the same work based - on the Library, uncombined with any other library facilities, - conveyed under the terms of this License. - - b) Give prominent notice with the combined library that part of it - is a work based on the Library, and explaining where to find the - accompanying uncombined form of the same work. - - 6. Revised Versions of the GNU Lesser General Public License. - - The Free Software Foundation may publish revised and/or new versions -of the GNU Lesser General Public License from time to time. Such new -versions will be similar in spirit to the present version, but may -differ in detail to address new problems or concerns. - - Each version is given a distinguishing version number. If the -Library as you received it specifies that a certain numbered version -of the GNU Lesser General Public License "or any later version" -applies to it, you have the option of following the terms and -conditions either of that published version or of any later version -published by the Free Software Foundation. If the Library as you -received it does not specify a version number of the GNU Lesser -General Public License, you may choose any version of the GNU Lesser -General Public License ever published by the Free Software Foundation. - - If the Library as you received it specifies that a proxy can decide -whether future versions of the GNU Lesser General Public License shall -apply, that proxy's public statement of acceptance of any version is -permanent authorization for you to choose that version for the -Library. diff --git a/LICENSES/MIT-QtWaitingSpinner b/LICENSES/MIT-QtWaitingSpinner deleted file mode 100644 index c85c97aebb..0000000000 --- a/LICENSES/MIT-QtWaitingSpinner +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Original Work Copyright (c) 2012-2015 Alexander Turkin -Modified 2014 by William Hallatt - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/LICENSES/MIT.txt b/LICENSES/MIT.txt new file mode 100644 index 0000000000..204b93da48 --- /dev/null +++ b/LICENSES/MIT.txt @@ -0,0 +1,19 @@ +MIT License Copyright (c) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is furnished +to do so, subject to the following conditions: + +The above copyright notice and this permission notice (including the next +paragraph) shall be included in all copies or substantial portions of the +Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS +OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF +OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. From 6851f25d69571fdec3234f280dc678161b18be61 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Wed, 26 Aug 2020 00:22:37 +0200 Subject: [PATCH 103/157] REUSE: 3rdparty license fix-up - waitingspinnerwidget is MIT with suitable FileCopyrightText lines - KDSAG is LGPL-2.0-only --- .../kdsingleapplicationguard/kdlockedsharedmemorypointer.cpp | 2 +- .../kdsingleapplicationguard/kdlockedsharedmemorypointer.h | 2 +- 3rdparty/kdsingleapplicationguard/kdsharedmemorylocker.cpp | 2 +- 3rdparty/kdsingleapplicationguard/kdsharedmemorylocker.h | 2 +- .../kdsingleapplicationguard/kdsingleapplicationguard.cpp | 2 +- 3rdparty/kdsingleapplicationguard/kdsingleapplicationguard.h | 2 +- 3rdparty/kdsingleapplicationguard/kdtoolsglobal.cpp | 2 +- 3rdparty/kdsingleapplicationguard/kdtoolsglobal.h | 2 +- 3rdparty/kdsingleapplicationguard/pimpl_ptr.cpp | 2 +- 3rdparty/kdsingleapplicationguard/pimpl_ptr.h | 2 +- 3rdparty/waitingspinnerwidget.cpp | 4 +++- 3rdparty/waitingspinnerwidget.h | 5 ++++- 12 files changed, 17 insertions(+), 12 deletions(-) diff --git a/3rdparty/kdsingleapplicationguard/kdlockedsharedmemorypointer.cpp b/3rdparty/kdsingleapplicationguard/kdlockedsharedmemorypointer.cpp index 77e95e6494..284870e06c 100644 --- a/3rdparty/kdsingleapplicationguard/kdlockedsharedmemorypointer.cpp +++ b/3rdparty/kdsingleapplicationguard/kdlockedsharedmemorypointer.cpp @@ -1,6 +1,6 @@ /* + * SPDX-FileCopyrightText: 2001-2010 Klaralvdalens Datakonsult AB. * SPDX-License-Identifier: LGPL-2.0-only - * License-Filename: LICENSES/LGPLv2-KDAB * * The KD Tools Library is Copyright (C) 2001-2010 Klaralvdalens Datakonsult AB. */ diff --git a/3rdparty/kdsingleapplicationguard/kdlockedsharedmemorypointer.h b/3rdparty/kdsingleapplicationguard/kdlockedsharedmemorypointer.h index b9c5d588f2..19fdaa0827 100644 --- a/3rdparty/kdsingleapplicationguard/kdlockedsharedmemorypointer.h +++ b/3rdparty/kdsingleapplicationguard/kdlockedsharedmemorypointer.h @@ -1,6 +1,6 @@ /* + * SPDX-FileCopyrightText: 2001-2010 Klaralvdalens Datakonsult AB. * SPDX-License-Identifier: LGPL-2.0-only - * License-Filename: LICENSES/LGPLv2-KDAB * * The KD Tools Library is Copyright (C) 2001-2010 Klaralvdalens Datakonsult AB. */ diff --git a/3rdparty/kdsingleapplicationguard/kdsharedmemorylocker.cpp b/3rdparty/kdsingleapplicationguard/kdsharedmemorylocker.cpp index a13a45a271..3af326193b 100644 --- a/3rdparty/kdsingleapplicationguard/kdsharedmemorylocker.cpp +++ b/3rdparty/kdsingleapplicationguard/kdsharedmemorylocker.cpp @@ -1,6 +1,6 @@ /* + * SPDX-FileCopyrightText: 2001-2010 Klaralvdalens Datakonsult AB. * SPDX-License-Identifier: LGPL-2.0-only - * License-Filename: LICENSES/LGPLv2-KDAB * * The KD Tools Library is Copyright (C) 2001-2010 Klaralvdalens Datakonsult AB. */ diff --git a/3rdparty/kdsingleapplicationguard/kdsharedmemorylocker.h b/3rdparty/kdsingleapplicationguard/kdsharedmemorylocker.h index 82b7592831..64b5c267f4 100644 --- a/3rdparty/kdsingleapplicationguard/kdsharedmemorylocker.h +++ b/3rdparty/kdsingleapplicationguard/kdsharedmemorylocker.h @@ -1,6 +1,6 @@ /* + * SPDX-FileCopyrightText: 2001-2010 Klaralvdalens Datakonsult AB. * SPDX-License-Identifier: LGPL-2.0-only - * License-Filename: LICENSES/LGPLv2-KDAB * * The KD Tools Library is Copyright (C) 2001-2010 Klaralvdalens Datakonsult AB. */ diff --git a/3rdparty/kdsingleapplicationguard/kdsingleapplicationguard.cpp b/3rdparty/kdsingleapplicationguard/kdsingleapplicationguard.cpp index 8ddf7aad69..52eb60d37d 100644 --- a/3rdparty/kdsingleapplicationguard/kdsingleapplicationguard.cpp +++ b/3rdparty/kdsingleapplicationguard/kdsingleapplicationguard.cpp @@ -1,6 +1,6 @@ /* + * SPDX-FileCopyrightText: 2001-2010 Klaralvdalens Datakonsult AB. * SPDX-License-Identifier: LGPL-2.0-only - * License-Filename: LICENSES/LGPLv2-KDAB * * The KD Tools Library is Copyright (C) 2001-2010 Klaralvdalens Datakonsult AB. */ diff --git a/3rdparty/kdsingleapplicationguard/kdsingleapplicationguard.h b/3rdparty/kdsingleapplicationguard/kdsingleapplicationguard.h index 8ac411a68e..8e7c7b498d 100644 --- a/3rdparty/kdsingleapplicationguard/kdsingleapplicationguard.h +++ b/3rdparty/kdsingleapplicationguard/kdsingleapplicationguard.h @@ -1,6 +1,6 @@ /* + * SPDX-FileCopyrightText: 2001-2010 Klaralvdalens Datakonsult AB. * SPDX-License-Identifier: LGPL-2.0-only - * License-Filename: LICENSES/LGPLv2-KDAB * * The KD Tools Library is Copyright (C) 2001-2010 Klaralvdalens Datakonsult AB. */ diff --git a/3rdparty/kdsingleapplicationguard/kdtoolsglobal.cpp b/3rdparty/kdsingleapplicationguard/kdtoolsglobal.cpp index d3405e82fc..f886189c30 100644 --- a/3rdparty/kdsingleapplicationguard/kdtoolsglobal.cpp +++ b/3rdparty/kdsingleapplicationguard/kdtoolsglobal.cpp @@ -1,6 +1,6 @@ /* + * SPDX-FileCopyrightText: 2001-2010 Klaralvdalens Datakonsult AB. * SPDX-License-Identifier: LGPL-2.0-only - * License-Filename: LICENSES/LGPLv2-KDAB * * The KD Tools Library is Copyright (C) 2001-2010 Klaralvdalens Datakonsult AB. */ diff --git a/3rdparty/kdsingleapplicationguard/kdtoolsglobal.h b/3rdparty/kdsingleapplicationguard/kdtoolsglobal.h index 37ca5857ee..5086ddd713 100644 --- a/3rdparty/kdsingleapplicationguard/kdtoolsglobal.h +++ b/3rdparty/kdsingleapplicationguard/kdtoolsglobal.h @@ -1,6 +1,6 @@ /* + * SPDX-FileCopyrightText: 2001-2010 Klaralvdalens Datakonsult AB. * SPDX-License-Identifier: LGPL-2.0-only - * License-Filename: LICENSES/LGPLv2-KDAB * * The KD Tools Library is Copyright (C) 2001-2010 Klaralvdalens Datakonsult AB. */ diff --git a/3rdparty/kdsingleapplicationguard/pimpl_ptr.cpp b/3rdparty/kdsingleapplicationguard/pimpl_ptr.cpp index 35b52d419e..f2b0a4dd92 100644 --- a/3rdparty/kdsingleapplicationguard/pimpl_ptr.cpp +++ b/3rdparty/kdsingleapplicationguard/pimpl_ptr.cpp @@ -1,6 +1,6 @@ /* + * SPDX-FileCopyrightText: 2001-2010 Klaralvdalens Datakonsult AB. * SPDX-License-Identifier: LGPL-2.0-only - * License-Filename: LICENSES/LGPLv2-KDAB * * The KD Tools Library is Copyright (C) 2001-2010 Klaralvdalens Datakonsult AB. */ diff --git a/3rdparty/kdsingleapplicationguard/pimpl_ptr.h b/3rdparty/kdsingleapplicationguard/pimpl_ptr.h index 41b33b5820..b8b4786ba7 100644 --- a/3rdparty/kdsingleapplicationguard/pimpl_ptr.h +++ b/3rdparty/kdsingleapplicationguard/pimpl_ptr.h @@ -1,6 +1,6 @@ /* + * SPDX-FileCopyrightText: 2001-2010 Klaralvdalens Datakonsult AB. * SPDX-License-Identifier: LGPL-2.0-only - * License-Filename: LICENSES/LGPLv2-KDAB * * The KD Tools Library is Copyright (C) 2001-2010 Klaralvdalens Datakonsult AB. */ diff --git a/3rdparty/waitingspinnerwidget.cpp b/3rdparty/waitingspinnerwidget.cpp index 45c689019d..98931a6adf 100644 --- a/3rdparty/waitingspinnerwidget.cpp +++ b/3rdparty/waitingspinnerwidget.cpp @@ -1,6 +1,8 @@ /* + * SPDX-FileCopyrightText: 2012-2014 Alexander Turkin + * SPDX-FileCopyrightText: 2014 William Hallatt + * SPDX-FileCopyrightText: 2015 Jacob Dawid * SPDX-License-Identifier: MIT - * License-Filename: LICENSES/MIT-QtWaitingSpinner */ /* Original Work Copyright (c) 2012-2014 Alexander Turkin diff --git a/3rdparty/waitingspinnerwidget.h b/3rdparty/waitingspinnerwidget.h index b3e8df9a01..c8c6b9687f 100644 --- a/3rdparty/waitingspinnerwidget.h +++ b/3rdparty/waitingspinnerwidget.h @@ -1,11 +1,14 @@ /* + * SPDX-FileCopyrightText: 2012-2014 Alexander Turkin + * SPDX-FileCopyrightText: 2014 William Hallatt + * SPDX-FileCopyrightText: 2015 Jacob Dawid * SPDX-License-Identifier: MIT - * License-Filename: LICENSES/MIT-QtWaitingSpinner */ /* Original Work Copyright (c) 2012-2014 Alexander Turkin Modified 2014 by William Hallatt Modified 2015 by Jacob Dawid + Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to From 31d0b5b19426329dc7e8eb8566684fdb19eb94c9 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Wed, 26 Aug 2020 00:24:40 +0200 Subject: [PATCH 104/157] REUSE: (BSD-2-Clause) CMakeModules/ The intended license for the CMake modules is BSD-2-Clause; there's no desire to restrict what can be done with these, and CMake modules are generally 2-clause licensed. --- CMakeModules/BoostPython3.cmake | 16 +++++++++++++++- CMakeModules/CMakeColors.cmake | 11 +++++++++++ CMakeModules/CMakeDateStamp.cmake | 8 ++++++++ CMakeModules/CMakeVersionSource.cmake | 7 +++++++ .../CalamaresAddBrandingSubdirectory.cmake | 7 ++++--- CMakeModules/CalamaresAddLibrary.cmake | 7 ++++--- .../CalamaresAddModuleSubdirectory.cmake | 7 ++++--- CMakeModules/CalamaresAddPlugin.cmake | 7 ++++--- CMakeModules/CalamaresAddTest.cmake | 6 +++--- CMakeModules/CalamaresAddTranslations.cmake | 6 +++--- CMakeModules/CalamaresAutomoc.cmake | 6 +++--- CMakeModules/FindCrypt.cmake | 8 ++++++++ CMakeModules/FindLIBPARTED.cmake | 5 +++-- CMakeModules/FindLibPWQuality.cmake | 7 +++++++ CMakeModules/FindPythonQt.cmake | 8 ++++++++ CMakeModules/FindYAMLCPP.cmake | 8 ++++++++ 16 files changed, 100 insertions(+), 24 deletions(-) diff --git a/CMakeModules/BoostPython3.cmake b/CMakeModules/BoostPython3.cmake index 021c1947af..e53f9072db 100644 --- a/CMakeModules/BoostPython3.cmake +++ b/CMakeModules/BoostPython3.cmake @@ -1,3 +1,17 @@ +# === This file is part of Calamares - === +# +# SPDX-FileCopyrightText: 2014 Aurélien Gâteau +# SPDX-FileCopyrightText: 2017 Adriaan de Groot +# SPDX-FileCopyrightText: 2019 Kevin Kofler +# SPDX-License-Identifier: BSD-2-Clause +# +### +# +# Handles the mess that Boost::Python is before CMake 3.16 and +# Boost 1.70 or so. +# +### +# # On Ubuntu 14.04, the libboost-python1.54-dev package comes with one library # for each Python version: # libboost_python-py27.so @@ -68,7 +82,7 @@ macro( find_boost_python3 boost_version python_version found_var ) endif() set( ${found_var} ${_fbp_found} ) - + # This is superfluous, but allows proper reporting in the features list if ( _fbp_found ) find_package( Boost ${boost_version} COMPONENTS ${_fbp_found} ) diff --git a/CMakeModules/CMakeColors.cmake b/CMakeModules/CMakeColors.cmake index 97739627d6..7de050e9be 100644 --- a/CMakeModules/CMakeColors.cmake +++ b/CMakeModules/CMakeColors.cmake @@ -1,3 +1,14 @@ +# === This file is part of Calamares - === +# +# SPDX-FileCopyrightText: 2014 Teo Mrnjavac +# SPDX-FileCopyrightText: 2014 Kevin Kofler +# SPDX-FileCopyrightText: 2017 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause +# +### +# +# Defines a handful of strings that, with normal xterm handling, +# will change colors in the output, so it's nicer to read. if(NOT WIN32) set(_use_color ON) if("0" STREQUAL "$ENV{CLICOLOR}") diff --git a/CMakeModules/CMakeDateStamp.cmake b/CMakeModules/CMakeDateStamp.cmake index 0b6a3896f7..383475ca29 100644 --- a/CMakeModules/CMakeDateStamp.cmake +++ b/CMakeModules/CMakeDateStamp.cmake @@ -1,3 +1,11 @@ +# === This file is part of Calamares - === +# +# SPDX-FileCopyrightText: 2014 Teo Mrnjavac +# SPDX-License-Identifier: BSD-2-Clause +# +### +# +# Find today's date, for versioning purposes. find_program(DATE_EXECUTABLE NAMES date) mark_as_advanced(DATE_EXECUTABLE) diff --git a/CMakeModules/CMakeVersionSource.cmake b/CMakeModules/CMakeVersionSource.cmake index 8265468072..69ef8ee593 100644 --- a/CMakeModules/CMakeVersionSource.cmake +++ b/CMakeModules/CMakeVersionSource.cmake @@ -1,3 +1,10 @@ +# === This file is part of Calamares - === +# +# SPDX-FileCopyrightText: 2014 Teo Mrnjavac +# SPDX-License-Identifier: BSD-2-Clause +# +### +# # Try to identify the current development source version. set(CMAKE_VERSION_SOURCE "") if(EXISTS ${CMAKE_SOURCE_DIR}/.git/HEAD) diff --git a/CMakeModules/CalamaresAddBrandingSubdirectory.cmake b/CMakeModules/CalamaresAddBrandingSubdirectory.cmake index 70fcd92798..d0ecbae5d8 100644 --- a/CMakeModules/CalamaresAddBrandingSubdirectory.cmake +++ b/CMakeModules/CalamaresAddBrandingSubdirectory.cmake @@ -1,5 +1,9 @@ # === This file is part of Calamares - === # +# SPDX-FileCopyrightText: 2014 Teo Mrnjavac +# SPDX-FileCopyrightText: 2017 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause +# # Calamares is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or @@ -13,9 +17,6 @@ # You should have received a copy of the GNU General Public License # along with Calamares. If not, see . # -# SPDX-License-Identifier: GPL-3.0-or-later -# License-Filename: LICENSE -# ### # # Support macros for creating Calamares branding components. diff --git a/CMakeModules/CalamaresAddLibrary.cmake b/CMakeModules/CalamaresAddLibrary.cmake index 901791e303..892653ae6d 100644 --- a/CMakeModules/CalamaresAddLibrary.cmake +++ b/CMakeModules/CalamaresAddLibrary.cmake @@ -1,5 +1,9 @@ # === This file is part of Calamares - === # +# SPDX-FileCopyrightText: 2014 Teo Mrnjavac +# SPDX-FileCopyrightText: 2017 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause +# # Calamares is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or @@ -13,9 +17,6 @@ # You should have received a copy of the GNU General Public License # along with Calamares. If not, see . # -# SPDX-License-Identifier: GPL-3.0-or-later -# License-Filename: LICENSE -# ### # # Support functions for building plugins. diff --git a/CMakeModules/CalamaresAddModuleSubdirectory.cmake b/CMakeModules/CalamaresAddModuleSubdirectory.cmake index 86f0b8f4c9..395cd936eb 100644 --- a/CMakeModules/CalamaresAddModuleSubdirectory.cmake +++ b/CMakeModules/CalamaresAddModuleSubdirectory.cmake @@ -1,5 +1,9 @@ # === This file is part of Calamares - === # +# SPDX-FileCopyrightText: 2014 Teo Mrnjavac +# SPDX-FileCopyrightText: 2017 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause +# # Calamares is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or @@ -13,9 +17,6 @@ # You should have received a copy of the GNU General Public License # along with Calamares. If not, see . # -# SPDX-License-Identifier: GPL-3.0-or-later -# License-Filename: LICENSE -# ### # # Function and support code for adding a Calamares module (either a Qt / C++ plugin, diff --git a/CMakeModules/CalamaresAddPlugin.cmake b/CMakeModules/CalamaresAddPlugin.cmake index a90e6df638..ad85315118 100644 --- a/CMakeModules/CalamaresAddPlugin.cmake +++ b/CMakeModules/CalamaresAddPlugin.cmake @@ -1,5 +1,9 @@ # === This file is part of Calamares - === # +# SPDX-FileCopyrightText: 2014 Teo Mrnjavac +# SPDX-FileCopyrightText: 2019 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause +# # Calamares is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or @@ -13,9 +17,6 @@ # You should have received a copy of the GNU General Public License # along with Calamares. If not, see . # -# SPDX-License-Identifier: GPL-3.0-or-later -# License-Filename: LICENSE -# ### # # Convenience function for creating a C++ (qtplugin) module for Calamares. diff --git a/CMakeModules/CalamaresAddTest.cmake b/CMakeModules/CalamaresAddTest.cmake index 4dd6737457..14f9d4144d 100644 --- a/CMakeModules/CalamaresAddTest.cmake +++ b/CMakeModules/CalamaresAddTest.cmake @@ -1,5 +1,8 @@ # === This file is part of Calamares - === # +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause +# # Calamares is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or @@ -13,9 +16,6 @@ # You should have received a copy of the GNU General Public License # along with Calamares. If not, see . # -# SPDX-License-Identifier: GPL-3.0-or-later -# License-Filename: LICENSE -# ### # # Support functions for building Calamares tests. diff --git a/CMakeModules/CalamaresAddTranslations.cmake b/CMakeModules/CalamaresAddTranslations.cmake index 5015301d2e..27ee1b917a 100644 --- a/CMakeModules/CalamaresAddTranslations.cmake +++ b/CMakeModules/CalamaresAddTranslations.cmake @@ -1,5 +1,8 @@ # === This file is part of Calamares - === # +# SPDX-FileCopyrightText: 2017 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause +# # Calamares is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or @@ -13,9 +16,6 @@ # You should have received a copy of the GNU General Public License # along with Calamares. If not, see . # -# SPDX-License-Identifier: GPL-3.0-or-later -# License-Filename: LICENSE -# ### # # This file has not yet been documented for use outside of Calamares itself. diff --git a/CMakeModules/CalamaresAutomoc.cmake b/CMakeModules/CalamaresAutomoc.cmake index c9a08a20da..21ce35d9ca 100644 --- a/CMakeModules/CalamaresAutomoc.cmake +++ b/CMakeModules/CalamaresAutomoc.cmake @@ -1,5 +1,8 @@ # === This file is part of Calamares - === # +# SPDX-FileCopyrightText: 2019 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause +# # Calamares is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or @@ -13,9 +16,6 @@ # You should have received a copy of the GNU General Public License # along with Calamares. If not, see . # -# SPDX-License-Identifier: GPL-3.0-or-later -# License-Filename: LICENSE -# ### # # Helper function for doing automoc, autouic, autorcc on targets, diff --git a/CMakeModules/FindCrypt.cmake b/CMakeModules/FindCrypt.cmake index d17d701780..2a65f9d924 100644 --- a/CMakeModules/FindCrypt.cmake +++ b/CMakeModules/FindCrypt.cmake @@ -1,3 +1,11 @@ +# === This file is part of Calamares - === +# +# SPDX-FileCopyrightText: 2014 Teo Mrnjavac +# SPDX-FileCopyrightText: 2017 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause +# +### +# # - Find libcrypt # Find the libcrypt includes and the libcrypt libraries # This module defines diff --git a/CMakeModules/FindLIBPARTED.cmake b/CMakeModules/FindLIBPARTED.cmake index 97e7d97587..4942710036 100644 --- a/CMakeModules/FindLIBPARTED.cmake +++ b/CMakeModules/FindLIBPARTED.cmake @@ -1,4 +1,5 @@ -# Copyright (C) 2008,2010,2011 by Volker Lanz +# SPDX-FileCopyrightText: 2008,2010,2011 by Volker Lanz +# SPDX-License-Identifier: BSD-2-Clause # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -44,7 +45,7 @@ else (LIBPARTED_FS_RESIZE_LIBRARY) set(LIBPARTED_LIBS ${LIBPARTED_LIBRARY}) endif (LIBPARTED_FS_RESIZE_LIBRARY) -# KDE adds -ansi to the C make flags, parted headers use GNU extensions, so +# KDE adds -ansi to the C make flags, parted headers use GNU extensions, so # undo that unset(CMAKE_C_FLAGS) diff --git a/CMakeModules/FindLibPWQuality.cmake b/CMakeModules/FindLibPWQuality.cmake index 2728afb1e2..903c767bb5 100644 --- a/CMakeModules/FindLibPWQuality.cmake +++ b/CMakeModules/FindLibPWQuality.cmake @@ -1,3 +1,10 @@ +# === This file is part of Calamares - === +# +# SPDX-FileCopyrightText: 2018 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause +# +### +# # Locate libpwquality # https://github.com/libpwquality/libpwquality # diff --git a/CMakeModules/FindPythonQt.cmake b/CMakeModules/FindPythonQt.cmake index 519e1c93ee..700b381170 100644 --- a/CMakeModules/FindPythonQt.cmake +++ b/CMakeModules/FindPythonQt.cmake @@ -1,3 +1,11 @@ +# === This file is part of Calamares - === +# +# SPDX-FileCopyrightText: 2016 Teo Mrnjavac +# SPDX-FileCopyrightText: 2017 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause +# +### +# # Find PythonQt # # Sets PYTHONQT_FOUND, PYTHONQT_INCLUDE_DIR, PYTHONQT_LIBRARY, PYTHONQT_LIBRARIES diff --git a/CMakeModules/FindYAMLCPP.cmake b/CMakeModules/FindYAMLCPP.cmake index 395c794bb8..cc114de921 100644 --- a/CMakeModules/FindYAMLCPP.cmake +++ b/CMakeModules/FindYAMLCPP.cmake @@ -1,3 +1,11 @@ +# === This file is part of Calamares - === +# +# SPDX-FileCopyrightText: 2014 Teo Mrnjavac +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause +# +### +# # Locate yaml-cpp # # This module defines From 86f66e8f16bef687682e4203b7cd3c284e0672fa Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Fri, 21 Aug 2020 19:43:53 +0200 Subject: [PATCH 105/157] REUSE: (GPL-3.0-or-later) all the schema files - these are vaguely derived from the schema's written by artoo@manjaro.org, but totally re-done for JSON-Schema --- src/modules/bootloader/bootloader.schema.yaml | 2 ++ src/modules/displaymanager/displaymanager.schema.yaml | 2 ++ src/modules/finished/finished.schema.yaml | 2 ++ src/modules/fstab/fstab.schema.yaml | 2 ++ src/modules/grubcfg/grubcfg.schema.yaml | 2 ++ src/modules/initcpio/initcpio.schema.yaml | 2 ++ src/modules/keyboard/keyboard.schema.yaml | 2 ++ src/modules/license/license.schema.yaml | 2 ++ src/modules/locale/locale.schema.yaml | 2 ++ src/modules/luksopenswaphookcfg/luksopenswaphookcfg.schema.yaml | 2 ++ src/modules/machineid/machineid.schema.yaml | 2 ++ src/modules/mount/mount.schema.yaml | 2 ++ src/modules/netinstall/netinstall.schema.yaml | 2 ++ src/modules/packages/packages.schema.yaml | 2 ++ src/modules/partition/partition.schema.yaml | 2 ++ src/modules/plymouthcfg/plymouthcfg.schema.yaml | 2 ++ src/modules/removeuser/removeuser.schema.yaml | 2 ++ src/modules/umount/umount.schema.yaml | 2 ++ src/modules/unpackfs/unpackfs.schema.yaml | 2 ++ src/modules/users/users.schema.yaml | 2 ++ src/modules/welcome/welcome.schema.yaml | 2 ++ 21 files changed, 42 insertions(+) diff --git a/src/modules/bootloader/bootloader.schema.yaml b/src/modules/bootloader/bootloader.schema.yaml index 4670ea3db9..152d3ab72c 100644 --- a/src/modules/bootloader/bootloader.schema.yaml +++ b/src/modules/bootloader/bootloader.schema.yaml @@ -1,3 +1,5 @@ +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: GPL-3.0-or-later --- $schema: https://json-schema.org/schema# $id: https://calamares.io/schemas/bootloader diff --git a/src/modules/displaymanager/displaymanager.schema.yaml b/src/modules/displaymanager/displaymanager.schema.yaml index 08923f7261..fc28fd66d5 100644 --- a/src/modules/displaymanager/displaymanager.schema.yaml +++ b/src/modules/displaymanager/displaymanager.schema.yaml @@ -1,3 +1,5 @@ +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: GPL-3.0-or-later --- $schema: https://json-schema.org/schema# $id: https://calamares.io/schemas/displaymanager diff --git a/src/modules/finished/finished.schema.yaml b/src/modules/finished/finished.schema.yaml index 53189c7fa3..380292d1b2 100644 --- a/src/modules/finished/finished.schema.yaml +++ b/src/modules/finished/finished.schema.yaml @@ -1,3 +1,5 @@ +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: GPL-3.0-or-later --- $schema: https://json-schema.org/schema# $id: https://calamares.io/schemas/finished diff --git a/src/modules/fstab/fstab.schema.yaml b/src/modules/fstab/fstab.schema.yaml index 5b54d767ff..fc68fd2c58 100644 --- a/src/modules/fstab/fstab.schema.yaml +++ b/src/modules/fstab/fstab.schema.yaml @@ -1,3 +1,5 @@ +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: GPL-3.0-or-later --- $schema: https://json-schema.org/schema# $id: https://calamares.io/schemas/fstab diff --git a/src/modules/grubcfg/grubcfg.schema.yaml b/src/modules/grubcfg/grubcfg.schema.yaml index f010ac694b..f1bf2cc03c 100644 --- a/src/modules/grubcfg/grubcfg.schema.yaml +++ b/src/modules/grubcfg/grubcfg.schema.yaml @@ -1,3 +1,5 @@ +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: GPL-3.0-or-later --- $schema: https://json-schema.org/schema# $id: https://calamares.io/schemas/grubcfg diff --git a/src/modules/initcpio/initcpio.schema.yaml b/src/modules/initcpio/initcpio.schema.yaml index d3fda6be0e..2024182bfa 100644 --- a/src/modules/initcpio/initcpio.schema.yaml +++ b/src/modules/initcpio/initcpio.schema.yaml @@ -1,3 +1,5 @@ +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: GPL-3.0-or-later --- $schema: https://json-schema.org/schema# $id: https://calamares.io/schemas/initcpio diff --git a/src/modules/keyboard/keyboard.schema.yaml b/src/modules/keyboard/keyboard.schema.yaml index 05d98bfde1..08a2ababe9 100644 --- a/src/modules/keyboard/keyboard.schema.yaml +++ b/src/modules/keyboard/keyboard.schema.yaml @@ -1,3 +1,5 @@ +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: GPL-3.0-or-later --- $schema: https://json-schema.org/schema# $id: https://calamares.io/schemas/finished diff --git a/src/modules/license/license.schema.yaml b/src/modules/license/license.schema.yaml index 090b2428e1..d933ac15a0 100644 --- a/src/modules/license/license.schema.yaml +++ b/src/modules/license/license.schema.yaml @@ -1,3 +1,5 @@ +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: GPL-3.0-or-later --- $schema: https://json-schema.org/schema# $id: https://calamares.io/schemas/license diff --git a/src/modules/locale/locale.schema.yaml b/src/modules/locale/locale.schema.yaml index d6c35020f0..7aa7811275 100644 --- a/src/modules/locale/locale.schema.yaml +++ b/src/modules/locale/locale.schema.yaml @@ -1,3 +1,5 @@ +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: GPL-3.0-or-later --- $schema: https://json-schema.org/schema# $id: https://calamares.io/schemas/locale diff --git a/src/modules/luksopenswaphookcfg/luksopenswaphookcfg.schema.yaml b/src/modules/luksopenswaphookcfg/luksopenswaphookcfg.schema.yaml index 426822e276..ed2ae79719 100644 --- a/src/modules/luksopenswaphookcfg/luksopenswaphookcfg.schema.yaml +++ b/src/modules/luksopenswaphookcfg/luksopenswaphookcfg.schema.yaml @@ -1,3 +1,5 @@ +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: GPL-3.0-or-later --- $schema: https://json-schema.org/schema# $id: https://calamares.io/schemas/luksopenswaphookcfg diff --git a/src/modules/machineid/machineid.schema.yaml b/src/modules/machineid/machineid.schema.yaml index c5eb55b1b9..8b84f1d227 100644 --- a/src/modules/machineid/machineid.schema.yaml +++ b/src/modules/machineid/machineid.schema.yaml @@ -1,3 +1,5 @@ +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: GPL-3.0-or-later --- $schema: https://json-schema.org/schema# $id: https://calamares.io/schemas/machineid diff --git a/src/modules/mount/mount.schema.yaml b/src/modules/mount/mount.schema.yaml index 55ee886445..2d5e4d4a09 100644 --- a/src/modules/mount/mount.schema.yaml +++ b/src/modules/mount/mount.schema.yaml @@ -1,3 +1,5 @@ +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: GPL-3.0-or-later --- $schema: https://json-schema.org/schema# $id: https://calamares.io/schemas/mount diff --git a/src/modules/netinstall/netinstall.schema.yaml b/src/modules/netinstall/netinstall.schema.yaml index 739af635e0..a66c877d16 100644 --- a/src/modules/netinstall/netinstall.schema.yaml +++ b/src/modules/netinstall/netinstall.schema.yaml @@ -1,3 +1,5 @@ +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: GPL-3.0-or-later --- $schema: https://json-schema.org/schema# $id: https://calamares.io/schemas/netinstall diff --git a/src/modules/packages/packages.schema.yaml b/src/modules/packages/packages.schema.yaml index ea0addd109..79f5f21c82 100644 --- a/src/modules/packages/packages.schema.yaml +++ b/src/modules/packages/packages.schema.yaml @@ -1,3 +1,5 @@ +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: GPL-3.0-or-later --- $schema: https://json-schema.org/schema# $id: https://calamares.io/schemas/packages diff --git a/src/modules/partition/partition.schema.yaml b/src/modules/partition/partition.schema.yaml index 157f416d76..770b8a645d 100644 --- a/src/modules/partition/partition.schema.yaml +++ b/src/modules/partition/partition.schema.yaml @@ -1,3 +1,5 @@ +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: GPL-3.0-or-later --- $schema: https://json-schema.org/schema# $id: https://calamares.io/schemas/partition diff --git a/src/modules/plymouthcfg/plymouthcfg.schema.yaml b/src/modules/plymouthcfg/plymouthcfg.schema.yaml index 5100e2cd39..27925ec026 100644 --- a/src/modules/plymouthcfg/plymouthcfg.schema.yaml +++ b/src/modules/plymouthcfg/plymouthcfg.schema.yaml @@ -1,3 +1,5 @@ +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: GPL-3.0-or-later --- $schema: https://json-schema.org/schema# $id: https://calamares.io/schemas/plymouthcfg diff --git a/src/modules/removeuser/removeuser.schema.yaml b/src/modules/removeuser/removeuser.schema.yaml index d1fed47fe6..c282717164 100644 --- a/src/modules/removeuser/removeuser.schema.yaml +++ b/src/modules/removeuser/removeuser.schema.yaml @@ -1,3 +1,5 @@ +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: GPL-3.0-or-later --- $schema: https://json-schema.org/schema# $id: https://calamares.io/schemas/removeuser diff --git a/src/modules/umount/umount.schema.yaml b/src/modules/umount/umount.schema.yaml index 585946fbea..9b81db3d9c 100644 --- a/src/modules/umount/umount.schema.yaml +++ b/src/modules/umount/umount.schema.yaml @@ -1,3 +1,5 @@ +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: GPL-3.0-or-later --- $schema: https://json-schema.org/schema# $id: https://calamares.io/schemas/umount diff --git a/src/modules/unpackfs/unpackfs.schema.yaml b/src/modules/unpackfs/unpackfs.schema.yaml index b72a5a69bb..66c7c0da81 100644 --- a/src/modules/unpackfs/unpackfs.schema.yaml +++ b/src/modules/unpackfs/unpackfs.schema.yaml @@ -1,3 +1,5 @@ +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: GPL-3.0-or-later --- $schema: https://json-schema.org/schema# $id: https://calamares.io/schemas/unpackfs diff --git a/src/modules/users/users.schema.yaml b/src/modules/users/users.schema.yaml index 44cb9f71ce..310df350fd 100644 --- a/src/modules/users/users.schema.yaml +++ b/src/modules/users/users.schema.yaml @@ -1,3 +1,5 @@ +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: GPL-3.0-or-later --- $schema: https://json-schema.org/schema# $id: https://calamares.io/schemas/users diff --git a/src/modules/welcome/welcome.schema.yaml b/src/modules/welcome/welcome.schema.yaml index 56a79be06b..fbebcd968f 100644 --- a/src/modules/welcome/welcome.schema.yaml +++ b/src/modules/welcome/welcome.schema.yaml @@ -1,3 +1,5 @@ +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: GPL-3.0-or-later --- $schema: https://json-schema.org/schema# $id: https://calamares.io/schemas/welcome From 0ee0f4081638b49639abe086dc7e28a2b42abd2f Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Fri, 21 Aug 2020 23:19:41 +0200 Subject: [PATCH 106/157] REUSE: license tags for the scripts and tools in ci/ - remove empty useless HACKING - remove unused cppcheck.sh - migrate the AppImage docs to the wiki (which doesn't moan about licensing) - try a HTML-style comment in the RELEASE docs --- ci/AppImage.md | 45 ----------------------------------------- ci/AppImage.sh | 3 +-- ci/HACKING.md | 1 - ci/RELEASE.md | 5 +++++ ci/RELEASE.sh | 3 +++ ci/astylerc | 4 ++++ ci/calamaresstyle | 4 ++++ ci/configvalidator.py | 1 - ci/coverity-model.c | 3 +++ ci/cppcheck.sh | 4 ---- ci/travis-config.sh | 3 +++ ci/travis-continuous.sh | 3 +++ ci/travis-coverity.sh | 3 +++ ci/travis.sh | 3 +++ ci/txcheck.sh | 2 +- ci/txpull.sh | 4 ++-- ci/txpush.sh | 4 ++-- ci/txreduce.py | 3 +++ ci/txstats.py | 3 +++ 19 files changed, 43 insertions(+), 58 deletions(-) delete mode 100644 ci/AppImage.md delete mode 100644 ci/HACKING.md delete mode 100755 ci/cppcheck.sh diff --git a/ci/AppImage.md b/ci/AppImage.md deleted file mode 100644 index 7fa51a8bc3..0000000000 --- a/ci/AppImage.md +++ /dev/null @@ -1,45 +0,0 @@ -# AppImage building for Calamares - -> It is possible to build Calamares as an AppImage (perhaps other -> containerized formats as well). This might make sense for -> OEM phase-1 deployments in environments where Calamares is -> not using the native toolkit. - -## AppImage tools - -You will need - - [`linuxdeploy-x86_64.AppImage`](https://github.com/linuxdeploy/linuxdeploy/releases) - - [`linuxdeploy-plugin-qt-x86_64.AppImage`](https://github.com/linuxdeploy/linuxdeploy-plugin-qt/releases) - - [`linuxdeploy-plugin-conda.sh`](https://github.com/linuxdeploy/linuxdeploy-plugin-conda) - -These tools should run -- they are bundled as AppImages after all -- on -any modern Linux system. The [AppImage packaging documentation](https://docs.appimage.org/packaging-guide/) -explains how the whole tooling works. - -If the tools are not present, the build script (see below) will download them, -but you should save them for later. - -## AppImage build - -From the **source** directory, run `ci/AppImage.sh`: - - Use `--tools-dir` to copy the tools from a local cache rather than - downloading them again. - - Run it with `--cmake-args` for special CMake handling. - - Use `--skip-build` to avoid rebuilding Calamares all the time. - - Use `--config-dir` to copy in Calamares configuration files (e.g. - *settings.conf* and the module configuration files) from a given - directory. - -The build process will: - - copy (or download) the AppImage tools into a fresh build directory - - configure and build Calamares with suitable settings - - modifies the standard `.desktop` file to be AppImage-compatible - - builds the image with the AppImage tools - -## AppImage caveats - -The resulting AppImage, `Calamares-x86_64.AppImage`, can be run as if it is -a regular Calamares executable. For internal reasons it always passes the -`-X` flag; any other command-line flags are passed in unchanged. Internally, -`XDG_*_DIRS` are used to get Calamares to find the resources inside the AppImage -rather than in the host system. diff --git a/ci/AppImage.sh b/ci/AppImage.sh index 1bb067b1e5..116023c53f 100755 --- a/ci/AppImage.sh +++ b/ci/AppImage.sh @@ -1,9 +1,8 @@ #! /bin/sh # +# SPDX-FileCopyrightText: 2019 Adriaan de Groot # SPDX-License-Identifier: BSD-2-Clause # -# Copyright 2019 Adriaan de Groot -# # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: diff --git a/ci/HACKING.md b/ci/HACKING.md deleted file mode 100644 index f1c8b750bb..0000000000 --- a/ci/HACKING.md +++ /dev/null @@ -1 +0,0 @@ -This has moved [to the wiki](https://github.com/calamares/calamares/wiki/Develop-Code). diff --git a/ci/RELEASE.md b/ci/RELEASE.md index 7fa19c26ae..3bb6b1b9ec 100644 --- a/ci/RELEASE.md +++ b/ci/RELEASE.md @@ -1,5 +1,10 @@ # Calamares Release Process + + > Calamares releases are now rolling when-they-are-ready releases. > Releases are made from *calamares* and tagged there. When, in future, > LTS releases resume, these steps may be edited again. diff --git a/ci/RELEASE.sh b/ci/RELEASE.sh index 82c77c3e2f..6f1b198c91 100755 --- a/ci/RELEASE.sh +++ b/ci/RELEASE.sh @@ -1,5 +1,8 @@ #! /bin/sh # +# SPDX-FileCopyrightText: 2018 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause +# ### USAGE # # Release script for Calamares diff --git a/ci/astylerc b/ci/astylerc index 7fb769a9d9..01eda2522f 100644 --- a/ci/astylerc +++ b/ci/astylerc @@ -1,3 +1,7 @@ +# SPDX-FileCopyrightText: 2014 Aurélien Gâteau +# SPDX-FileCopyrightText: 2019 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause + # Do not create a backup file suffix=none diff --git a/ci/calamaresstyle b/ci/calamaresstyle index 19f4a152a6..d2ce360bbd 100755 --- a/ci/calamaresstyle +++ b/ci/calamaresstyle @@ -1,5 +1,9 @@ #!/bin/sh # +# SPDX-FileCopyrightText: 2014 Aurélien Gâteau +# SPDX-FileCopyrightText: 2019 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause +# # Calls astyle with settings matching Calamares coding style # Requires astyle >= 2.04 and clang-format-7 -8 or -9 # diff --git a/ci/configvalidator.py b/ci/configvalidator.py index 9d1bc21a5c..5c0ee45593 100644 --- a/ci/configvalidator.py +++ b/ci/configvalidator.py @@ -2,7 +2,6 @@ # # SPDX-FileCopyrightText: 2020 Adriaan de Groot # SPDX-License-Identifier: BSD-2-Clause -# License-Filename: LICENSES/BSD2 # usage = """ Validates a Calamares config file -- YAML syntax -- against a schema. diff --git a/ci/coverity-model.c b/ci/coverity-model.c index b4282397c2..1d63453353 100644 --- a/ci/coverity-model.c +++ b/ci/coverity-model.c @@ -3,4 +3,7 @@ Calamares doesn't seem to geenerate any false positives, so the model-file is empty. + + SPDX-FileCopyrightText: 2017 Adriaan de Groot + SPDX-License-Identifier: BSD-2-Clause */ diff --git a/ci/cppcheck.sh b/ci/cppcheck.sh deleted file mode 100755 index e55e97ee43..0000000000 --- a/ci/cppcheck.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/bash - -cd "$WORKSPACE" -cppcheck --enable=all --inconclusive --xml --xml-version=2 src 2> cppcheck.xml \ No newline at end of file diff --git a/ci/travis-config.sh b/ci/travis-config.sh index 565b3deba8..15163cc99b 100644 --- a/ci/travis-config.sh +++ b/ci/travis-config.sh @@ -1,5 +1,8 @@ # Build configuration on Travis. # +# SPDX-FileCopyrightText: 2018 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause +# # Defines a CMAKE_ARGS variable for use with cmake # # This file is sourced by travis.sh, and exports the variables diff --git a/ci/travis-continuous.sh b/ci/travis-continuous.sh index 567a55d3de..ceb80df9bc 100755 --- a/ci/travis-continuous.sh +++ b/ci/travis-continuous.sh @@ -1,5 +1,8 @@ #! /bin/sh # +# SPDX-FileCopyrightText: 2017 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause +# # Travis CI script for use on every-commit: # - build and install Calamares # diff --git a/ci/travis-coverity.sh b/ci/travis-coverity.sh index 78535df651..5ec73568ab 100755 --- a/ci/travis-coverity.sh +++ b/ci/travis-coverity.sh @@ -1,5 +1,8 @@ #! /bin/sh # +# SPDX-FileCopyrightText: 2017 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause +# # Travis CI script for weekly (cron) use: # - use the coverity tool to build and and upload results # diff --git a/ci/travis.sh b/ci/travis.sh index 737da95d4f..e182e48bb3 100755 --- a/ci/travis.sh +++ b/ci/travis.sh @@ -1,5 +1,8 @@ #! /bin/sh # +# SPDX-FileCopyrightText: 2017 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause +# # Travis build driver script: # - the regular CI runs, triggered by commits, run a script that builds # and installs calamares, and then runs the tests. diff --git a/ci/txcheck.sh b/ci/txcheck.sh index 229cc8a739..a2fb5a6154 100644 --- a/ci/txcheck.sh +++ b/ci/txcheck.sh @@ -3,8 +3,8 @@ ### LICENSE # === This file is part of Calamares - === # -# SPDX-License-Identifier: BSD-2-Clause # SPDX-FileCopyrightText: 2019-2020 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause # # This file is Free Software: you can redistribute it and/or modify # it under the terms of the 2-clause BSD License. diff --git a/ci/txpull.sh b/ci/txpull.sh index 63c70fa496..730e2a3f32 100755 --- a/ci/txpull.sh +++ b/ci/txpull.sh @@ -3,9 +3,9 @@ ### LICENSE # === This file is part of Calamares - === # -# SPDX-License-Identifier: BSD-2-Clause -# SPDX-FileCopyrightText: 2017-2020 Adriaan de Groot # SPDX-FileCopyrightText: 2015-2016 Teo Mrnjavac +# SPDX-FileCopyrightText: 2017-2020 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause # # This file is Free Software: you can redistribute it and/or modify # it under the terms of the 2-clause BSD License. diff --git a/ci/txpush.sh b/ci/txpush.sh index 00d8d401b4..796f6cfc19 100755 --- a/ci/txpush.sh +++ b/ci/txpush.sh @@ -3,9 +3,9 @@ ### LICENSE # === This file is part of Calamares - === # -# SPDX-License-Identifier: BSD-2-Clause -# SPDX-FileCopyrightText: 2017-2020 Adriaan de Groot # SPDX-FileCopyrightText: 2015-2016 Teo Mrnjavac +# SPDX-FileCopyrightText: 2017-2020 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause # # This file is Free Software: you can redistribute it and/or modify # it under the terms of the 2-clause BSD License. diff --git a/ci/txreduce.py b/ci/txreduce.py index 6e8ae3f35f..a556d78fbc 100644 --- a/ci/txreduce.py +++ b/ci/txreduce.py @@ -1,5 +1,8 @@ #! /usr/bin/env python3 # +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause +# # Reduce a translation file -- generally, a Timezone translation -- by # dropping untranslated strings. An untranslated string is one that # has an empty translation **and** is marked unfinished. diff --git a/ci/txstats.py b/ci/txstats.py index 40fe3f43b6..d7997701ac 100755 --- a/ci/txstats.py +++ b/ci/txstats.py @@ -1,5 +1,8 @@ #! /usr/bin/env python3 # +# SPDX-FileCopyrightText: 2018 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause +# # Uses the Transifex API to get a list of enabled languages, # and outputs CMake settings for inclusion into CMakeLists.txt. # From 965bc3b0b45db09fe8666baffdf94e3b0ac1496e Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Fri, 21 Aug 2020 23:59:35 +0200 Subject: [PATCH 107/157] REUSE: use tag in .ui for license info The .ui files are all GPL-3.0-or-later style, but it's slightly difficult to keep licensing information in them: it's XML, so an XML comment might work, but there's no guarantee that safe/load will preserve them. Put the SPDX tags in the tag, so that it's visible in Qt Designer. --- src/calamares/DebugWindow.ui | 8 ++++++-- src/modules/finished/FinishedPage.ui | 4 ++++ src/modules/keyboard/KeyboardPage.ui | 4 ++++ src/modules/license/LicensePage.ui | 4 ++++ src/modules/netinstall/page_netinst.ui | 4 ++++ src/modules/oemid/OEMPage.ui | 4 ++++ src/modules/packagechooser/page_package.ui | 4 ++++ src/modules/partition/gui/ChoicePage.ui | 4 ++++ src/modules/partition/gui/CreatePartitionDialog.ui | 4 ++++ src/modules/partition/gui/CreatePartitionTableDialog.ui | 4 ++++ src/modules/partition/gui/EditExistingPartitionDialog.ui | 4 ++++ src/modules/partition/gui/EncryptWidget.ui | 4 ++++ src/modules/partition/gui/PartitionPage.ui | 4 ++++ src/modules/partition/gui/ReplaceWidget.ui | 4 ++++ src/modules/partition/gui/VolumeGroupBaseDialog.ui | 4 ++++ src/modules/plasmalnf/page_plasmalnf.ui | 4 ++++ src/modules/tracking/page_trackingstep.ui | 4 ++++ src/modules/users/page_usersetup.ui | 4 ++++ src/modules/welcome/WelcomePage.ui | 4 ++++ 19 files changed, 78 insertions(+), 2 deletions(-) diff --git a/src/calamares/DebugWindow.ui b/src/calamares/DebugWindow.ui index 63a6a840a1..014d4837e9 100644 --- a/src/calamares/DebugWindow.ui +++ b/src/calamares/DebugWindow.ui @@ -1,5 +1,9 @@ + +SPDX-FileCopyrightText: 2015 Teo Mrnjavac <teo@kde.org> +SPDX-License-Identifier: GPL-3.0-or-later + Calamares::DebugWindow @@ -52,7 +56,7 @@ - + Type: @@ -66,7 +70,7 @@ - + Interface: diff --git a/src/modules/finished/FinishedPage.ui b/src/modules/finished/FinishedPage.ui index a5b4a92803..c02952b63d 100644 --- a/src/modules/finished/FinishedPage.ui +++ b/src/modules/finished/FinishedPage.ui @@ -1,5 +1,9 @@ + +SPDX-FileCopyrightText: 2015 Teo Mrnjavac <teo@kde.org> +SPDX-License-Identifier: GPL-3.0-or-later + FinishedPage diff --git a/src/modules/keyboard/KeyboardPage.ui b/src/modules/keyboard/KeyboardPage.ui index 5df874b219..f7e430a044 100644 --- a/src/modules/keyboard/KeyboardPage.ui +++ b/src/modules/keyboard/KeyboardPage.ui @@ -1,5 +1,9 @@ + +SPDX-FileCopyrightText: 2014 Teo Mrnjavac <teo@kde.org> +SPDX-License-Identifier: GPL-3.0-or-later + Page_Keyboard diff --git a/src/modules/license/LicensePage.ui b/src/modules/license/LicensePage.ui index b5936d5def..817775c38c 100644 --- a/src/modules/license/LicensePage.ui +++ b/src/modules/license/LicensePage.ui @@ -1,5 +1,9 @@ + +SPDX-FileCopyrightText: 2015 demmm <anke62@gmail.com> +SPDX-License-Identifier: GPL-3.0-or-later + LicensePage diff --git a/src/modules/netinstall/page_netinst.ui b/src/modules/netinstall/page_netinst.ui index 32c11ec153..f17e939cd2 100644 --- a/src/modules/netinstall/page_netinst.ui +++ b/src/modules/netinstall/page_netinst.ui @@ -1,5 +1,9 @@ + +SPDX-FileCopyrightText: 2016 shainer <syn.shainer@gmail.com> +SPDX-License-Identifier: GPL-3.0-or-later + Page_NetInst diff --git a/src/modules/oemid/OEMPage.ui b/src/modules/oemid/OEMPage.ui index b14906537f..2194ac24c4 100644 --- a/src/modules/oemid/OEMPage.ui +++ b/src/modules/oemid/OEMPage.ui @@ -1,5 +1,9 @@ + +SPDX-FileCopyrightText: 2019 Adriaan de Groot <groot@kde.org> +SPDX-License-Identifier: GPL-3.0-or-later + OEMPage diff --git a/src/modules/packagechooser/page_package.ui b/src/modules/packagechooser/page_package.ui index 8349f2b526..5cc98b1265 100644 --- a/src/modules/packagechooser/page_package.ui +++ b/src/modules/packagechooser/page_package.ui @@ -1,5 +1,9 @@ + +SPDX-FileCopyrightText: 2019 Adriaan de Groot <groot@kde.org> +SPDX-License-Identifier: GPL-3.0-or-later + PackageChooserPage diff --git a/src/modules/partition/gui/ChoicePage.ui b/src/modules/partition/gui/ChoicePage.ui index 0eca520b3c..95b8d145ae 100644 --- a/src/modules/partition/gui/ChoicePage.ui +++ b/src/modules/partition/gui/ChoicePage.ui @@ -1,5 +1,9 @@ + +SPDX-FileCopyrightText: 2015 Teo Mrnjavac <teo@kde.org> +SPDX-License-Identifier: GPL-3.0-or-later + ChoicePage diff --git a/src/modules/partition/gui/CreatePartitionDialog.ui b/src/modules/partition/gui/CreatePartitionDialog.ui index ac355c8804..24e05e2e18 100644 --- a/src/modules/partition/gui/CreatePartitionDialog.ui +++ b/src/modules/partition/gui/CreatePartitionDialog.ui @@ -1,5 +1,9 @@ + +SPDX-FileCopyrightText: 2014 Aurélien Gâteau <agateau@kde.org> +SPDX-License-Identifier: GPL-3.0-or-later + CreatePartitionDialog diff --git a/src/modules/partition/gui/CreatePartitionTableDialog.ui b/src/modules/partition/gui/CreatePartitionTableDialog.ui index ca1255e411..4f9fe59177 100644 --- a/src/modules/partition/gui/CreatePartitionTableDialog.ui +++ b/src/modules/partition/gui/CreatePartitionTableDialog.ui @@ -1,5 +1,9 @@ + +SPDX-FileCopyrightText: 2014 Aurélien Gâteau <agateau@kde.org> +SPDX-License-Identifier: GPL-3.0-or-later + CreatePartitionTableDialog diff --git a/src/modules/partition/gui/EditExistingPartitionDialog.ui b/src/modules/partition/gui/EditExistingPartitionDialog.ui index c242e3bbce..9c0c996f6f 100644 --- a/src/modules/partition/gui/EditExistingPartitionDialog.ui +++ b/src/modules/partition/gui/EditExistingPartitionDialog.ui @@ -1,5 +1,9 @@ + +SPDX-FileCopyrightText: 2014 Aurélien Gâteau <agateau@kde.org> +SPDX-License-Identifier: GPL-3.0-or-later + EditExistingPartitionDialog diff --git a/src/modules/partition/gui/EncryptWidget.ui b/src/modules/partition/gui/EncryptWidget.ui index 65af6999ea..212300291f 100644 --- a/src/modules/partition/gui/EncryptWidget.ui +++ b/src/modules/partition/gui/EncryptWidget.ui @@ -1,5 +1,9 @@ + +SPDX-FileCopyrightText: 2016 Teo Mrnjavac <teo@kde.org> +SPDX-License-Identifier: GPL-3.0-or-later + EncryptWidget diff --git a/src/modules/partition/gui/PartitionPage.ui b/src/modules/partition/gui/PartitionPage.ui index c028eb5134..556c2289d5 100644 --- a/src/modules/partition/gui/PartitionPage.ui +++ b/src/modules/partition/gui/PartitionPage.ui @@ -1,5 +1,9 @@ + +SPDX-FileCopyrightText: 2014 Aurélien Gâteau <agateau@kde.org> +SPDX-License-Identifier: GPL-3.0-or-later + PartitionPage diff --git a/src/modules/partition/gui/ReplaceWidget.ui b/src/modules/partition/gui/ReplaceWidget.ui index 3f8f604b4a..14f520f49e 100644 --- a/src/modules/partition/gui/ReplaceWidget.ui +++ b/src/modules/partition/gui/ReplaceWidget.ui @@ -1,5 +1,9 @@ + +SPDX-FileCopyrightText: 2014 Teo Mrnjavac <teo@kde.org> +SPDX-License-Identifier: GPL-3.0-or-later + ReplaceWidget diff --git a/src/modules/partition/gui/VolumeGroupBaseDialog.ui b/src/modules/partition/gui/VolumeGroupBaseDialog.ui index 0640eca00c..f1bb6b2510 100644 --- a/src/modules/partition/gui/VolumeGroupBaseDialog.ui +++ b/src/modules/partition/gui/VolumeGroupBaseDialog.ui @@ -1,5 +1,9 @@ + +SPDX-FileCopyrightText: 2018 Caio <caiojcarvalho@gmail.com> +SPDX-License-Identifier: GPL-3.0-or-later + VolumeGroupBaseDialog diff --git a/src/modules/plasmalnf/page_plasmalnf.ui b/src/modules/plasmalnf/page_plasmalnf.ui index 7b3c8c96ff..88d5a39a23 100644 --- a/src/modules/plasmalnf/page_plasmalnf.ui +++ b/src/modules/plasmalnf/page_plasmalnf.ui @@ -1,5 +1,9 @@ + +SPDX-FileCopyrightText: 2017 Adriaan de Groot <groot@kde.org> +SPDX-License-Identifier: GPL-3.0-or-later + PlasmaLnfPage diff --git a/src/modules/tracking/page_trackingstep.ui b/src/modules/tracking/page_trackingstep.ui index 55a4df094a..f66f159f73 100644 --- a/src/modules/tracking/page_trackingstep.ui +++ b/src/modules/tracking/page_trackingstep.ui @@ -1,5 +1,9 @@ + +SPDX-FileCopyrightText: 2017 Adriaan de Groot <groot@kde.org> +SPDX-License-Identifier: GPL-3.0-or-later + TrackingPage diff --git a/src/modules/users/page_usersetup.ui b/src/modules/users/page_usersetup.ui index d880673b8d..e03526a11f 100644 --- a/src/modules/users/page_usersetup.ui +++ b/src/modules/users/page_usersetup.ui @@ -1,5 +1,9 @@ + +SPDX-FileCopyrightText: 2014 Teo Mrnjavac <teo@kde.org> +SPDX-License-Identifier: GPL-3.0-or-later + Page_UserSetup diff --git a/src/modules/welcome/WelcomePage.ui b/src/modules/welcome/WelcomePage.ui index 04b89f2561..9460a6c56a 100644 --- a/src/modules/welcome/WelcomePage.ui +++ b/src/modules/welcome/WelcomePage.ui @@ -1,5 +1,9 @@ + +SPDX-FileCopyrightText: 2014 Teo Mrnjavac <teo@kde.org> +SPDX-License-Identifier: GPL-3.0-or-later + WelcomePage From 95ceb1e8c7a0a9d341973002cb6079c104040e01 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Wed, 26 Aug 2020 00:24:52 +0200 Subject: [PATCH 108/157] REUSE: (BSD-2-Clause) all CMakeLists The build instructions are not that interesting, it's a toss-up between CC0 and BSD-2, but because other CMake bits are BSD-2-Clause, apply that to more CMakeLists. The copyright date isn't all that accurate, but these are just inconsequential files. While here, tidy up and get rid of some useless intermediates. --- CMakeLists.txt | 8 +++++++- lang/CMakeLists.txt | 17 ++--------------- src/CMakeLists.txt | 7 ++++++- src/branding/CMakeLists.txt | 9 +++++++++ src/calamares/CMakeLists.txt | 8 ++++++++ src/libcalamares/CMakeLists.txt | 15 +-------------- src/libcalamaresui/CMakeLists.txt | 6 ++++++ src/modules/CMakeLists.txt | 6 ++++++ src/modules/contextualprocess/CMakeLists.txt | 5 +++++ src/modules/dracutlukscfg/CMakeLists.txt | 5 +++++ src/modules/dummycpp/CMakeLists.txt | 5 +++++ src/modules/finished/CMakeLists.txt | 5 +++++ src/modules/fsresizer/CMakeLists.txt | 5 +++++ src/modules/hostinfo/CMakeLists.txt | 6 ++++++ src/modules/initcpio/CMakeLists.txt | 5 +++++ src/modules/initramfs/CMakeLists.txt | 5 +++++ src/modules/interactiveterminal/CMakeLists.txt | 5 +++++ src/modules/keyboard/CMakeLists.txt | 7 +++++-- src/modules/keyboardq/CMakeLists.txt | 5 +++++ src/modules/license/CMakeLists.txt | 5 +++++ src/modules/locale/CMakeLists.txt | 6 ++++++ src/modules/localeq/CMakeLists.txt | 5 +++++ src/modules/luksbootkeyfile/CMakeLists.txt | 5 +++++ src/modules/machineid/CMakeLists.txt | 5 +++++ src/modules/netinstall/CMakeLists.txt | 5 +++++ src/modules/notesqml/CMakeLists.txt | 5 +++++ src/modules/oemid/CMakeLists.txt | 5 +++++ src/modules/packagechooser/CMakeLists.txt | 5 +++++ src/modules/partition/CMakeLists.txt | 6 ++++++ src/modules/partition/tests/CMakeLists.txt | 5 +++++ src/modules/plasmalnf/CMakeLists.txt | 5 +++++ src/modules/preservefiles/CMakeLists.txt | 5 +++++ src/modules/removeuser/CMakeLists.txt | 5 +++++ src/modules/shellprocess/CMakeLists.txt | 5 +++++ src/modules/summary/CMakeLists.txt | 5 +++++ src/modules/tracking/CMakeLists.txt | 5 +++++ src/modules/users/CMakeLists.txt | 5 +++++ src/modules/usersq/CMakeLists.txt | 5 +++++ src/modules/webview/CMakeLists.txt | 5 +++++ src/modules/welcome/CMakeLists.txt | 7 +++++-- src/modules/welcomeq/CMakeLists.txt | 6 ++++++ src/qml/CMakeLists.txt | 1 - src/qml/calamares/CMakeLists.txt | 13 ++++++++++++- 43 files changed, 226 insertions(+), 37 deletions(-) delete mode 100644 src/qml/CMakeLists.txt diff --git a/CMakeLists.txt b/CMakeLists.txt index 16ea24fc7a..e35253a10c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,7 +1,9 @@ # === This file is part of Calamares - === # # SPDX-FileCopyrightText: 2017 Adriaan de Groot -# SPDX-License-Identifier: GPL-3.0-or-later +# SPDX-License-Identifier: BSD-2-Clause +# +### # # Calamares is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -16,6 +18,10 @@ # You should have received a copy of the GNU General Public License # along with Calamares. If not, see . # +# Individual files may have different licenses (like the CMake +# infrastructure, which is BSD-2-Clause licensed). Check the SPDX +# identifiers in each file. +# ### # # Generally, this CMakeLists.txt will find all the dependencies for Calamares diff --git a/lang/CMakeLists.txt b/lang/CMakeLists.txt index efc6d61884..6c9b12b9e6 100644 --- a/lang/CMakeLists.txt +++ b/lang/CMakeLists.txt @@ -1,20 +1,7 @@ # === This file is part of Calamares - === # -# Calamares is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# Calamares is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Calamares. If not, see . -# -# SPDX-License-Identifier: GPL-3.0-or-later -# License-Filename: LICENSE +# SPDX-FileCopyrightText: 2018 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause # ### diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 1445b18f38..3d35ac3e4b 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,3 +1,8 @@ +# === This file is part of Calamares - === +# +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause +# include( CalamaresAddPlugin ) include( CalamaresAddModuleSubdirectory ) include( CalamaresAddLibrary ) @@ -10,7 +15,7 @@ add_subdirectory( libcalamares ) add_subdirectory( libcalamaresui ) # all things qml -add_subdirectory( qml ) +add_subdirectory( qml/calamares ) # application add_subdirectory( calamares ) diff --git a/src/branding/CMakeLists.txt b/src/branding/CMakeLists.txt index 981da14684..6d99bbe4d9 100644 --- a/src/branding/CMakeLists.txt +++ b/src/branding/CMakeLists.txt @@ -1 +1,10 @@ +# === This file is part of Calamares - === +# +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause +# + +# Add branding components. Since there is only one, called "default", +# add that one. For examples of other branding components, see +# the calamares-extensions repository. calamares_add_branding_subdirectory( default ) diff --git a/src/calamares/CMakeLists.txt b/src/calamares/CMakeLists.txt index 5480dd1f86..faec6d1a4b 100644 --- a/src/calamares/CMakeLists.txt +++ b/src/calamares/CMakeLists.txt @@ -1,3 +1,11 @@ +# === This file is part of Calamares - === +# +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause +# + +# "calamares_bin" is the main application, not to be confused with +# the target "calamares" which is the non-GUI library part. set( calamaresSources main.cpp CalamaresApplication.cpp diff --git a/src/libcalamares/CMakeLists.txt b/src/libcalamares/CMakeLists.txt index 284acd1d2c..d915708f33 100644 --- a/src/libcalamares/CMakeLists.txt +++ b/src/libcalamares/CMakeLists.txt @@ -1,20 +1,7 @@ # === This file is part of Calamares - === # # SPDX-FileCopyrightText: 2020 Adriaan de Groot -# SPDX-License-Identifier: GPL-3.0-or-later -# -# Calamares is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# Calamares is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Calamares. If not, see . +# SPDX-License-Identifier: BSD-2-Clause # # diff --git a/src/libcalamaresui/CMakeLists.txt b/src/libcalamaresui/CMakeLists.txt index 773fdf6176..52fb838e5b 100644 --- a/src/libcalamaresui/CMakeLists.txt +++ b/src/libcalamaresui/CMakeLists.txt @@ -1,3 +1,9 @@ +# === This file is part of Calamares - === +# +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause +# + # libcalamaresui is the GUI part of Calamares, which includes handling # view modules, view steps, widgets, and branding. diff --git a/src/modules/CMakeLists.txt b/src/modules/CMakeLists.txt index d49a4c0c0b..da9e1c5744 100644 --- a/src/modules/CMakeLists.txt +++ b/src/modules/CMakeLists.txt @@ -1,3 +1,9 @@ +# === This file is part of Calamares - === +# +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause +# + # The variable SKIP_MODULES can be set to skip particular modules; # individual modules can also decide they must be skipped (e.g. OS-specific # modules, or ones with unmet dependencies). Collect the skipped modules diff --git a/src/modules/contextualprocess/CMakeLists.txt b/src/modules/contextualprocess/CMakeLists.txt index 2df4cfe376..705f494b58 100644 --- a/src/modules/contextualprocess/CMakeLists.txt +++ b/src/modules/contextualprocess/CMakeLists.txt @@ -1,3 +1,8 @@ +# === This file is part of Calamares - === +# +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause +# calamares_add_plugin( contextualprocess TYPE job EXPORT_MACRO PLUGINDLLEXPORT_PRO diff --git a/src/modules/dracutlukscfg/CMakeLists.txt b/src/modules/dracutlukscfg/CMakeLists.txt index 1a07b042dd..3620bb92c9 100644 --- a/src/modules/dracutlukscfg/CMakeLists.txt +++ b/src/modules/dracutlukscfg/CMakeLists.txt @@ -1,3 +1,8 @@ +# === This file is part of Calamares - === +# +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause +# calamares_add_plugin( dracutlukscfg TYPE job EXPORT_MACRO PLUGINDLLEXPORT_PRO diff --git a/src/modules/dummycpp/CMakeLists.txt b/src/modules/dummycpp/CMakeLists.txt index 0841eaa2b5..7b219744c9 100644 --- a/src/modules/dummycpp/CMakeLists.txt +++ b/src/modules/dummycpp/CMakeLists.txt @@ -1,3 +1,8 @@ +# === This file is part of Calamares - === +# +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause +# calamares_add_plugin( dummycpp TYPE job EXPORT_MACRO PLUGINDLLEXPORT_PRO diff --git a/src/modules/finished/CMakeLists.txt b/src/modules/finished/CMakeLists.txt index 6482fb2cd0..746683533c 100644 --- a/src/modules/finished/CMakeLists.txt +++ b/src/modules/finished/CMakeLists.txt @@ -1,3 +1,8 @@ +# === This file is part of Calamares - === +# +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause +# find_package( Qt5 ${QT_VERSION} CONFIG REQUIRED DBus Network ) include_directories( ${PROJECT_BINARY_DIR}/src/libcalamaresui ) diff --git a/src/modules/fsresizer/CMakeLists.txt b/src/modules/fsresizer/CMakeLists.txt index 6808f1bea6..8b23f90b22 100644 --- a/src/modules/fsresizer/CMakeLists.txt +++ b/src/modules/fsresizer/CMakeLists.txt @@ -1,3 +1,8 @@ +# === This file is part of Calamares - === +# +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause +# find_package( KPMcore 3.3 ) find_package( KF5Config CONFIG ) find_package( KF5I18n CONFIG ) diff --git a/src/modules/hostinfo/CMakeLists.txt b/src/modules/hostinfo/CMakeLists.txt index 3d6e0973fc..401f501686 100644 --- a/src/modules/hostinfo/CMakeLists.txt +++ b/src/modules/hostinfo/CMakeLists.txt @@ -1,3 +1,9 @@ +# === This file is part of Calamares - === +# +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause +# + # Configuration for hostinfo # # There isn't anything to configure for the hostinfo module. diff --git a/src/modules/initcpio/CMakeLists.txt b/src/modules/initcpio/CMakeLists.txt index 5140c97e0d..d51884edc4 100644 --- a/src/modules/initcpio/CMakeLists.txt +++ b/src/modules/initcpio/CMakeLists.txt @@ -1,3 +1,8 @@ +# === This file is part of Calamares - === +# +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause +# calamares_add_plugin( initcpio TYPE job EXPORT_MACRO PLUGINDLLEXPORT_PRO diff --git a/src/modules/initramfs/CMakeLists.txt b/src/modules/initramfs/CMakeLists.txt index b3287c8969..2d64cbc75d 100644 --- a/src/modules/initramfs/CMakeLists.txt +++ b/src/modules/initramfs/CMakeLists.txt @@ -1,3 +1,8 @@ +# === This file is part of Calamares - === +# +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause +# calamares_add_plugin( initramfs TYPE job EXPORT_MACRO PLUGINDLLEXPORT_PRO diff --git a/src/modules/interactiveterminal/CMakeLists.txt b/src/modules/interactiveterminal/CMakeLists.txt index 5eff610d52..05e3388e3f 100644 --- a/src/modules/interactiveterminal/CMakeLists.txt +++ b/src/modules/interactiveterminal/CMakeLists.txt @@ -1,3 +1,8 @@ +# === This file is part of Calamares - === +# +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause +# find_package(ECM ${ECM_VERSION} REQUIRED NO_MODULE) set( kf5_ver 5.41 ) diff --git a/src/modules/keyboard/CMakeLists.txt b/src/modules/keyboard/CMakeLists.txt index c0d8575c66..9dca5f2b07 100644 --- a/src/modules/keyboard/CMakeLists.txt +++ b/src/modules/keyboard/CMakeLists.txt @@ -1,5 +1,8 @@ -include_directories( ${PROJECT_BINARY_DIR}/src/libcalamaresui ) - +# === This file is part of Calamares - === +# +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause +# calamares_add_plugin( keyboard TYPE viewmodule EXPORT_MACRO PLUGINDLLEXPORT_PRO diff --git a/src/modules/keyboardq/CMakeLists.txt b/src/modules/keyboardq/CMakeLists.txt index 729748a7f9..173275cef4 100644 --- a/src/modules/keyboardq/CMakeLists.txt +++ b/src/modules/keyboardq/CMakeLists.txt @@ -1,3 +1,8 @@ +# === This file is part of Calamares - === +# +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause +# if( NOT WITH_QML ) calamares_skip_module( "keyboardq (QML is not supported in this build)" ) return() diff --git a/src/modules/license/CMakeLists.txt b/src/modules/license/CMakeLists.txt index 164233b3b9..b52875da65 100644 --- a/src/modules/license/CMakeLists.txt +++ b/src/modules/license/CMakeLists.txt @@ -1,3 +1,8 @@ +# === This file is part of Calamares - === +# +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause +# include_directories( ${PROJECT_BINARY_DIR}/src/libcalamaresui ) calamares_add_plugin( license diff --git a/src/modules/locale/CMakeLists.txt b/src/modules/locale/CMakeLists.txt index 6f965f0414..1e0531c6be 100644 --- a/src/modules/locale/CMakeLists.txt +++ b/src/modules/locale/CMakeLists.txt @@ -1,3 +1,9 @@ +# === This file is part of Calamares - === +# +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause +# + # When debugging the timezone widget, add this debugging definition # to have a debugging-friendly timezone widget, debug logging, # and no intrusive timezone-setting while clicking around. diff --git a/src/modules/localeq/CMakeLists.txt b/src/modules/localeq/CMakeLists.txt index c9ed1cd551..28ba76e0ec 100644 --- a/src/modules/localeq/CMakeLists.txt +++ b/src/modules/localeq/CMakeLists.txt @@ -1,3 +1,8 @@ +# === This file is part of Calamares - === +# +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause +# if( NOT WITH_QML ) calamares_skip_module( "localeq (QML is not supported in this build)" ) return() diff --git a/src/modules/luksbootkeyfile/CMakeLists.txt b/src/modules/luksbootkeyfile/CMakeLists.txt index 5e69d3acba..620caee7ed 100644 --- a/src/modules/luksbootkeyfile/CMakeLists.txt +++ b/src/modules/luksbootkeyfile/CMakeLists.txt @@ -1,3 +1,8 @@ +# === This file is part of Calamares - === +# +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause +# calamares_add_plugin( luksbootkeyfile TYPE job EXPORT_MACRO PLUGINDLLEXPORT_PRO diff --git a/src/modules/machineid/CMakeLists.txt b/src/modules/machineid/CMakeLists.txt index 4a916334ce..eb2551d511 100644 --- a/src/modules/machineid/CMakeLists.txt +++ b/src/modules/machineid/CMakeLists.txt @@ -1,3 +1,8 @@ +# === This file is part of Calamares - === +# +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause +# calamares_add_plugin( machineid TYPE job EXPORT_MACRO PLUGINDLLEXPORT_PRO diff --git a/src/modules/netinstall/CMakeLists.txt b/src/modules/netinstall/CMakeLists.txt index 0f2cf06f8a..588ca1f826 100644 --- a/src/modules/netinstall/CMakeLists.txt +++ b/src/modules/netinstall/CMakeLists.txt @@ -1,3 +1,8 @@ +# === This file is part of Calamares - === +# +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause +# calamares_add_plugin( netinstall TYPE viewmodule EXPORT_MACRO PLUGINDLLEXPORT_PRO diff --git a/src/modules/notesqml/CMakeLists.txt b/src/modules/notesqml/CMakeLists.txt index 7ac808fa79..c656bebf69 100644 --- a/src/modules/notesqml/CMakeLists.txt +++ b/src/modules/notesqml/CMakeLists.txt @@ -1,3 +1,8 @@ +# === This file is part of Calamares - === +# +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause +# if( NOT WITH_QML ) calamares_skip_module( "notesqml (QML is not supported in this build)" ) return() diff --git a/src/modules/oemid/CMakeLists.txt b/src/modules/oemid/CMakeLists.txt index 0c4ad03ad6..7db23bc30c 100644 --- a/src/modules/oemid/CMakeLists.txt +++ b/src/modules/oemid/CMakeLists.txt @@ -1,3 +1,8 @@ +# === This file is part of Calamares - === +# +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause +# calamares_add_plugin( oemid TYPE viewmodule EXPORT_MACRO PLUGINDLLEXPORT_PRO diff --git a/src/modules/packagechooser/CMakeLists.txt b/src/modules/packagechooser/CMakeLists.txt index d949829de1..539db4f730 100644 --- a/src/modules/packagechooser/CMakeLists.txt +++ b/src/modules/packagechooser/CMakeLists.txt @@ -1,3 +1,8 @@ +# === This file is part of Calamares - === +# +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause +# find_package( Qt5 COMPONENTS Core Gui Widgets REQUIRED ) set( _extra_libraries "" ) set( _extra_src "" ) diff --git a/src/modules/partition/CMakeLists.txt b/src/modules/partition/CMakeLists.txt index 65b1a91e95..5c5d6a6cbe 100644 --- a/src/modules/partition/CMakeLists.txt +++ b/src/modules/partition/CMakeLists.txt @@ -1,3 +1,9 @@ +# === This file is part of Calamares - === +# +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause +# + # When debugging the partitioning widget, or experimenting, you may # want to allow unsafe partitioning choices (e.g. doing things to the # current disk). Set DEBUG_PARTITION_UNSAFE to allow that (it turns off diff --git a/src/modules/partition/tests/CMakeLists.txt b/src/modules/partition/tests/CMakeLists.txt index 0bd559fd18..a2b99660c3 100644 --- a/src/modules/partition/tests/CMakeLists.txt +++ b/src/modules/partition/tests/CMakeLists.txt @@ -1,3 +1,8 @@ +# === This file is part of Calamares - === +# +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause +# find_package( Qt5 COMPONENTS Gui REQUIRED ) set( PartitionModule_SOURCE_DIR .. ) diff --git a/src/modules/plasmalnf/CMakeLists.txt b/src/modules/plasmalnf/CMakeLists.txt index 93c88b2916..8c1ca8c3c5 100644 --- a/src/modules/plasmalnf/CMakeLists.txt +++ b/src/modules/plasmalnf/CMakeLists.txt @@ -1,3 +1,8 @@ +# === This file is part of Calamares - === +# +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause +# find_package(ECM ${ECM_VERSION} REQUIRED NO_MODULE) # Requires a sufficiently recent Plasma framework, but also diff --git a/src/modules/preservefiles/CMakeLists.txt b/src/modules/preservefiles/CMakeLists.txt index 571de31ca2..afff84050f 100644 --- a/src/modules/preservefiles/CMakeLists.txt +++ b/src/modules/preservefiles/CMakeLists.txt @@ -1,3 +1,8 @@ +# === This file is part of Calamares - === +# +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause +# include_directories( ${PROJECT_BINARY_DIR}/src/libcalamaresui ) calamares_add_plugin( preservefiles diff --git a/src/modules/removeuser/CMakeLists.txt b/src/modules/removeuser/CMakeLists.txt index 55798feac3..7818926c5b 100644 --- a/src/modules/removeuser/CMakeLists.txt +++ b/src/modules/removeuser/CMakeLists.txt @@ -1,3 +1,8 @@ +# === This file is part of Calamares - === +# +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause +# calamares_add_plugin( removeuser TYPE job EXPORT_MACRO PLUGINDLLEXPORT_PRO diff --git a/src/modules/shellprocess/CMakeLists.txt b/src/modules/shellprocess/CMakeLists.txt index ec1cf0bcf5..5804f5e35b 100644 --- a/src/modules/shellprocess/CMakeLists.txt +++ b/src/modules/shellprocess/CMakeLists.txt @@ -1,3 +1,8 @@ +# === This file is part of Calamares - === +# +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause +# calamares_add_plugin( shellprocess TYPE job EXPORT_MACRO PLUGINDLLEXPORT_PRO diff --git a/src/modules/summary/CMakeLists.txt b/src/modules/summary/CMakeLists.txt index ce71357cdd..9aad8b8ac3 100644 --- a/src/modules/summary/CMakeLists.txt +++ b/src/modules/summary/CMakeLists.txt @@ -1,3 +1,8 @@ +# === This file is part of Calamares - === +# +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause +# include_directories( ${PROJECT_BINARY_DIR}/src/libcalamaresui ) calamares_add_plugin( summary TYPE viewmodule diff --git a/src/modules/tracking/CMakeLists.txt b/src/modules/tracking/CMakeLists.txt index 8946634267..25df2b7acc 100644 --- a/src/modules/tracking/CMakeLists.txt +++ b/src/modules/tracking/CMakeLists.txt @@ -1,3 +1,8 @@ +# === This file is part of Calamares - === +# +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause +# calamares_add_plugin( tracking TYPE viewmodule EXPORT_MACRO PLUGINDLLEXPORT_PRO diff --git a/src/modules/users/CMakeLists.txt b/src/modules/users/CMakeLists.txt index 7fffc1eea1..8f54248273 100644 --- a/src/modules/users/CMakeLists.txt +++ b/src/modules/users/CMakeLists.txt @@ -1,3 +1,8 @@ +# === This file is part of Calamares - === +# +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause +# find_package( Qt5 ${QT_VERSION} CONFIG REQUIRED Core DBus Network ) find_package( Crypt REQUIRED ) diff --git a/src/modules/usersq/CMakeLists.txt b/src/modules/usersq/CMakeLists.txt index d780ec9c45..8fb0a282c4 100644 --- a/src/modules/usersq/CMakeLists.txt +++ b/src/modules/usersq/CMakeLists.txt @@ -1,3 +1,8 @@ +# === This file is part of Calamares - === +# +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause +# if( NOT WITH_QML ) calamares_skip_module( "usersq (QML is not supported in this build)" ) return() diff --git a/src/modules/webview/CMakeLists.txt b/src/modules/webview/CMakeLists.txt index 48c707783e..3a08f32370 100644 --- a/src/modules/webview/CMakeLists.txt +++ b/src/modules/webview/CMakeLists.txt @@ -1,3 +1,8 @@ +# === This file is part of Calamares - === +# +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause +# set( CALA_WEBVIEW_INCLUDE_DIRECTORIES ${PROJECT_BINARY_DIR}/src/libcalamaresui ) set( CALA_WEBVIEW_LINK_LIBRARIES calamaresui ) diff --git a/src/modules/welcome/CMakeLists.txt b/src/modules/welcome/CMakeLists.txt index 9700b16018..0620627a22 100644 --- a/src/modules/welcome/CMakeLists.txt +++ b/src/modules/welcome/CMakeLists.txt @@ -1,5 +1,8 @@ -include_directories( ${PROJECT_BINARY_DIR}/src/libcalamaresui ) - +# === This file is part of Calamares - === +# +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause +# find_package( Qt5 ${QT_VERSION} CONFIG REQUIRED DBus Network ) find_package( LIBPARTED ) diff --git a/src/modules/welcomeq/CMakeLists.txt b/src/modules/welcomeq/CMakeLists.txt index 4a040344ec..8e36cd5f1f 100644 --- a/src/modules/welcomeq/CMakeLists.txt +++ b/src/modules/welcomeq/CMakeLists.txt @@ -1,3 +1,9 @@ +# === This file is part of Calamares - === +# +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause +# + # This is a re-write of the welcome module using QML view steps # instead of widgets. diff --git a/src/qml/CMakeLists.txt b/src/qml/CMakeLists.txt deleted file mode 100644 index 8a949d02e2..0000000000 --- a/src/qml/CMakeLists.txt +++ /dev/null @@ -1 +0,0 @@ -add_subdirectory( calamares ) diff --git a/src/qml/calamares/CMakeLists.txt b/src/qml/calamares/CMakeLists.txt index 48f8ca96c6..b6c2b00486 100644 --- a/src/qml/calamares/CMakeLists.txt +++ b/src/qml/calamares/CMakeLists.txt @@ -1,7 +1,18 @@ -file( GLOB SUBDIRECTORIES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "*" ) +# === This file is part of Calamares - === +# +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause +# + +# Install "slideshows" and other QML-sources for Calamares. +# +# In practice, in the central source repositoy, this means +# just-install-the-slideshow-example. For alternative slideshows, +# see the approach in the calamares-extensions repository. # Iterate over all the subdirectories which have a qmldir file, copy them over to the build dir, # and install them into share/calamares/qml/calamares +file( GLOB SUBDIRECTORIES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "*" ) foreach( SUBDIRECTORY ${SUBDIRECTORIES} ) if( IS_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/${SUBDIRECTORY}" AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/${SUBDIRECTORY}/qmldir" ) From 2eecd431fe25a638b32feb218f624735bbc8cec0 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Wed, 26 Aug 2020 00:48:30 +0200 Subject: [PATCH 109/157] REUSE: (CC0-1.0) test data There's lots of (YAML) test data that is just trivial configurations for modules. Since the configurations themselves are **also** CC0-1.0, and the tests are less interesting, license them equally liberally. --- src/libcalamares/testdata/yaml-list.conf | 3 +++ src/modules/bootloader/test.yaml | 2 ++ src/modules/fstab/test.yaml | 2 ++ src/modules/grubcfg/tests/1.global | 2 ++ src/modules/grubcfg/tests/2.global | 2 ++ src/modules/grubcfg/tests/2.job | 2 ++ src/modules/grubcfg/tests/3.global | 2 ++ src/modules/grubcfg/tests/3.job | 2 ++ src/modules/grubcfg/tests/4.global | 2 ++ src/modules/grubcfg/tests/4.job | 2 ++ src/modules/grubcfg/tests/CMakeTests.txt | 3 +++ src/modules/mount/test.yaml | 2 ++ src/modules/packages/test.yaml | 2 ++ src/modules/rawfs/tests/1.global | 2 ++ src/modules/rawfs/tests/1.job | 5 ++++- src/modules/rawfs/tests/CMakeTests.txt | 4 ++++ src/modules/unpackfs/tests/1.global | 2 ++ src/modules/unpackfs/tests/2.global | 2 ++ src/modules/unpackfs/tests/3.global | 2 ++ src/modules/unpackfs/tests/3.job | 2 ++ src/modules/unpackfs/tests/4.global | 2 ++ src/modules/unpackfs/tests/4.job | 2 ++ src/modules/unpackfs/tests/5.global | 2 ++ src/modules/unpackfs/tests/5.job | 2 ++ src/modules/unpackfs/tests/6.global | 2 ++ src/modules/unpackfs/tests/6.job | 2 ++ src/modules/unpackfs/tests/7.global | 2 ++ src/modules/unpackfs/tests/7.job | 2 ++ src/modules/unpackfs/tests/8.global | 2 ++ src/modules/unpackfs/tests/8.job | 2 ++ src/modules/unpackfs/tests/9.global | 2 ++ src/modules/unpackfs/tests/9.job | 2 ++ 32 files changed, 70 insertions(+), 1 deletion(-) diff --git a/src/libcalamares/testdata/yaml-list.conf b/src/libcalamares/testdata/yaml-list.conf index d6992b1fb7..d8d2178d19 100644 --- a/src/libcalamares/testdata/yaml-list.conf +++ b/src/libcalamares/testdata/yaml-list.conf @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# # YAML dump --- "cow": "moo" diff --git a/src/modules/bootloader/test.yaml b/src/modules/bootloader/test.yaml index 1cd6c418f9..4623b55f7d 100644 --- a/src/modules/bootloader/test.yaml +++ b/src/modules/bootloader/test.yaml @@ -1,3 +1,5 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 rootMountPoint: /tmp/mount bootLoader: installPath: /dev/sdb diff --git a/src/modules/fstab/test.yaml b/src/modules/fstab/test.yaml index e95b52e5d2..cd20345713 100644 --- a/src/modules/fstab/test.yaml +++ b/src/modules/fstab/test.yaml @@ -1,3 +1,5 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 rootMountPoint: /tmp/mount partitions: - device: /dev/sda1 diff --git a/src/modules/grubcfg/tests/1.global b/src/modules/grubcfg/tests/1.global index 02ae840cbf..7dedc15274 100644 --- a/src/modules/grubcfg/tests/1.global +++ b/src/modules/grubcfg/tests/1.global @@ -1,2 +1,4 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 --- bogus: true diff --git a/src/modules/grubcfg/tests/2.global b/src/modules/grubcfg/tests/2.global index 88f7896308..31c6f11668 100644 --- a/src/modules/grubcfg/tests/2.global +++ b/src/modules/grubcfg/tests/2.global @@ -1,3 +1,5 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 --- bogus: true firmwareType: bios diff --git a/src/modules/grubcfg/tests/2.job b/src/modules/grubcfg/tests/2.job index d7b8db9d17..92e5983945 100644 --- a/src/modules/grubcfg/tests/2.job +++ b/src/modules/grubcfg/tests/2.job @@ -1,3 +1,5 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 --- overwrite: true keepDistributor: false diff --git a/src/modules/grubcfg/tests/3.global b/src/modules/grubcfg/tests/3.global index 45468d4df5..f9e1e6954b 100644 --- a/src/modules/grubcfg/tests/3.global +++ b/src/modules/grubcfg/tests/3.global @@ -1,3 +1,5 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 --- bogus: true firmwareType: bios diff --git a/src/modules/grubcfg/tests/3.job b/src/modules/grubcfg/tests/3.job index 7182deeb22..7d579839cc 100644 --- a/src/modules/grubcfg/tests/3.job +++ b/src/modules/grubcfg/tests/3.job @@ -1,3 +1,5 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 --- overwrite: true prefer_grub_d: true # But it doesn't exist diff --git a/src/modules/grubcfg/tests/4.global b/src/modules/grubcfg/tests/4.global index fe24ba6ca7..1e8d37fc61 100644 --- a/src/modules/grubcfg/tests/4.global +++ b/src/modules/grubcfg/tests/4.global @@ -1,3 +1,5 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 --- bogus: true firmwareType: bios diff --git a/src/modules/grubcfg/tests/4.job b/src/modules/grubcfg/tests/4.job index f8f30f21b7..58fd8bcb72 100644 --- a/src/modules/grubcfg/tests/4.job +++ b/src/modules/grubcfg/tests/4.job @@ -1,3 +1,5 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 --- overwrite: true prefer_grub_d: true diff --git a/src/modules/grubcfg/tests/CMakeTests.txt b/src/modules/grubcfg/tests/CMakeTests.txt index 78a0f85acc..54a0721e43 100644 --- a/src/modules/grubcfg/tests/CMakeTests.txt +++ b/src/modules/grubcfg/tests/CMakeTests.txt @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# # Special cases for grubcfg configuration tests: # - 2.global specifies /tmp/calamares as the rootMountPath, # so we end up editing files there. Create the directory diff --git a/src/modules/mount/test.yaml b/src/modules/mount/test.yaml index e1619296eb..ce3e12e4e6 100644 --- a/src/modules/mount/test.yaml +++ b/src/modules/mount/test.yaml @@ -1,3 +1,5 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 partitions: - device: "/dev/sdb1" mountPoint: "/" diff --git a/src/modules/packages/test.yaml b/src/modules/packages/test.yaml index 8902b657a5..130214dfd5 100644 --- a/src/modules/packages/test.yaml +++ b/src/modules/packages/test.yaml @@ -1,3 +1,5 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 backend: dummy rootMountPoint: /tmp/mount operations: diff --git a/src/modules/rawfs/tests/1.global b/src/modules/rawfs/tests/1.global index c09df9375f..089557d992 100644 --- a/src/modules/rawfs/tests/1.global +++ b/src/modules/rawfs/tests/1.global @@ -1,3 +1,5 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 --- rootMountPoint: /tmp/unpackfs-test-run-rootdir3/ partitions: diff --git a/src/modules/rawfs/tests/1.job b/src/modules/rawfs/tests/1.job index 6079c43ed5..c87a4a70c3 100644 --- a/src/modules/rawfs/tests/1.job +++ b/src/modules/rawfs/tests/1.job @@ -1,5 +1,8 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# # Testing configuration for rawfs - +# --- targets: diff --git a/src/modules/rawfs/tests/CMakeTests.txt b/src/modules/rawfs/tests/CMakeTests.txt index 44a7777c84..ed4c374853 100644 --- a/src/modules/rawfs/tests/CMakeTests.txt +++ b/src/modules/rawfs/tests/CMakeTests.txt @@ -1,3 +1,7 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# +# # Special cases for rawfs tests # # - On FreeBSD, /proc/mounts doesn't exist (/proc is only about processes, diff --git a/src/modules/unpackfs/tests/1.global b/src/modules/unpackfs/tests/1.global index 02ae840cbf..7dedc15274 100644 --- a/src/modules/unpackfs/tests/1.global +++ b/src/modules/unpackfs/tests/1.global @@ -1,2 +1,4 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 --- bogus: true diff --git a/src/modules/unpackfs/tests/2.global b/src/modules/unpackfs/tests/2.global index f496ade614..d1e61caf3a 100644 --- a/src/modules/unpackfs/tests/2.global +++ b/src/modules/unpackfs/tests/2.global @@ -1,2 +1,4 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 --- rootMountPoint: /tmp/unpackfs-test-run-rootdir/ diff --git a/src/modules/unpackfs/tests/3.global b/src/modules/unpackfs/tests/3.global index 2e6b37ab56..1c25cbe208 100644 --- a/src/modules/unpackfs/tests/3.global +++ b/src/modules/unpackfs/tests/3.global @@ -1,2 +1,4 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 --- rootMountPoint: /tmp/unpackfs-test-run-rootdir3/ diff --git a/src/modules/unpackfs/tests/3.job b/src/modules/unpackfs/tests/3.job index 429f65b3c1..82d353108d 100644 --- a/src/modules/unpackfs/tests/3.job +++ b/src/modules/unpackfs/tests/3.job @@ -1,2 +1,4 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 --- unpack: [] diff --git a/src/modules/unpackfs/tests/4.global b/src/modules/unpackfs/tests/4.global index 2e6b37ab56..1c25cbe208 100644 --- a/src/modules/unpackfs/tests/4.global +++ b/src/modules/unpackfs/tests/4.global @@ -1,2 +1,4 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 --- rootMountPoint: /tmp/unpackfs-test-run-rootdir3/ diff --git a/src/modules/unpackfs/tests/4.job b/src/modules/unpackfs/tests/4.job index ab76dcbebf..8bc7de5bac 100644 --- a/src/modules/unpackfs/tests/4.job +++ b/src/modules/unpackfs/tests/4.job @@ -1,3 +1,5 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 --- unpack: - source: . diff --git a/src/modules/unpackfs/tests/5.global b/src/modules/unpackfs/tests/5.global index 2e6b37ab56..1c25cbe208 100644 --- a/src/modules/unpackfs/tests/5.global +++ b/src/modules/unpackfs/tests/5.global @@ -1,2 +1,4 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 --- rootMountPoint: /tmp/unpackfs-test-run-rootdir3/ diff --git a/src/modules/unpackfs/tests/5.job b/src/modules/unpackfs/tests/5.job index 2f8d732d0a..268ee7ce34 100644 --- a/src/modules/unpackfs/tests/5.job +++ b/src/modules/unpackfs/tests/5.job @@ -1,3 +1,5 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 --- unpack: - source: ./fakesource diff --git a/src/modules/unpackfs/tests/6.global b/src/modules/unpackfs/tests/6.global index 2e6b37ab56..1c25cbe208 100644 --- a/src/modules/unpackfs/tests/6.global +++ b/src/modules/unpackfs/tests/6.global @@ -1,2 +1,4 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 --- rootMountPoint: /tmp/unpackfs-test-run-rootdir3/ diff --git a/src/modules/unpackfs/tests/6.job b/src/modules/unpackfs/tests/6.job index c1110a1068..1ec0840cac 100644 --- a/src/modules/unpackfs/tests/6.job +++ b/src/modules/unpackfs/tests/6.job @@ -1,3 +1,5 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 --- unpack: - source: . diff --git a/src/modules/unpackfs/tests/7.global b/src/modules/unpackfs/tests/7.global index 2e6b37ab56..1c25cbe208 100644 --- a/src/modules/unpackfs/tests/7.global +++ b/src/modules/unpackfs/tests/7.global @@ -1,2 +1,4 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 --- rootMountPoint: /tmp/unpackfs-test-run-rootdir3/ diff --git a/src/modules/unpackfs/tests/7.job b/src/modules/unpackfs/tests/7.job index a31068e5df..ffd898f1b1 100644 --- a/src/modules/unpackfs/tests/7.job +++ b/src/modules/unpackfs/tests/7.job @@ -1,3 +1,5 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 --- unpack: - source: . diff --git a/src/modules/unpackfs/tests/8.global b/src/modules/unpackfs/tests/8.global index 0cb33ce55a..15c3085458 100644 --- a/src/modules/unpackfs/tests/8.global +++ b/src/modules/unpackfs/tests/8.global @@ -1,3 +1,5 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 --- rootMountPoint: /tmp/unpackfs-test-run-rootdir/ localeConf: diff --git a/src/modules/unpackfs/tests/8.job b/src/modules/unpackfs/tests/8.job index a31068e5df..ffd898f1b1 100644 --- a/src/modules/unpackfs/tests/8.job +++ b/src/modules/unpackfs/tests/8.job @@ -1,3 +1,5 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 --- unpack: - source: . diff --git a/src/modules/unpackfs/tests/9.global b/src/modules/unpackfs/tests/9.global index 82ca8f6f62..e7a2cd989f 100644 --- a/src/modules/unpackfs/tests/9.global +++ b/src/modules/unpackfs/tests/9.global @@ -1,3 +1,5 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 # This test uses a small destination FS, to make rsync fail --- rootMountPoint: /tmp/unpackfs-test-run-rootdir3/ diff --git a/src/modules/unpackfs/tests/9.job b/src/modules/unpackfs/tests/9.job index 7eabd497c6..b896334719 100644 --- a/src/modules/unpackfs/tests/9.job +++ b/src/modules/unpackfs/tests/9.job @@ -1,3 +1,5 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 # This test uses a small destination FS, to make rsync fail --- unpack: From 7e9576d3d1c38d985715e3a34612878b07f798fc Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Wed, 26 Aug 2020 00:23:09 +0200 Subject: [PATCH 110/157] REUSE: fix credits for 3rd party sources Some Calamares source files incorporate material from 3rd parties (unlike the 3rdparty/ dir, which is basically- unchanged 3rd party source). Tidy up the FileCopyrightText lines for those sources. This is not an exhaustive effort. --- src/libcalamaresui/utils/ImageRegistry.cpp | 21 ++------------------ src/modules/users/CheckPWQuality.cpp | 7 ++++++- src/qml/calamares/slideshow/Presentation.qml | 17 +++++++++------- src/qml/calamares/slideshow/Slide.qml | 2 +- 4 files changed, 19 insertions(+), 28 deletions(-) diff --git a/src/libcalamaresui/utils/ImageRegistry.cpp b/src/libcalamaresui/utils/ImageRegistry.cpp index ebe6858dde..627cf6a8ef 100644 --- a/src/libcalamaresui/utils/ImageRegistry.cpp +++ b/src/libcalamaresui/utils/ImageRegistry.cpp @@ -1,28 +1,11 @@ /* === This file is part of Calamares - === * + * SPDX-FileCopyrightText: 2012 Christian Muehlhaeuser + * SPDX-FileCopyrightText: 2019, Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later - * License-Filename: LICENSES/GPLv3+-ImageRegistry * - * Copyright 2019, Adriaan de Groot */ -/* - * Copyright 2012, Christian Muehlhaeuser - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - #include "ImageRegistry.h" #include diff --git a/src/modules/users/CheckPWQuality.cpp b/src/modules/users/CheckPWQuality.cpp index 33309df6a5..7bce0c09ff 100644 --- a/src/modules/users/CheckPWQuality.cpp +++ b/src/modules/users/CheckPWQuality.cpp @@ -1,6 +1,11 @@ /* === This file is part of Calamares - === * - * Copyright 2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later + * + * Contains strings from libpwquality under the terms of the + * GPL-3.0-or-later (libpwquality is BSD-3-clause or GPL-2.0-or-later, + * so we pick GPL-3.0-or-later). * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/qml/calamares/slideshow/Presentation.qml b/src/qml/calamares/slideshow/Presentation.qml index 405055b560..dcfb009490 100644 --- a/src/qml/calamares/slideshow/Presentation.qml +++ b/src/qml/calamares/slideshow/Presentation.qml @@ -1,19 +1,22 @@ /* === This file is part of Calamares - === * - * Copyright 2017, Adriaan de Groot + * SPDX-FileCopyrightText: 2017 Adriaan de Groot + * SPDX-FileCopyrightText: 2016 The Qt Company Ltd. + * SPDX-License-Identifier: LGPL-2.1-only + * + * 2017, Adriaan de Groot * - added looping, keys-instead-of-shortcut - * Copyright 2018, Adriaan de Groot + * 2018, Adriaan de Groot * - make looping a property, drop the 'c' fade-key * - drop navigation through entering a slide number * (this and the 'c' key make sense in a *presentation* * slideshow, not in a passive slideshow like Calamares) * - remove quit key - * Copyright 2019, Adriaan de Groot + * 2019, Adriaan de Groot * - Support "V2" loading * - Disable shortcuts until the content is visible in Calamares - * - * SPDX-License-Identifier: LGPL-2.1-only - * License-Filename: LICENSES/LGPLv2.1-Presentation + * 2020, Adriaan de Groot + * - Updated to SPDX headers */ /**************************************************************************** @@ -87,7 +90,7 @@ Item { // It is used in this example also to keep the keyboard shortcuts // enabled only while the slideshow is active. property bool activatedInCalamares: false - + // Private API property int _lastShownSlide: 0 diff --git a/src/qml/calamares/slideshow/Slide.qml b/src/qml/calamares/slideshow/Slide.qml index dc3e244805..0783cc5288 100644 --- a/src/qml/calamares/slideshow/Slide.qml +++ b/src/qml/calamares/slideshow/Slide.qml @@ -1,7 +1,7 @@ /* === This file is part of Calamares - === * + * SPDX-FileCopyrightText: 2012 Digia Plc and/or its subsidiary(-ies). * SPDX-License-Identifier: LGPL-2.1-only - * License-Filename: LICENSES/LGPLv2.1-Presentation */ /**************************************************************************** From 3480988f53b15600b449f9f3a42313f6e0468ba2 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Thu, 20 Aug 2020 22:42:19 +0200 Subject: [PATCH 111/157] REUSE: SPDX tagging of application library and main - CC0-1.0 for the uninteresting version-headers - GPL-3.0-or-later for the services - add SPDX identifiers to Calamares C++ libraries and application sources - add SPDX identifiers to Calamares QML (panels and slideshow) - the `qmldir` is a list of names of things in the directory, so CC0-1.0 it as "uninteresting" - QRC files are lists of names of things in the directory, so CC0-1.0 them as well --- lang/calamares_i18n.qrc.in | 10 ++++++--- src/calamares/CalamaresApplication.cpp | 5 +++-- src/calamares/CalamaresApplication.h | 5 +++-- src/calamares/CalamaresWindow.cpp | 9 ++++---- src/calamares/CalamaresWindow.h | 5 +++-- src/calamares/DebugWindow.cpp | 5 +++-- src/calamares/DebugWindow.h | 5 +++-- src/calamares/VariantModel.cpp | 3 ++- src/calamares/VariantModel.h | 3 ++- src/calamares/calamares-navigation.qml | 10 +++++++++ src/calamares/calamares-sidebar.qml | 12 +++++++++++ src/calamares/calamares.qrc | 14 ++++++++----- src/calamares/main.cpp | 5 +++-- .../progresstree/ProgressTreeDelegate.cpp | 5 +++-- .../progresstree/ProgressTreeDelegate.h | 5 +++-- .../progresstree/ProgressTreeView.cpp | 3 ++- src/calamares/progresstree/ProgressTreeView.h | 5 +++-- src/calamares/test_conf.cpp | 3 ++- src/calamares/testmain.cpp | 3 ++- src/libcalamares/CalamaresVersion.h.in | 2 ++ src/libcalamares/CalamaresVersionX.h.in | 3 +++ src/libcalamares/partition/FileSystem.cpp | 4 +--- src/libcalamares/partition/KPMManager.cpp | 4 +--- src/libcalamares/partition/KPMManager.h | 6 ++---- src/libcalamares/partition/Mount.cpp | 6 ++---- src/libcalamares/partition/Mount.h | 6 ++---- .../partition/PartitionIterator.cpp | 6 ++---- .../partition/PartitionIterator.h | 6 ++---- src/libcalamares/partition/PartitionQuery.cpp | 6 ++---- src/libcalamares/partition/PartitionQuery.h | 6 ++---- src/libcalamares/partition/PartitionSize.cpp | 6 ++---- src/libcalamares/partition/PartitionSize.h | 6 ++---- src/libcalamares/partition/Sync.cpp | 6 ++---- src/libcalamares/partition/Sync.h | 6 ++---- src/libcalamares/partition/Tests.cpp | 4 +--- src/libcalamares/partition/Tests.h | 6 ++---- src/libcalamaresui/Branding.cpp | 9 ++++---- src/libcalamaresui/Branding.h | 9 ++++---- src/libcalamaresui/ViewManager.cpp | 9 ++++---- src/libcalamaresui/ViewManager.h | 5 +++-- src/libcalamaresui/libcalamaresui.qrc | 6 +++++- .../modulesystem/CppJobModule.cpp | 5 +++-- .../modulesystem/CppJobModule.h | 7 ++++--- .../modulesystem/ModuleFactory.cpp | 5 +++-- .../modulesystem/ModuleFactory.h | 5 +++-- .../modulesystem/ModuleManager.h | 5 +++-- .../modulesystem/ProcessJobModule.cpp | 3 ++- .../modulesystem/ProcessJobModule.h | 5 +++-- .../modulesystem/PythonJobModule.cpp | 3 ++- .../modulesystem/PythonJobModule.h | 3 ++- .../modulesystem/PythonQtViewModule.cpp | 7 ++++--- .../modulesystem/PythonQtViewModule.h | 3 ++- .../modulesystem/ViewModule.cpp | 5 +++-- src/libcalamaresui/modulesystem/ViewModule.h | 5 +++-- .../utils/CalamaresUtilsGui.cpp | 5 +++-- src/libcalamaresui/utils/CalamaresUtilsGui.h | 5 +++-- src/libcalamaresui/utils/ImageRegistry.h | 21 ++----------------- src/libcalamaresui/utils/Paste.cpp | 3 ++- src/libcalamaresui/utils/Paste.h | 3 ++- src/libcalamaresui/utils/PythonQtUtils.cpp | 3 ++- src/libcalamaresui/utils/PythonQtUtils.h | 3 ++- src/libcalamaresui/utils/Qml.cpp | 3 ++- src/libcalamaresui/utils/Qml.h | 3 ++- .../viewpages/BlankViewStep.cpp | 3 ++- src/libcalamaresui/viewpages/BlankViewStep.h | 3 ++- .../viewpages/ExecutionViewStep.cpp | 7 ++++--- .../viewpages/ExecutionViewStep.h | 5 +++-- .../PythonQtGlobalStorageWrapper.cpp | 3 ++- .../viewpages/PythonQtGlobalStorageWrapper.h | 5 +++-- src/libcalamaresui/viewpages/PythonQtJob.cpp | 3 ++- src/libcalamaresui/viewpages/PythonQtJob.h | 3 ++- .../viewpages/PythonQtUtilsWrapper.cpp | 5 +++-- .../viewpages/PythonQtUtilsWrapper.h | 3 ++- .../viewpages/PythonQtViewStep.cpp | 5 +++-- .../viewpages/PythonQtViewStep.h | 3 ++- src/libcalamaresui/viewpages/QmlViewStep.cpp | 3 ++- src/libcalamaresui/viewpages/QmlViewStep.h | 3 ++- src/libcalamaresui/viewpages/Slideshow.cpp | 7 ++++--- src/libcalamaresui/viewpages/Slideshow.h | 7 ++++--- src/libcalamaresui/viewpages/ViewStep.cpp | 5 +++-- src/libcalamaresui/viewpages/ViewStep.h | 5 +++-- src/libcalamaresui/widgets/ClickableLabel.cpp | 3 ++- src/libcalamaresui/widgets/ClickableLabel.h | 5 +++-- .../widgets/FixedAspectRatioLabel.cpp | 5 +++-- .../widgets/FixedAspectRatioLabel.h | 5 +++-- .../widgets/PrettyRadioButton.cpp | 3 ++- .../widgets/PrettyRadioButton.h | 3 ++- src/libcalamaresui/widgets/WaitingWidget.cpp | 5 +++-- src/libcalamaresui/widgets/WaitingWidget.h | 3 ++- src/qml/calamares/slideshow/BackButton.qml | 3 ++- src/qml/calamares/slideshow/ForwardButton.qml | 3 ++- src/qml/calamares/slideshow/NavButton.qml | 13 ++++++------ src/qml/calamares/slideshow/SlideCounter.qml | 3 ++- src/qml/calamares/slideshow/qmldir | 3 +++ 94 files changed, 276 insertions(+), 211 deletions(-) diff --git a/lang/calamares_i18n.qrc.in b/lang/calamares_i18n.qrc.in index 1f0ac16046..dd7931e09d 100644 --- a/lang/calamares_i18n.qrc.in +++ b/lang/calamares_i18n.qrc.in @@ -1,5 +1,9 @@ - - + + + + @calamares_i18n_qrc_content@ - + diff --git a/src/calamares/CalamaresApplication.cpp b/src/calamares/CalamaresApplication.cpp index d337f774cc..2b93cc9d15 100644 --- a/src/calamares/CalamaresApplication.cpp +++ b/src/calamares/CalamaresApplication.cpp @@ -1,7 +1,8 @@ /* === This file is part of Calamares - === * - * Copyright 2014-2015, Teo Mrnjavac - * Copyright 2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/calamares/CalamaresApplication.h b/src/calamares/CalamaresApplication.h index f42c21b566..b36577591b 100644 --- a/src/calamares/CalamaresApplication.h +++ b/src/calamares/CalamaresApplication.h @@ -1,7 +1,8 @@ /* === This file is part of Calamares - === * - * Copyright 2014-2015, Teo Mrnjavac - * Copyright 2018-2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2018-2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/calamares/CalamaresWindow.cpp b/src/calamares/CalamaresWindow.cpp index 28b9df626c..2119670be6 100644 --- a/src/calamares/CalamaresWindow.cpp +++ b/src/calamares/CalamaresWindow.cpp @@ -1,9 +1,10 @@ /* === This file is part of Calamares - === * - * Copyright 2014-2015, Teo Mrnjavac - * Copyright 2017-2018, Adriaan de Groot - * Copyright 2018, Raul Rodrigo Segura (raurodse) - * Copyright 2019, Collabora Ltd + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017-2018 Adriaan de Groot + * SPDX-FileCopyrightText: 2018 Raul Rodrigo Segura (raurodse) + * SPDX-FileCopyrightText: 2019 Collabora Ltd + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/calamares/CalamaresWindow.h b/src/calamares/CalamaresWindow.h index e6c27fd3ff..9fa13b44fd 100644 --- a/src/calamares/CalamaresWindow.h +++ b/src/calamares/CalamaresWindow.h @@ -1,7 +1,8 @@ /* === This file is part of Calamares - === * - * Copyright 2014-2015, Teo Mrnjavac - * Copyright 2017-2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017-2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/calamares/DebugWindow.cpp b/src/calamares/DebugWindow.cpp index 9e2bdc5016..c5effb45f2 100644 --- a/src/calamares/DebugWindow.cpp +++ b/src/calamares/DebugWindow.cpp @@ -1,7 +1,8 @@ /* === This file is part of Calamares - === * - * Copyright 2015-2016, Teo Mrnjavac - * Copyright 2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2015-2016 Teo Mrnjavac + * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/calamares/DebugWindow.h b/src/calamares/DebugWindow.h index 764a141c2f..e0e939912a 100644 --- a/src/calamares/DebugWindow.h +++ b/src/calamares/DebugWindow.h @@ -1,7 +1,8 @@ /* === This file is part of Calamares - === * - * Copyright 2015, Teo Mrnjavac - * Copyright 2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/calamares/VariantModel.cpp b/src/calamares/VariantModel.cpp index 2d83136656..9753787ad7 100644 --- a/src/calamares/VariantModel.cpp +++ b/src/calamares/VariantModel.cpp @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/calamares/VariantModel.h b/src/calamares/VariantModel.h index bdf6da8667..7deafc88d7 100644 --- a/src/calamares/VariantModel.h +++ b/src/calamares/VariantModel.h @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/calamares/calamares-navigation.qml b/src/calamares/calamares-navigation.qml index 6b356218d2..1319261759 100644 --- a/src/calamares/calamares-navigation.qml +++ b/src/calamares/calamares-navigation.qml @@ -1,3 +1,13 @@ +/* Sample of QML navigation. + + SPDX-FileCopyrightText: 2020 Adriaan de Groot + SPDX-License-Identifier: GPL-3.0-or-later + + + The navigation panel is generally "horizontal" in layout, with + buttons for next and previous; this particular one copies + the layout and size of the widgets panel. +*/ import io.calamares.ui 1.0 import io.calamares.core 1.0 diff --git a/src/calamares/calamares-sidebar.qml b/src/calamares/calamares-sidebar.qml index 85d1d506db..c12dd6e34d 100644 --- a/src/calamares/calamares-sidebar.qml +++ b/src/calamares/calamares-sidebar.qml @@ -1,3 +1,15 @@ +/* Sample of QML progress tree. + + SPDX-FileCopyrightText: 2020 Adriaan de Groot + SPDX-License-Identifier: GPL-3.0-or-later + + + The progress tree (actually a list) is generally "vertical" in layout, + with the steps going "down", but it could also be a more compact + horizontal layout with suitable branding settings. + + This example emulates the layout and size of the widgets progress tree. +*/ import io.calamares.ui 1.0 import io.calamares.core 1.0 diff --git a/src/calamares/calamares.qrc b/src/calamares/calamares.qrc index 17db2e08a7..5733ea065f 100644 --- a/src/calamares/calamares.qrc +++ b/src/calamares/calamares.qrc @@ -1,6 +1,10 @@ - - - calamares-sidebar.qml - calamares-navigation.qml - + + + + + calamares-sidebar.qml + calamares-navigation.qml + diff --git a/src/calamares/main.cpp b/src/calamares/main.cpp index 4ca089102f..c5815154f8 100644 --- a/src/calamares/main.cpp +++ b/src/calamares/main.cpp @@ -1,7 +1,8 @@ /* === This file is part of Calamares - === * - * Copyright 2014, Teo Mrnjavac - * Copyright 2017-2020, Adriaan de Groot + * SPDX-FileCopyrightText: 2014 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017-2020 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/calamares/progresstree/ProgressTreeDelegate.cpp b/src/calamares/progresstree/ProgressTreeDelegate.cpp index 7b7101f5df..a11cd3795f 100644 --- a/src/calamares/progresstree/ProgressTreeDelegate.cpp +++ b/src/calamares/progresstree/ProgressTreeDelegate.cpp @@ -1,7 +1,8 @@ /* === This file is part of Calamares - === * - * Copyright 2014-2015, Teo Mrnjavac - * Copyright 2017, 2019-2020, Adriaan de Groot + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/calamares/progresstree/ProgressTreeDelegate.h b/src/calamares/progresstree/ProgressTreeDelegate.h index d36bd4d147..7a2641b7d6 100644 --- a/src/calamares/progresstree/ProgressTreeDelegate.h +++ b/src/calamares/progresstree/ProgressTreeDelegate.h @@ -1,7 +1,8 @@ /* === This file is part of Calamares - === * - * Copyright 2014-2015, Teo Mrnjavac - * Copyright 2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/calamares/progresstree/ProgressTreeView.cpp b/src/calamares/progresstree/ProgressTreeView.cpp index 22b11bfc66..ad8effd66a 100644 --- a/src/calamares/progresstree/ProgressTreeView.cpp +++ b/src/calamares/progresstree/ProgressTreeView.cpp @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2014, Teo Mrnjavac + * SPDX-FileCopyrightText: 2014 Teo Mrnjavac + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/calamares/progresstree/ProgressTreeView.h b/src/calamares/progresstree/ProgressTreeView.h index 4a1bf9f2d9..b72291a924 100644 --- a/src/calamares/progresstree/ProgressTreeView.h +++ b/src/calamares/progresstree/ProgressTreeView.h @@ -1,7 +1,8 @@ /* === This file is part of Calamares - === * - * Copyright 2014, Teo Mrnjavac - * Copyright 2017, Adriaan de Groot + * SPDX-FileCopyrightText: 2014 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/calamares/test_conf.cpp b/src/calamares/test_conf.cpp index 06247bfed2..18330d9a2b 100644 --- a/src/calamares/test_conf.cpp +++ b/src/calamares/test_conf.cpp @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2017-2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2017-2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/calamares/testmain.cpp b/src/calamares/testmain.cpp index d70ee70b56..6e4384b621 100644 --- a/src/calamares/testmain.cpp +++ b/src/calamares/testmain.cpp @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/libcalamares/CalamaresVersion.h.in b/src/libcalamares/CalamaresVersion.h.in index 54a44888a5..09ef9ae2c7 100644 --- a/src/libcalamares/CalamaresVersion.h.in +++ b/src/libcalamares/CalamaresVersion.h.in @@ -1,3 +1,5 @@ +// SPDX-FileCopyrightText: no +// SPDX-License-Identifier: CC0-1.0 #ifndef CALAMARES_VERSION_H #define CALAMARES_VERSION_H diff --git a/src/libcalamares/CalamaresVersionX.h.in b/src/libcalamares/CalamaresVersionX.h.in index 75b124c117..be3a9ae21f 100644 --- a/src/libcalamares/CalamaresVersionX.h.in +++ b/src/libcalamares/CalamaresVersionX.h.in @@ -1,3 +1,6 @@ +// SPDX-FileCopyrightText: no +// SPDX-License-Identifier: CC0-1.0 +// // Same as CalamaresVersion.h, but with a full-git-extended VERSION // rather than the short (vM.m.p) semantic version. #ifndef CALAMARES_VERSION_H diff --git a/src/libcalamares/partition/FileSystem.cpp b/src/libcalamares/partition/FileSystem.cpp index 6fda6b41a5..ee4a9f5b13 100644 --- a/src/libcalamares/partition/FileSystem.cpp +++ b/src/libcalamares/partition/FileSystem.cpp @@ -3,6 +3,7 @@ * SPDX-FileCopyrightText: 2014 Aurélien Gâteau * SPDX-FileCopyrightText: 2015-2016 Teo Mrnjavac * SPDX-FileCopyrightText: 2018-2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -17,9 +18,6 @@ * You should have received a copy of the GNU General Public License * along with Calamares. If not, see . * - * SPDX-License-Identifier: GPL-3.0-or-later - * License-Filename: LICENSE - * */ #include "FileSystem.h" diff --git a/src/libcalamares/partition/KPMManager.cpp b/src/libcalamares/partition/KPMManager.cpp index 00b4a64917..1f3c5b5fc0 100644 --- a/src/libcalamares/partition/KPMManager.cpp +++ b/src/libcalamares/partition/KPMManager.cpp @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -15,9 +16,6 @@ * You should have received a copy of the GNU General Public License * along with Calamares. If not, see . * - * SPDX-License-Identifier: GPL-3.0-or-later - * License-Filename: LICENSE - * */ #include "KPMManager.h" diff --git a/src/libcalamares/partition/KPMManager.h b/src/libcalamares/partition/KPMManager.h index be5ae00c06..2c73bfed3d 100644 --- a/src/libcalamares/partition/KPMManager.h +++ b/src/libcalamares/partition/KPMManager.h @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === - * + * * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -15,9 +16,6 @@ * You should have received a copy of the GNU General Public License * along with Calamares. If not, see . * - * SPDX-License-Identifier: GPL-3.0-or-later - * License-Filename: LICENSE - * */ /* diff --git a/src/libcalamares/partition/Mount.cpp b/src/libcalamares/partition/Mount.cpp index f9a45fafde..a110f28828 100644 --- a/src/libcalamares/partition/Mount.cpp +++ b/src/libcalamares/partition/Mount.cpp @@ -1,7 +1,8 @@ /* === This file is part of Calamares - === - * + * * SPDX-FileCopyrightText: 2014 Teo Mrnjavac * SPDX-FileCopyrightText: 2017-2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -16,9 +17,6 @@ * You should have received a copy of the GNU General Public License * along with Calamares. If not, see . * - * SPDX-License-Identifier: GPL-3.0-or-later - * License-Filename: LICENSE - * */ #include "Mount.h" diff --git a/src/libcalamares/partition/Mount.h b/src/libcalamares/partition/Mount.h index c08d5ac759..a1a0dea65d 100644 --- a/src/libcalamares/partition/Mount.h +++ b/src/libcalamares/partition/Mount.h @@ -1,7 +1,8 @@ /* === This file is part of Calamares - === - * + * * SPDX-FileCopyrightText: 2014 Teo Mrnjavac * SPDX-FileCopyrightText: 2017-2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -16,9 +17,6 @@ * You should have received a copy of the GNU General Public License * along with Calamares. If not, see . * - * SPDX-License-Identifier: GPL-3.0-or-later - * License-Filename: LICENSE - * */ #ifndef PARTITION_MOUNT_H diff --git a/src/libcalamares/partition/PartitionIterator.cpp b/src/libcalamares/partition/PartitionIterator.cpp index f4e57fbade..6e030346d2 100644 --- a/src/libcalamares/partition/PartitionIterator.cpp +++ b/src/libcalamares/partition/PartitionIterator.cpp @@ -1,8 +1,9 @@ /* === This file is part of Calamares - === - * + * * SPDX-FileCopyrightText: 2014 Aurélien Gâteau * SPDX-FileCopyrightText: 2015 Teo Mrnjavac * SPDX-FileCopyrightText: 2017-2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -17,9 +18,6 @@ * You should have received a copy of the GNU General Public License * along with Calamares. If not, see . * - * SPDX-License-Identifier: GPL-3.0-or-later - * License-Filename: LICENSE - * */ #include "PartitionIterator.h" diff --git a/src/libcalamares/partition/PartitionIterator.h b/src/libcalamares/partition/PartitionIterator.h index 03a03faba5..4e3d4362dd 100644 --- a/src/libcalamares/partition/PartitionIterator.h +++ b/src/libcalamares/partition/PartitionIterator.h @@ -1,8 +1,9 @@ /* === This file is part of Calamares - === - * + * * SPDX-FileCopyrightText: 2014 Aurélien Gâteau * SPDX-FileCopyrightText: 2015 Teo Mrnjavac * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -17,9 +18,6 @@ * You should have received a copy of the GNU General Public License * along with Calamares. If not, see . * - * SPDX-License-Identifier: GPL-3.0-or-later - * License-Filename: LICENSE - * */ diff --git a/src/libcalamares/partition/PartitionQuery.cpp b/src/libcalamares/partition/PartitionQuery.cpp index 0aba728b37..8a2039b61c 100644 --- a/src/libcalamares/partition/PartitionQuery.cpp +++ b/src/libcalamares/partition/PartitionQuery.cpp @@ -1,8 +1,9 @@ /* === This file is part of Calamares - === - * + * * SPDX-FileCopyrightText: 2014 Aurélien Gâteau * SPDX-FileCopyrightText: 2015-2016 Teo Mrnjavac * SPDX-FileCopyrightText: 2018-2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -17,9 +18,6 @@ * You should have received a copy of the GNU General Public License * along with Calamares. If not, see . * - * SPDX-License-Identifier: GPL-3.0-or-later - * License-Filename: LICENSE - * */ #include "PartitionQuery.h" diff --git a/src/libcalamares/partition/PartitionQuery.h b/src/libcalamares/partition/PartitionQuery.h index 595d82c0f6..ac241a259f 100644 --- a/src/libcalamares/partition/PartitionQuery.h +++ b/src/libcalamares/partition/PartitionQuery.h @@ -1,8 +1,9 @@ /* === This file is part of Calamares - === - * + * * SPDX-FileCopyrightText: 2014 Aurélien Gâteau * SPDX-FileCopyrightText: 2015-2016 Teo Mrnjavac * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -17,9 +18,6 @@ * You should have received a copy of the GNU General Public License * along with Calamares. If not, see . * - * SPDX-License-Identifier: GPL-3.0-or-later - * License-Filename: LICENSE - * */ /* diff --git a/src/libcalamares/partition/PartitionSize.cpp b/src/libcalamares/partition/PartitionSize.cpp index d84fd81c61..38e0366c0d 100644 --- a/src/libcalamares/partition/PartitionSize.cpp +++ b/src/libcalamares/partition/PartitionSize.cpp @@ -1,7 +1,8 @@ /* === This file is part of Calamares - === - * + * * SPDX-FileCopyrightText: 2019 Collabora Ltd * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -16,9 +17,6 @@ * You should have received a copy of the GNU General Public License * along with Calamares. If not, see . * - * SPDX-License-Identifier: GPL-3.0-or-later - * License-Filename: LICENSE - * */ diff --git a/src/libcalamares/partition/PartitionSize.h b/src/libcalamares/partition/PartitionSize.h index f70aa3c89d..35c6cdb8db 100644 --- a/src/libcalamares/partition/PartitionSize.h +++ b/src/libcalamares/partition/PartitionSize.h @@ -1,7 +1,8 @@ /* === This file is part of Calamares - === - * + * * SPDX-FileCopyrightText: 2019 Collabora Ltd * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -16,9 +17,6 @@ * You should have received a copy of the GNU General Public License * along with Calamares. If not, see . * - * SPDX-License-Identifier: GPL-3.0-or-later - * License-Filename: LICENSE - * */ #ifndef PARTITION_PARTITIONSIZE_H diff --git a/src/libcalamares/partition/Sync.cpp b/src/libcalamares/partition/Sync.cpp index d1f6378cdc..fb7b317887 100644 --- a/src/libcalamares/partition/Sync.cpp +++ b/src/libcalamares/partition/Sync.cpp @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === - * + * * SPDX-FileCopyrightText: 2019-2020 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -15,9 +16,6 @@ * You should have received a copy of the GNU General Public License * along with Calamares. If not, see . * - * SPDX-License-Identifier: GPL-3.0-or-later - * License-Filename: LICENSE - * */ #include "Sync.h" diff --git a/src/libcalamares/partition/Sync.h b/src/libcalamares/partition/Sync.h index a291058e7f..bb1938c8b1 100644 --- a/src/libcalamares/partition/Sync.h +++ b/src/libcalamares/partition/Sync.h @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === - * + * * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -15,9 +16,6 @@ * You should have received a copy of the GNU General Public License * along with Calamares. If not, see . * - * SPDX-License-Identifier: GPL-3.0-or-later - * License-Filename: LICENSE - * */ #ifndef PARTITION_SYNC_H diff --git a/src/libcalamares/partition/Tests.cpp b/src/libcalamares/partition/Tests.cpp index e52b8edf1f..d69e80fc1b 100644 --- a/src/libcalamares/partition/Tests.cpp +++ b/src/libcalamares/partition/Tests.cpp @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -15,9 +16,6 @@ * You should have received a copy of the GNU General Public License * along with Calamares. If not, see . * - * SPDX-License-Identifier: GPL-3.0-or-later - * License-Filename: LICENSE - * */ #include "Tests.h" diff --git a/src/libcalamares/partition/Tests.h b/src/libcalamares/partition/Tests.h index c495fa0fdf..31983c2f6b 100644 --- a/src/libcalamares/partition/Tests.h +++ b/src/libcalamares/partition/Tests.h @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === - * + * * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -15,9 +16,6 @@ * You should have received a copy of the GNU General Public License * along with Calamares. If not, see . * - * SPDX-License-Identifier: GPL-3.0-or-later - * License-Filename: LICENSE - * */ #ifndef LIBCALAMARES_PARTITION_TESTS_H diff --git a/src/libcalamaresui/Branding.cpp b/src/libcalamaresui/Branding.cpp index 4cfe7ea406..c14f33b85a 100644 --- a/src/libcalamaresui/Branding.cpp +++ b/src/libcalamaresui/Branding.cpp @@ -1,9 +1,10 @@ /* === This file is part of Calamares - === * - * Copyright 2014-2015, Teo Mrnjavac - * Copyright 2017-2019, Adriaan de Groot - * Copyright 2018, Raul Rodrigo Segura (raurodse) - * Copyright 2019, Camilo Higuita + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017-2019 Adriaan de Groot + * SPDX-FileCopyrightText: 2018 Raul Rodrigo Segura (raurodse) + * SPDX-FileCopyrightText: 2019 Camilo Higuita + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/libcalamaresui/Branding.h b/src/libcalamaresui/Branding.h index 764845fecc..65b7d96429 100644 --- a/src/libcalamaresui/Branding.h +++ b/src/libcalamaresui/Branding.h @@ -1,9 +1,10 @@ /* === This file is part of Calamares - === * - * Copyright 2014-2015, Teo Mrnjavac - * Copyright 2017-2018, Adriaan de Groot - * Copyright 2018, Raul Rodrigo Segura (raurodse) - * Copyright 2019, Camilo Higuita + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017-2018 Adriaan de Groot + * SPDX-FileCopyrightText: 2018 Raul Rodrigo Segura (raurodse) + * SPDX-FileCopyrightText: 2019 Camilo Higuita + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/libcalamaresui/ViewManager.cpp b/src/libcalamaresui/ViewManager.cpp index a39fc141ff..e0a206caed 100644 --- a/src/libcalamaresui/ViewManager.cpp +++ b/src/libcalamaresui/ViewManager.cpp @@ -1,9 +1,10 @@ /* === This file is part of Calamares - === * - * Copyright 2019, Dominic Hayes - * Copyright 2019, Gabriel Craciunescu - * Copyright 2014-2015, Teo Mrnjavac - * Copyright 2017-2018, 2020, Adriaan de Groot + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017-2018 Adriaan de Groot + * SPDX-FileCopyrightText: 2019 Dominic Hayes + * SPDX-FileCopyrightText: 2019 Gabriel Craciunescu + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/libcalamaresui/ViewManager.h b/src/libcalamaresui/ViewManager.h index 683b335d13..208f744a4c 100644 --- a/src/libcalamaresui/ViewManager.h +++ b/src/libcalamaresui/ViewManager.h @@ -1,7 +1,8 @@ /* === This file is part of Calamares - === * - * Copyright 2014-2015, Teo Mrnjavac - * Copyright 2017-2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017-2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/libcalamaresui/libcalamaresui.qrc b/src/libcalamaresui/libcalamaresui.qrc index eeb3fc4909..62a7df271c 100644 --- a/src/libcalamaresui/libcalamaresui.qrc +++ b/src/libcalamaresui/libcalamaresui.qrc @@ -1,4 +1,8 @@ - + + + ../../data/images/yes.svgz ../../data/images/no.svgz diff --git a/src/libcalamaresui/modulesystem/CppJobModule.cpp b/src/libcalamaresui/modulesystem/CppJobModule.cpp index 6050c6955f..453764b138 100644 --- a/src/libcalamaresui/modulesystem/CppJobModule.cpp +++ b/src/libcalamaresui/modulesystem/CppJobModule.cpp @@ -1,7 +1,8 @@ /* === This file is part of Calamares - === * - * Copyright 2014, Teo Mrnjavac - * Copyright 2016, Kevin Kofler + * SPDX-FileCopyrightText: 2014 Teo Mrnjavac + * SPDX-FileCopyrightText: 2016 Kevin Kofler + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/libcalamaresui/modulesystem/CppJobModule.h b/src/libcalamaresui/modulesystem/CppJobModule.h index 8774a67e51..9c6e7b8230 100644 --- a/src/libcalamaresui/modulesystem/CppJobModule.h +++ b/src/libcalamaresui/modulesystem/CppJobModule.h @@ -1,8 +1,9 @@ /* === This file is part of Calamares - === * - * Copyright 2014, Teo Mrnjavac - * Copyright 2016, Kevin Kofler - * Copyright 2017, Adriaan de Groot + * SPDX-FileCopyrightText: 2014 Teo Mrnjavac + * SPDX-FileCopyrightText: 2016 Kevin Kofler + * SPDX-FileCopyrightText: 2017 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/libcalamaresui/modulesystem/ModuleFactory.cpp b/src/libcalamaresui/modulesystem/ModuleFactory.cpp index 050854613d..93ffb745b8 100644 --- a/src/libcalamaresui/modulesystem/ModuleFactory.cpp +++ b/src/libcalamaresui/modulesystem/ModuleFactory.cpp @@ -1,7 +1,8 @@ /* === This file is part of Calamares - === * - * Copyright 2014-2015, Teo Mrnjavac - * Copyright 2017-2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017-2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/libcalamaresui/modulesystem/ModuleFactory.h b/src/libcalamaresui/modulesystem/ModuleFactory.h index 8184967d25..6d8f12a193 100644 --- a/src/libcalamaresui/modulesystem/ModuleFactory.h +++ b/src/libcalamaresui/modulesystem/ModuleFactory.h @@ -1,7 +1,8 @@ /* === This file is part of Calamares - === * - * Copyright 2014-2015, Teo Mrnjavac - * Copyright 2017, Adriaan de Groot + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/libcalamaresui/modulesystem/ModuleManager.h b/src/libcalamaresui/modulesystem/ModuleManager.h index eb7d086c1f..abe0dce008 100644 --- a/src/libcalamaresui/modulesystem/ModuleManager.h +++ b/src/libcalamaresui/modulesystem/ModuleManager.h @@ -1,7 +1,8 @@ /* === This file is part of Calamares - === * - * Copyright 2014-2015, Teo Mrnjavac - * Copyright 2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/libcalamaresui/modulesystem/ProcessJobModule.cpp b/src/libcalamaresui/modulesystem/ProcessJobModule.cpp index b5eed6e438..f3a6d6e985 100644 --- a/src/libcalamaresui/modulesystem/ProcessJobModule.cpp +++ b/src/libcalamaresui/modulesystem/ProcessJobModule.cpp @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2014, Teo Mrnjavac + * SPDX-FileCopyrightText: 2014 Teo Mrnjavac + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/libcalamaresui/modulesystem/ProcessJobModule.h b/src/libcalamaresui/modulesystem/ProcessJobModule.h index b59539a049..e3780ed0e1 100644 --- a/src/libcalamaresui/modulesystem/ProcessJobModule.h +++ b/src/libcalamaresui/modulesystem/ProcessJobModule.h @@ -1,7 +1,8 @@ /* === This file is part of Calamares - === * - * Copyright 2014, Teo Mrnjavac - * Copyright 2017, Adriaan de Groot + * SPDX-FileCopyrightText: 2014 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/libcalamaresui/modulesystem/PythonJobModule.cpp b/src/libcalamaresui/modulesystem/PythonJobModule.cpp index 72ca116fb1..d3c47fffb6 100644 --- a/src/libcalamaresui/modulesystem/PythonJobModule.cpp +++ b/src/libcalamaresui/modulesystem/PythonJobModule.cpp @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2014, Teo Mrnjavac + * SPDX-FileCopyrightText: 2014 Teo Mrnjavac + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/libcalamaresui/modulesystem/PythonJobModule.h b/src/libcalamaresui/modulesystem/PythonJobModule.h index db5554b9b9..68963802c4 100644 --- a/src/libcalamaresui/modulesystem/PythonJobModule.h +++ b/src/libcalamaresui/modulesystem/PythonJobModule.h @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2014, Teo Mrnjavac + * SPDX-FileCopyrightText: 2014 Teo Mrnjavac + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/libcalamaresui/modulesystem/PythonQtViewModule.cpp b/src/libcalamaresui/modulesystem/PythonQtViewModule.cpp index b94414d4a1..3e1f2cce34 100644 --- a/src/libcalamaresui/modulesystem/PythonQtViewModule.cpp +++ b/src/libcalamaresui/modulesystem/PythonQtViewModule.cpp @@ -1,8 +1,9 @@ /* === This file is part of Calamares - === * - * Copyright 2016, Teo Mrnjavac - * Copyright 2018, Adriaan de Groot - * Copyright 2018, Raul Rodrigo Segura + * SPDX-FileCopyrightText: 2016 Teo Mrnjavac + * SPDX-FileCopyrightText: 2018 Adriaan de Groot + * SPDX-FileCopyrightText: 2018 Raul Rodrigo Segura + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/libcalamaresui/modulesystem/PythonQtViewModule.h b/src/libcalamaresui/modulesystem/PythonQtViewModule.h index 64cc0f8a9e..ad8e0989af 100644 --- a/src/libcalamaresui/modulesystem/PythonQtViewModule.h +++ b/src/libcalamaresui/modulesystem/PythonQtViewModule.h @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2016, Teo Mrnjavac + * SPDX-FileCopyrightText: 2016 Teo Mrnjavac + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/libcalamaresui/modulesystem/ViewModule.cpp b/src/libcalamaresui/modulesystem/ViewModule.cpp index 8f3b9a340e..1674d9fab1 100644 --- a/src/libcalamaresui/modulesystem/ViewModule.cpp +++ b/src/libcalamaresui/modulesystem/ViewModule.cpp @@ -1,7 +1,8 @@ /* === This file is part of Calamares - === * - * Copyright 2014, Teo Mrnjavac - * Copyright 2017-2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2014 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017-2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/libcalamaresui/modulesystem/ViewModule.h b/src/libcalamaresui/modulesystem/ViewModule.h index ac56e7607f..370987b158 100644 --- a/src/libcalamaresui/modulesystem/ViewModule.h +++ b/src/libcalamaresui/modulesystem/ViewModule.h @@ -1,7 +1,8 @@ /* === This file is part of Calamares - === * - * Copyright 2014, Teo Mrnjavac - * Copyright 2017, Adriaan de Groot + * SPDX-FileCopyrightText: 2014 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/libcalamaresui/utils/CalamaresUtilsGui.cpp b/src/libcalamaresui/utils/CalamaresUtilsGui.cpp index 680673a222..57f04cd954 100644 --- a/src/libcalamaresui/utils/CalamaresUtilsGui.cpp +++ b/src/libcalamaresui/utils/CalamaresUtilsGui.cpp @@ -1,7 +1,8 @@ /* === This file is part of Calamares - === * - * Copyright 2014-2015, Teo Mrnjavac - * Copyright 2017-2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017-2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/libcalamaresui/utils/CalamaresUtilsGui.h b/src/libcalamaresui/utils/CalamaresUtilsGui.h index 251741fad1..a98579cd67 100644 --- a/src/libcalamaresui/utils/CalamaresUtilsGui.h +++ b/src/libcalamaresui/utils/CalamaresUtilsGui.h @@ -1,7 +1,8 @@ /* === This file is part of Calamares - === * - * Copyright 2014-2015, Teo Mrnjavac - * Copyright 2017-2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017-2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/libcalamaresui/utils/ImageRegistry.h b/src/libcalamaresui/utils/ImageRegistry.h index 5378d71e76..706306c23a 100644 --- a/src/libcalamaresui/utils/ImageRegistry.h +++ b/src/libcalamaresui/utils/ImageRegistry.h @@ -1,28 +1,11 @@ /* === This file is part of Calamares - === * + * SPDX-FileCopyrightText: 2012 Christian Muehlhaeuser + * SPDX-FileCopyrightText: 2019 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later - * License-Filename: LICENSES/GPLv3+-ImageRegistry * - * Copyright 2019, Adriaan de Groot */ -/* - * Copyright 2012, Christian Muehlhaeuser - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - #ifndef IMAGE_REGISTRY_H #define IMAGE_REGISTRY_H diff --git a/src/libcalamaresui/utils/Paste.cpp b/src/libcalamaresui/utils/Paste.cpp index 1b9ad4dfe0..16ec7a74fe 100644 --- a/src/libcalamaresui/utils/Paste.cpp +++ b/src/libcalamaresui/utils/Paste.cpp @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2019, Bill Auger + * SPDX-FileCopyrightText: 2019 Bill Auger + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/libcalamaresui/utils/Paste.h b/src/libcalamaresui/utils/Paste.h index fd088882c8..0886a9a7fb 100644 --- a/src/libcalamaresui/utils/Paste.h +++ b/src/libcalamaresui/utils/Paste.h @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2019, Bill Auger + * SPDX-FileCopyrightText: 2019 Bill Auger + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/libcalamaresui/utils/PythonQtUtils.cpp b/src/libcalamaresui/utils/PythonQtUtils.cpp index 3a60839a41..6528ee4a8b 100644 --- a/src/libcalamaresui/utils/PythonQtUtils.cpp +++ b/src/libcalamaresui/utils/PythonQtUtils.cpp @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2016, Teo Mrnjavac + * SPDX-FileCopyrightText: 2016 Teo Mrnjavac + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/libcalamaresui/utils/PythonQtUtils.h b/src/libcalamaresui/utils/PythonQtUtils.h index dc889b2d07..f06a6d4e44 100644 --- a/src/libcalamaresui/utils/PythonQtUtils.h +++ b/src/libcalamaresui/utils/PythonQtUtils.h @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2016, Teo Mrnjavac + * SPDX-FileCopyrightText: 2016 Teo Mrnjavac + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/libcalamaresui/utils/Qml.cpp b/src/libcalamaresui/utils/Qml.cpp index 1f1152fa2f..602e113269 100644 --- a/src/libcalamaresui/utils/Qml.cpp +++ b/src/libcalamaresui/utils/Qml.cpp @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2020, Adriaan de Groot + * SPDX-FileCopyrightText: 2020 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/libcalamaresui/utils/Qml.h b/src/libcalamaresui/utils/Qml.h index a3fc6d1143..ea5d0aa8fe 100644 --- a/src/libcalamaresui/utils/Qml.h +++ b/src/libcalamaresui/utils/Qml.h @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2020, Adriaan de Groot + * SPDX-FileCopyrightText: 2020 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/libcalamaresui/viewpages/BlankViewStep.cpp b/src/libcalamaresui/viewpages/BlankViewStep.cpp index 68eba5385a..16925a4a11 100644 --- a/src/libcalamaresui/viewpages/BlankViewStep.cpp +++ b/src/libcalamaresui/viewpages/BlankViewStep.cpp @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/libcalamaresui/viewpages/BlankViewStep.h b/src/libcalamaresui/viewpages/BlankViewStep.h index ab44205ac9..e10cce8723 100644 --- a/src/libcalamaresui/viewpages/BlankViewStep.h +++ b/src/libcalamaresui/viewpages/BlankViewStep.h @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/libcalamaresui/viewpages/ExecutionViewStep.cpp b/src/libcalamaresui/viewpages/ExecutionViewStep.cpp index 6f3983dc43..de6f12a21f 100644 --- a/src/libcalamaresui/viewpages/ExecutionViewStep.cpp +++ b/src/libcalamaresui/viewpages/ExecutionViewStep.cpp @@ -1,8 +1,9 @@ /* === This file is part of Calamares - === * - * Copyright 2014, Aurélien Gâteau - * Copyright 2014-2015, Teo Mrnjavac - * Copyright 2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2014 Aurélien Gâteau + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/libcalamaresui/viewpages/ExecutionViewStep.h b/src/libcalamaresui/viewpages/ExecutionViewStep.h index 0edb965a13..f2fea641b6 100644 --- a/src/libcalamaresui/viewpages/ExecutionViewStep.h +++ b/src/libcalamaresui/viewpages/ExecutionViewStep.h @@ -1,7 +1,8 @@ /* === This file is part of Calamares - === * - * Copyright 2014, Aurélien Gâteau - * Copyright 2014-2015, Teo Mrnjavac + * SPDX-FileCopyrightText: 2014 Aurélien Gâteau + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/libcalamaresui/viewpages/PythonQtGlobalStorageWrapper.cpp b/src/libcalamaresui/viewpages/PythonQtGlobalStorageWrapper.cpp index ba7657b09a..835e35361d 100644 --- a/src/libcalamaresui/viewpages/PythonQtGlobalStorageWrapper.cpp +++ b/src/libcalamaresui/viewpages/PythonQtGlobalStorageWrapper.cpp @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2016, Teo Mrnjavac + * SPDX-FileCopyrightText: 2016 Teo Mrnjavac + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/libcalamaresui/viewpages/PythonQtGlobalStorageWrapper.h b/src/libcalamaresui/viewpages/PythonQtGlobalStorageWrapper.h index 5ccc4e21d9..b18fe8fd3e 100644 --- a/src/libcalamaresui/viewpages/PythonQtGlobalStorageWrapper.h +++ b/src/libcalamaresui/viewpages/PythonQtGlobalStorageWrapper.h @@ -1,7 +1,8 @@ /* === This file is part of Calamares - === * - * Copyright 2016, Teo Mrnjavac - * Copyright 2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2016 Teo Mrnjavac + * SPDX-FileCopyrightText: 2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/libcalamaresui/viewpages/PythonQtJob.cpp b/src/libcalamaresui/viewpages/PythonQtJob.cpp index 0718df95d0..112e11cc5a 100644 --- a/src/libcalamaresui/viewpages/PythonQtJob.cpp +++ b/src/libcalamaresui/viewpages/PythonQtJob.cpp @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2016, Teo Mrnjavac + * SPDX-FileCopyrightText: 2016 Teo Mrnjavac + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/libcalamaresui/viewpages/PythonQtJob.h b/src/libcalamaresui/viewpages/PythonQtJob.h index bab0734307..847dcd44cf 100644 --- a/src/libcalamaresui/viewpages/PythonQtJob.h +++ b/src/libcalamaresui/viewpages/PythonQtJob.h @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2016, Teo Mrnjavac + * SPDX-FileCopyrightText: 2016 Teo Mrnjavac + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/libcalamaresui/viewpages/PythonQtUtilsWrapper.cpp b/src/libcalamaresui/viewpages/PythonQtUtilsWrapper.cpp index d16bd56f84..a55e0db052 100644 --- a/src/libcalamaresui/viewpages/PythonQtUtilsWrapper.cpp +++ b/src/libcalamaresui/viewpages/PythonQtUtilsWrapper.cpp @@ -1,7 +1,8 @@ /* === This file is part of Calamares - === * - * Copyright 2016, Teo Mrnjavac - * Copyright 2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2016 Teo Mrnjavac + * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/libcalamaresui/viewpages/PythonQtUtilsWrapper.h b/src/libcalamaresui/viewpages/PythonQtUtilsWrapper.h index 96de6fe9ca..96243f7078 100644 --- a/src/libcalamaresui/viewpages/PythonQtUtilsWrapper.h +++ b/src/libcalamaresui/viewpages/PythonQtUtilsWrapper.h @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2016, Teo Mrnjavac + * SPDX-FileCopyrightText: 2016 Teo Mrnjavac + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/libcalamaresui/viewpages/PythonQtViewStep.cpp b/src/libcalamaresui/viewpages/PythonQtViewStep.cpp index 5e313ff980..cc849e0ea0 100644 --- a/src/libcalamaresui/viewpages/PythonQtViewStep.cpp +++ b/src/libcalamaresui/viewpages/PythonQtViewStep.cpp @@ -1,7 +1,8 @@ /* === This file is part of Calamares - === * - * Copyright 2016, Teo Mrnjavac - * Copyright 2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2016 Teo Mrnjavac + * SPDX-FileCopyrightText: 2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/libcalamaresui/viewpages/PythonQtViewStep.h b/src/libcalamaresui/viewpages/PythonQtViewStep.h index 5358bc824a..c19494013b 100644 --- a/src/libcalamaresui/viewpages/PythonQtViewStep.h +++ b/src/libcalamaresui/viewpages/PythonQtViewStep.h @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2016, Teo Mrnjavac + * SPDX-FileCopyrightText: 2016 Teo Mrnjavac + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/libcalamaresui/viewpages/QmlViewStep.cpp b/src/libcalamaresui/viewpages/QmlViewStep.cpp index 6318e47d8f..650a746e22 100644 --- a/src/libcalamaresui/viewpages/QmlViewStep.cpp +++ b/src/libcalamaresui/viewpages/QmlViewStep.cpp @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2020, Adriaan de Groot + * SPDX-FileCopyrightText: 2020 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/libcalamaresui/viewpages/QmlViewStep.h b/src/libcalamaresui/viewpages/QmlViewStep.h index dc2af650dd..c81f905672 100644 --- a/src/libcalamaresui/viewpages/QmlViewStep.h +++ b/src/libcalamaresui/viewpages/QmlViewStep.h @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2020, Adriaan de Groot + * SPDX-FileCopyrightText: 2020 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/libcalamaresui/viewpages/Slideshow.cpp b/src/libcalamaresui/viewpages/Slideshow.cpp index 0c75dc3903..ddd8aedb67 100644 --- a/src/libcalamaresui/viewpages/Slideshow.cpp +++ b/src/libcalamaresui/viewpages/Slideshow.cpp @@ -1,8 +1,9 @@ /* === This file is part of Calamares - === * - * Copyright 2014, Aurélien Gâteau - * Copyright 2014-2015, Teo Mrnjavac - * Copyright 2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2014 Aurélien Gâteau + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/libcalamaresui/viewpages/Slideshow.h b/src/libcalamaresui/viewpages/Slideshow.h index f338d44e20..e3b09a6d18 100644 --- a/src/libcalamaresui/viewpages/Slideshow.h +++ b/src/libcalamaresui/viewpages/Slideshow.h @@ -1,8 +1,9 @@ /* === This file is part of Calamares - === * - * Copyright 2014, Aurélien Gâteau - * Copyright 2014-2015, Teo Mrnjavac - * Copyright 2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2014 Aurélien Gâteau + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/libcalamaresui/viewpages/ViewStep.cpp b/src/libcalamaresui/viewpages/ViewStep.cpp index ad86d06a49..1d9fcf1fb3 100644 --- a/src/libcalamaresui/viewpages/ViewStep.cpp +++ b/src/libcalamaresui/viewpages/ViewStep.cpp @@ -1,7 +1,8 @@ /* === This file is part of Calamares - === * - * Copyright 2014, Teo Mrnjavac - * Copyright 2017, Adriaan de Groot + * SPDX-FileCopyrightText: 2014 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/libcalamaresui/viewpages/ViewStep.h b/src/libcalamaresui/viewpages/ViewStep.h index 59f307af28..6d6b9b2c5e 100644 --- a/src/libcalamaresui/viewpages/ViewStep.h +++ b/src/libcalamaresui/viewpages/ViewStep.h @@ -1,7 +1,8 @@ /* === This file is part of Calamares - === * - * Copyright 2014-2015, Teo Mrnjavac - * Copyright 2017, 2020, Adriaan de Groot + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/libcalamaresui/widgets/ClickableLabel.cpp b/src/libcalamaresui/widgets/ClickableLabel.cpp index 8f2323fa47..ec5c18a296 100644 --- a/src/libcalamaresui/widgets/ClickableLabel.cpp +++ b/src/libcalamaresui/widgets/ClickableLabel.cpp @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2014, Teo Mrnjavac + * SPDX-FileCopyrightText: 2014 Teo Mrnjavac + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/libcalamaresui/widgets/ClickableLabel.h b/src/libcalamaresui/widgets/ClickableLabel.h index f60a247ca5..43da492766 100644 --- a/src/libcalamaresui/widgets/ClickableLabel.h +++ b/src/libcalamaresui/widgets/ClickableLabel.h @@ -1,7 +1,8 @@ /* === This file is part of Calamares - === * - * Copyright 2014, Teo Mrnjavac - * Copyright 2017, Adriaan de Groot + * SPDX-FileCopyrightText: 2014 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/libcalamaresui/widgets/FixedAspectRatioLabel.cpp b/src/libcalamaresui/widgets/FixedAspectRatioLabel.cpp index cf72c9924a..6e9a64d108 100644 --- a/src/libcalamaresui/widgets/FixedAspectRatioLabel.cpp +++ b/src/libcalamaresui/widgets/FixedAspectRatioLabel.cpp @@ -1,7 +1,8 @@ /* === This file is part of Calamares - === * - * Copyright 2015, Teo Mrnjavac - * Copyright 2017, Adriaan de Groot + * SPDX-FileCopyrightText: 2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/libcalamaresui/widgets/FixedAspectRatioLabel.h b/src/libcalamaresui/widgets/FixedAspectRatioLabel.h index 9466fcd158..dd85f98ef2 100644 --- a/src/libcalamaresui/widgets/FixedAspectRatioLabel.h +++ b/src/libcalamaresui/widgets/FixedAspectRatioLabel.h @@ -1,7 +1,8 @@ /* === This file is part of Calamares - === * - * Copyright 2015, Teo Mrnjavac - * Copyright 2017, Adriaan de Groot + * SPDX-FileCopyrightText: 2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/libcalamaresui/widgets/PrettyRadioButton.cpp b/src/libcalamaresui/widgets/PrettyRadioButton.cpp index 1cf3483158..091be266b8 100644 --- a/src/libcalamaresui/widgets/PrettyRadioButton.cpp +++ b/src/libcalamaresui/widgets/PrettyRadioButton.cpp @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2014, Teo Mrnjavac + * SPDX-FileCopyrightText: 2014 Teo Mrnjavac + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/libcalamaresui/widgets/PrettyRadioButton.h b/src/libcalamaresui/widgets/PrettyRadioButton.h index 9c71395260..8b0a3da7d0 100644 --- a/src/libcalamaresui/widgets/PrettyRadioButton.h +++ b/src/libcalamaresui/widgets/PrettyRadioButton.h @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2014, Teo Mrnjavac + * SPDX-FileCopyrightText: 2014 Teo Mrnjavac + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/libcalamaresui/widgets/WaitingWidget.cpp b/src/libcalamaresui/widgets/WaitingWidget.cpp index 1a658b35bf..11b1a10f7d 100644 --- a/src/libcalamaresui/widgets/WaitingWidget.cpp +++ b/src/libcalamaresui/widgets/WaitingWidget.cpp @@ -1,7 +1,8 @@ /* === This file is part of Calamares - === * - * Copyright 2014, Teo Mrnjavac - * Copyright 2017, Adriaan de Groot + * SPDX-FileCopyrightText: 2014 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/libcalamaresui/widgets/WaitingWidget.h b/src/libcalamaresui/widgets/WaitingWidget.h index 0d8b6fd5b6..be375c453f 100644 --- a/src/libcalamaresui/widgets/WaitingWidget.h +++ b/src/libcalamaresui/widgets/WaitingWidget.h @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2014, Teo Mrnjavac + * SPDX-FileCopyrightText: 2014 Teo Mrnjavac + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/qml/calamares/slideshow/BackButton.qml b/src/qml/calamares/slideshow/BackButton.qml index 2d5f4dd5ee..4a51f467e1 100644 --- a/src/qml/calamares/slideshow/BackButton.qml +++ b/src/qml/calamares/slideshow/BackButton.qml @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/qml/calamares/slideshow/ForwardButton.qml b/src/qml/calamares/slideshow/ForwardButton.qml index 9f6fecf8e7..023f0e56b3 100644 --- a/src/qml/calamares/slideshow/ForwardButton.qml +++ b/src/qml/calamares/slideshow/ForwardButton.qml @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/qml/calamares/slideshow/NavButton.qml b/src/qml/calamares/slideshow/NavButton.qml index 33d8cad770..01537d343b 100644 --- a/src/qml/calamares/slideshow/NavButton.qml +++ b/src/qml/calamares/slideshow/NavButton.qml @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -27,14 +28,14 @@ import QtQuick 2.5; Image { id: fade - + property bool isForward : true - + width: 100 height: 100 anchors.verticalCenter: parent.verticalCenter opacity: 0.3 - + OpacityAnimator { id: fadeIn target: fade @@ -43,7 +44,7 @@ Image { duration: 500 running: false } - + OpacityAnimator { id: fadeOut target: fade @@ -52,7 +53,7 @@ Image { duration: 250 running: false } - + MouseArea { anchors.fill: parent hoverEnabled: true diff --git a/src/qml/calamares/slideshow/SlideCounter.qml b/src/qml/calamares/slideshow/SlideCounter.qml index e59476f5c9..7904713317 100644 --- a/src/qml/calamares/slideshow/SlideCounter.qml +++ b/src/qml/calamares/slideshow/SlideCounter.qml @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/qml/calamares/slideshow/qmldir b/src/qml/calamares/slideshow/qmldir index 7b964b831a..8b68d11431 100644 --- a/src/qml/calamares/slideshow/qmldir +++ b/src/qml/calamares/slideshow/qmldir @@ -1,3 +1,6 @@ +/* SPDX-FileCopyrightText: no + SPDX-License-Identifier: CC0-1.0 +*/ module calamares.slideshow Presentation 1.0 Presentation.qml From 4e75ea8bd05f7dda6cc523658765969c27a36e77 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Wed, 26 Aug 2020 00:21:51 +0200 Subject: [PATCH 112/157] REUSE: Add best-effort .license for data/images/ - the commit messages don't mention getting the images from elsewhere, so use the commit date. --- data/images/boot-environment.svg.license | 2 ++ data/images/bugs.svg.license | 2 ++ data/images/fail.svgz.license | 2 ++ data/images/help-donate.svg.license | 2 ++ data/images/help.svg.license | 2 ++ data/images/information.svgz.license | 2 ++ data/images/no.svgz.license | 2 ++ data/images/partition-alongside.svg.license | 2 ++ data/images/partition-disk.svg.license | 2 ++ data/images/partition-erase-auto.svg.license | 2 ++ data/images/partition-manual.svg.license | 2 ++ data/images/partition-partition.svg.license | 2 ++ data/images/partition-replace-os.svg.license | 2 ++ data/images/partition-table.svg.license | 2 ++ data/images/release.svg.license | 2 ++ data/images/squid.png.license | 2 ++ data/images/squid.svg.license | 2 ++ data/images/state-error.svg.license | 2 ++ data/images/state-ok.svg.license | 2 ++ data/images/state-warning.svg.license | 2 ++ data/images/yes.svgz.license | 2 ++ 21 files changed, 42 insertions(+) create mode 100644 data/images/boot-environment.svg.license create mode 100644 data/images/bugs.svg.license create mode 100644 data/images/fail.svgz.license create mode 100644 data/images/help-donate.svg.license create mode 100644 data/images/help.svg.license create mode 100644 data/images/information.svgz.license create mode 100644 data/images/no.svgz.license create mode 100644 data/images/partition-alongside.svg.license create mode 100644 data/images/partition-disk.svg.license create mode 100644 data/images/partition-erase-auto.svg.license create mode 100644 data/images/partition-manual.svg.license create mode 100644 data/images/partition-partition.svg.license create mode 100644 data/images/partition-replace-os.svg.license create mode 100644 data/images/partition-table.svg.license create mode 100644 data/images/release.svg.license create mode 100644 data/images/squid.png.license create mode 100644 data/images/squid.svg.license create mode 100644 data/images/state-error.svg.license create mode 100644 data/images/state-ok.svg.license create mode 100644 data/images/state-warning.svg.license create mode 100644 data/images/yes.svgz.license diff --git a/data/images/boot-environment.svg.license b/data/images/boot-environment.svg.license new file mode 100644 index 0000000000..ea82645713 --- /dev/null +++ b/data/images/boot-environment.svg.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: 2015 Teo Mrnjavac +SPDX-License-Identifier: GPL-3.0-or-later diff --git a/data/images/bugs.svg.license b/data/images/bugs.svg.license new file mode 100644 index 0000000000..ea82645713 --- /dev/null +++ b/data/images/bugs.svg.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: 2015 Teo Mrnjavac +SPDX-License-Identifier: GPL-3.0-or-later diff --git a/data/images/fail.svgz.license b/data/images/fail.svgz.license new file mode 100644 index 0000000000..cc08e1f9f1 --- /dev/null +++ b/data/images/fail.svgz.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: 2014 Teo Mrnjavac +SPDX-License-Identifier: GPL-3.0-or-later diff --git a/data/images/help-donate.svg.license b/data/images/help-donate.svg.license new file mode 100644 index 0000000000..ef0e9d7cdc --- /dev/null +++ b/data/images/help-donate.svg.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: 2014 Uri Herrera and others +SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/data/images/help.svg.license b/data/images/help.svg.license new file mode 100644 index 0000000000..ea82645713 --- /dev/null +++ b/data/images/help.svg.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: 2015 Teo Mrnjavac +SPDX-License-Identifier: GPL-3.0-or-later diff --git a/data/images/information.svgz.license b/data/images/information.svgz.license new file mode 100644 index 0000000000..cc08e1f9f1 --- /dev/null +++ b/data/images/information.svgz.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: 2014 Teo Mrnjavac +SPDX-License-Identifier: GPL-3.0-or-later diff --git a/data/images/no.svgz.license b/data/images/no.svgz.license new file mode 100644 index 0000000000..cc08e1f9f1 --- /dev/null +++ b/data/images/no.svgz.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: 2014 Teo Mrnjavac +SPDX-License-Identifier: GPL-3.0-or-later diff --git a/data/images/partition-alongside.svg.license b/data/images/partition-alongside.svg.license new file mode 100644 index 0000000000..ea82645713 --- /dev/null +++ b/data/images/partition-alongside.svg.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: 2015 Teo Mrnjavac +SPDX-License-Identifier: GPL-3.0-or-later diff --git a/data/images/partition-disk.svg.license b/data/images/partition-disk.svg.license new file mode 100644 index 0000000000..ea82645713 --- /dev/null +++ b/data/images/partition-disk.svg.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: 2015 Teo Mrnjavac +SPDX-License-Identifier: GPL-3.0-or-later diff --git a/data/images/partition-erase-auto.svg.license b/data/images/partition-erase-auto.svg.license new file mode 100644 index 0000000000..ea82645713 --- /dev/null +++ b/data/images/partition-erase-auto.svg.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: 2015 Teo Mrnjavac +SPDX-License-Identifier: GPL-3.0-or-later diff --git a/data/images/partition-manual.svg.license b/data/images/partition-manual.svg.license new file mode 100644 index 0000000000..ea82645713 --- /dev/null +++ b/data/images/partition-manual.svg.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: 2015 Teo Mrnjavac +SPDX-License-Identifier: GPL-3.0-or-later diff --git a/data/images/partition-partition.svg.license b/data/images/partition-partition.svg.license new file mode 100644 index 0000000000..ea82645713 --- /dev/null +++ b/data/images/partition-partition.svg.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: 2015 Teo Mrnjavac +SPDX-License-Identifier: GPL-3.0-or-later diff --git a/data/images/partition-replace-os.svg.license b/data/images/partition-replace-os.svg.license new file mode 100644 index 0000000000..ea82645713 --- /dev/null +++ b/data/images/partition-replace-os.svg.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: 2015 Teo Mrnjavac +SPDX-License-Identifier: GPL-3.0-or-later diff --git a/data/images/partition-table.svg.license b/data/images/partition-table.svg.license new file mode 100644 index 0000000000..ea82645713 --- /dev/null +++ b/data/images/partition-table.svg.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: 2015 Teo Mrnjavac +SPDX-License-Identifier: GPL-3.0-or-later diff --git a/data/images/release.svg.license b/data/images/release.svg.license new file mode 100644 index 0000000000..ea82645713 --- /dev/null +++ b/data/images/release.svg.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: 2015 Teo Mrnjavac +SPDX-License-Identifier: GPL-3.0-or-later diff --git a/data/images/squid.png.license b/data/images/squid.png.license new file mode 100644 index 0000000000..cc08e1f9f1 --- /dev/null +++ b/data/images/squid.png.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: 2014 Teo Mrnjavac +SPDX-License-Identifier: GPL-3.0-or-later diff --git a/data/images/squid.svg.license b/data/images/squid.svg.license new file mode 100644 index 0000000000..cc08e1f9f1 --- /dev/null +++ b/data/images/squid.svg.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: 2014 Teo Mrnjavac +SPDX-License-Identifier: GPL-3.0-or-later diff --git a/data/images/state-error.svg.license b/data/images/state-error.svg.license new file mode 100644 index 0000000000..ef0e9d7cdc --- /dev/null +++ b/data/images/state-error.svg.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: 2014 Uri Herrera and others +SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/data/images/state-ok.svg.license b/data/images/state-ok.svg.license new file mode 100644 index 0000000000..ef0e9d7cdc --- /dev/null +++ b/data/images/state-ok.svg.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: 2014 Uri Herrera and others +SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/data/images/state-warning.svg.license b/data/images/state-warning.svg.license new file mode 100644 index 0000000000..ef0e9d7cdc --- /dev/null +++ b/data/images/state-warning.svg.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: 2014 Uri Herrera and others +SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/data/images/yes.svgz.license b/data/images/yes.svgz.license new file mode 100644 index 0000000000..cc08e1f9f1 --- /dev/null +++ b/data/images/yes.svgz.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: 2014 Teo Mrnjavac +SPDX-License-Identifier: GPL-3.0-or-later From 1a557804ab613c5cac21152f35ac74f7b103b233 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Tue, 25 Aug 2020 13:04:50 +0200 Subject: [PATCH 113/157] REUSE: Remainder of data/ - *AppImage example config*: this is old AppImage configuration, basically unmaintained, but copied from the **other** example config files which are CC0-1.0 as well. - *Sample Linux distro*: The example Linux distro has a handful of trivial files, a bogus `/etc/issue`, that kind of thing. - The bash completions are GPL-3.0-or-later - FreeBSD packaging information is BSD-2-Clause --- data/FreeBSD/Makefile | 3 + data/completion/bash/calamares | 3 +- .../branding/default/squid.png.license | 2 + .../modules/displaymanager.conf | 3 + data/config-appimage/modules/finished.conf | 3 + data/config-appimage/modules/keyboard.conf | 3 + data/config-appimage/modules/locale.conf | 3 + data/config-appimage/modules/users.conf | 3 + data/config-appimage/modules/welcome.conf | 3 + data/config-appimage/settings.conf | 3 + data/example-root/README.md | 4 + data/example-root/etc/bash.bashrc | 3 + data/example-root/etc/group | 3 + data/example-root/etc/issue | 3 + data/example-root/etc/locale.gen | 482 +----------------- data/example-root/etc/profile | 3 + data/example-root/xbin/linux-version | 4 + data/example-root/xbin/useradd | 4 + 18 files changed, 55 insertions(+), 480 deletions(-) create mode 100644 data/config-appimage/branding/default/squid.png.license diff --git a/data/FreeBSD/Makefile b/data/FreeBSD/Makefile index 520a056389..d9b7e50436 100644 --- a/data/FreeBSD/Makefile +++ b/data/FreeBSD/Makefile @@ -1,4 +1,7 @@ # $FreeBSD$ +# +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause PORTNAME= calamares DISTVERSION= 3.2.25 diff --git a/data/completion/bash/calamares b/data/completion/bash/calamares index 47c2bb2689..21f2edba47 100644 --- a/data/completion/bash/calamares +++ b/data/completion/bash/calamares @@ -1,6 +1,7 @@ # === This file is part of Calamares - === # -# Copyright 2020, Gaël PORTAY +# SPDX-FileCopyrightText: 2020 Gaël PORTAY +# SPDX-License-Identifier: GPL-3.0-or-later # # Calamares is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff --git a/data/config-appimage/branding/default/squid.png.license b/data/config-appimage/branding/default/squid.png.license new file mode 100644 index 0000000000..cc08e1f9f1 --- /dev/null +++ b/data/config-appimage/branding/default/squid.png.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: 2014 Teo Mrnjavac +SPDX-License-Identifier: GPL-3.0-or-later diff --git a/data/config-appimage/modules/displaymanager.conf b/data/config-appimage/modules/displaymanager.conf index 8f8e9c704f..5c95546023 100644 --- a/data/config-appimage/modules/displaymanager.conf +++ b/data/config-appimage/modules/displaymanager.conf @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# # Configure one or more display managers (e.g. SDDM) # with a "best effort" approach. --- diff --git a/data/config-appimage/modules/finished.conf b/data/config-appimage/modules/finished.conf index 48bbdc031a..f0280ef58a 100644 --- a/data/config-appimage/modules/finished.conf +++ b/data/config-appimage/modules/finished.conf @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# # Configuration for the "finished" page, which is usually shown only at # the end of the installation (successful or not). --- diff --git a/data/config-appimage/modules/keyboard.conf b/data/config-appimage/modules/keyboard.conf index ee97c39394..d122f30d78 100644 --- a/data/config-appimage/modules/keyboard.conf +++ b/data/config-appimage/modules/keyboard.conf @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# # NOTE: you must have ckbcomp installed and runnable # on the live system, for keyboard layout previews. --- diff --git a/data/config-appimage/modules/locale.conf b/data/config-appimage/modules/locale.conf index 8ae016279f..5e8aa3ab5f 100644 --- a/data/config-appimage/modules/locale.conf +++ b/data/config-appimage/modules/locale.conf @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# --- # This settings are used to set your default system time zone. # Time zones are usually located under /usr/share/zoneinfo and diff --git a/data/config-appimage/modules/users.conf b/data/config-appimage/modules/users.conf index bdf8128786..4d9cc4394f 100644 --- a/data/config-appimage/modules/users.conf +++ b/data/config-appimage/modules/users.conf @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# # Configuration for the one-user-system user module. # # Besides these settings, the user module also places the following diff --git a/data/config-appimage/modules/welcome.conf b/data/config-appimage/modules/welcome.conf index 0cfb595464..2978010b74 100644 --- a/data/config-appimage/modules/welcome.conf +++ b/data/config-appimage/modules/welcome.conf @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# # Configuration for the welcome module. The welcome page # displays some information from the branding file. # Which parts it displays can be configured through diff --git a/data/config-appimage/settings.conf b/data/config-appimage/settings.conf index 7567104924..defef0b44b 100644 --- a/data/config-appimage/settings.conf +++ b/data/config-appimage/settings.conf @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# # Configuration file for Calamares # Syntax is YAML 1.2 --- diff --git a/data/example-root/README.md b/data/example-root/README.md index 7173b3eaff..9d89872869 100644 --- a/data/example-root/README.md +++ b/data/example-root/README.md @@ -1,5 +1,9 @@ # Example Filesystem + + This is a filesystem that will be used as / in an example distro, *if* you build the `example-distro` target and use the default unpackfs configuration. It should hold files and configuration diff --git a/data/example-root/etc/bash.bashrc b/data/example-root/etc/bash.bashrc index 42bd3d007c..7de2a283df 100644 --- a/data/example-root/etc/bash.bashrc +++ b/data/example-root/etc/bash.bashrc @@ -1,2 +1,5 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# # Global .profile -- add /sbin_1 PATH=$PATH:/sbin_1:/xbin diff --git a/data/example-root/etc/group b/data/example-root/etc/group index 1dbf9013ee..3130ae3e80 100644 --- a/data/example-root/etc/group +++ b/data/example-root/etc/group @@ -1 +1,4 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# root:x:0: diff --git a/data/example-root/etc/issue b/data/example-root/etc/issue index ce0ac58e36..22cce578e3 100644 --- a/data/example-root/etc/issue +++ b/data/example-root/etc/issue @@ -1 +1,4 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# This is an example /etc/issue file. diff --git a/data/example-root/etc/locale.gen b/data/example-root/etc/locale.gen index 5e729a18dc..e2df1eaef1 100644 --- a/data/example-root/etc/locale.gen +++ b/data/example-root/etc/locale.gen @@ -1,486 +1,10 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# # This file lists locales that you wish to have built. You can find a list # of valid supported locales at /usr/share/i18n/SUPPORTED, and you can add # user defined locales to /usr/local/share/i18n/SUPPORTED. If you change # this file, you need to rerun locale-gen. - -# aa_DJ ISO-8859-1 -# aa_DJ.UTF-8 UTF-8 -# aa_ER UTF-8 -# aa_ER@saaho UTF-8 -# aa_ET UTF-8 -# af_ZA ISO-8859-1 -# af_ZA.UTF-8 UTF-8 -# ak_GH UTF-8 -# am_ET UTF-8 -# an_ES ISO-8859-15 -# an_ES.UTF-8 UTF-8 -# anp_IN UTF-8 -# ar_AE ISO-8859-6 -# ar_AE.UTF-8 UTF-8 -# ar_BH ISO-8859-6 -# ar_BH.UTF-8 UTF-8 -# ar_DZ ISO-8859-6 -# ar_DZ.UTF-8 UTF-8 -# ar_EG ISO-8859-6 -# ar_EG.UTF-8 UTF-8 -# ar_IN UTF-8 -# ar_IQ ISO-8859-6 -# ar_IQ.UTF-8 UTF-8 -# ar_JO ISO-8859-6 -# ar_JO.UTF-8 UTF-8 -# ar_KW ISO-8859-6 -# ar_KW.UTF-8 UTF-8 -# ar_LB ISO-8859-6 -# ar_LB.UTF-8 UTF-8 -# ar_LY ISO-8859-6 -# ar_LY.UTF-8 UTF-8 -# ar_MA ISO-8859-6 -# ar_MA.UTF-8 UTF-8 -# ar_OM ISO-8859-6 -# ar_OM.UTF-8 UTF-8 -# ar_QA ISO-8859-6 -# ar_QA.UTF-8 UTF-8 -# ar_SA ISO-8859-6 -# ar_SA.UTF-8 UTF-8 -# ar_SD ISO-8859-6 -# ar_SD.UTF-8 UTF-8 -# ar_SS UTF-8 -# ar_SY ISO-8859-6 -# ar_SY.UTF-8 UTF-8 -# ar_TN ISO-8859-6 -# ar_TN.UTF-8 UTF-8 -# ar_YE ISO-8859-6 -# ar_YE.UTF-8 UTF-8 -# as_IN UTF-8 -# ast_ES ISO-8859-15 -# ast_ES.UTF-8 UTF-8 -# ayc_PE UTF-8 -# az_AZ UTF-8 -# be_BY CP1251 -# be_BY.UTF-8 UTF-8 -# be_BY@latin UTF-8 -# bem_ZM UTF-8 -# ber_DZ UTF-8 -# ber_MA UTF-8 -# bg_BG CP1251 -# bg_BG.UTF-8 UTF-8 -# bhb_IN.UTF-8 UTF-8 -# bho_IN UTF-8 -# bn_BD UTF-8 -# bn_IN UTF-8 -# bo_CN UTF-8 -# bo_IN UTF-8 -# br_FR ISO-8859-1 -# br_FR.UTF-8 UTF-8 -# br_FR@euro ISO-8859-15 -# brx_IN UTF-8 -# bs_BA ISO-8859-2 -# bs_BA.UTF-8 UTF-8 -# byn_ER UTF-8 -# ca_AD ISO-8859-15 -# ca_AD.UTF-8 UTF-8 -# ca_ES ISO-8859-1 -# ca_ES.UTF-8 UTF-8 -# ca_ES.UTF-8@valencia UTF-8 -# ca_ES@euro ISO-8859-15 -# ca_ES@valencia ISO-8859-15 -# ca_FR ISO-8859-15 -# ca_FR.UTF-8 UTF-8 -# ca_IT ISO-8859-15 -# ca_IT.UTF-8 UTF-8 -# ce_RU UTF-8 -# ckb_IQ UTF-8 -# cmn_TW UTF-8 -# crh_UA UTF-8 -# cs_CZ ISO-8859-2 -# cs_CZ.UTF-8 UTF-8 -# csb_PL UTF-8 -# cv_RU UTF-8 -# cy_GB ISO-8859-14 -# cy_GB.UTF-8 UTF-8 -# da_DK ISO-8859-1 -# da_DK.UTF-8 UTF-8 -# de_AT ISO-8859-1 -# de_AT.UTF-8 UTF-8 -# de_AT@euro ISO-8859-15 -# de_BE ISO-8859-1 -# de_BE.UTF-8 UTF-8 -# de_BE@euro ISO-8859-15 -# de_CH ISO-8859-1 -# de_CH.UTF-8 UTF-8 -# de_DE ISO-8859-1 -# de_DE.UTF-8 UTF-8 -# de_DE@euro ISO-8859-15 -# de_LI.UTF-8 UTF-8 -# de_LU ISO-8859-1 -# de_LU.UTF-8 UTF-8 -# de_LU@euro ISO-8859-15 -# doi_IN UTF-8 -# dv_MV UTF-8 -# dz_BT UTF-8 -# el_CY ISO-8859-7 -# el_CY.UTF-8 UTF-8 -# el_GR ISO-8859-7 -# el_GR.UTF-8 UTF-8 -# en_AG UTF-8 -# en_AU ISO-8859-1 -# en_AU.UTF-8 UTF-8 -# en_BW ISO-8859-1 -# en_BW.UTF-8 UTF-8 -# en_CA ISO-8859-1 en_CA.UTF-8 UTF-8 -# en_DK ISO-8859-1 -# en_DK.ISO-8859-15 ISO-8859-15 -# en_DK.UTF-8 UTF-8 -# en_GB ISO-8859-1 -# en_GB.ISO-8859-15 ISO-8859-15 -# en_GB.UTF-8 UTF-8 -# en_HK ISO-8859-1 -# en_HK.UTF-8 UTF-8 -# en_IE ISO-8859-1 -# en_IE.UTF-8 UTF-8 -# en_IE@euro ISO-8859-15 -# en_IN UTF-8 -# en_NG UTF-8 -# en_NZ ISO-8859-1 -# en_NZ.UTF-8 UTF-8 -# en_PH ISO-8859-1 -# en_PH.UTF-8 UTF-8 -# en_SG ISO-8859-1 -# en_SG.UTF-8 UTF-8 -# en_US ISO-8859-1 -# en_US.ISO-8859-15 ISO-8859-15 en_US.UTF-8 UTF-8 -# en_ZA ISO-8859-1 -# en_ZA.UTF-8 UTF-8 -# en_ZM UTF-8 -# en_ZW ISO-8859-1 -# en_ZW.UTF-8 UTF-8 -# eo ISO-8859-3 -# eo.UTF-8 UTF-8 -# eo_US.UTF-8 UTF-8 -# es_AR ISO-8859-1 -# es_AR.UTF-8 UTF-8 -# es_BO ISO-8859-1 -# es_BO.UTF-8 UTF-8 -# es_CL ISO-8859-1 -# es_CL.UTF-8 UTF-8 -# es_CO ISO-8859-1 -# es_CO.UTF-8 UTF-8 -# es_CR ISO-8859-1 -# es_CR.UTF-8 UTF-8 -# es_CU UTF-8 -# es_DO ISO-8859-1 -# es_DO.UTF-8 UTF-8 -# es_EC ISO-8859-1 -# es_EC.UTF-8 UTF-8 -# es_ES ISO-8859-1 -# es_ES.UTF-8 UTF-8 -# es_ES@euro ISO-8859-15 -# es_GT ISO-8859-1 -# es_GT.UTF-8 UTF-8 -# es_HN ISO-8859-1 -# es_HN.UTF-8 UTF-8 -# es_MX ISO-8859-1 -# es_MX.UTF-8 UTF-8 -# es_NI ISO-8859-1 -# es_NI.UTF-8 UTF-8 -# es_PA ISO-8859-1 -# es_PA.UTF-8 UTF-8 -# es_PE ISO-8859-1 -# es_PE.UTF-8 UTF-8 -# es_PR ISO-8859-1 -# es_PR.UTF-8 UTF-8 -# es_PY ISO-8859-1 -# es_PY.UTF-8 UTF-8 -# es_SV ISO-8859-1 -# es_SV.UTF-8 UTF-8 -# es_US ISO-8859-1 -# es_US.UTF-8 UTF-8 -# es_UY ISO-8859-1 -# es_UY.UTF-8 UTF-8 -# es_VE ISO-8859-1 -# es_VE.UTF-8 UTF-8 -# et_EE ISO-8859-1 -# et_EE.ISO-8859-15 ISO-8859-15 -# et_EE.UTF-8 UTF-8 -# eu_ES ISO-8859-1 -# eu_ES.UTF-8 UTF-8 -# eu_ES@euro ISO-8859-15 -# eu_FR ISO-8859-1 -# eu_FR.UTF-8 UTF-8 -# eu_FR@euro ISO-8859-15 -# fa_IR UTF-8 -# ff_SN UTF-8 -# fi_FI ISO-8859-1 -# fi_FI.UTF-8 UTF-8 -# fi_FI@euro ISO-8859-15 -# fil_PH UTF-8 -# fo_FO ISO-8859-1 -# fo_FO.UTF-8 UTF-8 -# fr_BE ISO-8859-1 -# fr_BE.UTF-8 UTF-8 -# fr_BE@euro ISO-8859-15 -# fr_CA ISO-8859-1 -# fr_CA.UTF-8 UTF-8 -# fr_CH ISO-8859-1 -# fr_CH.UTF-8 UTF-8 -# fr_FR ISO-8859-1 -# fr_FR.UTF-8 UTF-8 -# fr_FR@euro ISO-8859-15 -# fr_LU ISO-8859-1 -# fr_LU.UTF-8 UTF-8 -# fr_LU@euro ISO-8859-15 -# fur_IT UTF-8 -# fy_DE UTF-8 -# fy_NL UTF-8 -# ga_IE ISO-8859-1 -# ga_IE.UTF-8 UTF-8 -# ga_IE@euro ISO-8859-15 -# gd_GB ISO-8859-15 -# gd_GB.UTF-8 UTF-8 -# gez_ER UTF-8 -# gez_ER@abegede UTF-8 -# gez_ET UTF-8 -# gez_ET@abegede UTF-8 -# gl_ES ISO-8859-1 -# gl_ES.UTF-8 UTF-8 -# gl_ES@euro ISO-8859-15 -# gu_IN UTF-8 -# gv_GB ISO-8859-1 -# gv_GB.UTF-8 UTF-8 -# ha_NG UTF-8 -# hak_TW UTF-8 -# he_IL ISO-8859-8 -# he_IL.UTF-8 UTF-8 -# hi_IN UTF-8 -# hne_IN UTF-8 -# hr_HR ISO-8859-2 -# hr_HR.UTF-8 UTF-8 -# hsb_DE ISO-8859-2 -# hsb_DE.UTF-8 UTF-8 -# ht_HT UTF-8 -# hu_HU ISO-8859-2 -# hu_HU.UTF-8 UTF-8 -# hy_AM UTF-8 -# hy_AM.ARMSCII-8 ARMSCII-8 -# ia_FR UTF-8 -# id_ID ISO-8859-1 -# id_ID.UTF-8 UTF-8 -# ig_NG UTF-8 -# ik_CA UTF-8 -# is_IS ISO-8859-1 -# is_IS.UTF-8 UTF-8 -# it_CH ISO-8859-1 -# it_CH.UTF-8 UTF-8 -# it_IT ISO-8859-1 -# it_IT.UTF-8 UTF-8 -# it_IT@euro ISO-8859-15 -# iu_CA UTF-8 -# iw_IL ISO-8859-8 -# iw_IL.UTF-8 UTF-8 -# ja_JP.EUC-JP EUC-JP -# ja_JP.UTF-8 UTF-8 -# ka_GE GEORGIAN-PS -# ka_GE.UTF-8 UTF-8 -# kk_KZ PT154 -# kk_KZ RK1048 -# kk_KZ.UTF-8 UTF-8 -# kl_GL ISO-8859-1 -# kl_GL.UTF-8 UTF-8 -# km_KH UTF-8 -# kn_IN UTF-8 -# ko_KR.EUC-KR EUC-KR -# ko_KR.UTF-8 UTF-8 -# kok_IN UTF-8 -# ks_IN UTF-8 -# ks_IN@devanagari UTF-8 -# ku_TR ISO-8859-9 -# ku_TR.UTF-8 UTF-8 -# kw_GB ISO-8859-1 -# kw_GB.UTF-8 UTF-8 -# ky_KG UTF-8 -# lb_LU UTF-8 -# lg_UG ISO-8859-10 -# lg_UG.UTF-8 UTF-8 -# li_BE UTF-8 -# li_NL UTF-8 -# lij_IT UTF-8 -# ln_CD UTF-8 -# lo_LA UTF-8 -# lt_LT ISO-8859-13 -# lt_LT.UTF-8 UTF-8 -# lv_LV ISO-8859-13 -# lv_LV.UTF-8 UTF-8 -# lzh_TW UTF-8 -# mag_IN UTF-8 -# mai_IN UTF-8 -# mg_MG ISO-8859-15 -# mg_MG.UTF-8 UTF-8 -# mhr_RU UTF-8 -# mi_NZ ISO-8859-13 -# mi_NZ.UTF-8 UTF-8 -# mk_MK ISO-8859-5 -# mk_MK.UTF-8 UTF-8 -# ml_IN UTF-8 -# mn_MN UTF-8 -# mni_IN UTF-8 -# mr_IN UTF-8 -# ms_MY ISO-8859-1 -# ms_MY.UTF-8 UTF-8 -# mt_MT ISO-8859-3 -# mt_MT.UTF-8 UTF-8 -# my_MM UTF-8 -# nan_TW UTF-8 -# nan_TW@latin UTF-8 -# nb_NO ISO-8859-1 -# nb_NO.UTF-8 UTF-8 -# nds_DE UTF-8 -# nds_NL UTF-8 -# ne_NP UTF-8 -# nhn_MX UTF-8 -# niu_NU UTF-8 -# niu_NZ UTF-8 -# nl_AW UTF-8 -# nl_BE ISO-8859-1 -# nl_BE.UTF-8 UTF-8 -# nl_BE@euro ISO-8859-15 -# nl_NL ISO-8859-1 -# nl_NL.UTF-8 UTF-8 -# nl_NL@euro ISO-8859-15 -# nn_NO ISO-8859-1 -# nn_NO.UTF-8 UTF-8 -# nr_ZA UTF-8 -# nso_ZA UTF-8 -# oc_FR ISO-8859-1 -# oc_FR.UTF-8 UTF-8 -# om_ET UTF-8 -# om_KE ISO-8859-1 -# om_KE.UTF-8 UTF-8 -# or_IN UTF-8 -# os_RU UTF-8 -# pa_IN UTF-8 -# pa_PK UTF-8 -# pap_AN UTF-8 -# pap_AW UTF-8 -# pap_CW UTF-8 -# pl_PL ISO-8859-2 -# pl_PL.UTF-8 UTF-8 -# ps_AF UTF-8 -# pt_BR ISO-8859-1 -# pt_BR.UTF-8 UTF-8 -# pt_PT ISO-8859-1 -# pt_PT.UTF-8 UTF-8 -# pt_PT@euro ISO-8859-15 -# quz_PE UTF-8 -# raj_IN UTF-8 -# ro_RO ISO-8859-2 -# ro_RO.UTF-8 UTF-8 -# ru_RU ISO-8859-5 -# ru_RU.CP1251 CP1251 -# ru_RU.KOI8-R KOI8-R -# ru_RU.UTF-8 UTF-8 -# ru_UA KOI8-U -# ru_UA.UTF-8 UTF-8 -# rw_RW UTF-8 -# sa_IN UTF-8 -# sat_IN UTF-8 -# sc_IT UTF-8 -# sd_IN UTF-8 -# sd_IN@devanagari UTF-8 -# sd_PK UTF-8 -# se_NO UTF-8 -# shs_CA UTF-8 -# si_LK UTF-8 -# sid_ET UTF-8 -# sk_SK ISO-8859-2 -# sk_SK.UTF-8 UTF-8 -# sl_SI ISO-8859-2 -# sl_SI.UTF-8 UTF-8 -# so_DJ ISO-8859-1 -# so_DJ.UTF-8 UTF-8 -# so_ET UTF-8 -# so_KE ISO-8859-1 -# so_KE.UTF-8 UTF-8 -# so_SO ISO-8859-1 -# so_SO.UTF-8 UTF-8 -# sq_AL ISO-8859-1 -# sq_AL.UTF-8 UTF-8 -# sq_MK UTF-8 -# sr_ME UTF-8 -# sr_RS UTF-8 -# sr_RS@latin UTF-8 -# ss_ZA UTF-8 -# st_ZA ISO-8859-1 -# st_ZA.UTF-8 UTF-8 -# sv_FI ISO-8859-1 -# sv_FI.UTF-8 UTF-8 -# sv_FI@euro ISO-8859-15 -# sv_SE ISO-8859-1 -# sv_SE.ISO-8859-15 ISO-8859-15 -# sv_SE.UTF-8 UTF-8 -# sw_KE UTF-8 -# sw_TZ UTF-8 -# szl_PL UTF-8 -# ta_IN UTF-8 -# ta_LK UTF-8 -# tcy_IN.UTF-8 UTF-8 -# te_IN UTF-8 -# tg_TJ KOI8-T -# tg_TJ.UTF-8 UTF-8 -# th_TH TIS-620 -# th_TH.UTF-8 UTF-8 -# the_NP UTF-8 -# ti_ER UTF-8 -# ti_ET UTF-8 -# tig_ER UTF-8 -# tk_TM UTF-8 -# tl_PH ISO-8859-1 -# tl_PH.UTF-8 UTF-8 -# tn_ZA UTF-8 -# tr_CY ISO-8859-9 -# tr_CY.UTF-8 UTF-8 -# tr_TR ISO-8859-9 -# tr_TR.UTF-8 UTF-8 -# ts_ZA UTF-8 -# tt_RU UTF-8 -# tt_RU@iqtelif UTF-8 -# ug_CN UTF-8 -# ug_CN@latin UTF-8 -# uk_UA KOI8-U -# uk_UA.UTF-8 UTF-8 -# unm_US UTF-8 -# ur_IN UTF-8 -# ur_PK UTF-8 -# uz_UZ ISO-8859-1 -# uz_UZ.UTF-8 UTF-8 -# uz_UZ@cyrillic UTF-8 -# ve_ZA UTF-8 -# vi_VN UTF-8 -# wa_BE ISO-8859-1 -# wa_BE.UTF-8 UTF-8 -# wa_BE@euro ISO-8859-15 -# wae_CH UTF-8 -# wal_ET UTF-8 -# wo_SN UTF-8 -# xh_ZA ISO-8859-1 -# xh_ZA.UTF-8 UTF-8 -# yi_US CP1255 -# yi_US.UTF-8 UTF-8 -# yo_NG UTF-8 -# yue_HK UTF-8 -# zh_CN GB2312 -# zh_CN.GB18030 GB18030 -# zh_CN.GBK GBK -# zh_CN.UTF-8 UTF-8 -# zh_HK BIG5-HKSCS -# zh_HK.UTF-8 UTF-8 -# zh_SG GB2312 -# zh_SG.GBK GBK -# zh_SG.UTF-8 UTF-8 -# zh_TW BIG5 -# zh_TW.EUC-TW EUC-TW -# zh_TW.UTF-8 UTF-8 -# zu_ZA ISO-8859-1 -# zu_ZA.UTF-8 UTF-8 diff --git a/data/example-root/etc/profile b/data/example-root/etc/profile index 42bd3d007c..7de2a283df 100644 --- a/data/example-root/etc/profile +++ b/data/example-root/etc/profile @@ -1,2 +1,5 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# # Global .profile -- add /sbin_1 PATH=$PATH:/sbin_1:/xbin diff --git a/data/example-root/xbin/linux-version b/data/example-root/xbin/linux-version index 3e91d53334..87b040d348 100755 --- a/data/example-root/xbin/linux-version +++ b/data/example-root/xbin/linux-version @@ -1 +1,5 @@ #! /bin/true +# +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# diff --git a/data/example-root/xbin/useradd b/data/example-root/xbin/useradd index 3e91d53334..87b040d348 100755 --- a/data/example-root/xbin/useradd +++ b/data/example-root/xbin/useradd @@ -1 +1,5 @@ #! /bin/true +# +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# From 92a6cbc77315c1b38f61f8e02cbd2396d3c4f036 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Wed, 26 Aug 2020 00:49:48 +0200 Subject: [PATCH 114/157] REUSE: (CC0-1.0) generated files & PD files - the translations generated from public-domain files are CC0-1.0 - the files derived from Unicode tables are close to CC0-1.0, possibly except that there is a FileCopyrightText line --- lang/tz_en.ts | 3 +++ lang/tz_nl.ts | 3 +++ lang/tz_sv.ts | 6 +++++- lang/tz_uk.ts | 3 +++ src/libcalamares/locale/CountryData_p.cpp | 2 +- src/libcalamares/locale/ZoneData_p.cxxtr | 2 +- src/libcalamares/locale/zone-extractor.py | 2 +- 7 files changed, 17 insertions(+), 4 deletions(-) diff --git a/lang/tz_en.ts b/lang/tz_en.ts index ba9b5a3506..cbd037f32a 100644 --- a/lang/tz_en.ts +++ b/lang/tz_en.ts @@ -1,4 +1,7 @@ + diff --git a/lang/tz_nl.ts b/lang/tz_nl.ts index e1eb8d1e58..ed501dd674 100644 --- a/lang/tz_nl.ts +++ b/lang/tz_nl.ts @@ -1,4 +1,7 @@ + diff --git a/lang/tz_sv.ts b/lang/tz_sv.ts index 98d9b83c37..c871dbac56 100644 --- a/lang/tz_sv.ts +++ b/lang/tz_sv.ts @@ -1,4 +1,8 @@ - + + + QObject diff --git a/lang/tz_uk.ts b/lang/tz_uk.ts index 6059079cab..ced3e5b80a 100644 --- a/lang/tz_uk.ts +++ b/lang/tz_uk.ts @@ -1,4 +1,7 @@ + diff --git a/src/libcalamares/locale/CountryData_p.cpp b/src/libcalamares/locale/CountryData_p.cpp index 722ee2ba9b..61b9b05a7e 100644 --- a/src/libcalamares/locale/CountryData_p.cpp +++ b/src/libcalamares/locale/CountryData_p.cpp @@ -4,7 +4,7 @@ * * SPDX-FileCopyrightText: 1991-2019 Unicode, Inc. * SPDX-FileCopyrightText: 2019 Adriaan de Groot -* SPDX-License-Identifier: CC0 +* SPDX-License-Identifier: CC0-1.0 * * This file is derived from CLDR data from Unicode, Inc. Applicable terms * are listed at http://unicode.org/copyright.html , of which the most diff --git a/src/libcalamares/locale/ZoneData_p.cxxtr b/src/libcalamares/locale/ZoneData_p.cxxtr index 7bbcdf7f68..c59c60dbb3 100644 --- a/src/libcalamares/locale/ZoneData_p.cxxtr +++ b/src/libcalamares/locale/ZoneData_p.cxxtr @@ -2,7 +2,7 @@ * * SPDX-FileCopyrightText: 2009 Arthur David Olson * SPDX-FileCopyrightText: 2019 Adriaan de Groot -* SPDX-License-Identifier: CC0 +* SPDX-License-Identifier: CC0-1.0 * * This file is derived from zone.tab, which has its own copyright statement: * diff --git a/src/libcalamares/locale/zone-extractor.py b/src/libcalamares/locale/zone-extractor.py index 3f08df9d8d..aa8063522c 100644 --- a/src/libcalamares/locale/zone-extractor.py +++ b/src/libcalamares/locale/zone-extractor.py @@ -48,7 +48,7 @@ def write_set(file, label, set): * * SPDX-FileCopyrightText: 2009 Arthur David Olson * SPDX-FileCopyrightText: 2019 Adriaan de Groot -* SPDX-License-Identifier: CC0 +* SPDX-License-Identifier: CC0-1.0 * * This file is derived from zone.tab, which has its own copyright statement: * From 1b23520f2020f4cf5ca189ef51f6503d57445f8e Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Fri, 21 Aug 2020 19:54:36 +0200 Subject: [PATCH 115/157] REUSE: (CC0-1.0) module descriptors and configuration files In spite of there being considerable documentation sometimes in the config file, we go with CC0 because we don't want the notion of 'derived work' of a config file. The example `settings.conf` is also CC0. Add some docs to it while we're at it. --- settings.conf | 11 ++++++++++- src/modules/bootloader/bootloader.conf | 3 +++ src/modules/bootloader/module.desc | 2 ++ src/modules/contextualprocess/contextualprocess.conf | 3 +++ src/modules/displaymanager/displaymanager.conf | 3 +++ src/modules/displaymanager/module.desc | 2 ++ src/modules/dracut/module.desc | 2 ++ src/modules/dummycpp/dummycpp.conf | 3 +++ src/modules/dummycpp/module.desc | 2 ++ src/modules/dummyprocess/module.desc | 2 ++ src/modules/dummypython/dummypython.conf | 3 +++ src/modules/dummypython/module.desc | 2 ++ src/modules/dummypythonqt/dummypythonqt.conf | 3 +++ src/modules/dummypythonqt/module.desc | 2 ++ src/modules/finished/finished.conf | 3 +++ src/modules/fsresizer/fsresizer.conf | 3 +++ src/modules/fstab/fstab.conf | 3 +++ src/modules/fstab/module.desc | 2 ++ src/modules/grubcfg/grubcfg.conf | 3 +++ src/modules/grubcfg/module.desc | 2 ++ src/modules/hwclock/module.desc | 2 ++ src/modules/initcpio/initcpio.conf | 3 +++ src/modules/initcpiocfg/module.desc | 2 ++ src/modules/initramfs/initramfs.conf | 3 +++ src/modules/initramfscfg/module.desc | 2 ++ .../interactiveterminal/interactiveterminal.conf | 3 +++ src/modules/keyboard/keyboard.conf | 3 +++ src/modules/keyboardq/keyboardq.conf | 3 +++ src/modules/license/license.conf | 3 +++ src/modules/locale/locale.conf | 3 +++ src/modules/localecfg/module.desc | 2 ++ src/modules/localeq/localeq.conf | 3 +++ .../luksopenswaphookcfg/luksopenswaphookcfg.conf | 3 +++ src/modules/luksopenswaphookcfg/module.desc | 2 ++ src/modules/machineid/machineid.conf | 3 +++ src/modules/mkinitfs/module.desc | 2 ++ src/modules/mount/module.desc | 2 ++ src/modules/mount/mount.conf | 3 +++ src/modules/netinstall/netinstall.conf | 3 +++ src/modules/networkcfg/module.desc | 2 ++ src/modules/notesqml/notesqml.conf | 3 +++ src/modules/oemid/oemid.conf | 3 +++ src/modules/openrcdmcryptcfg/module.desc | 2 ++ src/modules/openrcdmcryptcfg/openrcdmcryptcfg.conf | 3 +++ src/modules/packagechooser/packagechooser.conf | 3 +++ src/modules/packages/module.desc | 2 ++ src/modules/packages/packages.conf | 3 +++ src/modules/partition/partition.conf | 3 +++ src/modules/plasmalnf/plasmalnf.conf | 3 +++ src/modules/plymouthcfg/module.desc | 2 ++ src/modules/plymouthcfg/plymouthcfg.conf | 3 +++ src/modules/preservefiles/preservefiles.conf | 3 +++ src/modules/rawfs/module.desc | 2 ++ src/modules/rawfs/rawfs.conf | 3 +++ src/modules/removeuser/removeuser.conf | 3 +++ src/modules/services-openrc/module.desc | 2 ++ src/modules/services-openrc/services-openrc.conf | 3 +++ src/modules/services-systemd/module.desc | 2 ++ src/modules/services-systemd/services-systemd.conf | 3 +++ src/modules/shellprocess/shellprocess.conf | 3 +++ src/modules/tracking/tracking.conf | 3 +++ src/modules/umount/module.desc | 2 ++ src/modules/umount/umount.conf | 3 +++ src/modules/unpackfs/module.desc | 2 ++ src/modules/unpackfs/unpackfs.conf | 3 +++ src/modules/users/tests/3-wing.conf | 3 +++ src/modules/users/tests/4-audio.conf | 3 +++ src/modules/users/users.conf | 3 +++ src/modules/usersq/usersq.conf | 3 +++ src/modules/webview/owncloud.conf | 3 +++ src/modules/webview/webview.conf | 3 +++ src/modules/welcome/welcome.conf | 3 +++ src/modules/welcomeq/welcomeq.conf | 3 +++ 73 files changed, 201 insertions(+), 1 deletion(-) diff --git a/settings.conf b/settings.conf index 1c73ea3814..17e4d690c8 100644 --- a/settings.conf +++ b/settings.conf @@ -1,5 +1,14 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# # Configuration file for Calamares -# Syntax is YAML 1.2 +# +# This is the top-level configuration file for Calamares. +# It specifies what modules will be used, as well as some +# overall characteristics -- is this a setup program, or +# an installer. More specific configuration is devolved +# to the branding file (for the UI) and the individual +# module configuration files (for functionality). --- # Modules can be job modules (with different interfaces) and QtWidgets view # modules. They could all be placed in a number of different paths. diff --git a/src/modules/bootloader/bootloader.conf b/src/modules/bootloader/bootloader.conf index 808a5e6d00..f471c2ee08 100644 --- a/src/modules/bootloader/bootloader.conf +++ b/src/modules/bootloader/bootloader.conf @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# # Bootloader configuration. The bootloader is installed to allow # the system to start (and pick one of the installed operating # systems to run). diff --git a/src/modules/bootloader/module.desc b/src/modules/bootloader/module.desc index 083e1f4b51..44a1c0ee56 100644 --- a/src/modules/bootloader/module.desc +++ b/src/modules/bootloader/module.desc @@ -1,3 +1,5 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 --- type: "job" interface: "python" diff --git a/src/modules/contextualprocess/contextualprocess.conf b/src/modules/contextualprocess/contextualprocess.conf index 0f5972d046..b86fd922ce 100644 --- a/src/modules/contextualprocess/contextualprocess.conf +++ b/src/modules/contextualprocess/contextualprocess.conf @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# # Configuration for the contextual process job. # # Contextual processes are based on **global** configuration values. diff --git a/src/modules/displaymanager/displaymanager.conf b/src/modules/displaymanager/displaymanager.conf index f6b5a397f8..7175c112d5 100644 --- a/src/modules/displaymanager/displaymanager.conf +++ b/src/modules/displaymanager/displaymanager.conf @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# # Configure one or more display managers (e.g. SDDM) # with a "best effort" approach. # diff --git a/src/modules/displaymanager/module.desc b/src/modules/displaymanager/module.desc index 56d3fcb07a..a589418792 100644 --- a/src/modules/displaymanager/module.desc +++ b/src/modules/displaymanager/module.desc @@ -1,3 +1,5 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 --- type: "job" name: "displaymanager" diff --git a/src/modules/dracut/module.desc b/src/modules/dracut/module.desc index 6d808ac88b..9029bf66b1 100644 --- a/src/modules/dracut/module.desc +++ b/src/modules/dracut/module.desc @@ -1,3 +1,5 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 --- type: "job" name: "dracut" diff --git a/src/modules/dummycpp/dummycpp.conf b/src/modules/dummycpp/dummycpp.conf index 1f2e1daeea..b00a428253 100644 --- a/src/modules/dummycpp/dummycpp.conf +++ b/src/modules/dummycpp/dummycpp.conf @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# # This is a dummy (example) module for C++ Jobs. # # The code is the documentation for the configuration file. diff --git a/src/modules/dummycpp/module.desc b/src/modules/dummycpp/module.desc index 11b9c500c0..bc768a17ad 100644 --- a/src/modules/dummycpp/module.desc +++ b/src/modules/dummycpp/module.desc @@ -1,3 +1,5 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 # Module metadata file for dummycpp job # # The metadata for C++ (qtplugin) plugins is almost never interesting: diff --git a/src/modules/dummyprocess/module.desc b/src/modules/dummyprocess/module.desc index 55d11cfab7..a329b77256 100644 --- a/src/modules/dummyprocess/module.desc +++ b/src/modules/dummyprocess/module.desc @@ -1,3 +1,5 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 # Module metadata file for dummy process jobmodule # Syntax is YAML 1.2 --- diff --git a/src/modules/dummypython/dummypython.conf b/src/modules/dummypython/dummypython.conf index c700120e72..6ea50c5d12 100644 --- a/src/modules/dummypython/dummypython.conf +++ b/src/modules/dummypython/dummypython.conf @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# # This is a dummy (example) module for a Python Job Module. # # The code is the documentation for the configuration file. diff --git a/src/modules/dummypython/module.desc b/src/modules/dummypython/module.desc index ebe81af1a7..52c1d09d28 100644 --- a/src/modules/dummypython/module.desc +++ b/src/modules/dummypython/module.desc @@ -1,3 +1,5 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 # Module metadata file for dummy python jobmodule # Syntax is YAML 1.2 --- diff --git a/src/modules/dummypythonqt/dummypythonqt.conf b/src/modules/dummypythonqt/dummypythonqt.conf index 5bc64abfab..6caf9cc186 100644 --- a/src/modules/dummypythonqt/dummypythonqt.conf +++ b/src/modules/dummypythonqt/dummypythonqt.conf @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# # This is a dummy (example) module for PythonQt. # # The code is the documentation for the configuration file. diff --git a/src/modules/dummypythonqt/module.desc b/src/modules/dummypythonqt/module.desc index 46633a6db3..a747daeaad 100644 --- a/src/modules/dummypythonqt/module.desc +++ b/src/modules/dummypythonqt/module.desc @@ -1,3 +1,5 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 # Module metadata file for dummy pythonqt jobmodule # Syntax is YAML 1.2 --- diff --git a/src/modules/finished/finished.conf b/src/modules/finished/finished.conf index 3b6dd9dd12..7abfb36f15 100644 --- a/src/modules/finished/finished.conf +++ b/src/modules/finished/finished.conf @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# # Configuration for the "finished" page, which is usually shown only at # the end of the installation (successful or not). --- diff --git a/src/modules/fsresizer/fsresizer.conf b/src/modules/fsresizer/fsresizer.conf index 33329248d0..e58c39822f 100644 --- a/src/modules/fsresizer/fsresizer.conf +++ b/src/modules/fsresizer/fsresizer.conf @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# # Module that resizes a single FS to fill the entire (rest) of # a device. This is used in OEM situations where an image is # flashed onto an SD card (or similar) and used to boot a device, diff --git a/src/modules/fstab/fstab.conf b/src/modules/fstab/fstab.conf index ce38a184ca..21f6ffce30 100644 --- a/src/modules/fstab/fstab.conf +++ b/src/modules/fstab/fstab.conf @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# # Creates /etc/fstab and /etc/crypttab in the target system. # Also creates mount points for all the filesystems. # diff --git a/src/modules/fstab/module.desc b/src/modules/fstab/module.desc index bbd4166061..77cb7adbca 100644 --- a/src/modules/fstab/module.desc +++ b/src/modules/fstab/module.desc @@ -1,3 +1,5 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 --- type: "job" name: "fstab" diff --git a/src/modules/grubcfg/grubcfg.conf b/src/modules/grubcfg/grubcfg.conf index 3745617870..33c2a72ab6 100644 --- a/src/modules/grubcfg/grubcfg.conf +++ b/src/modules/grubcfg/grubcfg.conf @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# # Create, overwrite or update /etc/default/grub in the target system. # # Write lines to /etc/default/grub (in the target system) based diff --git a/src/modules/grubcfg/module.desc b/src/modules/grubcfg/module.desc index 34f1a5a1ef..293e75ba7d 100644 --- a/src/modules/grubcfg/module.desc +++ b/src/modules/grubcfg/module.desc @@ -1,3 +1,5 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 --- type: "job" name: "grubcfg" diff --git a/src/modules/hwclock/module.desc b/src/modules/hwclock/module.desc index ba3dbbaf84..d13435b3c7 100644 --- a/src/modules/hwclock/module.desc +++ b/src/modules/hwclock/module.desc @@ -1,3 +1,5 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 --- type: "job" name: "hwclock" diff --git a/src/modules/initcpio/initcpio.conf b/src/modules/initcpio/initcpio.conf index 517e48392c..717a511df7 100644 --- a/src/modules/initcpio/initcpio.conf +++ b/src/modules/initcpio/initcpio.conf @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# # Run mkinitcpio(8) with the given preset value --- # This key defines the kernel to be loaded. diff --git a/src/modules/initcpiocfg/module.desc b/src/modules/initcpiocfg/module.desc index 936a99bbe8..a4476121be 100644 --- a/src/modules/initcpiocfg/module.desc +++ b/src/modules/initcpiocfg/module.desc @@ -1,3 +1,5 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 --- type: "job" name: "initcpiocfg" diff --git a/src/modules/initramfs/initramfs.conf b/src/modules/initramfs/initramfs.conf index a989d83c33..c9dcf16971 100644 --- a/src/modules/initramfs/initramfs.conf +++ b/src/modules/initramfs/initramfs.conf @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# ## initramfs module # # This module is specific to Debian based distros. Post installation on Debian diff --git a/src/modules/initramfscfg/module.desc b/src/modules/initramfscfg/module.desc index c00e8170fc..17db29465a 100644 --- a/src/modules/initramfscfg/module.desc +++ b/src/modules/initramfscfg/module.desc @@ -1,3 +1,5 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 --- type: "job" name: "initramfscfg" diff --git a/src/modules/interactiveterminal/interactiveterminal.conf b/src/modules/interactiveterminal/interactiveterminal.conf index 067bce8bee..9354f8f4a9 100644 --- a/src/modules/interactiveterminal/interactiveterminal.conf +++ b/src/modules/interactiveterminal/interactiveterminal.conf @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# # The interactive terminal provides a konsole (terminal) window # during the installation process. The terminal runs in the # host system, so you will need to change directories to the diff --git a/src/modules/keyboard/keyboard.conf b/src/modules/keyboard/keyboard.conf index ee97c39394..d122f30d78 100644 --- a/src/modules/keyboard/keyboard.conf +++ b/src/modules/keyboard/keyboard.conf @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# # NOTE: you must have ckbcomp installed and runnable # on the live system, for keyboard layout previews. --- diff --git a/src/modules/keyboardq/keyboardq.conf b/src/modules/keyboardq/keyboardq.conf index ee97c39394..d122f30d78 100644 --- a/src/modules/keyboardq/keyboardq.conf +++ b/src/modules/keyboardq/keyboardq.conf @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# # NOTE: you must have ckbcomp installed and runnable # on the live system, for keyboard layout previews. --- diff --git a/src/modules/license/license.conf b/src/modules/license/license.conf index 8a16728879..e32d49984f 100644 --- a/src/modules/license/license.conf +++ b/src/modules/license/license.conf @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# # Configuration file for License viewmodule, Calamares # Syntax is YAML 1.2 --- diff --git a/src/modules/locale/locale.conf b/src/modules/locale/locale.conf index 8236a879b8..4463f7a945 100644 --- a/src/modules/locale/locale.conf +++ b/src/modules/locale/locale.conf @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# --- # These settings are used to set your default system time zone. # Time zones are usually located under /usr/share/zoneinfo and diff --git a/src/modules/localecfg/module.desc b/src/modules/localecfg/module.desc index 4b8cd9e6d9..030846a3e3 100644 --- a/src/modules/localecfg/module.desc +++ b/src/modules/localecfg/module.desc @@ -1,3 +1,5 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 # Enable the configured locales (those set by the user on the # user page) in /etc/locale.gen, if they are available in the # target system. diff --git a/src/modules/localeq/localeq.conf b/src/modules/localeq/localeq.conf index 4beb4fe859..bb2a7e8167 100644 --- a/src/modules/localeq/localeq.conf +++ b/src/modules/localeq/localeq.conf @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# --- # This settings are used to set your default system time zone. # Time zones are usually located under /usr/share/zoneinfo and diff --git a/src/modules/luksopenswaphookcfg/luksopenswaphookcfg.conf b/src/modules/luksopenswaphookcfg/luksopenswaphookcfg.conf index f5610cd7ce..f1f03bbe49 100644 --- a/src/modules/luksopenswaphookcfg/luksopenswaphookcfg.conf +++ b/src/modules/luksopenswaphookcfg/luksopenswaphookcfg.conf @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# # Writes an openswap configuration with LUKS settings to the given path --- # Path of the configuration file to write (in the target system) diff --git a/src/modules/luksopenswaphookcfg/module.desc b/src/modules/luksopenswaphookcfg/module.desc index 53f8b7c394..919a927924 100644 --- a/src/modules/luksopenswaphookcfg/module.desc +++ b/src/modules/luksopenswaphookcfg/module.desc @@ -1,3 +1,5 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 --- type: "job" name: "luksopenswaphookcfg" diff --git a/src/modules/machineid/machineid.conf b/src/modules/machineid/machineid.conf index fa42655fd4..5ebf17c8cc 100644 --- a/src/modules/machineid/machineid.conf +++ b/src/modules/machineid/machineid.conf @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# # Machine-ID and other random data on the target system. # # This module can create a number of "random" things on the target: diff --git a/src/modules/mkinitfs/module.desc b/src/modules/mkinitfs/module.desc index 06541fb870..decc3259f1 100644 --- a/src/modules/mkinitfs/module.desc +++ b/src/modules/mkinitfs/module.desc @@ -1,3 +1,5 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 --- type: "job" name: "mkinitfs" diff --git a/src/modules/mount/module.desc b/src/modules/mount/module.desc index 13e411716b..e4486cf12d 100644 --- a/src/modules/mount/module.desc +++ b/src/modules/mount/module.desc @@ -1,3 +1,5 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 --- type: "job" name: "mount" diff --git a/src/modules/mount/mount.conf b/src/modules/mount/mount.conf index bb28eed661..1e70465c2d 100644 --- a/src/modules/mount/mount.conf +++ b/src/modules/mount/mount.conf @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# # Mount filesystems in the target (generally, before treating the # target as a usable chroot / "live" system). Filesystems are # automatically mounted from the partitioning module. Filesystems diff --git a/src/modules/netinstall/netinstall.conf b/src/modules/netinstall/netinstall.conf index db4d65da03..f96da9a8e7 100644 --- a/src/modules/netinstall/netinstall.conf +++ b/src/modules/netinstall/netinstall.conf @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# ### Netinstall module # # The netinstall module allows distribution maintainers to ship minimal ISOs diff --git a/src/modules/networkcfg/module.desc b/src/modules/networkcfg/module.desc index 68024cb8d3..cbafe8cd5a 100644 --- a/src/modules/networkcfg/module.desc +++ b/src/modules/networkcfg/module.desc @@ -1,3 +1,5 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 --- type: "job" name: "networkcfg" diff --git a/src/modules/notesqml/notesqml.conf b/src/modules/notesqml/notesqml.conf index 88948bf640..c65f988791 100644 --- a/src/modules/notesqml/notesqml.conf +++ b/src/modules/notesqml/notesqml.conf @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# # The *notesqml* module can be used to display a QML file # as an installer step. This is most useful for release-notes # and similar somewhat-static content, but if you want to you diff --git a/src/modules/oemid/oemid.conf b/src/modules/oemid/oemid.conf index 8f9bc3d08b..921fb3b309 100644 --- a/src/modules/oemid/oemid.conf +++ b/src/modules/oemid/oemid.conf @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# # This is an OEM setup (phase-0) configuration file. --- # The batch-identifier is written to /var/log/installer/oem-id. diff --git a/src/modules/openrcdmcryptcfg/module.desc b/src/modules/openrcdmcryptcfg/module.desc index 283adfdacb..e63339573a 100644 --- a/src/modules/openrcdmcryptcfg/module.desc +++ b/src/modules/openrcdmcryptcfg/module.desc @@ -1,3 +1,5 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 --- type: "job" name: "openrcdmcryptcfg" diff --git a/src/modules/openrcdmcryptcfg/openrcdmcryptcfg.conf b/src/modules/openrcdmcryptcfg/openrcdmcryptcfg.conf index 57ee2dc31d..911a4eff39 100644 --- a/src/modules/openrcdmcryptcfg/openrcdmcryptcfg.conf +++ b/src/modules/openrcdmcryptcfg/openrcdmcryptcfg.conf @@ -1,2 +1,5 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# --- configFilePath: /etc/conf.d/dmcrypt diff --git a/src/modules/packagechooser/packagechooser.conf b/src/modules/packagechooser/packagechooser.conf index 68330337ba..bb824c5e72 100644 --- a/src/modules/packagechooser/packagechooser.conf +++ b/src/modules/packagechooser/packagechooser.conf @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# # Configuration for the low-density software chooser --- # The packagechooser writes a GlobalStorage value for the choice that diff --git a/src/modules/packages/module.desc b/src/modules/packages/module.desc index 6a04236143..3e3053bfab 100644 --- a/src/modules/packages/module.desc +++ b/src/modules/packages/module.desc @@ -1,3 +1,5 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 --- type: "job" name: "packages" diff --git a/src/modules/packages/packages.conf b/src/modules/packages/packages.conf index df477e6e95..b1289ad514 100644 --- a/src/modules/packages/packages.conf +++ b/src/modules/packages/packages.conf @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# --- # # Which package manager to use, options are: diff --git a/src/modules/partition/partition.conf b/src/modules/partition/partition.conf index 363ef7db10..4075fd2733 100644 --- a/src/modules/partition/partition.conf +++ b/src/modules/partition/partition.conf @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# # This setting specifies the mount point of the EFI system partition. Some # distributions (Fedora, Debian, Manjaro, etc.) use /boot/efi, others (KaOS, # etc.) use just /boot. diff --git a/src/modules/plasmalnf/plasmalnf.conf b/src/modules/plasmalnf/plasmalnf.conf index a954c685a4..fd59389a85 100644 --- a/src/modules/plasmalnf/plasmalnf.conf +++ b/src/modules/plasmalnf/plasmalnf.conf @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# # The Plasma Look-and-Feel module allows selecting a Plasma # Look-and-Feel in the live- or host-system and switches the # host Plasma session immediately to the chosen LnF; it diff --git a/src/modules/plymouthcfg/module.desc b/src/modules/plymouthcfg/module.desc index f2d2d47436..660aa71b2f 100644 --- a/src/modules/plymouthcfg/module.desc +++ b/src/modules/plymouthcfg/module.desc @@ -1,3 +1,5 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 --- type: "job" name: "plymouthcfg" diff --git a/src/modules/plymouthcfg/plymouthcfg.conf b/src/modules/plymouthcfg/plymouthcfg.conf index 47c54f5ffb..ebe51d1ed8 100644 --- a/src/modules/plymouthcfg/plymouthcfg.conf +++ b/src/modules/plymouthcfg/plymouthcfg.conf @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# # Plymouth Configuration Module # # This module can be used to setup the default plymouth theme to diff --git a/src/modules/preservefiles/preservefiles.conf b/src/modules/preservefiles/preservefiles.conf index 671a308cc4..962ca756a0 100644 --- a/src/modules/preservefiles/preservefiles.conf +++ b/src/modules/preservefiles/preservefiles.conf @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# # Configuration for the preserve-files job # # The *files* key contains a list of files to preserve. Each element of diff --git a/src/modules/rawfs/module.desc b/src/modules/rawfs/module.desc index aaf65c1836..0c4f21f925 100644 --- a/src/modules/rawfs/module.desc +++ b/src/modules/rawfs/module.desc @@ -1,3 +1,5 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 # Module metadata file for block-copy jobmodule # Syntax is YAML 1.2 --- diff --git a/src/modules/rawfs/rawfs.conf b/src/modules/rawfs/rawfs.conf index 8d7da3ba36..bbc36906bb 100644 --- a/src/modules/rawfs/rawfs.conf +++ b/src/modules/rawfs/rawfs.conf @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# # Configuration for the rawfs module: raw filesystem copy to a block device --- diff --git a/src/modules/removeuser/removeuser.conf b/src/modules/removeuser/removeuser.conf index d266e69529..cc086e7234 100644 --- a/src/modules/removeuser/removeuser.conf +++ b/src/modules/removeuser/removeuser.conf @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# # Removes a single user (with userdel) from the system. # This is typically used in OEM setups or if the live user # spills into the target system. diff --git a/src/modules/services-openrc/module.desc b/src/modules/services-openrc/module.desc index 4b0b516143..c60872bc14 100644 --- a/src/modules/services-openrc/module.desc +++ b/src/modules/services-openrc/module.desc @@ -1,3 +1,5 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 --- type: "job" name: "services-openrc" diff --git a/src/modules/services-openrc/services-openrc.conf b/src/modules/services-openrc/services-openrc.conf index b8255b21ad..6042b53050 100644 --- a/src/modules/services-openrc/services-openrc.conf +++ b/src/modules/services-openrc/services-openrc.conf @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# # openrc services module to modify service runlevels via rc-update in the chroot # # Services can be added (to any runlevel, or multiple runlevels) or deleted. diff --git a/src/modules/services-systemd/module.desc b/src/modules/services-systemd/module.desc index 4305b11410..e016c6dcb0 100644 --- a/src/modules/services-systemd/module.desc +++ b/src/modules/services-systemd/module.desc @@ -1,3 +1,5 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 --- type: "job" name: "services-systemd" diff --git a/src/modules/services-systemd/services-systemd.conf b/src/modules/services-systemd/services-systemd.conf index 6ff1409bf0..77224b00b0 100644 --- a/src/modules/services-systemd/services-systemd.conf +++ b/src/modules/services-systemd/services-systemd.conf @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# # Systemd services manipulation. # # This module can enable services and targets for systemd diff --git a/src/modules/shellprocess/shellprocess.conf b/src/modules/shellprocess/shellprocess.conf index 4734aaadd9..00d88851f8 100644 --- a/src/modules/shellprocess/shellprocess.conf +++ b/src/modules/shellprocess/shellprocess.conf @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# # Configuration for the shell process job. # # Executes a list of commands found under the key *script*. diff --git a/src/modules/tracking/tracking.conf b/src/modules/tracking/tracking.conf index 533d0e0dd5..6f726226d8 100644 --- a/src/modules/tracking/tracking.conf +++ b/src/modules/tracking/tracking.conf @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# # Settings for various kinds of tracking that Distributions can # enable. Distributions looking at tracking should be aware of # the privacy (and hence communications) impact of that tracking, diff --git a/src/modules/umount/module.desc b/src/modules/umount/module.desc index a1ead12280..a1c189a620 100644 --- a/src/modules/umount/module.desc +++ b/src/modules/umount/module.desc @@ -1,3 +1,5 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 --- type: "job" name: "umount" diff --git a/src/modules/umount/umount.conf b/src/modules/umount/umount.conf index 3d4eb7d958..b6d86e353c 100644 --- a/src/modules/umount/umount.conf +++ b/src/modules/umount/umount.conf @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# ### Umount Module # # This module represents the last part of the installation, the unmounting diff --git a/src/modules/unpackfs/module.desc b/src/modules/unpackfs/module.desc index c87613d741..2723c3c461 100644 --- a/src/modules/unpackfs/module.desc +++ b/src/modules/unpackfs/module.desc @@ -1,3 +1,5 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 # Syntax is YAML 1.2 --- type: "job" diff --git a/src/modules/unpackfs/unpackfs.conf b/src/modules/unpackfs/unpackfs.conf index 454e82e66f..2c4a25a809 100644 --- a/src/modules/unpackfs/unpackfs.conf +++ b/src/modules/unpackfs/unpackfs.conf @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# # Unsquash / unpack a filesystem. Multiple sources are supported, and # they may be squashed or plain filesystems. # diff --git a/src/modules/users/tests/3-wing.conf b/src/modules/users/tests/3-wing.conf index 3c7dc61afd..4fc760fa8c 100644 --- a/src/modules/users/tests/3-wing.conf +++ b/src/modules/users/tests/3-wing.conf @@ -1,2 +1,5 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# --- defaultGroups: [ wing, wheel, users ] diff --git a/src/modules/users/tests/4-audio.conf b/src/modules/users/tests/4-audio.conf index fb7fdb3d28..1280bc207d 100644 --- a/src/modules/users/tests/4-audio.conf +++ b/src/modules/users/tests/4-audio.conf @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# --- defaultGroups: - users diff --git a/src/modules/users/users.conf b/src/modules/users/users.conf index 259723df29..ee1ccbf1cd 100644 --- a/src/modules/users/users.conf +++ b/src/modules/users/users.conf @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# # Configuration for the one-user-system user module. # # Besides these settings, the user module also places the following diff --git a/src/modules/usersq/usersq.conf b/src/modules/usersq/usersq.conf index f416a5c397..19a30bd02b 100644 --- a/src/modules/usersq/usersq.conf +++ b/src/modules/usersq/usersq.conf @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# # For documentation see Users Module users.conf # --- diff --git a/src/modules/webview/owncloud.conf b/src/modules/webview/owncloud.conf index 46b639ade5..4e29309190 100644 --- a/src/modules/webview/owncloud.conf +++ b/src/modules/webview/owncloud.conf @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# --- prettyName: "OwnCloud" url: "https://owncloud.org" diff --git a/src/modules/webview/webview.conf b/src/modules/webview/webview.conf index c4e6568e99..353f814882 100644 --- a/src/modules/webview/webview.conf +++ b/src/modules/webview/webview.conf @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# --- prettyName: "Webview" url: "https://calamares.io" diff --git a/src/modules/welcome/welcome.conf b/src/modules/welcome/welcome.conf index 45cb654a21..bd15a6f2d8 100644 --- a/src/modules/welcome/welcome.conf +++ b/src/modules/welcome/welcome.conf @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# # Configuration for the welcome module. The welcome page # displays some information from the branding file. # Which parts it displays can be configured through diff --git a/src/modules/welcomeq/welcomeq.conf b/src/modules/welcomeq/welcomeq.conf index 035db97148..2efc514732 100644 --- a/src/modules/welcomeq/welcomeq.conf +++ b/src/modules/welcomeq/welcomeq.conf @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# # Configuration for the welcomeq module. # # The configuration for welcomeq is exactly the same From 5523bffbf211e124bdf5cf087790a6c8b0309782 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Wed, 26 Aug 2020 01:41:30 +0200 Subject: [PATCH 116/157] REUSE: administrative and repo-meta files - Mostly CC0 because they're not interesting - formatting, git, travis, transifex - Some BSD-2-Clause because of habit - CMake and shell-script-like files --- .clang-format | 2 ++ .editorconfig | 3 ++- .gitattributes | 3 +++ .gitignore | 3 +++ .travis.yml | 3 +++ .tx/config | 3 +++ AUTHORS | 4 ++++ CHANGES | 4 ++++ CalamaresConfig.cmake.in | 7 +++++++ Dockerfile | 3 +++ README.md | 4 ++++ cmake_uninstall.cmake.in | 3 +++ com.github.calamares.calamares.policy | 5 ++++- io.calamares.calamares.appdata.xml | 3 +++ 14 files changed, 48 insertions(+), 2 deletions(-) diff --git a/.clang-format b/.clang-format index 187c3638f9..aa4aa0e2a3 100644 --- a/.clang-format +++ b/.clang-format @@ -1,3 +1,5 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 --- BasedOnStyle: WebKit diff --git a/.editorconfig b/.editorconfig index d5851076b7..44e191e5c8 100644 --- a/.editorconfig +++ b/.editorconfig @@ -1,4 +1,5 @@ -# http://EditorConfig.org +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 root = true diff --git a/.gitattributes b/.gitattributes index 3b8a7f1e87..6a8126fad4 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 + .editorconfig export-ignore .gitattributes export-ignore .github export-ignore diff --git a/.gitignore b/.gitignore index da0f082a65..5bf3c57ca1 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# # C++ objects and libs *.slo diff --git a/.travis.yml b/.travis.yml index 2b11af9122..1df81a6bf4 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# language: cpp python: diff --git a/.tx/config b/.tx/config index 686a98bbeb..65a8521b54 100644 --- a/.tx/config +++ b/.tx/config @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 + [main] host = https://www.transifex.com diff --git a/AUTHORS b/AUTHORS index ecd0aafc82..912d48da70 100644 --- a/AUTHORS +++ b/AUTHORS @@ -1,3 +1,7 @@ + + # MAINTAINER Calamares development is sponsored by Blue Systems GmbH - Liberating Software. diff --git a/CHANGES b/CHANGES index b4e4fd5c0d..d1ea088bde 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,7 @@ + + This is the changelog for Calamares. For each release, the major changes and 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 diff --git a/CalamaresConfig.cmake.in b/CalamaresConfig.cmake.in index 4c62fb4778..f51b5991d8 100644 --- a/CalamaresConfig.cmake.in +++ b/CalamaresConfig.cmake.in @@ -1,3 +1,10 @@ +# SPDX-FileCopyrightText: 2014 Teo Mrnjavac +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause +# +# Note that Calamares itself is GPL-3.0-or-later: the above license +# applies to **this** CMake file. +# # Config file for the Calamares package # # The following IMPORTED targets are defined: diff --git a/Dockerfile b/Dockerfile index 2c8be23a0c..7a1cad92af 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,2 +1,5 @@ +# SPDX-FileCopyrightText: 2017 Rohan Garg +# SPDX-License-Identifier: BSD-2-Clause + FROM kdeneon/all:user RUN sudo apt-get update && sudo apt-get -y install build-essential cmake extra-cmake-modules gettext kio-dev libatasmart-dev libboost-python-dev libkf5config-dev libkf5coreaddons-dev libkf5i18n-dev libkf5iconthemes-dev libkf5parts-dev libkf5service-dev libkf5solid-dev libkpmcore-dev libparted-dev libpolkit-qt5-1-dev libqt5svg5-dev libqt5webkit5-dev libyaml-cpp-dev os-prober pkg-config python3-dev qtbase5-dev qtdeclarative5-dev qttools5-dev qttools5-dev-tools diff --git a/README.md b/README.md index 2544ebb69f..3ba9221d6b 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,7 @@ + + ### Calamares: Distribution-Independent Installer Framework --------- diff --git a/cmake_uninstall.cmake.in b/cmake_uninstall.cmake.in index df95fb9d82..d223136a9f 100644 --- a/cmake_uninstall.cmake.in +++ b/cmake_uninstall.cmake.in @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: 2014 Teo Mrnjavac +# SPDX-License-Identifier: BSD-2-Clause + IF(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt") MESSAGE(FATAL_ERROR "Cannot find install manifest: \"@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt\"") ENDIF(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt") diff --git a/com.github.calamares.calamares.policy b/com.github.calamares.calamares.policy index 6bc250e3bb..976ec0f1ac 100644 --- a/com.github.calamares.calamares.policy +++ b/com.github.calamares.calamares.policy @@ -1,4 +1,7 @@ + @@ -19,4 +22,4 @@ /usr/bin/calamares true - \ No newline at end of file + diff --git a/io.calamares.calamares.appdata.xml b/io.calamares.calamares.appdata.xml index d49a33b0f0..9b1f883bd7 100644 --- a/io.calamares.calamares.appdata.xml +++ b/io.calamares.calamares.appdata.xml @@ -1,4 +1,7 @@ + io.calamares.calamares.desktop CC0-1.0 From 863a4cc2a49c5424fef8175031317e58c5906071 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Mon, 24 Aug 2020 16:36:47 +0200 Subject: [PATCH 117/157] REUSE: (GPL-3.0-or-later) Python modules --- src/modules/bootloader/main.py | 23 ++++++++++++----------- src/modules/displaymanager/main.py | 15 ++++++++------- src/modules/dracut/main.py | 9 +++++---- src/modules/dummypython/main.py | 7 ++++--- src/modules/dummypythonqt/main.py | 5 +++-- src/modules/fstab/main.py | 9 +++++---- src/modules/grubcfg/main.py | 11 ++++++----- src/modules/hwclock/main.py | 11 ++++++----- src/modules/initcpiocfg/main.py | 9 +++++---- src/modules/initramfscfg/main.py | 13 +++++++------ src/modules/localecfg/main.py | 11 ++++++----- src/modules/luksopenswaphookcfg/main.py | 7 ++++--- src/modules/mkinitfs/main.py | 9 +++++---- src/modules/mount/main.py | 9 +++++---- src/modules/networkcfg/main.py | 9 +++++---- src/modules/openrcdmcryptcfg/main.py | 5 +++-- src/modules/packages/main.py | 13 +++++++------ src/modules/plymouthcfg/main.py | 9 +++++---- src/modules/rawfs/main.py | 3 ++- src/modules/services-openrc/main.py | 9 +++++---- src/modules/services-systemd/main.py | 9 +++++---- src/modules/umount/main.py | 7 ++++--- src/modules/unpackfs/main.py | 15 ++++++++------- src/modules/unpackfs/runtests.sh | 8 ++++++++ 24 files changed, 133 insertions(+), 102 deletions(-) diff --git a/src/modules/bootloader/main.py b/src/modules/bootloader/main.py index 87288b583f..bfb6959093 100644 --- a/src/modules/bootloader/main.py +++ b/src/modules/bootloader/main.py @@ -3,17 +3,18 @@ # # === This file is part of Calamares - === # -# Copyright 2014, Aurélien Gâteau -# Copyright 2014, Anke Boersma -# Copyright 2014, Daniel Hillenbrand -# Copyright 2014, Benjamin Vaudour -# Copyright 2014-2019, Kevin Kofler -# Copyright 2015-2018, Philip Mueller -# Copyright 2016-2017, Teo Mrnjavac -# Copyright 2017, Alf Gaida -# Copyright 2017-2019, Adriaan de Groot -# Copyright 2017, Gabriel Craciunescu -# Copyright 2017, Ben Green +# SPDX-FileCopyrightText: 2014 Aurélien Gâteau +# SPDX-FileCopyrightText: 2014 Anke Boersma +# SPDX-FileCopyrightText: 2014 Daniel Hillenbrand +# SPDX-FileCopyrightText: 2014 Benjamin Vaudour +# SPDX-FileCopyrightText: 2014-2019 Kevin Kofler +# SPDX-FileCopyrightText: 2015-2018 Philip Mueller +# SPDX-FileCopyrightText: 2016-2017 Teo Mrnjavac +# SPDX-FileCopyrightText: 2017 Alf Gaida +# SPDX-FileCopyrightText: 2017-2019 Adriaan de Groot +# SPDX-FileCopyrightText: 2017 Gabriel Craciunescu +# SPDX-FileCopyrightText: 2017 Ben Green +# SPDX-License-Identifier: GPL-3.0-or-later # # Calamares is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff --git a/src/modules/displaymanager/main.py b/src/modules/displaymanager/main.py index 1529aab17e..509257bb1b 100644 --- a/src/modules/displaymanager/main.py +++ b/src/modules/displaymanager/main.py @@ -3,13 +3,14 @@ # # === This file is part of Calamares - === # -# Copyright 2014-2018, Philip Müller -# Copyright 2014-2015, Teo Mrnjavac -# Copyright 2014, Kevin Kofler -# Copyright 2017, Alf Gaida -# Copyright 2017, Bernhard Landauer -# Copyright 2017, 2019, Adriaan de Groot -# Copyright 2019, Dominic Hayes +# SPDX-FileCopyrightText: 2014-2018 Philip Müller +# SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac +# SPDX-FileCopyrightText: 2014 Kevin Kofler +# SPDX-FileCopyrightText: 2017 Alf Gaida +# SPDX-FileCopyrightText: 2017 Bernhard Landauer +# SPDX-FileCopyrightText: 2017 2019, Adriaan de Groot +# SPDX-FileCopyrightText: 2019 Dominic Hayes +# SPDX-License-Identifier: GPL-3.0-or-later # # Calamares is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff --git a/src/modules/dracut/main.py b/src/modules/dracut/main.py index a929ac70b2..2a5ba91d76 100644 --- a/src/modules/dracut/main.py +++ b/src/modules/dracut/main.py @@ -3,10 +3,11 @@ # # === This file is part of Calamares - === # -# Copyright 2014-2015, Philip Müller -# Copyright 2014, Teo Mrnjavac -# Copyright 2017, Alf Gaida -# Copyright 2019, Adriaan de Groot +# SPDX-FileCopyrightText: 2014-2015 Philip Müller +# SPDX-FileCopyrightText: 2014 Teo Mrnjavac +# SPDX-FileCopyrightText: 2017 Alf Gaida +# SPDX-FileCopyrightText: 2019 Adriaan de Groot +# SPDX-License-Identifier: GPL-3.0-or-later # # Calamares is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff --git a/src/modules/dummypython/main.py b/src/modules/dummypython/main.py index 96de6030f7..2f21e9b77a 100644 --- a/src/modules/dummypython/main.py +++ b/src/modules/dummypython/main.py @@ -3,9 +3,10 @@ # # === This file is part of Calamares - === # -# Copyright 2014, Teo Mrnjavac -# Copyright 2017, Alf Gaida -# Copyright 2017, Adriaan de Groot +# SPDX-FileCopyrightText: 2014 Teo Mrnjavac +# SPDX-FileCopyrightText: 2017 Alf Gaida +# SPDX-FileCopyrightText: 2017 Adriaan de Groot +# SPDX-License-Identifier: GPL-3.0-or-later # # Calamares is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff --git a/src/modules/dummypythonqt/main.py b/src/modules/dummypythonqt/main.py index f830caf30d..c08b79fbb7 100644 --- a/src/modules/dummypythonqt/main.py +++ b/src/modules/dummypythonqt/main.py @@ -3,8 +3,9 @@ # # === This file is part of Calamares - === # -# Copyright 2016-2017, Teo Mrnjavac -# Copyright 2017, Alf Gaida +# SPDX-FileCopyrightText: 2016-2017 Teo Mrnjavac +# SPDX-FileCopyrightText: 2017 Alf Gaida +# SPDX-License-Identifier: GPL-3.0-or-later # # Calamares is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff --git a/src/modules/fstab/main.py b/src/modules/fstab/main.py index c58e8eb11a..19af12b9eb 100644 --- a/src/modules/fstab/main.py +++ b/src/modules/fstab/main.py @@ -3,10 +3,11 @@ # # === This file is part of Calamares - === # -# Copyright 2014, Aurélien Gâteau -# Copyright 2016, Teo Mrnjavac -# Copyright 2017, Alf Gaida -# Copyright 2019, Adriaan de Groot +# SPDX-FileCopyrightText: 2014 Aurélien Gâteau +# SPDX-FileCopyrightText: 2016 Teo Mrnjavac +# SPDX-FileCopyrightText: 2017 Alf Gaida +# SPDX-FileCopyrightText: 2019 Adriaan de Groot +# SPDX-License-Identifier: GPL-3.0-or-later # # Calamares is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff --git a/src/modules/grubcfg/main.py b/src/modules/grubcfg/main.py index fad6d36770..be97524022 100644 --- a/src/modules/grubcfg/main.py +++ b/src/modules/grubcfg/main.py @@ -3,11 +3,12 @@ # # === This file is part of Calamares - === # -# Copyright 2014-2015, Philip Müller -# Copyright 2015-2017, Teo Mrnjavac -# Copyright 2017, Alf Gaida -# Copyright 2017, 2019, Adriaan de Groot -# Copyright 2017-2018, Gabriel Craciunescu +# SPDX-FileCopyrightText: 2014-2015 Philip Müller +# SPDX-FileCopyrightText: 2015-2017 Teo Mrnjavac +# SPDX-FileCopyrightText: 2017 Alf Gaida +# SPDX-FileCopyrightText: 2017 2019, Adriaan de Groot +# SPDX-FileCopyrightText: 2017-2018 Gabriel Craciunescu +# SPDX-License-Identifier: GPL-3.0-or-later # # Calamares is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff --git a/src/modules/hwclock/main.py b/src/modules/hwclock/main.py index f18cf12a97..7cf5790f92 100644 --- a/src/modules/hwclock/main.py +++ b/src/modules/hwclock/main.py @@ -3,11 +3,12 @@ # # === This file is part of Calamares - === # -# Copyright 2014 - 2015, Philip Müller -# Copyright 2014, Teo Mrnjavac -# Copyright 2017, Alf Gaida -# Copyright 2017-2018, Gabriel Craciunescu -# Copyright 2019, Adriaan de Groot +# SPDX-FileCopyrightText: 2014-2015 Philip Müller +# SPDX-FileCopyrightText: 2014 Teo Mrnjavac +# SPDX-FileCopyrightText: 2017 Alf Gaida +# SPDX-FileCopyrightText: 2017-2018 Gabriel Craciunescu +# SPDX-FileCopyrightText: 2019 Adriaan de Groot +# SPDX-License-Identifier: GPL-3.0-or-later # # Calamares is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff --git a/src/modules/initcpiocfg/main.py b/src/modules/initcpiocfg/main.py index 3d570ff947..119fa5cf21 100644 --- a/src/modules/initcpiocfg/main.py +++ b/src/modules/initcpiocfg/main.py @@ -3,10 +3,11 @@ # # === This file is part of Calamares - === # -# Copyright 2014, Rohan Garg -# Copyright 2015,2019-2020, Philip Müller -# Copyright 2017, Alf Gaida -# Copyright 2019, Adriaan de Groot +# SPDX-FileCopyrightText: 2014 Rohan Garg +# SPDX-FileCopyrightText: 2015 2019-2020, Philip Müller +# SPDX-FileCopyrightText: 2017 Alf Gaida +# SPDX-FileCopyrightText: 2019 Adriaan de Groot +# SPDX-License-Identifier: GPL-3.0-or-later # # Calamares is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff --git a/src/modules/initramfscfg/main.py b/src/modules/initramfscfg/main.py index 52d5125675..e3b6d04391 100644 --- a/src/modules/initramfscfg/main.py +++ b/src/modules/initramfscfg/main.py @@ -3,12 +3,13 @@ # # === This file is part of Calamares - === # -# Copyright 2014, Rohan Garg -# Copyright 2015, Philip Müller -# Copyright 2016, David McKinney -# Copyright 2016, Kevin Kofler -# Copyright 2017, Alf Gaida -# Copyright 2017, 2019, Adriaan de Groot +# SPDX-FileCopyrightText: 2014 Rohan Garg +# SPDX-FileCopyrightText: 2015 Philip Müller +# SPDX-FileCopyrightText: 2016 David McKinney +# SPDX-FileCopyrightText: 2016 Kevin Kofler +# SPDX-FileCopyrightText: 2017 Alf Gaida +# SPDX-FileCopyrightText: 2017 2019, Adriaan de Groot +# SPDX-License-Identifier: GPL-3.0-or-later # # Calamares is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff --git a/src/modules/localecfg/main.py b/src/modules/localecfg/main.py index 9e50fb4481..021f4a4540 100644 --- a/src/modules/localecfg/main.py +++ b/src/modules/localecfg/main.py @@ -3,11 +3,12 @@ # # === This file is part of Calamares - === # -# Copyright 2014, Anke Boersma -# Copyright 2015, Philip Müller -# Copyright 2016, Teo Mrnjavac -# Copyright 2018, AlmAck -# Copyright 2018-2019, Adriaan de Groot +# SPDX-FileCopyrightText: 2014 Anke Boersma +# SPDX-FileCopyrightText: 2015 Philip Müller +# SPDX-FileCopyrightText: 2016 Teo Mrnjavac +# SPDX-FileCopyrightText: 2018 AlmAck +# SPDX-FileCopyrightText: 2018-2019 Adriaan de Groot +# SPDX-License-Identifier: GPL-3.0-or-later # # Calamares is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff --git a/src/modules/luksopenswaphookcfg/main.py b/src/modules/luksopenswaphookcfg/main.py index a30ae999b4..96dfea83be 100644 --- a/src/modules/luksopenswaphookcfg/main.py +++ b/src/modules/luksopenswaphookcfg/main.py @@ -3,9 +3,10 @@ # # === This file is part of Calamares - === # -# Copyright 2016, Teo Mrnjavac -# Copyright 2017, Alf Gaida -# Copyright 2019, Adriaan de Groot +# SPDX-FileCopyrightText: 2016 Teo Mrnjavac +# SPDX-FileCopyrightText: 2017 Alf Gaida +# SPDX-FileCopyrightText: 2019 Adriaan de Groot +# SPDX-License-Identifier: GPL-3.0-or-later # # Calamares is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff --git a/src/modules/mkinitfs/main.py b/src/modules/mkinitfs/main.py index 7deac39144..cc9d80a377 100644 --- a/src/modules/mkinitfs/main.py +++ b/src/modules/mkinitfs/main.py @@ -3,10 +3,11 @@ # # === This file is part of Calamares - === # -# Copyright 2014-2015, Philip Müller -# Copyright 2014, Teo Mrnjavac -# Copyright 2017, Alf Gaida -# Copyright 2019, Adriaan de Groot +# SPDX-FileCopyrightText: 2014-2015 Philip Müller +# SPDX-FileCopyrightText: 2014 Teo Mrnjavac +# SPDX-FileCopyrightText: 2017 Alf Gaida +# SPDX-FileCopyrightText: 2019 Adriaan de Groot +# SPDX-License-Identifier: GPL-3.0-or-later # # Calamares is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff --git a/src/modules/mount/main.py b/src/modules/mount/main.py index 4e16b43c3e..caa5ea8282 100644 --- a/src/modules/mount/main.py +++ b/src/modules/mount/main.py @@ -3,10 +3,11 @@ # # === This file is part of Calamares - === # -# Copyright 2014, Aurélien Gâteau -# Copyright 2017, Alf Gaida -# Copyright 2019, Adriaan de Groot -# Copyright 2019, Kevin Kofler +# SPDX-FileCopyrightText: 2014 Aurélien Gâteau +# SPDX-FileCopyrightText: 2017 Alf Gaida +# SPDX-FileCopyrightText: 2019 Adriaan de Groot +# SPDX-FileCopyrightText: 2019 Kevin Kofler +# SPDX-License-Identifier: GPL-3.0-or-later # # Calamares is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff --git a/src/modules/networkcfg/main.py b/src/modules/networkcfg/main.py index 00a264f534..2db819945e 100644 --- a/src/modules/networkcfg/main.py +++ b/src/modules/networkcfg/main.py @@ -3,10 +3,11 @@ # # === This file is part of Calamares - === # -# Copyright 2014, Philip Müller -# Copyright 2014, Teo Mrnjavac -# Copyright 2017, Alf Gaida -# Copyright 2019, Adriaan de Groot +# SPDX-FileCopyrightText: 2014 Philip Müller +# SPDX-FileCopyrightText: 2014 Teo Mrnjavac +# SPDX-FileCopyrightText: 2017 Alf Gaida +# SPDX-FileCopyrightText: 2019 Adriaan de Groot +# SPDX-License-Identifier: GPL-3.0-or-later # # Calamares is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff --git a/src/modules/openrcdmcryptcfg/main.py b/src/modules/openrcdmcryptcfg/main.py index 0362b421bd..83b3a4c40a 100644 --- a/src/modules/openrcdmcryptcfg/main.py +++ b/src/modules/openrcdmcryptcfg/main.py @@ -3,8 +3,9 @@ # # === This file is part of Calamares - === # -# Copyright 2017, Ghiunhan Mamut -# Copyright 2019, Adriaan de Groot +# SPDX-FileCopyrightText: 2017 Ghiunhan Mamut +# SPDX-FileCopyrightText: 2019 Adriaan de Groot +# SPDX-License-Identifier: GPL-3.0-or-later # # Calamares is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff --git a/src/modules/packages/main.py b/src/modules/packages/main.py index 908d778b2a..42cf3a4bd0 100644 --- a/src/modules/packages/main.py +++ b/src/modules/packages/main.py @@ -3,12 +3,13 @@ # # === This file is part of Calamares - === # -# Copyright 2014, Pier Luigi Fiorini -# Copyright 2015-2017, Teo Mrnjavac -# Copyright 2016-2017, Kyle Robbertze -# Copyright 2017, Alf Gaida -# Copyright 2018, Adriaan de Groot -# Copyright 2018, Philip Müller +# SPDX-FileCopyrightText: 2014 Pier Luigi Fiorini +# SPDX-FileCopyrightText: 2015-2017 Teo Mrnjavac +# SPDX-FileCopyrightText: 2016-2017 Kyle Robbertze +# SPDX-FileCopyrightText: 2017 Alf Gaida +# SPDX-FileCopyrightText: 2018 Adriaan de Groot +# SPDX-FileCopyrightText: 2018 Philip Müller +# SPDX-License-Identifier: GPL-3.0-or-later # # Calamares is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff --git a/src/modules/plymouthcfg/main.py b/src/modules/plymouthcfg/main.py index e224f5df0b..404a4651cd 100644 --- a/src/modules/plymouthcfg/main.py +++ b/src/modules/plymouthcfg/main.py @@ -3,10 +3,11 @@ # # === This file is part of Calamares - === # -# Copyright 2016, Artoo -# Copyright 2017, Alf Gaida -# Copyright 2018, Gabriel Craciunescu -# Copyright 2019, Adriaan de Groot +# SPDX-FileCopyrightText: 2016 Artoo +# SPDX-FileCopyrightText: 2017 Alf Gaida +# SPDX-FileCopyrightText: 2018 Gabriel Craciunescu +# SPDX-FileCopyrightText: 2019 Adriaan de Groot +# SPDX-License-Identifier: GPL-3.0-or-later # # Calamares is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff --git a/src/modules/rawfs/main.py b/src/modules/rawfs/main.py index 68f3c444e0..cdce1d784d 100644 --- a/src/modules/rawfs/main.py +++ b/src/modules/rawfs/main.py @@ -3,7 +3,8 @@ # # === This file is part of Calamares - === # -# Copyright 2019, Collabora Ltd +# SPDX-FileCopyrightText: 2019 Collabora Ltd +# SPDX-License-Identifier: GPL-3.0-or-later # # Calamares is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff --git a/src/modules/services-openrc/main.py b/src/modules/services-openrc/main.py index 23591fb844..f89369a7f1 100644 --- a/src/modules/services-openrc/main.py +++ b/src/modules/services-openrc/main.py @@ -3,10 +3,11 @@ # # === This file is part of Calamares - === # -# Copyright 2016, Artoo -# Copyright 2017, Philip Müller -# Copyright 2018, Artoo -# Copyright 2018-2019, Adriaan de Groot +# SPDX-FileCopyrightText: 2016 Artoo +# SPDX-FileCopyrightText: 2017 Philip Müller +# SPDX-FileCopyrightText: 2018 Artoo +# SPDX-FileCopyrightText: 2018-2019 Adriaan de Groot +# SPDX-License-Identifier: GPL-3.0-or-later # # Calamares is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff --git a/src/modules/services-systemd/main.py b/src/modules/services-systemd/main.py index cd13d9ce9d..8932bc7e59 100644 --- a/src/modules/services-systemd/main.py +++ b/src/modules/services-systemd/main.py @@ -3,10 +3,11 @@ # # === This file is part of Calamares - === # -# Copyright 2014, Philip Müller -# Copyright 2014, Teo Mrnjavac -# Copyright 2017, Alf Gaida -# Copyright 2018-2019, Adriaan de Groot +# SPDX-FileCopyrightText: 2014 Philip Müller +# SPDX-FileCopyrightText: 2014 Teo Mrnjavac +# SPDX-FileCopyrightText: 2017 Alf Gaida +# SPDX-FileCopyrightText: 2018-2019 Adriaan de Groot +# SPDX-License-Identifier: GPL-3.0-or-later # # Calamares is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff --git a/src/modules/umount/main.py b/src/modules/umount/main.py index 454222c5c9..ea09764533 100644 --- a/src/modules/umount/main.py +++ b/src/modules/umount/main.py @@ -3,9 +3,10 @@ # # === This file is part of Calamares - === # -# Copyright 2014, Aurélien Gâteau -# Copyright 2016, Anke Boersma -# Copyright 2018, Adriaan de Groot +# SPDX-FileCopyrightText: 2014 Aurélien Gâteau +# SPDX-FileCopyrightText: 2016 Anke Boersma +# SPDX-FileCopyrightText: 2018 Adriaan de Groot +# SPDX-License-Identifier: GPL-3.0-or-later # # Calamares is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff --git a/src/modules/unpackfs/main.py b/src/modules/unpackfs/main.py index 00de4165d9..bd69125a12 100644 --- a/src/modules/unpackfs/main.py +++ b/src/modules/unpackfs/main.py @@ -3,13 +3,14 @@ # # === This file is part of Calamares - === # -# Copyright 2014, Teo Mrnjavac -# Copyright 2014, Daniel Hillenbrand -# Copyright 2014, Philip Müller -# Copyright 2017, Alf Gaida -# Copyright 2019, Kevin Kofler -# Copyright 2020, Adriaan de Groot -# Copyright 2020, Gabriel Craciunescu +# SPDX-FileCopyrightText: 2014 Teo Mrnjavac +# SPDX-FileCopyrightText: 2014 Daniel Hillenbrand +# SPDX-FileCopyrightText: 2014 Philip Müller +# SPDX-FileCopyrightText: 2017 Alf Gaida +# SPDX-FileCopyrightText: 2019 Kevin Kofler +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-FileCopyrightText: 2020 Gabriel Craciunescu +# SPDX-License-Identifier: GPL-3.0-or-later # # Calamares is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff --git a/src/modules/unpackfs/runtests.sh b/src/modules/unpackfs/runtests.sh index be175e0cdf..2269b078a7 100644 --- a/src/modules/unpackfs/runtests.sh +++ b/src/modules/unpackfs/runtests.sh @@ -1,4 +1,12 @@ #! /bin/sh +# +# SPDX-FileCopyrightText: 2019 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause +# +# Test preparation for unpackfs; since there's a bunch +# of fiddly bits than need to be present for the tests, +# do that in a script rather than entirely in CTest. +# SRCDIR=$( dirname "$0" ) # For test 3 From 30a85668b727ae839345d5cf6cec917fad681e4e Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Sat, 22 Aug 2020 01:19:58 +0200 Subject: [PATCH 118/157] REUSE: (GPL-3.0-or-later) C++ modules --- src/modules/README.md | 5 + src/modules/contextualprocess/Binding.h | 3 +- .../ContextualProcessJob.cpp | 5 +- .../contextualprocess/ContextualProcessJob.h | 3 +- src/modules/contextualprocess/Tests.cpp | 3 +- src/modules/contextualprocess/Tests.h | 3 +- .../dracutlukscfg/DracutLuksCfgJob.cpp | 3 +- src/modules/dracutlukscfg/DracutLuksCfgJob.h | 5 +- src/modules/dummycpp/DummyCppJob.cpp | 7 +- src/modules/dummycpp/DummyCppJob.h | 5 +- src/modules/finished/FinishedPage.cpp | 9 +- src/modules/finished/FinishedPage.h | 5 +- src/modules/finished/FinishedViewStep.cpp | 7 +- src/modules/finished/FinishedViewStep.h | 5 +- src/modules/fsresizer/ResizeFSJob.cpp | 84 +- src/modules/fsresizer/ResizeFSJob.h | 34 +- src/modules/fsresizer/Tests.cpp | 25 +- src/modules/fsresizer/Tests.h | 3 +- src/modules/hostinfo/HostInfoJob.cpp | 7 +- src/modules/hostinfo/HostInfoJob.h | 3 +- src/modules/hostinfo/Tests.cpp | 9 +- src/modules/initcpio/InitcpioJob.cpp | 10 +- src/modules/initcpio/InitcpioJob.h | 3 +- src/modules/initcpio/Tests.cpp | 17 +- src/modules/initcpio/Tests.h | 3 +- src/modules/initramfs/InitramfsJob.cpp | 10 +- src/modules/initramfs/InitramfsJob.h | 3 +- src/modules/initramfs/Tests.cpp | 24 +- src/modules/initramfs/Tests.h | 3 +- src/modules/initramfscfg/encrypt_hook | 3 + src/modules/initramfscfg/encrypt_hook_nokey | 3 + .../InteractiveTerminalPage.cpp | 34 +- .../InteractiveTerminalPage.h | 5 +- .../InteractiveTerminalViewStep.cpp | 14 +- .../InteractiveTerminalViewStep.h | 7 +- src/modules/keyboard/Config.cpp | 5 +- src/modules/keyboard/Config.h | 5 +- src/modules/keyboard/KeyboardLayoutModel.cpp | 5 +- src/modules/keyboard/KeyboardLayoutModel.h | 3 +- src/modules/keyboard/KeyboardPage.cpp | 6 +- src/modules/keyboard/KeyboardPage.h | 6 +- src/modules/keyboard/KeyboardViewStep.cpp | 3 +- src/modules/keyboard/KeyboardViewStep.h | 5 +- src/modules/keyboard/README.md | 5 - src/modules/keyboard/SetKeyboardLayoutJob.cpp | 7 +- src/modules/keyboard/SetKeyboardLayoutJob.h | 5 +- .../keyboard/images/restore.png.license | 2 + src/modules/keyboard/kbd-model-map | 4 + .../keyboardwidget/keyboardglobal.cpp | 32 +- .../keyboard/keyboardwidget/keyboardglobal.h | 23 +- .../keyboardwidget/keyboardpreview.cpp | 386 +++++--- .../keyboard/keyboardwidget/keyboardpreview.h | 54 +- src/modules/keyboardq/KeyboardQmlViewStep.cpp | 5 +- src/modules/keyboardq/KeyboardQmlViewStep.h | 5 +- src/modules/license/LicensePage.cpp | 9 +- src/modules/license/LicensePage.h | 9 +- src/modules/license/LicenseViewStep.cpp | 5 +- src/modules/license/LicenseViewStep.h | 5 +- src/modules/license/LicenseWidget.cpp | 9 +- src/modules/license/LicenseWidget.h | 9 +- src/modules/license/README.md | 24 +- src/modules/locale/Config.cpp | 1 - src/modules/locale/Config.h | 1 - src/modules/locale/LCLocaleDialog.cpp | 5 +- src/modules/locale/LCLocaleDialog.h | 3 +- src/modules/locale/LocaleConfiguration.cpp | 5 +- src/modules/locale/LocaleConfiguration.h | 5 +- src/modules/locale/LocalePage.h | 5 +- src/modules/locale/LocaleViewStep.cpp | 5 +- src/modules/locale/LocaleViewStep.h | 5 +- src/modules/locale/SetTimezoneJob.cpp | 5 +- src/modules/locale/SetTimezoneJob.h | 3 +- src/modules/locale/images/bg.png.license | 2 + src/modules/locale/images/pin.png.license | 2 + .../locale/timezonewidget/TimeZoneImage.cpp | 3 +- .../locale/timezonewidget/TimeZoneImage.h | 3 +- .../locale/timezonewidget/timezonewidget.cpp | 6 +- .../locale/timezonewidget/timezonewidget.h | 6 +- src/modules/localeq/LocaleQmlViewStep.cpp | 5 +- src/modules/localeq/LocaleQmlViewStep.h | 3 +- src/modules/localeq/Map.qml | 3 +- src/modules/localeq/Offline.qml | 3 +- src/modules/localeq/i18n.qml | 3 +- .../img/chevron-left-solid.svg.license | 2 + src/modules/localeq/img/locale.svg.license | 2 + src/modules/localeq/img/minus.png.license | 2 + src/modules/localeq/img/pin.svg.license | 2 + src/modules/localeq/img/plus.png.license | 2 + src/modules/localeq/img/worldmap.png.license | 2 + src/modules/localeq/localeq.qml | 5 +- .../luksbootkeyfile/LuksBootKeyFileJob.cpp | 15 +- .../luksbootkeyfile/LuksBootKeyFileJob.h | 15 +- src/modules/machineid/MachineIdJob.cpp | 9 +- src/modules/machineid/MachineIdJob.h | 3 +- src/modules/machineid/Tests.cpp | 7 +- src/modules/machineid/Workers.cpp | 9 +- src/modules/machineid/Workers.h | 3 +- src/modules/netinstall/Config.cpp | 11 +- src/modules/netinstall/Config.h | 9 +- src/modules/netinstall/NetInstallPage.cpp | 11 +- src/modules/netinstall/NetInstallPage.h | 9 +- src/modules/netinstall/NetInstallViewStep.cpp | 9 +- src/modules/netinstall/NetInstallViewStep.h | 7 +- src/modules/netinstall/PackageModel.cpp | 5 +- src/modules/netinstall/PackageModel.h | 5 +- src/modules/netinstall/PackageTreeItem.cpp | 5 +- src/modules/netinstall/PackageTreeItem.h | 5 +- src/modules/netinstall/README.md | 6 - src/modules/netinstall/Tests.cpp | 3 +- src/modules/netinstall/netinstall.yaml | 3 + src/modules/notesqml/NotesQmlViewStep.cpp | 19 +- src/modules/notesqml/NotesQmlViewStep.h | 21 +- .../notesqml/examples/notesqml.qml.example | 100 +- src/modules/notesqml/notesqml.qml | 13 +- src/modules/oemid/IDJob.cpp | 44 +- src/modules/oemid/IDJob.h | 5 +- src/modules/oemid/OEMViewStep.cpp | 69 +- src/modules/oemid/OEMViewStep.h | 3 +- src/modules/packagechooser/ItemAppData.cpp | 3 +- src/modules/packagechooser/ItemAppData.h | 3 +- src/modules/packagechooser/ItemAppStream.cpp | 3 +- src/modules/packagechooser/ItemAppStream.h | 3 +- .../packagechooser/PackageChooserPage.cpp | 3 +- .../packagechooser/PackageChooserPage.h | 3 +- .../packagechooser/PackageChooserViewStep.cpp | 3 +- .../packagechooser/PackageChooserViewStep.h | 3 +- src/modules/packagechooser/PackageModel.cpp | 3 +- src/modules/packagechooser/PackageModel.h | 3 +- src/modules/packagechooser/Tests.cpp | 9 +- src/modules/packagechooser/Tests.h | 3 +- .../images/calamares.png.license | 2 + .../images/no-selection.png.license | 2 + src/modules/partition/README.md | 6 + .../partition/core/BootLoaderModel.cpp | 7 +- src/modules/partition/core/BootLoaderModel.h | 7 +- src/modules/partition/core/ColorUtils.cpp | 5 +- src/modules/partition/core/ColorUtils.h | 5 +- src/modules/partition/core/Config.cpp | 3 +- src/modules/partition/core/DeviceList.cpp | 5 +- src/modules/partition/core/DeviceList.h | 5 +- src/modules/partition/core/DeviceModel.cpp | 7 +- src/modules/partition/core/DeviceModel.h | 5 +- src/modules/partition/core/KPMHelpers.cpp | 5 +- src/modules/partition/core/KPMHelpers.h | 7 +- src/modules/partition/core/OsproberEntry.h | 5 +- src/modules/partition/core/PartUtils.cpp | 9 +- src/modules/partition/core/PartUtils.h | 7 +- .../partition/core/PartitionActions.cpp | 7 +- src/modules/partition/core/PartitionActions.h | 3 +- .../partition/core/PartitionCoreModule.cpp | 11 +- .../partition/core/PartitionCoreModule.h | 7 +- src/modules/partition/core/PartitionInfo.cpp | 5 +- src/modules/partition/core/PartitionInfo.h | 5 +- .../partition/core/PartitionLayout.cpp | 7 +- src/modules/partition/core/PartitionLayout.h | 5 +- src/modules/partition/core/PartitionModel.cpp | 5 +- src/modules/partition/core/PartitionModel.h | 5 +- src/modules/partition/gui/BootInfoWidget.cpp | 19 +- src/modules/partition/gui/BootInfoWidget.h | 5 +- src/modules/partition/gui/ChoicePage.cpp | 932 +++++++++--------- src/modules/partition/gui/ChoicePage.h | 7 +- .../partition/gui/CreatePartitionDialog.cpp | 130 +-- .../partition/gui/CreatePartitionDialog.h | 13 +- .../partition/gui/CreateVolumeGroupDialog.cpp | 3 +- .../partition/gui/CreateVolumeGroupDialog.h | 5 +- .../partition/gui/DeviceInfoWidget.cpp | 35 +- src/modules/partition/gui/DeviceInfoWidget.h | 5 +- .../gui/EditExistingPartitionDialog.cpp | 126 +-- .../gui/EditExistingPartitionDialog.h | 10 +- src/modules/partition/gui/EncryptWidget.cpp | 5 +- src/modules/partition/gui/EncryptWidget.h | 7 +- .../gui/ListPhysicalVolumeWidgetItem.cpp | 10 +- .../gui/ListPhysicalVolumeWidgetItem.h | 5 +- .../partition/gui/PartitionBarsView.cpp | 191 ++-- src/modules/partition/gui/PartitionBarsView.h | 7 +- .../partition/gui/PartitionDialogHelpers.cpp | 34 +- .../partition/gui/PartitionDialogHelpers.h | 19 +- .../partition/gui/PartitionLabelsView.cpp | 160 +-- .../partition/gui/PartitionLabelsView.h | 12 +- src/modules/partition/gui/PartitionPage.cpp | 226 +++-- src/modules/partition/gui/PartitionPage.h | 17 +- .../partition/gui/PartitionSizeController.cpp | 31 +- .../partition/gui/PartitionSizeController.h | 5 +- .../partition/gui/PartitionSplitterWidget.cpp | 3 +- .../partition/gui/PartitionSplitterWidget.h | 25 +- .../gui/PartitionViewSelectionFilter.h | 5 +- .../partition/gui/PartitionViewStep.cpp | 50 +- src/modules/partition/gui/PartitionViewStep.h | 20 +- src/modules/partition/gui/ReplaceWidget.cpp | 146 ++- src/modules/partition/gui/ReplaceWidget.h | 15 +- .../partition/gui/ResizeVolumeGroupDialog.cpp | 16 +- .../partition/gui/ResizeVolumeGroupDialog.h | 9 +- src/modules/partition/gui/ScanningDialog.cpp | 36 +- src/modules/partition/gui/ScanningDialog.h | 27 +- .../partition/gui/VolumeGroupBaseDialog.cpp | 84 +- .../partition/gui/VolumeGroupBaseDialog.h | 12 +- src/modules/partition/jobs/ClearMountsJob.cpp | 7 +- src/modules/partition/jobs/ClearMountsJob.h | 3 +- .../partition/jobs/ClearTempMountsJob.cpp | 3 +- .../partition/jobs/ClearTempMountsJob.h | 3 +- .../partition/jobs/CreatePartitionJob.cpp | 7 +- .../partition/jobs/CreatePartitionJob.h | 5 +- .../jobs/CreatePartitionTableJob.cpp | 7 +- .../partition/jobs/CreatePartitionTableJob.h | 5 +- .../partition/jobs/CreateVolumeGroupJob.cpp | 3 +- .../partition/jobs/CreateVolumeGroupJob.h | 3 +- .../jobs/DeactivateVolumeGroupJob.cpp | 3 +- .../partition/jobs/DeactivateVolumeGroupJob.h | 3 +- .../partition/jobs/DeletePartitionJob.cpp | 7 +- .../partition/jobs/DeletePartitionJob.h | 5 +- .../partition/jobs/FillGlobalStorageJob.cpp | 7 +- .../partition/jobs/FillGlobalStorageJob.h | 5 +- .../partition/jobs/FormatPartitionJob.cpp | 7 +- .../partition/jobs/FormatPartitionJob.h | 5 +- src/modules/partition/jobs/PartitionJob.cpp | 3 +- src/modules/partition/jobs/PartitionJob.h | 5 +- .../partition/jobs/RemoveVolumeGroupJob.cpp | 3 +- .../partition/jobs/RemoveVolumeGroupJob.h | 3 +- .../partition/jobs/ResizePartitionJob.cpp | 7 +- .../partition/jobs/ResizePartitionJob.h | 5 +- .../partition/jobs/ResizeVolumeGroupJob.cpp | 3 +- .../partition/jobs/ResizeVolumeGroupJob.h | 3 +- .../partition/jobs/SetPartitionFlagsJob.cpp | 9 +- .../partition/jobs/SetPartitionFlagsJob.h | 5 +- .../partition/tests/ClearMountsJobTests.cpp | 3 +- .../partition/tests/ClearMountsJobTests.h | 3 +- .../partition/tests/PartitionJobTests.cpp | 5 +- .../partition/tests/PartitionJobTests.h | 3 +- src/modules/plasmalnf/PlasmaLnfJob.cpp | 32 +- src/modules/plasmalnf/PlasmaLnfJob.h | 5 +- src/modules/plasmalnf/PlasmaLnfPage.cpp | 57 +- src/modules/plasmalnf/PlasmaLnfPage.h | 7 +- src/modules/plasmalnf/PlasmaLnfViewStep.cpp | 37 +- src/modules/plasmalnf/PlasmaLnfViewStep.h | 9 +- src/modules/plasmalnf/ThemeInfo.h | 22 +- src/modules/plasmalnf/ThemeWidget.cpp | 28 +- src/modules/plasmalnf/ThemeWidget.h | 6 +- .../plasmalnf/view-preview.png.license | 2 + .../plasmalnf/view-preview.svg.license | 2 + src/modules/removeuser/RemoveUserJob.cpp | 7 +- src/modules/removeuser/RemoveUserJob.h | 3 +- src/modules/shellprocess/ShellProcessJob.cpp | 3 +- src/modules/shellprocess/ShellProcessJob.h | 3 +- src/modules/shellprocess/Tests.cpp | 3 +- src/modules/shellprocess/Tests.h | 3 +- src/modules/summary/SummaryPage.cpp | 37 +- src/modules/summary/SummaryPage.h | 5 +- src/modules/summary/SummaryViewStep.cpp | 8 +- src/modules/summary/SummaryViewStep.h | 5 +- src/modules/tracking/Config.cpp | 3 +- src/modules/tracking/Config.h | 3 +- src/modules/tracking/Tests.cpp | 1 - src/modules/tracking/TrackingJobs.cpp | 3 +- src/modules/tracking/TrackingJobs.h | 3 +- src/modules/tracking/TrackingPage.cpp | 3 +- src/modules/tracking/TrackingPage.h | 3 +- src/modules/tracking/TrackingType.h | 3 +- src/modules/tracking/TrackingViewStep.cpp | 3 +- src/modules/tracking/TrackingViewStep.h | 3 +- .../tracking/level-install.svg.license | 2 + .../tracking/level-machine.svg.license | 2 + src/modules/tracking/level-none.svg.license | 2 + src/modules/tracking/level-user.svg.license | 2 + src/modules/users/CheckPWQuality.h | 3 +- src/modules/users/Config.cpp | 1 - src/modules/users/Config.h | 1 - src/modules/users/CreateUserJob.cpp | 1 - src/modules/users/CreateUserJob.h | 3 +- src/modules/users/SetHostNameJob.cpp | 7 +- src/modules/users/SetHostNameJob.h | 7 +- src/modules/users/SetPasswordJob.cpp | 5 +- src/modules/users/SetPasswordJob.h | 5 +- src/modules/users/UsersPage.cpp | 9 +- src/modules/users/UsersPage.h | 6 +- src/modules/users/UsersViewStep.cpp | 7 +- src/modules/users/UsersViewStep.h | 5 +- src/modules/users/images/invalid.png.license | 2 + src/modules/users/images/valid.png.license | 2 + src/modules/usersq/UsersQmlViewStep.cpp | 9 +- src/modules/usersq/UsersQmlViewStep.h | 7 +- src/modules/webview/WebViewConfig.h.in | 3 + src/modules/webview/WebViewStep.cpp | 43 +- src/modules/webview/WebViewStep.h | 16 +- src/modules/welcome/Config.cpp | 3 +- src/modules/welcome/Config.h | 3 +- src/modules/welcome/WelcomePage.cpp | 7 +- src/modules/welcome/WelcomePage.h | 5 +- src/modules/welcome/WelcomeViewStep.cpp | 5 +- src/modules/welcome/WelcomeViewStep.h | 3 +- .../welcome/checker/CheckerContainer.cpp | 7 +- .../welcome/checker/CheckerContainer.h | 7 +- .../welcome/checker/GeneralRequirements.cpp | 9 +- .../welcome/checker/GeneralRequirements.h | 5 +- src/modules/welcome/checker/ResultWidget.cpp | 5 +- src/modules/welcome/checker/ResultWidget.h | 5 +- .../welcome/checker/ResultsListWidget.cpp | 5 +- .../welcome/checker/ResultsListWidget.h | 5 +- src/modules/welcome/checker/partman_devices.c | 3 +- src/modules/welcome/checker/partman_devices.h | 3 +- .../welcome/language-icon-128px.png.license | 2 + .../welcome/language-icon-48px.png.license | 2 + src/modules/welcomeq/Recommended.qml | 5 +- src/modules/welcomeq/Requirements.qml | 5 +- src/modules/welcomeq/WelcomeQmlViewStep.cpp | 5 +- src/modules/welcomeq/WelcomeQmlViewStep.h | 3 +- src/modules/welcomeq/about.qml | 25 +- .../img/chevron-left-solid.svg.license | 2 + .../img/language-icon-48px.png.license | 2 + src/modules/welcomeq/img/squid.png.license | 2 + src/modules/welcomeq/release_notes.qml | 7 +- src/modules/welcomeq/welcomeq.qml | 5 +- 311 files changed, 2747 insertions(+), 2199 deletions(-) delete mode 100644 src/modules/keyboard/README.md create mode 100644 src/modules/keyboard/images/restore.png.license create mode 100644 src/modules/locale/images/bg.png.license create mode 100644 src/modules/locale/images/pin.png.license create mode 100644 src/modules/localeq/img/chevron-left-solid.svg.license create mode 100644 src/modules/localeq/img/locale.svg.license create mode 100644 src/modules/localeq/img/minus.png.license create mode 100644 src/modules/localeq/img/pin.svg.license create mode 100644 src/modules/localeq/img/plus.png.license create mode 100644 src/modules/localeq/img/worldmap.png.license delete mode 100644 src/modules/netinstall/README.md create mode 100644 src/modules/packagechooser/images/calamares.png.license create mode 100644 src/modules/packagechooser/images/no-selection.png.license create mode 100644 src/modules/plasmalnf/view-preview.png.license create mode 100644 src/modules/plasmalnf/view-preview.svg.license create mode 100644 src/modules/tracking/level-install.svg.license create mode 100644 src/modules/tracking/level-machine.svg.license create mode 100644 src/modules/tracking/level-none.svg.license create mode 100644 src/modules/tracking/level-user.svg.license create mode 100644 src/modules/users/images/invalid.png.license create mode 100644 src/modules/users/images/valid.png.license create mode 100644 src/modules/welcome/language-icon-128px.png.license create mode 100644 src/modules/welcome/language-icon-48px.png.license create mode 100644 src/modules/welcomeq/img/chevron-left-solid.svg.license create mode 100644 src/modules/welcomeq/img/language-icon-48px.png.license create mode 100644 src/modules/welcomeq/img/squid.png.license diff --git a/src/modules/README.md b/src/modules/README.md index bf74506ee4..89085e54ee 100644 --- a/src/modules/README.md +++ b/src/modules/README.md @@ -1,5 +1,10 @@ # Calamares modules + + Calamares modules are plugins that provide features like installer pages, batch jobs, etc. An installer page (visible to the user) is called a "view", while other modules are "jobs". diff --git a/src/modules/contextualprocess/Binding.h b/src/modules/contextualprocess/Binding.h index 25b5c7547d..5b6f09087a 100644 --- a/src/modules/contextualprocess/Binding.h +++ b/src/modules/contextualprocess/Binding.h @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2017-2020, Adriaan de Groot + * SPDX-FileCopyrightText: 2017-2020 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/contextualprocess/ContextualProcessJob.cpp b/src/modules/contextualprocess/ContextualProcessJob.cpp index 1173a3071a..f970740ca5 100644 --- a/src/modules/contextualprocess/ContextualProcessJob.cpp +++ b/src/modules/contextualprocess/ContextualProcessJob.cpp @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2017-2020, Adriaan de Groot + * SPDX-FileCopyrightText: 2017-2020 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -77,7 +78,7 @@ fetch( QString& value, QStringList& selector, int index, const QVariant& v ) } const QVariantMap map = v.toMap(); const QString& key = selector.at( index ); - if ( index == selector.length() - 1) + if ( index == selector.length() - 1 ) { value = map.value( key ).toString(); return map.contains( key ); diff --git a/src/modules/contextualprocess/ContextualProcessJob.h b/src/modules/contextualprocess/ContextualProcessJob.h index 5ab4b935e2..e926f699de 100644 --- a/src/modules/contextualprocess/ContextualProcessJob.h +++ b/src/modules/contextualprocess/ContextualProcessJob.h @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2017-2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2017-2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/contextualprocess/Tests.cpp b/src/modules/contextualprocess/Tests.cpp index 50ce9f4004..97277dfce7 100644 --- a/src/modules/contextualprocess/Tests.cpp +++ b/src/modules/contextualprocess/Tests.cpp @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2017-2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2017-2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/contextualprocess/Tests.h b/src/modules/contextualprocess/Tests.h index fd705a103e..5b27d497d3 100644 --- a/src/modules/contextualprocess/Tests.h +++ b/src/modules/contextualprocess/Tests.h @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/dracutlukscfg/DracutLuksCfgJob.cpp b/src/modules/dracutlukscfg/DracutLuksCfgJob.cpp index e151acc0c0..18bbcae884 100644 --- a/src/modules/dracutlukscfg/DracutLuksCfgJob.cpp +++ b/src/modules/dracutlukscfg/DracutLuksCfgJob.cpp @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2016, Kevin Kofler + * SPDX-FileCopyrightText: 2016 Kevin Kofler + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/dracutlukscfg/DracutLuksCfgJob.h b/src/modules/dracutlukscfg/DracutLuksCfgJob.h index 52b290d1c0..b10a8647e4 100644 --- a/src/modules/dracutlukscfg/DracutLuksCfgJob.h +++ b/src/modules/dracutlukscfg/DracutLuksCfgJob.h @@ -1,7 +1,8 @@ /* === This file is part of Calamares - === * - * Copyright 2016, Kevin Kofler - * Copyright 2017, Adriaan de Groot + * SPDX-FileCopyrightText: 2016 Kevin Kofler + * SPDX-FileCopyrightText: 2017 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/dummycpp/DummyCppJob.cpp b/src/modules/dummycpp/DummyCppJob.cpp index 5a2ca18037..b9765ac011 100644 --- a/src/modules/dummycpp/DummyCppJob.cpp +++ b/src/modules/dummycpp/DummyCppJob.cpp @@ -1,8 +1,9 @@ /* === This file is part of Calamares - === * - * Copyright 2014, Teo Mrnjavac (original dummypython code) - * Copyright 2016, Kevin Kofler - * Copyright 2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2014 Teo Mrnjavac (original dummypython code) + * SPDX-FileCopyrightText: 2016 Kevin Kofler + * SPDX-FileCopyrightText: 2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/dummycpp/DummyCppJob.h b/src/modules/dummycpp/DummyCppJob.h index bf8625950c..1b6f0eeb5b 100644 --- a/src/modules/dummycpp/DummyCppJob.h +++ b/src/modules/dummycpp/DummyCppJob.h @@ -1,7 +1,8 @@ /* === This file is part of Calamares - === * - * Copyright 2016, Kevin Kofler - * Copyright 2017, Adriaan de Groot + * SPDX-FileCopyrightText: 2016 Kevin Kofler + * SPDX-FileCopyrightText: 2017 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/finished/FinishedPage.cpp b/src/modules/finished/FinishedPage.cpp index e2ad4a24f7..bdcbb9a851 100644 --- a/src/modules/finished/FinishedPage.cpp +++ b/src/modules/finished/FinishedPage.cpp @@ -1,8 +1,9 @@ /* === This file is part of Calamares - === * - * Copyright 2014-2015, Teo Mrnjavac - * Copyright 2017-2018, Adriaan de Groot - * Copyright 2019, Collabora Ltd + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017-2018 Adriaan de Groot + * SPDX-FileCopyrightText: 2019 Collabora Ltd + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -100,7 +101,7 @@ FinishedPage::setUpRestart() cDebug() << "FinishedPage::setUpRestart(), Quit button" << "setup=" << FinishedViewStep::modeName( m_mode ) << "command=" << m_restartNowCommand; - connect( qApp, &QApplication::aboutToQuit, [ this ]() { + connect( qApp, &QApplication::aboutToQuit, [this]() { if ( ui->restartCheckBox->isVisible() && ui->restartCheckBox->isChecked() ) { cDebug() << "Running restart command" << m_restartNowCommand; diff --git a/src/modules/finished/FinishedPage.h b/src/modules/finished/FinishedPage.h index 40f437e078..90ce9383a2 100644 --- a/src/modules/finished/FinishedPage.h +++ b/src/modules/finished/FinishedPage.h @@ -1,7 +1,8 @@ /* === This file is part of Calamares - === * - * Copyright 2014-2015, Teo Mrnjavac - * Copyright 2017, Adriaan de Groot + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/finished/FinishedViewStep.cpp b/src/modules/finished/FinishedViewStep.cpp index 7e4cf1c6b1..0ea2bbe4c7 100644 --- a/src/modules/finished/FinishedViewStep.cpp +++ b/src/modules/finished/FinishedViewStep.cpp @@ -1,8 +1,9 @@ /* === This file is part of Calamares - === * - * Copyright 2014-2015, Teo Mrnjavac - * Copyright 2017, 2019, Adriaan de Groot - * Copyright 2019, Collabora Ltd + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017 2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2019 Collabora Ltd + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/finished/FinishedViewStep.h b/src/modules/finished/FinishedViewStep.h index 8f57d0210d..f19304935e 100644 --- a/src/modules/finished/FinishedViewStep.h +++ b/src/modules/finished/FinishedViewStep.h @@ -1,7 +1,8 @@ /* === This file is part of Calamares - === * - * Copyright 2014-2015, Teo Mrnjavac - * Copyright 2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/fsresizer/ResizeFSJob.cpp b/src/modules/fsresizer/ResizeFSJob.cpp index 217f1315e6..d7003c76d0 100644 --- a/src/modules/fsresizer/ResizeFSJob.cpp +++ b/src/modules/fsresizer/ResizeFSJob.cpp @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -26,8 +27,8 @@ #include "utils/Units.h" #include "utils/Variant.h" -#include #include +#include #include #include @@ -46,9 +47,7 @@ ResizeFSJob::ResizeFSJob( QObject* parent ) } -ResizeFSJob::~ResizeFSJob() -{ -} +ResizeFSJob::~ResizeFSJob() {} QString @@ -62,7 +61,8 @@ ResizeFSJob::findPartition() { using DeviceList = QList< Device* >; #if defined( WITH_KPMCORE4API ) - DeviceList devices = m_kpmcore.backend()->scanDevices( /* not includeReadOnly, not includeLoopback */ ScanFlag(0) ); + DeviceList devices + = m_kpmcore.backend()->scanDevices( /* not includeReadOnly, not includeLoopback */ ScanFlag( 0 ) ); #else DeviceList devices = m_kpmcore.backend()->scanDevices( /* excludeReadOnly */ true ); #endif @@ -70,14 +70,17 @@ ResizeFSJob::findPartition() cDebug() << "ResizeFSJob found" << devices.count() << "devices."; for ( DeviceList::iterator dev_it = devices.begin(); dev_it != devices.end(); ++dev_it ) { - if ( ! ( *dev_it ) ) + if ( !( *dev_it ) ) + { continue; + } cDebug() << "ResizeFSJob found" << ( *dev_it )->deviceNode(); - for ( auto part_it = PartitionIterator::begin( *dev_it ); part_it != PartitionIterator::end( *dev_it ); ++part_it ) + for ( auto part_it = PartitionIterator::begin( *dev_it ); part_it != PartitionIterator::end( *dev_it ); + ++part_it ) { - cDebug() << Logger::SubEntry << ( *part_it )->mountPoint() << "on" << ( *part_it )->deviceNode(); - if ( ( !m_fsname.isEmpty() && ( *part_it )->mountPoint() == m_fsname ) || - ( !m_devicename.isEmpty() && ( *part_it )->deviceNode() == m_devicename ) ) + cDebug() << Logger::SubEntry << ( *part_it )->mountPoint() << "on" << ( *part_it )->deviceNode(); + if ( ( !m_fsname.isEmpty() && ( *part_it )->mountPoint() == m_fsname ) + || ( !m_devicename.isEmpty() && ( *part_it )->deviceNode() == m_devicename ) ) { cDebug() << Logger::SubEntry << "matched configuration dev=" << m_devicename << "fs=" << m_fsname; return PartitionMatch( *dev_it, *part_it ); @@ -101,11 +104,17 @@ qint64 ResizeFSJob::findGrownEnd( ResizeFSJob::PartitionMatch m ) { if ( !m.first || !m.second ) + { return -1; // Missing device data + } if ( !ResizeOperation::canGrow( m.second ) ) + { return -1; // Operation is doomed + } if ( !m_size.isValid() ) + { return -1; // Must have a grow-size + } cDebug() << "Containing device size" << m.first->totalLogical(); qint64 last_available = m.first->totalLogical() - 1; // Numbered from 0 @@ -170,12 +179,11 @@ ResizeFSJob::exec() tr( "Invalid configuration" ), tr( "The file-system resize job has an invalid configuration and will not run." ) ); - if ( !m_kpmcore) + if ( !m_kpmcore ) { cWarning() << "Could not load KPMCore backend (2)."; - return Calamares::JobResult::error( - tr( "KPMCore not Available" ), - tr( "Calamares cannot start KPMCore for the file-system resize job." ) ); + return Calamares::JobResult::error( tr( "KPMCore not Available" ), + tr( "Calamares cannot start KPMCore for the file-system resize job." ) ); } m_kpmcore.backend()->initFSSupport(); // Might not be enough, see below @@ -184,34 +192,32 @@ ResizeFSJob::exec() if ( !m.first || !m.second ) return Calamares::JobResult::error( tr( "Resize Failed" ), - !m_fsname.isEmpty() ? tr( "The filesystem %1 could not be found in this system, and cannot be resized." ).arg( m_fsname ) - : tr( "The device %1 could not be found in this system, and cannot be resized." ).arg( m_devicename ) ); + !m_fsname.isEmpty() + ? tr( "The filesystem %1 could not be found in this system, and cannot be resized." ).arg( m_fsname ) + : tr( "The device %1 could not be found in this system, and cannot be resized." ).arg( m_devicename ) ); m.second->fileSystem().init(); // Initialize support for specific FS if ( !ResizeOperation::canGrow( m.second ) ) { cDebug() << "canGrow() returned false."; - return Calamares::JobResult::error( - tr( "Resize Failed" ), - !m_fsname.isEmpty() ? tr( "The filesystem %1 cannot be resized." ).arg( m_fsname ) - : tr( "The device %1 cannot be resized." ).arg( m_devicename ) ); + return Calamares::JobResult::error( tr( "Resize Failed" ), + !m_fsname.isEmpty() + ? tr( "The filesystem %1 cannot be resized." ).arg( m_fsname ) + : tr( "The device %1 cannot be resized." ).arg( m_devicename ) ); } qint64 new_end = findGrownEnd( m ); - cDebug() << "Resize from" - << m.second->firstSector() << '-' << m.second->lastSector() - << '(' << m.second->length() << ')' - << "to -" << new_end; + cDebug() << "Resize from" << m.second->firstSector() << '-' << m.second->lastSector() << '(' << m.second->length() + << ')' << "to -" << new_end; if ( new_end < 0 ) - return Calamares::JobResult::error( - tr( "Resize Failed" ), - !m_fsname.isEmpty() ? tr( "The filesystem %1 cannot be resized." ).arg( m_fsname ) - : tr( "The device %1 cannot be resized." ).arg( m_devicename ) ); + return Calamares::JobResult::error( tr( "Resize Failed" ), + !m_fsname.isEmpty() + ? tr( "The filesystem %1 cannot be resized." ).arg( m_fsname ) + : tr( "The device %1 cannot be resized." ).arg( m_devicename ) ); if ( new_end == 0 ) { - cWarning() << "Resize operation on" << m_fsname << m_devicename - << "skipped as not-useful."; + cWarning() << "Resize operation on" << m_fsname << m_devicename << "skipped as not-useful."; if ( m_required ) return Calamares::JobResult::error( tr( "Resize Failed" ), @@ -226,13 +232,13 @@ ResizeFSJob::exec() ResizeOperation op( *m.first, *m.second, m.second->firstSector(), new_end ); Report op_report( nullptr ); if ( op.execute( op_report ) ) + { cDebug() << "Resize operation OK."; + } else { cDebug() << "Resize failed." << op_report.output(); - return Calamares::JobResult::error( - tr( "Resize Failed" ), - op_report.toText() ); + return Calamares::JobResult::error( tr( "Resize Failed" ), op_report.toText() ); } } @@ -243,8 +249,8 @@ ResizeFSJob::exec() void ResizeFSJob::setConfigurationMap( const QVariantMap& configurationMap ) { - m_fsname = configurationMap["fs"].toString(); - m_devicename = configurationMap["dev"].toString(); + m_fsname = configurationMap[ "fs" ].toString(); + m_devicename = configurationMap[ "dev" ].toString(); if ( m_fsname.isEmpty() && m_devicename.isEmpty() ) { @@ -252,10 +258,10 @@ ResizeFSJob::setConfigurationMap( const QVariantMap& configurationMap ) return; } - m_size = PartitionSize( configurationMap["size"].toString() ); - m_atleast = PartitionSize( configurationMap["atleast"].toString() ); + m_size = PartitionSize( configurationMap[ "size" ].toString() ); + m_atleast = PartitionSize( configurationMap[ "atleast" ].toString() ); m_required = CalamaresUtils::getBool( configurationMap, "required", false ); } -CALAMARES_PLUGIN_FACTORY_DEFINITION( ResizeFSJobFactory, registerPlugin(); ) +CALAMARES_PLUGIN_FACTORY_DEFINITION( ResizeFSJobFactory, registerPlugin< ResizeFSJob >(); ) diff --git a/src/modules/fsresizer/ResizeFSJob.h b/src/modules/fsresizer/ResizeFSJob.h index f7ff676cdd..5bc810370e 100644 --- a/src/modules/fsresizer/ResizeFSJob.h +++ b/src/modules/fsresizer/ResizeFSJob.h @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -51,26 +52,13 @@ class PLUGINDLLEXPORT ResizeFSJob : public Calamares::CppJob void setConfigurationMap( const QVariantMap& configurationMap ) override; /** @brief Is the configuration of this job valid? */ - bool isValid() const - { - return ( !m_fsname.isEmpty() || !m_devicename.isEmpty() ) && - m_size.isValid(); - } - - QString name() const - { - return m_fsname.isEmpty() ? m_devicename : m_fsname; - } - - PartitionSize size() const - { - return m_size; - } - - PartitionSize minimumSize() const - { - return m_atleast; - } + bool isValid() const { return ( !m_fsname.isEmpty() || !m_devicename.isEmpty() ) && m_size.isValid(); } + + QString name() const { return m_fsname.isEmpty() ? m_devicename : m_fsname; } + + PartitionSize size() const { return m_size; } + + PartitionSize minimumSize() const { return m_atleast; } private: CalamaresUtils::Partition::KPMManager m_kpmcore; @@ -80,7 +68,7 @@ class PLUGINDLLEXPORT ResizeFSJob : public Calamares::CppJob QString m_devicename; bool m_required; - using PartitionMatch = QPair; + using PartitionMatch = QPair< Device*, Partition* >; /** @brief Find the configured FS */ PartitionMatch findPartition(); @@ -90,4 +78,4 @@ class PLUGINDLLEXPORT ResizeFSJob : public Calamares::CppJob CALAMARES_PLUGIN_FACTORY_DECLARATION( ResizeFSJobFactory ) -#endif // RESIZEFSJOB_H +#endif // RESIZEFSJOB_H diff --git a/src/modules/fsresizer/Tests.cpp b/src/modules/fsresizer/Tests.cpp index 42d587631f..a7be5dab8a 100644 --- a/src/modules/fsresizer/Tests.cpp +++ b/src/modules/fsresizer/Tests.cpp @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2017-2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2017-2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -36,20 +37,17 @@ using SizeUnit = CalamaresUtils::Partition::SizeUnit; QTEST_GUILESS_MAIN( FSResizerTests ) -FSResizerTests::FSResizerTests() -{ -} +FSResizerTests::FSResizerTests() {} -FSResizerTests::~FSResizerTests() -{ -} +FSResizerTests::~FSResizerTests() {} void FSResizerTests::initTestCase() { } -void FSResizerTests::testConfigurationRobust() +void +FSResizerTests::testConfigurationRobust() { ResizeFSJob j; @@ -72,7 +70,8 @@ atleast: 600MiB QCOMPARE( j.minimumSize().value(), 0 ); } -void FSResizerTests::testConfigurationValues() +void +FSResizerTests::testConfigurationValues() { ResizeFSJob j; @@ -84,7 +83,7 @@ atleast: 600MiB )" ); j.setConfigurationMap( CalamaresUtils::yamlMapToVariant( doc0 ) ); QVERIFY( !j.name().isEmpty() ); - QCOMPARE( j.name(), QString("/") ); + QCOMPARE( j.name(), QString( "/" ) ); QCOMPARE( j.size().unit(), SizeUnit::Percent ); QCOMPARE( j.minimumSize().unit(), SizeUnit::MiB ); QCOMPARE( j.size().value(), 100 ); @@ -99,7 +98,7 @@ atleast: 127 % )" ); j.setConfigurationMap( CalamaresUtils::yamlMapToVariant( doc0 ) ); QVERIFY( !j.name().isEmpty() ); - QCOMPARE( j.name(), QString("/") ); + QCOMPARE( j.name(), QString( "/" ) ); QCOMPARE( j.size().unit(), SizeUnit::MiB ); QCOMPARE( j.minimumSize().unit(), SizeUnit::None ); QCOMPARE( j.size().value(), 72 ); @@ -113,7 +112,7 @@ atleast: 127 % )" ); j.setConfigurationMap( CalamaresUtils::yamlMapToVariant( doc0 ) ); QVERIFY( !j.name().isEmpty() ); - QCOMPARE( j.name(), QString("/dev/m00") ); + QCOMPARE( j.name(), QString( "/dev/m00" ) ); QCOMPARE( j.size().unit(), SizeUnit::MiB ); QCOMPARE( j.minimumSize().unit(), SizeUnit::None ); QCOMPARE( j.size().value(), 72 ); @@ -128,7 +127,7 @@ size: 71MiB )" ); j.setConfigurationMap( CalamaresUtils::yamlMapToVariant( doc0 ) ); QVERIFY( !j.name().isEmpty() ); - QCOMPARE( j.name(), QString("/") ); + QCOMPARE( j.name(), QString( "/" ) ); QCOMPARE( j.size().unit(), SizeUnit::MiB ); QCOMPARE( j.minimumSize().unit(), SizeUnit::None ); QCOMPARE( j.size().value(), 71 ); diff --git a/src/modules/fsresizer/Tests.h b/src/modules/fsresizer/Tests.h index 958c0e655d..24ac0bc8a3 100644 --- a/src/modules/fsresizer/Tests.h +++ b/src/modules/fsresizer/Tests.h @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/hostinfo/HostInfoJob.cpp b/src/modules/hostinfo/HostInfoJob.cpp index 90c9cd5152..02320c7ac9 100644 --- a/src/modules/hostinfo/HostInfoJob.cpp +++ b/src/modules/hostinfo/HostInfoJob.cpp @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -123,7 +124,7 @@ hostCPUmatchARM( const QString& s ) * silicon. For instance, a list from lscpu-arm.c (Linux kernel) * shows this: * -static const struct hw_impl hw_implementer[] = { + static const struct hw_impl hw_implementer[] = { { 0x41, arm_part, "ARM" }, { 0x42, brcm_part, "Broadcom" }, { 0x43, cavium_part, "Cavium" }, @@ -137,7 +138,7 @@ static const struct hw_impl hw_implementer[] = { { 0x66, faraday_part, "Faraday" }, { 0x69, intel_part, "Intel" }, { -1, unknown_part, "unknown" }, -}; + }; * * Since the specific implementor isn't interesting, just * map everything to "ARM". diff --git a/src/modules/hostinfo/HostInfoJob.h b/src/modules/hostinfo/HostInfoJob.h index 5db169b0e4..bf519e953e 100644 --- a/src/modules/hostinfo/HostInfoJob.h +++ b/src/modules/hostinfo/HostInfoJob.h @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/hostinfo/Tests.cpp b/src/modules/hostinfo/Tests.cpp index 7ab797ed41..883bddf283 100644 --- a/src/modules/hostinfo/Tests.cpp +++ b/src/modules/hostinfo/Tests.cpp @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -63,8 +64,8 @@ HostInfoTests::testHostOS() // This is a lousy test, too: the implementation reads /proc/cpuinfo // and that's the only way we could use, too, to find what the "right" // answer is. - QStringList x86cpunames{ QStringLiteral( "Intel" ), QStringLiteral( "AMD" ) }; - QStringList armcpunames{ QStringLiteral( "ARM" ) }; + QStringList x86cpunames { QStringLiteral( "Intel" ), QStringLiteral( "AMD" ) }; + QStringList armcpunames { QStringLiteral( "ARM" ) }; const QString cpu = hostCPU(); QVERIFY( x86cpunames.contains( cpu ) || armcpunames.contains( cpu ) ); @@ -83,7 +84,7 @@ HostInfoTests::testHostOS() } else { - QCOMPARE( cpu, QString( "Unknown CPU modalias '%1'" ).arg(cpumodalias) ); + QCOMPARE( cpu, QString( "Unknown CPU modalias '%1'" ).arg( cpumodalias ) ); } } } diff --git a/src/modules/initcpio/InitcpioJob.cpp b/src/modules/initcpio/InitcpioJob.cpp index 38f3a89611..ae910995ca 100644 --- a/src/modules/initcpio/InitcpioJob.cpp +++ b/src/modules/initcpio/InitcpioJob.cpp @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -88,8 +89,11 @@ InitcpioJob::setConfigurationMap( const QVariantMap& configurationMap ) } else if ( m_kernel == "$uname" ) { - auto r = CalamaresUtils::System::runCommand( - CalamaresUtils::System::RunLocation::RunInHost, { "/bin/uname", "-r" }, QString(), QString(), std::chrono::seconds( 3 ) ); + auto r = CalamaresUtils::System::runCommand( CalamaresUtils::System::RunLocation::RunInHost, + { "/bin/uname", "-r" }, + QString(), + QString(), + std::chrono::seconds( 3 ) ); if ( r.getExitCode() == 0 ) { m_kernel = r.getOutput(); diff --git a/src/modules/initcpio/InitcpioJob.h b/src/modules/initcpio/InitcpioJob.h index cdc48f6ce6..ae8ff47c34 100644 --- a/src/modules/initcpio/InitcpioJob.h +++ b/src/modules/initcpio/InitcpioJob.h @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/initcpio/Tests.cpp b/src/modules/initcpio/Tests.cpp index e0590ba258..83b10388db 100644 --- a/src/modules/initcpio/Tests.cpp +++ b/src/modules/initcpio/Tests.cpp @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -31,23 +32,20 @@ #include extern void fixPermissions( const QDir& d ); - + QTEST_GUILESS_MAIN( InitcpioTests ) -InitcpioTests::InitcpioTests() -{ -} +InitcpioTests::InitcpioTests() {} -InitcpioTests::~InitcpioTests() -{ -} +InitcpioTests::~InitcpioTests() {} void InitcpioTests::initTestCase() { } -void InitcpioTests::testFixPermissions() +void +InitcpioTests::testFixPermissions() { Logger::setupLogLevel( Logger::LOGDEBUG ); cDebug() << "Fixing up /boot"; @@ -56,4 +54,3 @@ void InitcpioTests::testFixPermissions() fixPermissions( QDir( "/nonexistent/nonexistent" ) ); QVERIFY( true ); } - diff --git a/src/modules/initcpio/Tests.h b/src/modules/initcpio/Tests.h index 5bab26d3f1..bebab408a6 100644 --- a/src/modules/initcpio/Tests.h +++ b/src/modules/initcpio/Tests.h @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/initramfs/InitramfsJob.cpp b/src/modules/initramfs/InitramfsJob.cpp index 468047c45a..05ee4bde8a 100644 --- a/src/modules/initramfs/InitramfsJob.cpp +++ b/src/modules/initramfs/InitramfsJob.cpp @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -78,8 +79,11 @@ InitramfsJob::setConfigurationMap( const QVariantMap& configurationMap ) } else if ( m_kernel == "$uname" ) { - auto r = CalamaresUtils::System::runCommand( - CalamaresUtils::System::RunLocation::RunInHost, { "/bin/uname", "-r" }, QString(), QString(), std::chrono::seconds( 3 ) ); + auto r = CalamaresUtils::System::runCommand( CalamaresUtils::System::RunLocation::RunInHost, + { "/bin/uname", "-r" }, + QString(), + QString(), + std::chrono::seconds( 3 ) ); if ( r.getExitCode() == 0 ) { m_kernel = r.getOutput(); diff --git a/src/modules/initramfs/InitramfsJob.h b/src/modules/initramfs/InitramfsJob.h index 3239c6929a..b1b3fb3977 100644 --- a/src/modules/initramfs/InitramfsJob.h +++ b/src/modules/initramfs/InitramfsJob.h @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/initramfs/Tests.cpp b/src/modules/initramfs/Tests.cpp index 2a236e64bc..955d9b8bf5 100644 --- a/src/modules/initramfs/Tests.cpp +++ b/src/modules/initramfs/Tests.cpp @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -33,32 +34,30 @@ QTEST_GUILESS_MAIN( InitramfsTests ) -InitramfsTests::InitramfsTests() -{ -} +InitramfsTests::InitramfsTests() {} -InitramfsTests::~InitramfsTests() -{ -} +InitramfsTests::~InitramfsTests() {} void InitramfsTests::initTestCase() { Logger::setupLogLevel( Logger::LOGDEBUG ); - (void) new Calamares::JobQueue(); - (void) new CalamaresUtils::System( true ); + (void)new Calamares::JobQueue(); + (void)new CalamaresUtils::System( true ); } static const char contents[] = "UMASK=0077\n"; static const char confFile[] = "/tmp/calamares-safe-umask"; -void InitramfsTests::cleanup() +void +InitramfsTests::cleanup() { QFile::remove( confFile ); } -void InitramfsTests::testCreateTargetFile() +void +InitramfsTests::testCreateTargetFile() { static const char short_confFile[] = "/calamares-safe-umask"; @@ -79,8 +78,7 @@ void InitramfsTests::testCreateTargetFile() QFileInfo fi( path ); QVERIFY( fi.exists() ); - QCOMPARE( ulong( fi.size() ), sizeof( contents )-1 ); // don't count trailing NUL + QCOMPARE( ulong( fi.size() ), sizeof( contents ) - 1 ); // don't count trailing NUL QFile::remove( path ); - } diff --git a/src/modules/initramfs/Tests.h b/src/modules/initramfs/Tests.h index 715c901699..11d0fd1d03 100644 --- a/src/modules/initramfs/Tests.h +++ b/src/modules/initramfs/Tests.h @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/initramfscfg/encrypt_hook b/src/modules/initramfscfg/encrypt_hook index 257097303f..70d661a984 100755 --- a/src/modules/initramfscfg/encrypt_hook +++ b/src/modules/initramfscfg/encrypt_hook @@ -1,4 +1,7 @@ #!/bin/sh +# +# SPDX-FileCopyrightText: 2016 David McKinney +# SPDX-License-Identifier: GPL-3.0-or-later PREREQ="" diff --git a/src/modules/initramfscfg/encrypt_hook_nokey b/src/modules/initramfscfg/encrypt_hook_nokey index db51475bd9..8ee669c300 100755 --- a/src/modules/initramfscfg/encrypt_hook_nokey +++ b/src/modules/initramfscfg/encrypt_hook_nokey @@ -1,4 +1,7 @@ #!/bin/sh +# +# SPDX-FileCopyrightText: 2016 David McKinney +# SPDX-License-Identifier: GPL-3.0-or-later PREREQ="" diff --git a/src/modules/interactiveterminal/InteractiveTerminalPage.cpp b/src/modules/interactiveterminal/InteractiveTerminalPage.cpp index 5b2f81bfa2..9d5f76724c 100644 --- a/src/modules/interactiveterminal/InteractiveTerminalPage.cpp +++ b/src/modules/interactiveterminal/InteractiveTerminalPage.cpp @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2014-2015, Teo Mrnjavac + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -18,14 +19,14 @@ #include "InteractiveTerminalPage.h" -#include "viewpages/ViewStep.h" -#include "utils/Retranslator.h" #include "utils/CalamaresUtilsGui.h" #include "utils/Logger.h" +#include "utils/Retranslator.h" +#include "viewpages/ViewStep.h" -#include -#include #include +#include +#include #include #include @@ -49,17 +50,17 @@ InteractiveTerminalPage::InteractiveTerminalPage( QWidget* parent ) void InteractiveTerminalPage::errorKonsoleNotInstalled() { - QMessageBox::critical( this, - tr( "Konsole not installed"), - tr( "Please install KDE Konsole and try again!" ), - QMessageBox::Ok ); + QMessageBox::critical( + this, tr( "Konsole not installed" ), tr( "Please install KDE Konsole and try again!" ), QMessageBox::Ok ); } void InteractiveTerminalPage::onActivate() { if ( m_termHostWidget ) + { return; + } // For whatever reason, instead of simply linking against a library we // need to do a runtime query to KService just to get a sodding terminal // widget. @@ -69,14 +70,11 @@ InteractiveTerminalPage::onActivate() // And all of this hoping the Konsole application is installed. If not, // tough cookies. errorKonsoleNotInstalled(); - return ; + return; } // Create one instance of konsolepart. - KParts::ReadOnlyPart* p = - service->createInstance< KParts::ReadOnlyPart >( this, - this, - {} ); + KParts::ReadOnlyPart* p = service->createInstance< KParts::ReadOnlyPart >( this, this, {} ); if ( !p ) { // One more opportunity for the loading operation to fail. @@ -100,8 +98,7 @@ InteractiveTerminalPage::onActivate() m_termHostWidget = p->widget(); m_layout->addWidget( m_termHostWidget ); - cDebug() << "Part widget ought to be" - << m_termHostWidget->metaObject()->className(); + cDebug() << "Part widget ought to be" << m_termHostWidget->metaObject()->className(); t->showShellInDir( QDir::home().path() ); t->sendInput( QString( "%1\n" ).arg( m_command ) ); @@ -112,8 +109,5 @@ void InteractiveTerminalPage::setCommand( const QString& command ) { m_command = command; - CALAMARES_RETRANSLATE( - m_headerLabel->setText( tr( "Executing script:  %1" ) - .arg( m_command ) ); - ) + CALAMARES_RETRANSLATE( m_headerLabel->setText( tr( "Executing script:  %1" ).arg( m_command ) ); ) } diff --git a/src/modules/interactiveterminal/InteractiveTerminalPage.h b/src/modules/interactiveterminal/InteractiveTerminalPage.h index 503a537565..20ab0d651a 100644 --- a/src/modules/interactiveterminal/InteractiveTerminalPage.h +++ b/src/modules/interactiveterminal/InteractiveTerminalPage.h @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2014-2015, Teo Mrnjavac + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -43,4 +44,4 @@ class InteractiveTerminalPage : public QWidget void errorKonsoleNotInstalled(); }; -#endif // INTERACTIVETERMINALPAGE_H +#endif // INTERACTIVETERMINALPAGE_H diff --git a/src/modules/interactiveterminal/InteractiveTerminalViewStep.cpp b/src/modules/interactiveterminal/InteractiveTerminalViewStep.cpp index 874c8a9cc0..45019cf4a0 100644 --- a/src/modules/interactiveterminal/InteractiveTerminalViewStep.cpp +++ b/src/modules/interactiveterminal/InteractiveTerminalViewStep.cpp @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2014-2015, Teo Mrnjavac + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -24,7 +25,8 @@ #include -CALAMARES_PLUGIN_FACTORY_DEFINITION( InteractiveTerminalViewStepFactory, registerPlugin(); ) +CALAMARES_PLUGIN_FACTORY_DEFINITION( InteractiveTerminalViewStepFactory, + registerPlugin< InteractiveTerminalViewStep >(); ) InteractiveTerminalViewStep::InteractiveTerminalViewStep( QObject* parent ) : Calamares::ViewStep( parent ) @@ -37,7 +39,9 @@ InteractiveTerminalViewStep::InteractiveTerminalViewStep( QObject* parent ) InteractiveTerminalViewStep::~InteractiveTerminalViewStep() { if ( m_widget && m_widget->parent() == nullptr ) + { m_widget->deleteLater(); + } } @@ -102,8 +106,8 @@ InteractiveTerminalViewStep::onActivate() void InteractiveTerminalViewStep::setConfigurationMap( const QVariantMap& configurationMap ) { - if ( configurationMap.contains( "command" ) && - configurationMap.value( "command").type() == QVariant::String ) + if ( configurationMap.contains( "command" ) && configurationMap.value( "command" ).type() == QVariant::String ) + { m_widget->setCommand( configurationMap.value( "command" ).toString() ); + } } - diff --git a/src/modules/interactiveterminal/InteractiveTerminalViewStep.h b/src/modules/interactiveterminal/InteractiveTerminalViewStep.h index bf26ba91ea..d91fc07cc4 100644 --- a/src/modules/interactiveterminal/InteractiveTerminalViewStep.h +++ b/src/modules/interactiveterminal/InteractiveTerminalViewStep.h @@ -1,7 +1,8 @@ /* === This file is part of Calamares - === * - * Copyright 2014-2015, Teo Mrnjavac - * Copyright 2017, Adriaan de Groot + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -60,4 +61,4 @@ class PLUGINDLLEXPORT InteractiveTerminalViewStep : public Calamares::ViewStep CALAMARES_PLUGIN_FACTORY_DECLARATION( InteractiveTerminalViewStepFactory ) -#endif // INTERACTIVETERMINALPAGEPLUGIN_H +#endif // INTERACTIVETERMINALPAGEPLUGIN_H diff --git a/src/modules/keyboard/Config.cpp b/src/modules/keyboard/Config.cpp index 64b253835e..bd2c417805 100644 --- a/src/modules/keyboard/Config.cpp +++ b/src/modules/keyboard/Config.cpp @@ -1,7 +1,8 @@ /* === This file is part of Calamares - === * - * Copyright 2019-2020, Adriaan de Groot - * Copyright 2020, Camilo Higuita * + * SPDX-FileCopyrightText: 2019-2020 Adriaan de Groot + * SPDX-FileCopyrightText: 2020 Camilo Higuita * + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/keyboard/Config.h b/src/modules/keyboard/Config.h index a05a5ab867..a7e9c621bc 100644 --- a/src/modules/keyboard/Config.h +++ b/src/modules/keyboard/Config.h @@ -1,7 +1,8 @@ /* === This file is part of Calamares - === * - * Copyright 2019-2020, Adriaan de Groot - * Copyright 2020, Camilo Higuita + * SPDX-FileCopyrightText: 2019-2020 Adriaan de Groot + * SPDX-FileCopyrightText: 2020 Camilo Higuita + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/keyboard/KeyboardLayoutModel.cpp b/src/modules/keyboard/KeyboardLayoutModel.cpp index 7e24df5703..9077ea60e7 100644 --- a/src/modules/keyboard/KeyboardLayoutModel.cpp +++ b/src/modules/keyboard/KeyboardLayoutModel.cpp @@ -1,7 +1,8 @@ /* === This file is part of Calamares - === * - * Copyright 2016, Teo Mrnjavac - * Copyright 2017, Adriaan de Groot + * SPDX-FileCopyrightText: 2016 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/keyboard/KeyboardLayoutModel.h b/src/modules/keyboard/KeyboardLayoutModel.h index e0007fdbcf..eeb0666fa3 100644 --- a/src/modules/keyboard/KeyboardLayoutModel.h +++ b/src/modules/keyboard/KeyboardLayoutModel.h @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2016, Teo Mrnjavac + * SPDX-FileCopyrightText: 2016 Teo Mrnjavac + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/keyboard/KeyboardPage.cpp b/src/modules/keyboard/KeyboardPage.cpp index e8997b915e..6ab472446c 100644 --- a/src/modules/keyboard/KeyboardPage.cpp +++ b/src/modules/keyboard/KeyboardPage.cpp @@ -1,7 +1,9 @@ /* === This file is part of Calamares - === * - * Copyright 2014-2016, Teo Mrnjavac - * Copyright 2017-2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2007 Free Software Foundation, Inc. + * SPDX-FileCopyrightText: 2014-2016 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017-2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Portions from the Manjaro Installation Framework * by Roland Singer diff --git a/src/modules/keyboard/KeyboardPage.h b/src/modules/keyboard/KeyboardPage.h index 1ce21787cd..73896923aa 100644 --- a/src/modules/keyboard/KeyboardPage.h +++ b/src/modules/keyboard/KeyboardPage.h @@ -1,7 +1,9 @@ /* === This file is part of Calamares - === * - * Copyright 2014-2016, Teo Mrnjavac - * Copyright 2017, Adriaan de Groot + * SPDX-FileCopyrightText: 2007 Free Software Foundation, Inc. + * SPDX-FileCopyrightText: 2014-2016 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Portions from the Manjaro Installation Framework * by Roland Singer diff --git a/src/modules/keyboard/KeyboardViewStep.cpp b/src/modules/keyboard/KeyboardViewStep.cpp index e6e89eb1ca..b424653f77 100644 --- a/src/modules/keyboard/KeyboardViewStep.cpp +++ b/src/modules/keyboard/KeyboardViewStep.cpp @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2014-2015, Teo Mrnjavac + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/keyboard/KeyboardViewStep.h b/src/modules/keyboard/KeyboardViewStep.h index 208d50686e..8de05d0af6 100644 --- a/src/modules/keyboard/KeyboardViewStep.h +++ b/src/modules/keyboard/KeyboardViewStep.h @@ -1,7 +1,8 @@ /* === This file is part of Calamares - === * - * Copyright 2014-2015, Teo Mrnjavac - * Copyright 2017, Adriaan de Groot + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/keyboard/README.md b/src/modules/keyboard/README.md deleted file mode 100644 index cf4ce3994a..0000000000 --- a/src/modules/keyboard/README.md +++ /dev/null @@ -1,5 +0,0 @@ -Keyboard layout configuration viewmodule ---- -Requires ckbcomp script. - * Debian package console-setup or - * Manjaro package keyboardctl https://github.com/manjaro/packages-core/tree/master/keyboardctl diff --git a/src/modules/keyboard/SetKeyboardLayoutJob.cpp b/src/modules/keyboard/SetKeyboardLayoutJob.cpp index 537feeb8c2..e9c20e0aa3 100644 --- a/src/modules/keyboard/SetKeyboardLayoutJob.cpp +++ b/src/modules/keyboard/SetKeyboardLayoutJob.cpp @@ -1,7 +1,10 @@ /* === This file is part of Calamares - === * - * Copyright 2014-2016, Teo Mrnjavac - * Copyright 2014, Kevin Kofler + * SPDX-FileCopyrightText: 2011 Lennart Poettering + * SPDX-FileCopyrightText: Kay Sievers + * SPDX-FileCopyrightText: 2014-2016 Teo Mrnjavac + * SPDX-FileCopyrightText: 2014 Kevin Kofler + * SPDX-License-Identifier: GPL-3.0-or-later * * Portions from systemd (localed.c): * Copyright 2011 Lennart Poettering diff --git a/src/modules/keyboard/SetKeyboardLayoutJob.h b/src/modules/keyboard/SetKeyboardLayoutJob.h index 599642b19c..ee0cd0a99b 100644 --- a/src/modules/keyboard/SetKeyboardLayoutJob.h +++ b/src/modules/keyboard/SetKeyboardLayoutJob.h @@ -1,7 +1,8 @@ /* === This file is part of Calamares - === * - * Copyright 2014-2016, Teo Mrnjavac - * Copyright 2014, Kevin Kofler + * SPDX-FileCopyrightText: 2014-2016 Teo Mrnjavac + * SPDX-FileCopyrightText: 2014 Kevin Kofler + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/keyboard/images/restore.png.license b/src/modules/keyboard/images/restore.png.license new file mode 100644 index 0000000000..cc08e1f9f1 --- /dev/null +++ b/src/modules/keyboard/images/restore.png.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: 2014 Teo Mrnjavac +SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/modules/keyboard/kbd-model-map b/src/modules/keyboard/kbd-model-map index 49ec4ad751..e113c92bae 100644 --- a/src/modules/keyboard/kbd-model-map +++ b/src/modules/keyboard/kbd-model-map @@ -1,3 +1,7 @@ +# SPDX-FileCopyrightText: 2015 Systemd authors and contributors +# SPDX-FileCopyrightText: 2018 Adriaan de Groot +# SPDX-License-Identifier: GPL-3.0-or-later +# # Copied from systemd-localed # # https://cgit.freedesktop.org/systemd/systemd/log/src/locale/kbd-model-map diff --git a/src/modules/keyboard/keyboardwidget/keyboardglobal.cpp b/src/modules/keyboard/keyboardwidget/keyboardglobal.cpp index f363ea844c..d5f6984d47 100644 --- a/src/modules/keyboard/keyboardwidget/keyboardglobal.cpp +++ b/src/modules/keyboard/keyboardwidget/keyboardglobal.cpp @@ -1,7 +1,9 @@ /* === This file is part of Calamares - === * - * Copyright 2014, Teo Mrnjavac - * Copyright 2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2007 Free Software Foundation, Inc. + * SPDX-FileCopyrightText: 2014 Teo Mrnjavac + * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Originally from the Manjaro Installation Framework * by Roland Singer @@ -43,18 +45,22 @@ static const char XKB_FILE[] = "/usr/share/X11/xkb/rules/base.lst"; * or hits end-of-file. Returns true if the section is found. The * @p name must include the "! " section marker as well. */ -static bool findSection( QFile& fh, const char* name ) +static bool +findSection( QFile& fh, const char* name ) { while ( !fh.atEnd() ) { QByteArray line = fh.readLine(); if ( line.startsWith( name ) ) + { return true; + } } return false; } -static KeyboardGlobal::ModelsMap parseKeyboardModels( const char* filepath ) +static KeyboardGlobal::ModelsMap +parseKeyboardModels( const char* filepath ) { KeyboardGlobal::ModelsMap models; @@ -75,7 +81,9 @@ static KeyboardGlobal::ModelsMap parseKeyboardModels( const char* filepath ) // check if we start a new section if ( line.startsWith( '!' ) ) + { break; + } // here we are in the model section, otherwhise we would continue or break QRegExp rx; @@ -88,7 +96,9 @@ static KeyboardGlobal::ModelsMap parseKeyboardModels( const char* filepath ) QString model = rx.cap( 1 ); if ( model == "pc105" ) + { modelDesc += " - " + QObject::tr( "Default Keyboard Model" ); + } models.insert( modelDesc, model ); } @@ -98,7 +108,8 @@ static KeyboardGlobal::ModelsMap parseKeyboardModels( const char* filepath ) } -KeyboardGlobal::LayoutsMap parseKeyboardLayouts( const char* filepath ) +KeyboardGlobal::LayoutsMap +parseKeyboardLayouts( const char* filepath ) { KeyboardGlobal::LayoutsMap layouts; @@ -120,7 +131,9 @@ KeyboardGlobal::LayoutsMap parseKeyboardLayouts( const char* filepath ) QByteArray line = fh.readLine(); if ( line.startsWith( '!' ) ) + { break; + } QRegExp rx; rx.setPattern( "^\\s+(\\S+)\\s+(\\w.*)\n$" ); @@ -147,7 +160,9 @@ KeyboardGlobal::LayoutsMap parseKeyboardLayouts( const char* filepath ) QByteArray line = fh.readLine(); if ( line.startsWith( '!' ) ) + { break; + } QRegExp rx; rx.setPattern( "^\\s+(\\S+)\\s+(\\S+): (\\w.*)\n$" ); @@ -176,14 +191,15 @@ KeyboardGlobal::LayoutsMap parseKeyboardLayouts( const char* filepath ) } -KeyboardGlobal::LayoutsMap KeyboardGlobal::getKeyboardLayouts() +KeyboardGlobal::LayoutsMap +KeyboardGlobal::getKeyboardLayouts() { return parseKeyboardLayouts( XKB_FILE ); } -KeyboardGlobal::ModelsMap KeyboardGlobal::getKeyboardModels() +KeyboardGlobal::ModelsMap +KeyboardGlobal::getKeyboardModels() { return parseKeyboardModels( XKB_FILE ); } - diff --git a/src/modules/keyboard/keyboardwidget/keyboardglobal.h b/src/modules/keyboard/keyboardwidget/keyboardglobal.h index 1732dc9130..9e03c05e5a 100644 --- a/src/modules/keyboard/keyboardwidget/keyboardglobal.h +++ b/src/modules/keyboard/keyboardwidget/keyboardglobal.h @@ -1,7 +1,9 @@ /* === This file is part of Calamares - === * - * Copyright 2014, Teo Mrnjavac - * Copyright 2017, 2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2007 Free Software Foundation, Inc. + * SPDX-FileCopyrightText: 2014 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017 2019, Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Originally from the Manjaro Installation Framework * by Roland Singer @@ -24,21 +26,22 @@ #ifndef KEYBOARDGLOBAL_H #define KEYBOARDGLOBAL_H -#include -#include -#include +#include #include -#include -#include +#include #include +#include #include #include -#include +#include +#include +#include class KeyboardGlobal { public: - struct KeyboardInfo { + struct KeyboardInfo + { QString description; QMap< QString, QString > variants; }; @@ -50,4 +53,4 @@ class KeyboardGlobal static ModelsMap getKeyboardModels(); }; -#endif // KEYBOARDGLOBAL_H +#endif // KEYBOARDGLOBAL_H diff --git a/src/modules/keyboard/keyboardwidget/keyboardpreview.cpp b/src/modules/keyboard/keyboardwidget/keyboardpreview.cpp index 02ddd41868..6cc306526b 100644 --- a/src/modules/keyboard/keyboardwidget/keyboardpreview.cpp +++ b/src/modules/keyboard/keyboardwidget/keyboardpreview.cpp @@ -1,7 +1,9 @@ /* === This file is part of Calamares - === * - * Copyright 2014, Teo Mrnjavac - * Copyright 2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2007 Free Software Foundation, Inc. + * SPDX-FileCopyrightText: 2014 Teo Mrnjavac + * SPDX-FileCopyrightText: 2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Portions from the Manjaro Installation Framework * by Roland Singer @@ -33,96 +35,126 @@ KeyBoardPreview::KeyBoardPreview( QWidget* parent ) , usable_width( 0 ) , key_w( 0 ) { - setMinimumSize(700, 191); + setMinimumSize( 700, 191 ); // We must set up the font size in pixels to fit the keys - lowerFont = QFont("Helvetica", 10, QFont::DemiBold); - lowerFont.setPixelSize(16); - upperFont = QFont("Helvetica", 8); - upperFont.setPixelSize(13); + lowerFont = QFont( "Helvetica", 10, QFont::DemiBold ); + lowerFont.setPixelSize( 16 ); + upperFont = QFont( "Helvetica", 8 ); + upperFont.setPixelSize( 13 ); // Setup keyboard types - kbList[KB_104].kb_extended_return = false; - kbList[KB_104].keys.append(QList() << 0x29 << 0x2 << 0x3 << 0x4 << 0x5 << 0x6 << 0x7 << 0x8 << 0x9 << 0xa << 0xb << 0xc << 0xd); - kbList[KB_104].keys.append(QList() << 0x10 << 0x11 << 0x12 << 0x13 << 0x14 << 0x15 << 0x16 << 0x17 << 0x18 << 0x19 << 0x1a << 0x1b << 0x2b); - kbList[KB_104].keys.append(QList() << 0x1e << 0x1f << 0x20 << 0x21 << 0x22 << 0x23 << 0x24 << 0x25 << 0x26 << 0x27 << 0x28); - kbList[KB_104].keys.append(QList() << 0x2c << 0x2d << 0x2e << 0x2f << 0x30 << 0x31 << 0x32 << 0x33 << 0x34 << 0x35); - - kbList[KB_105].kb_extended_return = true; - kbList[KB_105].keys.append(QList() << 0x29 << 0x2 << 0x3 << 0x4 << 0x5 << 0x6 << 0x7 << 0x8 << 0x9 << 0xa << 0xb << 0xc << 0xd); - kbList[KB_105].keys.append(QList() << 0x10 << 0x11 << 0x12 << 0x13 << 0x14 << 0x15 << 0x16 << 0x17 << 0x18 << 0x19 << 0x1a << 0x1b); - kbList[KB_105].keys.append(QList() << 0x1e << 0x1f << 0x20 << 0x21 << 0x22 << 0x23 << 0x24 << 0x25 << 0x26 << 0x27 << 0x28 << 0x2b); - kbList[KB_105].keys.append(QList() << 0x54 << 0x2c << 0x2d << 0x2e << 0x2f << 0x30 << 0x31 << 0x32 << 0x33 << 0x34 << 0x35); - - kbList[KB_106].kb_extended_return = true; - kbList[KB_106].keys.append(QList() << 0x29 << 0x2 << 0x3 << 0x4 << 0x5 << 0x6 << 0x7 << 0x8 << 0x9 << 0xa << 0xb << 0xc << 0xd << 0xe); - kbList[KB_106].keys.append(QList() << 0x10 << 0x11 << 0x12 << 0x13 << 0x14 << 0x15 << 0x16 << 0x17 << 0x18 << 0x19 << 0x1a << 0x1b); - kbList[KB_106].keys.append(QList() << 0x1e << 0x1f << 0x20 << 0x21 << 0x22 << 0x23 << 0x24 << 0x25 << 0x26 << 0x27 << 0x28 << 0x29); - kbList[KB_106].keys.append(QList() << 0x2c << 0x2d << 0x2e << 0x2f << 0x30 << 0x31 << 0x32 << 0x33 << 0x34 << 0x35 << 0x36); - - kb = &kbList[KB_104]; + kbList[ KB_104 ].kb_extended_return = false; + kbList[ KB_104 ].keys.append( QList< int >() << 0x29 << 0x2 << 0x3 << 0x4 << 0x5 << 0x6 << 0x7 << 0x8 << 0x9 << 0xa + << 0xb << 0xc << 0xd ); + kbList[ KB_104 ].keys.append( QList< int >() << 0x10 << 0x11 << 0x12 << 0x13 << 0x14 << 0x15 << 0x16 << 0x17 << 0x18 + << 0x19 << 0x1a << 0x1b << 0x2b ); + kbList[ KB_104 ].keys.append( QList< int >() << 0x1e << 0x1f << 0x20 << 0x21 << 0x22 << 0x23 << 0x24 << 0x25 << 0x26 + << 0x27 << 0x28 ); + kbList[ KB_104 ].keys.append( QList< int >() + << 0x2c << 0x2d << 0x2e << 0x2f << 0x30 << 0x31 << 0x32 << 0x33 << 0x34 << 0x35 ); + + kbList[ KB_105 ].kb_extended_return = true; + kbList[ KB_105 ].keys.append( QList< int >() << 0x29 << 0x2 << 0x3 << 0x4 << 0x5 << 0x6 << 0x7 << 0x8 << 0x9 << 0xa + << 0xb << 0xc << 0xd ); + kbList[ KB_105 ].keys.append( QList< int >() << 0x10 << 0x11 << 0x12 << 0x13 << 0x14 << 0x15 << 0x16 << 0x17 << 0x18 + << 0x19 << 0x1a << 0x1b ); + kbList[ KB_105 ].keys.append( QList< int >() << 0x1e << 0x1f << 0x20 << 0x21 << 0x22 << 0x23 << 0x24 << 0x25 << 0x26 + << 0x27 << 0x28 << 0x2b ); + kbList[ KB_105 ].keys.append( QList< int >() << 0x54 << 0x2c << 0x2d << 0x2e << 0x2f << 0x30 << 0x31 << 0x32 << 0x33 + << 0x34 << 0x35 ); + + kbList[ KB_106 ].kb_extended_return = true; + kbList[ KB_106 ].keys.append( QList< int >() << 0x29 << 0x2 << 0x3 << 0x4 << 0x5 << 0x6 << 0x7 << 0x8 << 0x9 << 0xa + << 0xb << 0xc << 0xd << 0xe ); + kbList[ KB_106 ].keys.append( QList< int >() << 0x10 << 0x11 << 0x12 << 0x13 << 0x14 << 0x15 << 0x16 << 0x17 << 0x18 + << 0x19 << 0x1a << 0x1b ); + kbList[ KB_106 ].keys.append( QList< int >() << 0x1e << 0x1f << 0x20 << 0x21 << 0x22 << 0x23 << 0x24 << 0x25 << 0x26 + << 0x27 << 0x28 << 0x29 ); + kbList[ KB_106 ].keys.append( QList< int >() << 0x2c << 0x2d << 0x2e << 0x2f << 0x30 << 0x31 << 0x32 << 0x33 << 0x34 + << 0x35 << 0x36 ); + + kb = &kbList[ KB_104 ]; } - -void KeyBoardPreview::setLayout(QString _layout) { +void +KeyBoardPreview::setLayout( QString _layout ) +{ layout = _layout; } - -void KeyBoardPreview::setVariant(QString _variant) { +void +KeyBoardPreview::setVariant( QString _variant ) +{ variant = _variant; - if (!loadCodes()) + if ( !loadCodes() ) + { return; + } loadInfo(); repaint(); } - //### //### Private //### - -void KeyBoardPreview::loadInfo() { +void +KeyBoardPreview::loadInfo() +{ // kb_104 - if (layout == "us" || layout == "th") - kb = &kbList[KB_104]; + if ( layout == "us" || layout == "th" ) + { + kb = &kbList[ KB_104 ]; + } // kb_106 - else if (layout == "jp") - kb = &kbList[KB_106]; + else if ( layout == "jp" ) + { + kb = &kbList[ KB_106 ]; + } // most keyboards are 105 key so default to that else - kb = &kbList[KB_105]; + { + kb = &kbList[ KB_105 ]; + } } - -bool KeyBoardPreview::loadCodes() { - if (layout.isEmpty()) +bool +KeyBoardPreview::loadCodes() +{ + if ( layout.isEmpty() ) + { return false; + } QStringList param; - param << "-model" << "pc106" << "-layout" << layout << "-compact"; - if (!variant.isEmpty()) + param << "-model" + << "pc106" + << "-layout" << layout << "-compact"; + if ( !variant.isEmpty() ) + { param << "-variant" << variant; + } QProcess process; - process.setEnvironment(QStringList() << "LANG=C" << "LC_MESSAGES=C"); - process.start("ckbcomp", param); - if (!process.waitForStarted()) + process.setEnvironment( QStringList() << "LANG=C" + << "LC_MESSAGES=C" ); + process.start( "ckbcomp", param ); + if ( !process.waitForStarted() ) { cWarning() << "ckbcomp not found , keyboard preview disabled"; return false; } - if (!process.waitForFinished()) + if ( !process.waitForFinished() ) { cWarning() << "ckbcomp failed, keyboard preview disabled"; return false; @@ -131,209 +163,247 @@ bool KeyBoardPreview::loadCodes() { // Clear codes codes.clear(); - const QStringList list = QString(process.readAll()).split("\n", SplitSkipEmptyParts); + const QStringList list = QString( process.readAll() ).split( "\n", SplitSkipEmptyParts ); - for (const QString &line : list) { - if (!line.startsWith("keycode") || !line.contains('=')) + for ( const QString& line : list ) + { + if ( !line.startsWith( "keycode" ) || !line.contains( '=' ) ) + { continue; + } - QStringList split = line.split('=').at(1).trimmed().split(' '); - if (split.size() < 4) + QStringList split = line.split( '=' ).at( 1 ).trimmed().split( ' ' ); + if ( split.size() < 4 ) + { continue; + } Code code; - code.plain = fromUnicodeString(split.at(0)); - code.shift = fromUnicodeString(split.at(1)); - code.ctrl = fromUnicodeString(split.at(2)); - code.alt = fromUnicodeString(split.at(3)); + code.plain = fromUnicodeString( split.at( 0 ) ); + code.shift = fromUnicodeString( split.at( 1 ) ); + code.ctrl = fromUnicodeString( split.at( 2 ) ); + code.alt = fromUnicodeString( split.at( 3 ) ); - if (code.ctrl == code.plain) + if ( code.ctrl == code.plain ) + { code.ctrl = ""; + } - if (code.alt == code.plain) + if ( code.alt == code.plain ) + { code.alt = ""; + } - codes.append(code); + codes.append( code ); } return true; } - -QString KeyBoardPreview::fromUnicodeString(QString raw) { - if (raw.startsWith("U+")) - return QChar(raw.mid(2).toInt(nullptr, 16)); - else if (raw.startsWith("+U")) - return QChar(raw.mid(3).toInt(nullptr, 16)); +QString +KeyBoardPreview::fromUnicodeString( QString raw ) +{ + if ( raw.startsWith( "U+" ) ) + { + return QChar( raw.mid( 2 ).toInt( nullptr, 16 ) ); + } + else if ( raw.startsWith( "+U" ) ) + { + return QChar( raw.mid( 3 ).toInt( nullptr, 16 ) ); + } return ""; } - -QString KeyBoardPreview::regular_text(int index) { - if (index < 0 || index >= codes.size()) +QString +KeyBoardPreview::regular_text( int index ) +{ + if ( index < 0 || index >= codes.size() ) + { return ""; + } - return codes.at(index - 1).plain; + return codes.at( index - 1 ).plain; } - -QString KeyBoardPreview::shift_text(int index) { - if (index < 0 || index >= codes.size()) +QString +KeyBoardPreview::shift_text( int index ) +{ + if ( index < 0 || index >= codes.size() ) + { return ""; + } - return codes.at(index - 1).shift; + return codes.at( index - 1 ).shift; } - -QString KeyBoardPreview::ctrl_text(int index) { - if (index < 0 || index >= codes.size()) +QString +KeyBoardPreview::ctrl_text( int index ) +{ + if ( index < 0 || index >= codes.size() ) + { return ""; + } - return codes.at(index - 1).ctrl; + return codes.at( index - 1 ).ctrl; } - -QString KeyBoardPreview::alt_text(int index) { - if (index < 0 || index >= codes.size()) +QString +KeyBoardPreview::alt_text( int index ) +{ + if ( index < 0 || index >= codes.size() ) + { return ""; + } - return codes.at(index - 1).alt; + return codes.at( index - 1 ).alt; } - -void KeyBoardPreview::resizeEvent(QResizeEvent *) { +void +KeyBoardPreview::resizeEvent( QResizeEvent* ) +{ space = 6; - usable_width = width()-7; - key_w = (usable_width - 14 * space)/15; + usable_width = width() - 7; + key_w = ( usable_width - 14 * space ) / 15; - setMaximumHeight(key_w*4 + space*5 + 1); + setMaximumHeight( key_w * 4 + space * 5 + 1 ); } +void +KeyBoardPreview::paintEvent( QPaintEvent* event ) +{ + QPainter p( this ); + p.setRenderHint( QPainter::Antialiasing ); -void KeyBoardPreview::paintEvent(QPaintEvent* event) { - QPainter p(this); - p.setRenderHint(QPainter::Antialiasing); - - p.setBrush(QColor(0xd6, 0xd6, 0xd6)); - p.drawRect(rect()); + p.setBrush( QColor( 0xd6, 0xd6, 0xd6 ) ); + p.drawRect( rect() ); QPen pen; - pen.setWidth(1); - pen.setColor(QColor(0x58, 0x58, 0x58)); - p.setPen(pen); + pen.setWidth( 1 ); + pen.setColor( QColor( 0x58, 0x58, 0x58 ) ); + p.setPen( pen ); - p.setBrush(QColor(0x58, 0x58, 0x58)); + p.setBrush( QColor( 0x58, 0x58, 0x58 ) ); - p.setBackgroundMode(Qt::TransparentMode); - p.translate(0.5, 0.5); + p.setBackgroundMode( Qt::TransparentMode ); + p.translate( 0.5, 0.5 ); int rx = 3; - int x=6; - int y=6; + int x = 6; + int y = 6; int first_key_w = 0; - int remaining_x[] = {0,0,0,0}; - int remaining_widths[] = {0,0,0,0}; + int remaining_x[] = { 0, 0, 0, 0 }; + int remaining_widths[] = { 0, 0, 0, 0 }; - for (int i = 0; i < 4; i++) { - if (first_key_w > 0) { - first_key_w = int(first_key_w * 1.375); + for ( int i = 0; i < 4; i++ ) + { + if ( first_key_w > 0 ) + { + first_key_w = int( first_key_w * 1.375 ); - if (kb == &kbList[KB_105] && i == 3) - first_key_w = int(key_w * 1.275); + if ( kb == &kbList[ KB_105 ] && i == 3 ) + { + first_key_w = int( key_w * 1.275 ); + } - p.drawRoundedRect(QRectF(6, y, first_key_w, key_w), rx, rx); + p.drawRoundedRect( QRectF( 6, y, first_key_w, key_w ), rx, rx ); x = 6 + first_key_w + space; } - else { + else + { first_key_w = key_w; } + bool last_end = ( i == 1 && !kb->kb_extended_return ); + int rw = usable_width - x; + int ii = 0; - bool last_end = (i==1 && ! kb->kb_extended_return); - int rw=usable_width-x; - int ii=0; - - for (int k : kb->keys.at(i)) { - QRectF rect = QRectF(x, y, key_w, key_w); + for ( int k : kb->keys.at( i ) ) + { + QRectF rect = QRectF( x, y, key_w, key_w ); - if (ii == kb->keys.at(i).size()-1 && last_end) - rect.setWidth(rw); + if ( ii == kb->keys.at( i ).size() - 1 && last_end ) + { + rect.setWidth( rw ); + } - p.drawRoundedRect(rect, rx, rx); + p.drawRoundedRect( rect, rx, rx ); - rect.adjust(5, 1, 0, 0); + rect.adjust( 5, 1, 0, 0 ); - p.setPen(QColor(0x9e, 0xde, 0x00)); - p.setFont(upperFont); - p.drawText(rect, Qt::AlignLeft | Qt::AlignTop, shift_text(k)); + p.setPen( QColor( 0x9e, 0xde, 0x00 ) ); + p.setFont( upperFont ); + p.drawText( rect, Qt::AlignLeft | Qt::AlignTop, shift_text( k ) ); - rect.setBottom(rect.bottom() - 2.5); + rect.setBottom( rect.bottom() - 2.5 ); - p.setPen(QColor(0xff, 0xff, 0xff)); - p.setFont(lowerFont); - p.drawText(rect, Qt::AlignLeft | Qt::AlignBottom, regular_text(k)); + p.setPen( QColor( 0xff, 0xff, 0xff ) ); + p.setFont( lowerFont ); + p.drawText( rect, Qt::AlignLeft | Qt::AlignBottom, regular_text( k ) ); rw = rw - space - key_w; x = x + space + key_w; - ii = ii+1; + ii = ii + 1; - p.setPen(pen); + p.setPen( pen ); } + remaining_x[ i ] = x; + remaining_widths[ i ] = rw; - remaining_x[i] = x; - remaining_widths[i] = rw; - - if (i != 1 && i != 2) - p.drawRoundedRect(QRectF(x, y, rw, key_w), rx, rx); + if ( i != 1 && i != 2 ) + { + p.drawRoundedRect( QRectF( x, y, rw, key_w ), rx, rx ); + } y = y + space + key_w; } - if (kb->kb_extended_return) { - rx=rx*2; - int x1 = remaining_x[1]; - int y1 = 6 + key_w*1 + space*1; - int w1 = remaining_widths[1]; - int x2 = remaining_x[2]; - int y2 = 6 + key_w*2 + space*2; + if ( kb->kb_extended_return ) + { + rx = rx * 2; + int x1 = remaining_x[ 1 ]; + int y1 = 6 + key_w * 1 + space * 1; + int w1 = remaining_widths[ 1 ]; + int x2 = remaining_x[ 2 ]; + int y2 = 6 + key_w * 2 + space * 2; // this is some serious crap... but it has to be so // maybe one day keyboards won't look like this... // one can only hope QPainterPath pp; - pp.moveTo(x1, y1+rx); - pp.arcTo(x1, y1, rx, rx, 180, -90); - pp.lineTo(x1+w1-rx, y1); - pp.arcTo(x1+w1-rx, y1, rx, rx, 90, -90); - pp.lineTo(x1+w1, y2+key_w-rx); - pp.arcTo(x1+w1-rx, y2+key_w-rx, rx, rx, 0, -90); - pp.lineTo(x2+rx, y2+key_w); - pp.arcTo(x2, y2+key_w-rx, rx, rx, -90, -90); - pp.lineTo(x2, y1+key_w); - pp.lineTo(x1+rx, y1+key_w); - pp.arcTo(x1, y1+key_w-rx, rx, rx, -90, -90); + pp.moveTo( x1, y1 + rx ); + pp.arcTo( x1, y1, rx, rx, 180, -90 ); + pp.lineTo( x1 + w1 - rx, y1 ); + pp.arcTo( x1 + w1 - rx, y1, rx, rx, 90, -90 ); + pp.lineTo( x1 + w1, y2 + key_w - rx ); + pp.arcTo( x1 + w1 - rx, y2 + key_w - rx, rx, rx, 0, -90 ); + pp.lineTo( x2 + rx, y2 + key_w ); + pp.arcTo( x2, y2 + key_w - rx, rx, rx, -90, -90 ); + pp.lineTo( x2, y1 + key_w ); + pp.lineTo( x1 + rx, y1 + key_w ); + pp.arcTo( x1, y1 + key_w - rx, rx, rx, -90, -90 ); pp.closeSubpath(); - p.drawPath(pp); + p.drawPath( pp ); } - else { - x= remaining_x[2]; - y = 6 + key_w*2 + space*2; - p.drawRoundedRect(QRectF(x, y, remaining_widths[2], key_w), rx, rx); + else + { + x = remaining_x[ 2 ]; + y = 6 + key_w * 2 + space * 2; + p.drawRoundedRect( QRectF( x, y, remaining_widths[ 2 ], key_w ), rx, rx ); } - QWidget::paintEvent(event); + QWidget::paintEvent( event ); } diff --git a/src/modules/keyboard/keyboardwidget/keyboardpreview.h b/src/modules/keyboard/keyboardwidget/keyboardpreview.h index 8818661475..f09f9b5f52 100644 --- a/src/modules/keyboard/keyboardwidget/keyboardpreview.h +++ b/src/modules/keyboard/keyboardwidget/keyboardpreview.h @@ -1,6 +1,8 @@ /* === This file is part of Calamares - === * - * Copyright 2014, Teo Mrnjavac + * SPDX-FileCopyrightText: 2007 Free Software Foundation, Inc. + * SPDX-FileCopyrightText: 2014 Teo Mrnjavac + * SPDX-License-Identifier: GPL-3.0-or-later * * Portions from the Manjaro Installation Framework * by Roland Singer @@ -23,17 +25,17 @@ #ifndef KEYBOARDPREVIEW_H #define KEYBOARDPREVIEW_H -#include -#include +#include #include #include -#include #include -#include +#include #include #include +#include #include #include +#include class KeyBoardPreview : public QWidget @@ -41,40 +43,46 @@ class KeyBoardPreview : public QWidget Q_OBJECT public: explicit KeyBoardPreview( QWidget* parent = nullptr ); - - void setLayout(QString layout); - void setVariant(QString variant); + + void setLayout( QString layout ); + void setVariant( QString variant ); private: - enum KB_TYPE { KB_104, KB_105, KB_106 }; + enum KB_TYPE + { + KB_104, + KB_105, + KB_106 + }; - struct KB { + struct KB + { bool kb_extended_return; - QList > keys; + QList< QList< int > > keys; }; - struct Code { + struct Code + { QString plain, shift, ctrl, alt; }; QString layout, variant; QFont lowerFont, upperFont; - KB* kb, kbList[3]; - QList codes; + KB *kb, kbList[ 3 ]; + QList< Code > codes; int space, usable_width, key_w; void loadInfo(); bool loadCodes(); - QString regular_text(int index); - QString shift_text(int index); - QString ctrl_text(int index); - QString alt_text(int index); - QString fromUnicodeString(QString raw); + QString regular_text( int index ); + QString shift_text( int index ); + QString ctrl_text( int index ); + QString alt_text( int index ); + QString fromUnicodeString( QString raw ); protected: - void paintEvent(QPaintEvent* event); - void resizeEvent(QResizeEvent* event); - + void paintEvent( QPaintEvent* event ); + void resizeEvent( QResizeEvent* event ); }; -#endif // KEYBOARDPREVIEW_H +#endif // KEYBOARDPREVIEW_H diff --git a/src/modules/keyboardq/KeyboardQmlViewStep.cpp b/src/modules/keyboardq/KeyboardQmlViewStep.cpp index 783349075a..a5c1f94352 100644 --- a/src/modules/keyboardq/KeyboardQmlViewStep.cpp +++ b/src/modules/keyboardq/KeyboardQmlViewStep.cpp @@ -1,7 +1,8 @@ /* === This file is part of Calamares - === * - * Copyright 2014-2015, Teo Mrnjavac - * Copyright 2020, Camilo Higuita + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2020 Camilo Higuita + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/keyboardq/KeyboardQmlViewStep.h b/src/modules/keyboardq/KeyboardQmlViewStep.h index 22826f2cd0..b1e7e15e75 100644 --- a/src/modules/keyboardq/KeyboardQmlViewStep.h +++ b/src/modules/keyboardq/KeyboardQmlViewStep.h @@ -1,7 +1,8 @@ /* === This file is part of Calamares - === * - * Copyright 2014-2015, Teo Mrnjavac - * Copyright 2017, Adriaan de Groot + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/license/LicensePage.cpp b/src/modules/license/LicensePage.cpp index f2b1f4a50c..411032404d 100644 --- a/src/modules/license/LicensePage.cpp +++ b/src/modules/license/LicensePage.cpp @@ -1,9 +1,10 @@ /* === This file is part of Calamares - === * - * Copyright 2015, Anke Boersma - * Copyright 2015, Alexandre Arnt - * Copyright 2015, Teo Mrnjavac - * Copyright 2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2015 Anke Boersma + * SPDX-FileCopyrightText: 2015 Alexandre Arnt + * SPDX-FileCopyrightText: 2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/license/LicensePage.h b/src/modules/license/LicensePage.h index dcd3ea7b4c..8493825b54 100644 --- a/src/modules/license/LicensePage.h +++ b/src/modules/license/LicensePage.h @@ -1,9 +1,10 @@ /* === This file is part of Calamares - === * - * Copyright 2015, Anke Boersma - * Copyright 2015, Alexandre Arnt - * Copyright 2015, Teo Mrnjavac - * Copyright 2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2015 Anke Boersma + * SPDX-FileCopyrightText: 2015 Alexandre Arnt + * SPDX-FileCopyrightText: 2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/license/LicenseViewStep.cpp b/src/modules/license/LicenseViewStep.cpp index 89cddf27fe..24ae5652a8 100644 --- a/src/modules/license/LicenseViewStep.cpp +++ b/src/modules/license/LicenseViewStep.cpp @@ -1,7 +1,8 @@ /* === This file is part of Calamares - === * - * Copyright 2015, Anke Boersma - * Copyright 2015, Teo Mrnjavac + * SPDX-FileCopyrightText: 2015 Anke Boersma + * SPDX-FileCopyrightText: 2015 Teo Mrnjavac + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/license/LicenseViewStep.h b/src/modules/license/LicenseViewStep.h index 6bfab42462..3aef1f7f3e 100644 --- a/src/modules/license/LicenseViewStep.h +++ b/src/modules/license/LicenseViewStep.h @@ -1,7 +1,8 @@ /* === This file is part of Calamares - === * - * Copyright 2015, Anke Boersma - * Copyright 2015, Teo Mrnjavac + * SPDX-FileCopyrightText: 2015 Anke Boersma + * SPDX-FileCopyrightText: 2015 Teo Mrnjavac + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/license/LicenseWidget.cpp b/src/modules/license/LicenseWidget.cpp index 09d2230e5c..a5f6d688a5 100644 --- a/src/modules/license/LicenseWidget.cpp +++ b/src/modules/license/LicenseWidget.cpp @@ -1,9 +1,10 @@ /* === This file is part of Calamares - === * - * Copyright 2015, Anke Boersma - * Copyright 2015, Alexandre Arnt - * Copyright 2015, Teo Mrnjavac - * Copyright 2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2015 Anke Boersma + * SPDX-FileCopyrightText: 2015 Alexandre Arnt + * SPDX-FileCopyrightText: 2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/license/LicenseWidget.h b/src/modules/license/LicenseWidget.h index a386ae3534..08aa031c5b 100644 --- a/src/modules/license/LicenseWidget.h +++ b/src/modules/license/LicenseWidget.h @@ -1,9 +1,10 @@ /* === This file is part of Calamares - === * - * Copyright 2015, Anke Boersma - * Copyright 2015, Alexandre Arnt - * Copyright 2015, Teo Mrnjavac - * Copyright 2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2015 Anke Boersma + * SPDX-FileCopyrightText: 2015 Alexandre Arnt + * SPDX-FileCopyrightText: 2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/license/README.md b/src/modules/license/README.md index 4c9862c8a8..0ad7a636e7 100644 --- a/src/modules/license/README.md +++ b/src/modules/license/README.md @@ -1,11 +1,25 @@ ### License Approval Module ---------- -For distributions shipping proprietary software, this module creates a globalstorage entry when the user accepts or declines one or more presented End User License Agreements files. -The number of licenses shown are configurable. The license.conf file has a few examples of how to add URLs. -If you do not want to include this module in your Calamares build, add ```-DSKIP_MODULES="license"``` to your build settings (CMake call). + + +For distributions shipping proprietary software, this module creates a +Global Storage entry when the user accepts or declines one or more of +the End User License Agreements files that are presented here. + +The number of licenses shown are configurable. The `license.conf` file +has a few examples of how to add URLs. + +If you do not want to include this module in your Calamares build, +add `-DSKIP_MODULES="license"` to your build settings (CMake call). + +How to implement the removal or not installing of proprietary software is +up to any distribution to implement. For example, proprietary graphics +drivers cannot simply be removed in the packages module, a free version +will need to be installed. -How to implement the removal or not installing of proprietary software is up to any distribution to implement. For example, proprietary graphics drivers cannot simply be removed in the packages module, a free version will need to be installed. An example of where the licenseAgree globalstorage entry is used: https://github.com/KaOSx/calamares/blob/master/src/modules/nonfree_drivers/main.py diff --git a/src/modules/locale/Config.cpp b/src/modules/locale/Config.cpp index 5bbe20038b..ae4f772ad8 100644 --- a/src/modules/locale/Config.cpp +++ b/src/modules/locale/Config.cpp @@ -2,7 +2,6 @@ * * SPDX-FileCopyrightText: 2020 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later - * License-Filename: LICENSE * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/locale/Config.h b/src/modules/locale/Config.h index d95606d997..cbebf98442 100644 --- a/src/modules/locale/Config.h +++ b/src/modules/locale/Config.h @@ -2,7 +2,6 @@ * * SPDX-FileCopyrightText: 2020 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later - * License-Filename: LICENSE * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/locale/LCLocaleDialog.cpp b/src/modules/locale/LCLocaleDialog.cpp index db33f0c3d1..a3b0a4d2c2 100644 --- a/src/modules/locale/LCLocaleDialog.cpp +++ b/src/modules/locale/LCLocaleDialog.cpp @@ -1,7 +1,8 @@ /* === This file is part of Calamares - === * - * Copyright 2014, Teo Mrnjavac - * Copyright 2017, Adriaan de Groot + * SPDX-FileCopyrightText: 2014 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/locale/LCLocaleDialog.h b/src/modules/locale/LCLocaleDialog.h index 81e4cb5479..389c98ba66 100644 --- a/src/modules/locale/LCLocaleDialog.h +++ b/src/modules/locale/LCLocaleDialog.h @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2014, Teo Mrnjavac + * SPDX-FileCopyrightText: 2014 Teo Mrnjavac + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/locale/LocaleConfiguration.cpp b/src/modules/locale/LocaleConfiguration.cpp index 0559072280..41f315f0b4 100644 --- a/src/modules/locale/LocaleConfiguration.cpp +++ b/src/modules/locale/LocaleConfiguration.cpp @@ -1,7 +1,8 @@ /* === This file is part of Calamares - === * - * Copyright 2016, Teo Mrnjavac - * Copyright 2017-2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2016 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017-2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/locale/LocaleConfiguration.h b/src/modules/locale/LocaleConfiguration.h index 2e02bc02a4..de3da1d742 100644 --- a/src/modules/locale/LocaleConfiguration.h +++ b/src/modules/locale/LocaleConfiguration.h @@ -1,7 +1,8 @@ /* === This file is part of Calamares - === * - * Copyright 2016, Teo Mrnjavac - * Copyright 2017-2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2016 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017-2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/locale/LocalePage.h b/src/modules/locale/LocalePage.h index 4f2d321b51..57dbfe5404 100644 --- a/src/modules/locale/LocalePage.h +++ b/src/modules/locale/LocalePage.h @@ -1,7 +1,8 @@ /* === This file is part of Calamares - === * - * Copyright 2014, Teo Mrnjavac - * Copyright 2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2014 Teo Mrnjavac + * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/locale/LocaleViewStep.cpp b/src/modules/locale/LocaleViewStep.cpp index 9ffb96c250..34f4d783b6 100644 --- a/src/modules/locale/LocaleViewStep.cpp +++ b/src/modules/locale/LocaleViewStep.cpp @@ -1,7 +1,8 @@ /* === This file is part of Calamares - === * - * Copyright 2014-2016, Teo Mrnjavac - * Copyright 2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2014-2016 Teo Mrnjavac + * SPDX-FileCopyrightText: 2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/locale/LocaleViewStep.h b/src/modules/locale/LocaleViewStep.h index 0a40da8613..735e5d2ce2 100644 --- a/src/modules/locale/LocaleViewStep.h +++ b/src/modules/locale/LocaleViewStep.h @@ -1,7 +1,8 @@ /* === This file is part of Calamares - === * - * Copyright 2014-2016, Teo Mrnjavac - * Copyright 2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2014-2016 Teo Mrnjavac + * SPDX-FileCopyrightText: 2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/locale/SetTimezoneJob.cpp b/src/modules/locale/SetTimezoneJob.cpp index aa8c4c2412..2d90a66090 100644 --- a/src/modules/locale/SetTimezoneJob.cpp +++ b/src/modules/locale/SetTimezoneJob.cpp @@ -1,7 +1,8 @@ /* === This file is part of Calamares - === * - * Copyright 2014, Teo Mrnjavac - * Copyright 2015, Rohan Garg + * SPDX-FileCopyrightText: 2014 Teo Mrnjavac + * SPDX-FileCopyrightText: 2015 Rohan Garg + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/locale/SetTimezoneJob.h b/src/modules/locale/SetTimezoneJob.h index 7b93770bbe..b4e04edf2c 100644 --- a/src/modules/locale/SetTimezoneJob.h +++ b/src/modules/locale/SetTimezoneJob.h @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2014, Teo Mrnjavac + * SPDX-FileCopyrightText: 2014 Teo Mrnjavac + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/locale/images/bg.png.license b/src/modules/locale/images/bg.png.license new file mode 100644 index 0000000000..cc08e1f9f1 --- /dev/null +++ b/src/modules/locale/images/bg.png.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: 2014 Teo Mrnjavac +SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/modules/locale/images/pin.png.license b/src/modules/locale/images/pin.png.license new file mode 100644 index 0000000000..cc08e1f9f1 --- /dev/null +++ b/src/modules/locale/images/pin.png.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: 2014 Teo Mrnjavac +SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/modules/locale/timezonewidget/TimeZoneImage.cpp b/src/modules/locale/timezonewidget/TimeZoneImage.cpp index 22bd263d62..1d1c1f8065 100644 --- a/src/modules/locale/timezonewidget/TimeZoneImage.cpp +++ b/src/modules/locale/timezonewidget/TimeZoneImage.cpp @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2020, Adriaan de Groot + * SPDX-FileCopyrightText: 2020 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/locale/timezonewidget/TimeZoneImage.h b/src/modules/locale/timezonewidget/TimeZoneImage.h index ee02bfbfd3..6c77303a59 100644 --- a/src/modules/locale/timezonewidget/TimeZoneImage.h +++ b/src/modules/locale/timezonewidget/TimeZoneImage.h @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2020, Adriaan de Groot + * SPDX-FileCopyrightText: 2020 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/locale/timezonewidget/timezonewidget.cpp b/src/modules/locale/timezonewidget/timezonewidget.cpp index 778f0535d8..b2c0efc5b9 100644 --- a/src/modules/locale/timezonewidget/timezonewidget.cpp +++ b/src/modules/locale/timezonewidget/timezonewidget.cpp @@ -1,7 +1,9 @@ /* === This file is part of Calamares - === * - * Copyright 2014-2015, Teo Mrnjavac - * Copyright 2017-2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2007 Free Software Foundation, Inc. + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017-2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Originally from the Manjaro Installation Framework * by Roland Singer diff --git a/src/modules/locale/timezonewidget/timezonewidget.h b/src/modules/locale/timezonewidget/timezonewidget.h index c15570b523..dc95429de6 100644 --- a/src/modules/locale/timezonewidget/timezonewidget.h +++ b/src/modules/locale/timezonewidget/timezonewidget.h @@ -1,7 +1,9 @@ /* === This file is part of Calamares - === * - * Copyright 2014, Teo Mrnjavac - * Copyright 2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2007 Free Software Foundation, Inc. + * SPDX-FileCopyrightText: 2014 Teo Mrnjavac + * SPDX-FileCopyrightText: 2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Originally from the Manjaro Installation Framework * by Roland Singer diff --git a/src/modules/localeq/LocaleQmlViewStep.cpp b/src/modules/localeq/LocaleQmlViewStep.cpp index d60664a8f0..6531e59a2a 100644 --- a/src/modules/localeq/LocaleQmlViewStep.cpp +++ b/src/modules/localeq/LocaleQmlViewStep.cpp @@ -1,7 +1,8 @@ /* === This file is part of Calamares - === * - * Copyright 2014-2015, Teo Mrnjavac - * Copyright 2018,2020 Adriaan de Groot + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 20182020 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/localeq/LocaleQmlViewStep.h b/src/modules/localeq/LocaleQmlViewStep.h index bbafd5abb3..261c1cfc27 100644 --- a/src/modules/localeq/LocaleQmlViewStep.h +++ b/src/modules/localeq/LocaleQmlViewStep.h @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2019-2020 Adriaan de Groot + * SPDX-FileCopyrightText: 2019-2020 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/localeq/Map.qml b/src/modules/localeq/Map.qml index d414825dd4..3a2041bc06 100644 --- a/src/modules/localeq/Map.qml +++ b/src/modules/localeq/Map.qml @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2020, Anke Boersma + * SPDX-FileCopyrightText: 2020 Anke Boersma + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/localeq/Offline.qml b/src/modules/localeq/Offline.qml index 8e9d912804..72170711d5 100644 --- a/src/modules/localeq/Offline.qml +++ b/src/modules/localeq/Offline.qml @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2020, Anke Boersma + * SPDX-FileCopyrightText: 2020 Anke Boersma + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/localeq/i18n.qml b/src/modules/localeq/i18n.qml index 6907b1ba83..06f871b28c 100644 --- a/src/modules/localeq/i18n.qml +++ b/src/modules/localeq/i18n.qml @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2020, Anke Boersma + * SPDX-FileCopyrightText: 2020 Anke Boersma + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/localeq/img/chevron-left-solid.svg.license b/src/modules/localeq/img/chevron-left-solid.svg.license new file mode 100644 index 0000000000..5a578a8a29 --- /dev/null +++ b/src/modules/localeq/img/chevron-left-solid.svg.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: 2020 https://github.com/FortAwesome/Font-Awesome +SPDX-License-Identifier: CC-BY-4.0 diff --git a/src/modules/localeq/img/locale.svg.license b/src/modules/localeq/img/locale.svg.license new file mode 100644 index 0000000000..5f43e650d3 --- /dev/null +++ b/src/modules/localeq/img/locale.svg.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: 2020 demmm +SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/modules/localeq/img/minus.png.license b/src/modules/localeq/img/minus.png.license new file mode 100644 index 0000000000..5f43e650d3 --- /dev/null +++ b/src/modules/localeq/img/minus.png.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: 2020 demmm +SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/modules/localeq/img/pin.svg.license b/src/modules/localeq/img/pin.svg.license new file mode 100644 index 0000000000..5f43e650d3 --- /dev/null +++ b/src/modules/localeq/img/pin.svg.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: 2020 demmm +SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/modules/localeq/img/plus.png.license b/src/modules/localeq/img/plus.png.license new file mode 100644 index 0000000000..5f43e650d3 --- /dev/null +++ b/src/modules/localeq/img/plus.png.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: 2020 demmm +SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/modules/localeq/img/worldmap.png.license b/src/modules/localeq/img/worldmap.png.license new file mode 100644 index 0000000000..5f43e650d3 --- /dev/null +++ b/src/modules/localeq/img/worldmap.png.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: 2020 demmm +SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/modules/localeq/localeq.qml b/src/modules/localeq/localeq.qml index a2013f5dee..f862e2d08e 100644 --- a/src/modules/localeq/localeq.qml +++ b/src/modules/localeq/localeq.qml @@ -1,7 +1,8 @@ /* === This file is part of Calamares - === * - * Copyright 2020, Adriaan de Groot - * Copyright 2020, Anke Boersma + * SPDX-FileCopyrightText: 2020 Adriaan de Groot + * SPDX-FileCopyrightText: 2020 Anke Boersma + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/luksbootkeyfile/LuksBootKeyFileJob.cpp b/src/modules/luksbootkeyfile/LuksBootKeyFileJob.cpp index 90d64d5a62..63b5d753de 100644 --- a/src/modules/luksbootkeyfile/LuksBootKeyFileJob.cpp +++ b/src/modules/luksbootkeyfile/LuksBootKeyFileJob.cpp @@ -1,19 +1,8 @@ /* === This file is part of Calamares - === * - * Copyright 2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "LuksBootKeyFileJob.h" diff --git a/src/modules/luksbootkeyfile/LuksBootKeyFileJob.h b/src/modules/luksbootkeyfile/LuksBootKeyFileJob.h index de9b9c6778..780f908830 100644 --- a/src/modules/luksbootkeyfile/LuksBootKeyFileJob.h +++ b/src/modules/luksbootkeyfile/LuksBootKeyFileJob.h @@ -1,19 +1,8 @@ /* === This file is part of Calamares - === * - * Copyright 2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef LUKSBOOTKEYFILEJOB_H diff --git a/src/modules/machineid/MachineIdJob.cpp b/src/modules/machineid/MachineIdJob.cpp index fc535e3560..d70b0fed43 100644 --- a/src/modules/machineid/MachineIdJob.cpp +++ b/src/modules/machineid/MachineIdJob.cpp @@ -1,9 +1,10 @@ /* === This file is part of Calamares - === * - * Copyright 2014, Kevin Kofler - * Copyright 2016, Philip Müller - * Copyright 2017, Alf Gaida - * Copyright 2019-2020, Adriaan de Groot + * SPDX-FileCopyrightText: 2014 Kevin Kofler + * SPDX-FileCopyrightText: 2016 Philip Müller + * SPDX-FileCopyrightText: 2017 Alf Gaida + * SPDX-FileCopyrightText: 2019-2020 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/machineid/MachineIdJob.h b/src/modules/machineid/MachineIdJob.h index 08943392a8..91d091b169 100644 --- a/src/modules/machineid/MachineIdJob.h +++ b/src/modules/machineid/MachineIdJob.h @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/machineid/Tests.cpp b/src/modules/machineid/Tests.cpp index 2b6a9b1d13..af2dcee3f6 100644 --- a/src/modules/machineid/Tests.cpp +++ b/src/modules/machineid/Tests.cpp @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -130,7 +131,7 @@ MachineIdTests::testJob() // Prepare part of the target filesystem { - QVERIFY( system->createTargetDirs("/etc") ); + QVERIFY( system->createTargetDirs( "/etc" ) ); auto r = system->createTargetFile( "/etc/machine-id", "Hello" ); QVERIFY( !r.failed() ); QVERIFY( r ); @@ -164,7 +165,7 @@ MachineIdTests::testJob() QFileInfo fi( "/tmp/var/lib/dbus/machine-id" ); QVERIFY( fi.exists() ); QVERIFY( fi.isSymLink() ); - QCOMPARE( fi.size(), 5); + QCOMPARE( fi.size(), 5 ); #endif } tempRoot.setAutoRemove( true ); // All tests succeeded diff --git a/src/modules/machineid/Workers.cpp b/src/modules/machineid/Workers.cpp index 76e4664351..67910ce9a3 100644 --- a/src/modules/machineid/Workers.cpp +++ b/src/modules/machineid/Workers.cpp @@ -1,9 +1,10 @@ /* === This file is part of Calamares - === * - * Copyright 2014, Kevin Kofler - * Copyright 2016, Philip Müller - * Copyright 2017, Alf Gaida - * Copyright 2019-2020, Adriaan de Groot + * SPDX-FileCopyrightText: 2014 Kevin Kofler + * SPDX-FileCopyrightText: 2016 Philip Müller + * SPDX-FileCopyrightText: 2017 Alf Gaida + * SPDX-FileCopyrightText: 2019-2020 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/machineid/Workers.h b/src/modules/machineid/Workers.h index 8cb8d74ff2..8e69267608 100644 --- a/src/modules/machineid/Workers.h +++ b/src/modules/machineid/Workers.h @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/netinstall/Config.cpp b/src/modules/netinstall/Config.cpp index 0625182216..8383b51af6 100644 --- a/src/modules/netinstall/Config.cpp +++ b/src/modules/netinstall/Config.cpp @@ -1,9 +1,10 @@ /* - * Copyright 2016, Luca Giambonini - * Copyright 2016, Lisa Vitolo - * Copyright 2017, Kyle Robbertze - * Copyright 2017-2018, 2020, Adriaan de Groot - * Copyright 2017, Gabriel Craciunescu + * SPDX-FileCopyrightText: 2016 Luca Giambonini + * SPDX-FileCopyrightText: 2016 Lisa Vitolo + * SPDX-FileCopyrightText: 2017 Kyle Robbertze + * SPDX-FileCopyrightText: 2017-2018 2020, Adriaan de Groot + * SPDX-FileCopyrightText: 2017 Gabriel Craciunescu + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/netinstall/Config.h b/src/modules/netinstall/Config.h index 781c9be5da..a7e9798278 100644 --- a/src/modules/netinstall/Config.h +++ b/src/modules/netinstall/Config.h @@ -1,8 +1,9 @@ /* - * Copyright 2016, Luca Giambonini - * Copyright 2016, Lisa Vitolo - * Copyright 2017, Kyle Robbertze - * Copyright 2017-2018, 2020, Adriaan de Groot + * SPDX-FileCopyrightText: 2016 Luca Giambonini + * SPDX-FileCopyrightText: 2016 Lisa Vitolo + * SPDX-FileCopyrightText: 2017 Kyle Robbertze + * SPDX-FileCopyrightText: 2017-2018 2020, Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/netinstall/NetInstallPage.cpp b/src/modules/netinstall/NetInstallPage.cpp index 755b17999c..309adc490c 100644 --- a/src/modules/netinstall/NetInstallPage.cpp +++ b/src/modules/netinstall/NetInstallPage.cpp @@ -1,9 +1,10 @@ /* - * Copyright 2016, Luca Giambonini - * Copyright 2016, Lisa Vitolo - * Copyright 2017, Kyle Robbertze - * Copyright 2017-2018, 2020, Adriaan de Groot - * Copyright 2017, Gabriel Craciunescu + * SPDX-FileCopyrightText: 2016 Luca Giambonini + * SPDX-FileCopyrightText: 2016 Lisa Vitolo + * SPDX-FileCopyrightText: 2017 Kyle Robbertze + * SPDX-FileCopyrightText: 2017-2018 2020, Adriaan de Groot + * SPDX-FileCopyrightText: 2017 Gabriel Craciunescu + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/netinstall/NetInstallPage.h b/src/modules/netinstall/NetInstallPage.h index 13a106eaf6..c680360d4c 100644 --- a/src/modules/netinstall/NetInstallPage.h +++ b/src/modules/netinstall/NetInstallPage.h @@ -1,8 +1,9 @@ /* - * Copyright 2016, Luca Giambonini - * Copyright 2016, Lisa Vitolo - * Copyright 2017, Kyle Robbertze - * Copyright 2017-2018, 2020, Adriaan de Groot + * SPDX-FileCopyrightText: 2016 Luca Giambonini + * SPDX-FileCopyrightText: 2016 Lisa Vitolo + * SPDX-FileCopyrightText: 2017 Kyle Robbertze + * SPDX-FileCopyrightText: 2017-2018 2020, Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/netinstall/NetInstallViewStep.cpp b/src/modules/netinstall/NetInstallViewStep.cpp index e99b438305..3b82ff5e0d 100644 --- a/src/modules/netinstall/NetInstallViewStep.cpp +++ b/src/modules/netinstall/NetInstallViewStep.cpp @@ -1,8 +1,9 @@ /* - * Copyright 2016, Luca Giambonini - * Copyright 2016, Lisa Vitolo - * Copyright 2017, Kyle Robbertze - * Copyright 2017-2018, 2020, Adriaan de Groot + * SPDX-FileCopyrightText: 2016 Luca Giambonini + * SPDX-FileCopyrightText: 2016 Lisa Vitolo + * SPDX-FileCopyrightText: 2017 Kyle Robbertze + * SPDX-FileCopyrightText: 2017-2018 2020, Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/netinstall/NetInstallViewStep.h b/src/modules/netinstall/NetInstallViewStep.h index d2114a3466..44299632c8 100644 --- a/src/modules/netinstall/NetInstallViewStep.h +++ b/src/modules/netinstall/NetInstallViewStep.h @@ -1,7 +1,8 @@ /* - * Copyright 2016, Luca Giambonini - * Copyright 2016, Lisa Vitolo - * Copyright 2017, Adriaan de Groot + * SPDX-FileCopyrightText: 2016 Luca Giambonini + * SPDX-FileCopyrightText: 2016 Lisa Vitolo + * SPDX-FileCopyrightText: 2017 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/netinstall/PackageModel.cpp b/src/modules/netinstall/PackageModel.cpp index dd5047129a..b5e6103c83 100644 --- a/src/modules/netinstall/PackageModel.cpp +++ b/src/modules/netinstall/PackageModel.cpp @@ -1,7 +1,8 @@ /* === This file is part of Calamares - === * - * Copyright (c) 2017, Kyle Robbertze - * Copyright 2017-2018, 2020, Adriaan de Groot + * SPDX-FileCopyrightText: 2017 Kyle Robbertze + * SPDX-FileCopyrightText: 2017-2018 2020, Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/netinstall/PackageModel.h b/src/modules/netinstall/PackageModel.h index b4e8fc1021..35bc113543 100644 --- a/src/modules/netinstall/PackageModel.h +++ b/src/modules/netinstall/PackageModel.h @@ -1,8 +1,9 @@ /* === This file is part of Calamares - === * - * Copyright (c) 2017, Kyle Robbertze - * Copyright 2017, Adriaan de Groot + * SPDX-FileCopyrightText: 2017 Kyle Robbertze + * SPDX-FileCopyrightText: 2017 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/netinstall/PackageTreeItem.cpp b/src/modules/netinstall/PackageTreeItem.cpp index 30a57ac2ac..32fcf4296d 100644 --- a/src/modules/netinstall/PackageTreeItem.cpp +++ b/src/modules/netinstall/PackageTreeItem.cpp @@ -1,7 +1,8 @@ /* === This file is part of Calamares - === * - * Copyright (c) 2017, Kyle Robbertze - * Copyright 2017, 2020, Adriaan de Groot + * SPDX-FileCopyrightText: 2017 Kyle Robbertze + * SPDX-FileCopyrightText: 2017 2020, Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/netinstall/PackageTreeItem.h b/src/modules/netinstall/PackageTreeItem.h index 0b2d506d7f..5df703a29c 100644 --- a/src/modules/netinstall/PackageTreeItem.h +++ b/src/modules/netinstall/PackageTreeItem.h @@ -1,7 +1,8 @@ /* === This file is part of Calamares - === * - * Copyright (c) 2017, Kyle Robbertze - * Copyright 2017, 2020, Adriaan de Groot + * SPDX-FileCopyrightText: 2017 Kyle Robbertze + * SPDX-FileCopyrightText: 2017 2020, Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/netinstall/README.md b/src/modules/netinstall/README.md deleted file mode 100644 index 0a9db2f22d..0000000000 --- a/src/modules/netinstall/README.md +++ /dev/null @@ -1,6 +0,0 @@ -# Netinstall module - -All of the actual documentation of the netinstall module has moved -into the `netinstall.conf` file; since the configuration file **may** -contain the groups-and-packages list itself, that format is -also described there. diff --git a/src/modules/netinstall/Tests.cpp b/src/modules/netinstall/Tests.cpp index c74e6aafe5..1ffc72f3f1 100644 --- a/src/modules/netinstall/Tests.cpp +++ b/src/modules/netinstall/Tests.cpp @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2020, Adriaan de Groot + * SPDX-FileCopyrightText: 2020 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/netinstall/netinstall.yaml b/src/modules/netinstall/netinstall.yaml index 6a93d84ead..e55bc1b244 100644 --- a/src/modules/netinstall/netinstall.yaml +++ b/src/modules/netinstall/netinstall.yaml @@ -1,5 +1,8 @@ # Example configuration with groups and packages, taken from Chakra Linux. # +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# # This example is rather limited. See `netinstall.conf` for full documentation # on the configuration format. The module configuration file `netinstall.conf` # **may** contain the package-list, but that is only useful for static diff --git a/src/modules/notesqml/NotesQmlViewStep.cpp b/src/modules/notesqml/NotesQmlViewStep.cpp index 5a6bbc4942..4d0430e952 100644 --- a/src/modules/notesqml/NotesQmlViewStep.cpp +++ b/src/modules/notesqml/NotesQmlViewStep.cpp @@ -1,20 +1,9 @@ /* === This file is part of Calamares - === * - * Copyright 2020, Adriaan de Groot - * Copyright 2020, Anke Boersma + * SPDX-FileCopyrightText: 2020 Adriaan de Groot + * SPDX-FileCopyrightText: 2020 Anke Boersma + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "NotesQmlViewStep.h" @@ -45,7 +34,7 @@ NotesQmlViewStep::setConfigurationMap( const QVariantMap& configurationMap ) m_notesName = new CalamaresUtils::Locale::TranslatedString( qmlLabel, "notes" ); } - Calamares::QmlViewStep::setConfigurationMap( configurationMap ); // call parent implementation last + Calamares::QmlViewStep::setConfigurationMap( configurationMap ); // call parent implementation last } CALAMARES_PLUGIN_FACTORY_DEFINITION( NotesQmlViewStepFactory, registerPlugin< NotesQmlViewStep >(); ) diff --git a/src/modules/notesqml/NotesQmlViewStep.h b/src/modules/notesqml/NotesQmlViewStep.h index 5ffd4598ea..8545b47b9f 100644 --- a/src/modules/notesqml/NotesQmlViewStep.h +++ b/src/modules/notesqml/NotesQmlViewStep.h @@ -1,20 +1,9 @@ /* === This file is part of Calamares - === * - * Copyright 2020, Adriaan de Groot - * Copyright 2020, Anke Boersma + * SPDX-FileCopyrightText: 2020 Adriaan de Groot + * SPDX-FileCopyrightText: 2020 Anke Boersma + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef NOTESQMLVIEWSTEP_H @@ -23,8 +12,8 @@ #include "DllMacro.h" #include "locale/TranslatableConfiguration.h" #include "utils/CalamaresUtilsSystem.h" -#include "utils/Variant.h" #include "utils/PluginFactory.h" +#include "utils/Variant.h" #include "viewpages/QmlViewStep.h" class PLUGINDLLEXPORT NotesQmlViewStep : public Calamares::QmlViewStep @@ -36,7 +25,7 @@ class PLUGINDLLEXPORT NotesQmlViewStep : public Calamares::QmlViewStep virtual ~NotesQmlViewStep() override; QString prettyName() const override; - + void setConfigurationMap( const QVariantMap& configurationMap ) override; private: diff --git a/src/modules/notesqml/examples/notesqml.qml.example b/src/modules/notesqml/examples/notesqml.qml.example index a41fa98fdf..b3094f447b 100644 --- a/src/modules/notesqml/examples/notesqml.qml.example +++ b/src/modules/notesqml/examples/notesqml.qml.example @@ -1,20 +1,9 @@ /* === This file is part of Calamares - === * - * Copyright 2020, Anke Boersma - * Copyright 2020, Adriaan de Groot + * SPDX-FileCopyrightText: 2020 Anke Boersma + * SPDX-FileCopyrightText: 2020 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ /* Some Calamares internals are available to all QML modules. @@ -25,60 +14,61 @@ */ import calamares.ui 1.0 -import QtQuick 2.7 -import QtQuick.Controls 2.2 -import QtQuick.Window 2.2 -import QtQuick.Layouts 1.3 -import QtQuick.Controls.Material 2.1 + import QtQuick 2.7 import QtQuick.Controls 2.2 import QtQuick.Window 2.2 import QtQuick.Layouts 1.3 import QtQuick.Controls.Material 2.1 -Item { - width: 740 - height: 420 + Item +{ +width: + 740 height : 420 - Flickable { - id: flick - anchors.fill: parent - contentHeight: 800 + Flickable + { + id: + flick anchors + .fill : parent contentHeight : 800 - ScrollBar.vertical: ScrollBar { - id: fscrollbar - width: 10 - policy: ScrollBar.AlwaysOn - } + ScrollBar.vertical : ScrollBar { id : fscrollbar width : 10 policy : ScrollBar.AlwaysOn } - TextArea { - id: intro + TextArea + { + id: + intro x: 1 y: 0 - width: parent.width - fscrollbar.width +width: + parent.width - fscrollbar.width font.pointSize: 14 - textFormat: Text.RichText - antialiasing: true - activeFocusOnPress: false - wrapMode: Text.WordWrap - - text: qsTr("

    %1

    -

    This an example QML file, showing options in RichText with Flickable content.

    +textFormat: + Text.RichText +antialiasing: + true +activeFocusOnPress: + false +wrapMode: + Text.WordWrap -

    QML with RichText can use HTML tags, Flickable content is useful for touchscreens.

    +text: + qsTr( "

    %1

    +

    This an example QML file, showing options in RichText with Flickable content.

    -

    This is bold text

    -

    This is italic text

    -

    This is underlined text

    -

    This text will be center-aligned.

    -

    This is strikethrough

    +

    QML with RichText can use HTML tags, Flickable content is useful for touchscreens.

    -

    Code example: - ls -l /home

    +

    This is bold text

    +

    This is italic text

    +

    This is underlined text

    +

    This text will be center-aligned.

    +

    This is strikethrough

    -

    Lists:

    -
      -
    • Intel CPU systems
    • -
    • AMD CPU systems
    • -
    +

    Code example: + ls -l /home

    -

    The vertical scrollbar is adjustable, current width set to 10.

    ").arg(Branding.string(Branding.VersionedName)) +

    Lists:

    +
      +
    • Intel CPU systems
    • +
    • AMD CPU systems
    • +
    +

    The vertical scrollbar is adjustable, current width set to 10.

    ").arg(Branding.string(Branding.VersionedName)) } } } diff --git a/src/modules/notesqml/notesqml.qml b/src/modules/notesqml/notesqml.qml index 374d9c3996..7be5cffa90 100644 --- a/src/modules/notesqml/notesqml.qml +++ b/src/modules/notesqml/notesqml.qml @@ -2,19 +2,8 @@ * * Copyright 2020, Anke Boersma * Copyright 2020, Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ /* Some Calamares internals are available to all QML modules. diff --git a/src/modules/oemid/IDJob.cpp b/src/modules/oemid/IDJob.cpp index 16461b1912..19ad85cc9a 100644 --- a/src/modules/oemid/IDJob.cpp +++ b/src/modules/oemid/IDJob.cpp @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -27,52 +28,54 @@ #include #include -IDJob::IDJob(const QString& id, QObject* parent) +IDJob::IDJob( const QString& id, QObject* parent ) : Job( parent ) , m_batchIdentifier( id ) { } -QString IDJob::prettyName() const +QString +IDJob::prettyName() const { return tr( "OEM Batch Identifier" ); } -Calamares::JobResult IDJob::writeId( const QString& dirs, const QString& filename, const QString& contents ) +Calamares::JobResult +IDJob::writeId( const QString& dirs, const QString& filename, const QString& contents ) { if ( !QDir().mkpath( dirs ) ) { cError() << "Could not create directories" << dirs; - return Calamares::JobResult::error( - tr( "OEM Batch Identifier" ), - tr( "Could not create directories %1." ).arg( dirs ) ); + return Calamares::JobResult::error( tr( "OEM Batch Identifier" ), + tr( "Could not create directories %1." ).arg( dirs ) ); } QFile output( QDir( dirs ).filePath( filename ) ); if ( output.exists() ) + { cWarning() << "Existing OEM Batch ID" << output.fileName() << "overwritten."; + } if ( !output.open( QIODevice::WriteOnly ) ) { cError() << "Could not write to" << output.fileName(); - return Calamares::JobResult::error( - tr( "OEM Batch Identifier" ), - tr( "Could not open file %1." ).arg( output.fileName() ) ); + return Calamares::JobResult::error( tr( "OEM Batch Identifier" ), + tr( "Could not open file %1." ).arg( output.fileName() ) ); } if ( output.write( contents.toUtf8() ) < 0 ) { cError() << "Write error on" << output.fileName(); - return Calamares::JobResult::error( - tr( "OEM Batch Identifier" ), - tr( "Could not write to file %1." ).arg( output.fileName() ) ); + return Calamares::JobResult::error( tr( "OEM Batch Identifier" ), + tr( "Could not write to file %1." ).arg( output.fileName() ) ); } output.write( "\n" ); // Ignore error on this one return Calamares::JobResult::ok(); } -Calamares::JobResult IDJob::exec() +Calamares::JobResult +IDJob::exec() { cDebug() << "Setting OEM Batch ID to" << m_batchIdentifier; @@ -84,10 +87,11 @@ Calamares::JobResult IDJob::exec() // Don't bother translating internal errors if ( rootMount.isEmpty() && Calamares::Settings::instance()->doChroot() ) - return Calamares::JobResult::internalError( - "OEM Batch Identifier", - "No rootMountPoint is set, but a chroot is required. " - "Is there a module before oemid that sets up the partitions?", - Calamares::JobResult::InvalidConfiguration ); - return writeId( Calamares::Settings::instance()->doChroot() ? rootMount + targetDir : targetDir, targetFile, m_batchIdentifier ); + return Calamares::JobResult::internalError( "OEM Batch Identifier", + "No rootMountPoint is set, but a chroot is required. " + "Is there a module before oemid that sets up the partitions?", + Calamares::JobResult::InvalidConfiguration ); + return writeId( Calamares::Settings::instance()->doChroot() ? rootMount + targetDir : targetDir, + targetFile, + m_batchIdentifier ); } diff --git a/src/modules/oemid/IDJob.h b/src/modules/oemid/IDJob.h index 845a3f451c..dd8bd5e24e 100644 --- a/src/modules/oemid/IDJob.h +++ b/src/modules/oemid/IDJob.h @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -36,7 +37,7 @@ class IDJob : public Calamares::Job Calamares::JobResult writeId( const QString&, const QString&, const QString& ); QString m_batchIdentifier; -} ; +}; #endif diff --git a/src/modules/oemid/OEMViewStep.cpp b/src/modules/oemid/OEMViewStep.cpp index 8a12bd17c9..85de722dc2 100644 --- a/src/modules/oemid/OEMViewStep.cpp +++ b/src/modules/oemid/OEMViewStep.cpp @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -38,22 +39,18 @@ class OEMPage : public QWidget { m_ui->setupUi( this ); - CALAMARES_RETRANSLATE( - m_ui->retranslateUi( this ); - ) + CALAMARES_RETRANSLATE( m_ui->retranslateUi( this ); ) } virtual ~OEMPage() override; - + Ui_OEMPage* m_ui; -} ; +}; -OEMPage::~OEMPage() -{ -} +OEMPage::~OEMPage() {} -OEMViewStep::OEMViewStep(QObject* parent) +OEMViewStep::OEMViewStep( QObject* parent ) : Calamares::ViewStep( parent ) , m_widget( nullptr ) , m_visited( false ) @@ -63,86 +60,106 @@ OEMViewStep::OEMViewStep(QObject* parent) OEMViewStep::~OEMViewStep() { if ( m_widget && m_widget->parent() == nullptr ) + { m_widget->deleteLater(); + } } -bool OEMViewStep::isBackEnabled() const +bool +OEMViewStep::isBackEnabled() const { return true; } -bool OEMViewStep::isNextEnabled() const +bool +OEMViewStep::isNextEnabled() const { return true; } -bool OEMViewStep::isAtBeginning() const +bool +OEMViewStep::isAtBeginning() const { return true; } -bool OEMViewStep::isAtEnd() const +bool +OEMViewStep::isAtEnd() const { return true; } -static QString substitute( QString s ) +static QString +substitute( QString s ) { QString t_date = QStringLiteral( "@@DATE@@" ); if ( s.contains( t_date ) ) { auto date = QDate::currentDate(); - s = s.replace( t_date, date.toString( Qt::ISODate )); + s = s.replace( t_date, date.toString( Qt::ISODate ) ); } return s; } -void OEMViewStep::onActivate() +void +OEMViewStep::onActivate() { if ( !m_widget ) - (void) widget(); + { + (void)widget(); + } if ( !m_visited && m_widget ) + { m_widget->m_ui->batchIdentifier->setText( m_user_batchIdentifier ); + } m_visited = true; ViewStep::onActivate(); } -void OEMViewStep::onLeave() +void +OEMViewStep::onLeave() { m_user_batchIdentifier = m_widget->m_ui->batchIdentifier->text(); ViewStep::onLeave(); } -QString OEMViewStep::prettyName() const +QString +OEMViewStep::prettyName() const { return tr( "OEM Configuration" ); } -QString OEMViewStep::prettyStatus() const +QString +OEMViewStep::prettyStatus() const { return tr( "Set the OEM Batch Identifier to %1." ).arg( m_user_batchIdentifier ); } -QWidget * OEMViewStep::widget() +QWidget* +OEMViewStep::widget() { - if (!m_widget) + if ( !m_widget ) + { m_widget = new OEMPage; + } return m_widget; } -Calamares::JobList OEMViewStep::jobs() const +Calamares::JobList +OEMViewStep::jobs() const { return Calamares::JobList() << Calamares::job_ptr( new IDJob( m_user_batchIdentifier ) ); } -void OEMViewStep::setConfigurationMap(const QVariantMap& configurationMap) +void +OEMViewStep::setConfigurationMap( const QVariantMap& configurationMap ) { m_conf_batchIdentifier = CalamaresUtils::getString( configurationMap, "batch-identifier" ); m_user_batchIdentifier = substitute( m_conf_batchIdentifier ); } -CALAMARES_PLUGIN_FACTORY_DEFINITION( OEMViewStepFactory, registerPlugin(); ) +CALAMARES_PLUGIN_FACTORY_DEFINITION( OEMViewStepFactory, registerPlugin< OEMViewStep >(); ) diff --git a/src/modules/oemid/OEMViewStep.h b/src/modules/oemid/OEMViewStep.h index 1f0e589157..342c62d60b 100644 --- a/src/modules/oemid/OEMViewStep.h +++ b/src/modules/oemid/OEMViewStep.h @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/packagechooser/ItemAppData.cpp b/src/modules/packagechooser/ItemAppData.cpp index ed0ba92234..4adebb5c3f 100644 --- a/src/modules/packagechooser/ItemAppData.cpp +++ b/src/modules/packagechooser/ItemAppData.cpp @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/packagechooser/ItemAppData.h b/src/modules/packagechooser/ItemAppData.h index 72617ff0c7..c811ae4d51 100644 --- a/src/modules/packagechooser/ItemAppData.h +++ b/src/modules/packagechooser/ItemAppData.h @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/packagechooser/ItemAppStream.cpp b/src/modules/packagechooser/ItemAppStream.cpp index 83837a9ca2..e397f8a155 100644 --- a/src/modules/packagechooser/ItemAppStream.cpp +++ b/src/modules/packagechooser/ItemAppStream.cpp @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/packagechooser/ItemAppStream.h b/src/modules/packagechooser/ItemAppStream.h index c44b84b06d..cbfccdc904 100644 --- a/src/modules/packagechooser/ItemAppStream.h +++ b/src/modules/packagechooser/ItemAppStream.h @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/packagechooser/PackageChooserPage.cpp b/src/modules/packagechooser/PackageChooserPage.cpp index 16f50ababe..ac59f929c1 100644 --- a/src/modules/packagechooser/PackageChooserPage.cpp +++ b/src/modules/packagechooser/PackageChooserPage.cpp @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/packagechooser/PackageChooserPage.h b/src/modules/packagechooser/PackageChooserPage.h index b4ef2169b3..a5ce6d2e54 100644 --- a/src/modules/packagechooser/PackageChooserPage.h +++ b/src/modules/packagechooser/PackageChooserPage.h @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/packagechooser/PackageChooserViewStep.cpp b/src/modules/packagechooser/PackageChooserViewStep.cpp index 759c6eeab4..fb64727f77 100644 --- a/src/modules/packagechooser/PackageChooserViewStep.cpp +++ b/src/modules/packagechooser/PackageChooserViewStep.cpp @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/packagechooser/PackageChooserViewStep.h b/src/modules/packagechooser/PackageChooserViewStep.h index 9e9087971d..f74abe376f 100644 --- a/src/modules/packagechooser/PackageChooserViewStep.h +++ b/src/modules/packagechooser/PackageChooserViewStep.h @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/packagechooser/PackageModel.cpp b/src/modules/packagechooser/PackageModel.cpp index 12995fad54..dd8903fc93 100644 --- a/src/modules/packagechooser/PackageModel.cpp +++ b/src/modules/packagechooser/PackageModel.cpp @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/packagechooser/PackageModel.h b/src/modules/packagechooser/PackageModel.h index ee3b301852..2dff3834aa 100644 --- a/src/modules/packagechooser/PackageModel.h +++ b/src/modules/packagechooser/PackageModel.h @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/packagechooser/Tests.cpp b/src/modules/packagechooser/Tests.cpp index da355dc961..0e99688146 100644 --- a/src/modules/packagechooser/Tests.cpp +++ b/src/modules/packagechooser/Tests.cpp @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -77,7 +78,8 @@ PackageChooserTests::testAppData() QCOMPARE( p1.description.get(), QStringLiteral( "Calamares is an installer program for Linux distributions." ) ); // .. but en_GB doesn't have an entry in description, so uses
    QCOMPARE( p1.description.get( QLocale( "en_GB" ) ), QStringLiteral( "Calamares Linux Installer" ) ); - QCOMPARE( p1.description.get( QLocale( "nl" ) ), QStringLiteral( "Calamares is een installatieprogramma voor Linux distributies." ) ); + QCOMPARE( p1.description.get( QLocale( "nl" ) ), + QStringLiteral( "Calamares is een installatieprogramma voor Linux distributies." ) ); QVERIFY( p1.screenshot.isNull() ); m.insert( "id", "calamares" ); @@ -85,7 +87,8 @@ PackageChooserTests::testAppData() PackageItem p2 = fromAppData( m ); QVERIFY( p2.isValid() ); QCOMPARE( p2.id, QStringLiteral( "calamares" ) ); - QCOMPARE( p2.description.get( QLocale( "nl" ) ), QStringLiteral( "Calamares is een installatieprogramma voor Linux distributies." ) ); + QCOMPARE( p2.description.get( QLocale( "nl" ) ), + QStringLiteral( "Calamares is een installatieprogramma voor Linux distributies." ) ); QVERIFY( !p2.screenshot.isNull() ); #endif } diff --git a/src/modules/packagechooser/Tests.h b/src/modules/packagechooser/Tests.h index 62efe92cc1..716f930e3c 100644 --- a/src/modules/packagechooser/Tests.h +++ b/src/modules/packagechooser/Tests.h @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/packagechooser/images/calamares.png.license b/src/modules/packagechooser/images/calamares.png.license new file mode 100644 index 0000000000..cc08e1f9f1 --- /dev/null +++ b/src/modules/packagechooser/images/calamares.png.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: 2014 Teo Mrnjavac +SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/modules/packagechooser/images/no-selection.png.license b/src/modules/packagechooser/images/no-selection.png.license new file mode 100644 index 0000000000..ef0e9d7cdc --- /dev/null +++ b/src/modules/packagechooser/images/no-selection.png.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: 2014 Uri Herrera and others +SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/modules/partition/README.md b/src/modules/partition/README.md index 3491b309bb..cbebd589e3 100644 --- a/src/modules/partition/README.md +++ b/src/modules/partition/README.md @@ -1,5 +1,11 @@ # Architecture + + ## Overview The heart of the module is the PartitionCoreModule class. It holds Qt models for diff --git a/src/modules/partition/core/BootLoaderModel.cpp b/src/modules/partition/core/BootLoaderModel.cpp index 10b88be76e..13ce2a379c 100644 --- a/src/modules/partition/core/BootLoaderModel.cpp +++ b/src/modules/partition/core/BootLoaderModel.cpp @@ -1,8 +1,9 @@ /* === This file is part of Calamares - === * - * Copyright 2014, Aurélien Gâteau - * Copyright 2015, Teo Mrnjavac - * Copyright 2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2014 Aurélien Gâteau + * SPDX-FileCopyrightText: 2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/partition/core/BootLoaderModel.h b/src/modules/partition/core/BootLoaderModel.h index 8daa8ca043..1157879ef6 100644 --- a/src/modules/partition/core/BootLoaderModel.h +++ b/src/modules/partition/core/BootLoaderModel.h @@ -1,8 +1,9 @@ /* === This file is part of Calamares - === * - * Copyright 2014, Aurélien Gâteau - * Copyright 2015, Teo Mrnjavac - * Copyright 2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2014 Aurélien Gâteau + * SPDX-FileCopyrightText: 2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/partition/core/ColorUtils.cpp b/src/modules/partition/core/ColorUtils.cpp index d04c4110d3..9b86cdb464 100644 --- a/src/modules/partition/core/ColorUtils.cpp +++ b/src/modules/partition/core/ColorUtils.cpp @@ -1,7 +1,8 @@ /* === This file is part of Calamares - === * - * Copyright 2014, Aurélien Gâteau - * Copyright 2015-2016, Teo Mrnjavac + * SPDX-FileCopyrightText: 2014 Aurélien Gâteau + * SPDX-FileCopyrightText: 2015-2016 Teo Mrnjavac + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/partition/core/ColorUtils.h b/src/modules/partition/core/ColorUtils.h index 3c65b75b21..ab4e864811 100644 --- a/src/modules/partition/core/ColorUtils.h +++ b/src/modules/partition/core/ColorUtils.h @@ -1,7 +1,8 @@ /* === This file is part of Calamares - === * - * Copyright 2014, Aurélien Gâteau - * Copyright 2016, Teo Mrnjavac + * SPDX-FileCopyrightText: 2014 Aurélien Gâteau + * SPDX-FileCopyrightText: 2016 Teo Mrnjavac + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/partition/core/Config.cpp b/src/modules/partition/core/Config.cpp index 086d87da5c..00b8967241 100644 --- a/src/modules/partition/core/Config.cpp +++ b/src/modules/partition/core/Config.cpp @@ -125,7 +125,8 @@ Config::setConfigurationMap( const QVariantMap& configurationMap ) m_swapChoices = getSwapChoices( configurationMap ); bool nameFound = false; // In the name table (ignored, falls back to first entry in table) - m_initialInstallChoice = PartitionActions::Choices::installChoiceNames().find( CalamaresUtils::getString( configurationMap, "initialPartitioningChoice" ), nameFound ); + m_initialInstallChoice = PartitionActions::Choices::installChoiceNames().find( + CalamaresUtils::getString( configurationMap, "initialPartitioningChoice" ), nameFound ); } void diff --git a/src/modules/partition/core/DeviceList.cpp b/src/modules/partition/core/DeviceList.cpp index 041801b9ea..dfba17523c 100644 --- a/src/modules/partition/core/DeviceList.cpp +++ b/src/modules/partition/core/DeviceList.cpp @@ -1,7 +1,8 @@ /* === This file is part of Calamares - === * - * Copyright 2015-2016, Teo Mrnjavac - * Copyright 2018-2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2015-2016 Teo Mrnjavac + * SPDX-FileCopyrightText: 2018-2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/partition/core/DeviceList.h b/src/modules/partition/core/DeviceList.h index 306d907393..986c6b05ff 100644 --- a/src/modules/partition/core/DeviceList.h +++ b/src/modules/partition/core/DeviceList.h @@ -1,7 +1,8 @@ /* === This file is part of Calamares - === * - * Copyright 2014-2017, Teo Mrnjavac - * Copyright 2017, Adriaan de Groot + * SPDX-FileCopyrightText: 2014-2017 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/partition/core/DeviceModel.cpp b/src/modules/partition/core/DeviceModel.cpp index f881d265b1..3e42ab0291 100644 --- a/src/modules/partition/core/DeviceModel.cpp +++ b/src/modules/partition/core/DeviceModel.cpp @@ -1,8 +1,9 @@ /* === This file is part of Calamares - === * - * Copyright 2014, Aurélien Gâteau - * Copyright 2014, Teo Mrnjavac - * Copyright 2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2014 Aurélien Gâteau + * SPDX-FileCopyrightText: 2014 Teo Mrnjavac + * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/partition/core/DeviceModel.h b/src/modules/partition/core/DeviceModel.h index 29d1598ad0..a03405cb60 100644 --- a/src/modules/partition/core/DeviceModel.h +++ b/src/modules/partition/core/DeviceModel.h @@ -1,7 +1,8 @@ /* === This file is part of Calamares - === * - * Copyright 2014, Aurélien Gâteau - * Copyright 2017, 2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2014 Aurélien Gâteau + * SPDX-FileCopyrightText: 2017 2019, Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/partition/core/KPMHelpers.cpp b/src/modules/partition/core/KPMHelpers.cpp index 730d1d9af4..ba82385319 100644 --- a/src/modules/partition/core/KPMHelpers.cpp +++ b/src/modules/partition/core/KPMHelpers.cpp @@ -1,8 +1,9 @@ /* === This file is part of Calamares - === * - * Copyright 2014, Aurélien Gâteau - * Copyright 2015-2016, Teo Mrnjavac + * SPDX-FileCopyrightText: 2014 Aurélien Gâteau + * SPDX-FileCopyrightText: 2015-2016 Teo Mrnjavac * Copyright 2018-2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/partition/core/KPMHelpers.h b/src/modules/partition/core/KPMHelpers.h index 3269933629..743dcc790f 100644 --- a/src/modules/partition/core/KPMHelpers.h +++ b/src/modules/partition/core/KPMHelpers.h @@ -1,8 +1,9 @@ /* === This file is part of Calamares - === * - * Copyright 2014, Aurélien Gâteau - * Copyright 2015-2016, Teo Mrnjavac - * Copyright 2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2014 Aurélien Gâteau + * SPDX-FileCopyrightText: 2015-2016 Teo Mrnjavac + * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/partition/core/OsproberEntry.h b/src/modules/partition/core/OsproberEntry.h index 1e1fd0ecae..9313a6bb50 100644 --- a/src/modules/partition/core/OsproberEntry.h +++ b/src/modules/partition/core/OsproberEntry.h @@ -1,7 +1,8 @@ /* === This file is part of Calamares - === * - * Copyright 2014-2016, Teo Mrnjavac - * Copyright 2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2014-2016 Teo Mrnjavac + * SPDX-FileCopyrightText: 2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/partition/core/PartUtils.cpp b/src/modules/partition/core/PartUtils.cpp index 4dd3dcbf36..1d54846712 100644 --- a/src/modules/partition/core/PartUtils.cpp +++ b/src/modules/partition/core/PartUtils.cpp @@ -1,8 +1,9 @@ /* === This file is part of Calamares - === * - * Copyright 2015-2016, Teo Mrnjavac + * SPDX-FileCopyrightText: 2015-2016 Teo Mrnjavac * Copyright 2018-2019 Adriaan de Groot - * Copyright 2019, Collabora Ltd + * SPDX-FileCopyrightText: 2019 Collabora Ltd + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -459,7 +460,7 @@ isEfiBootable( const Partition* candidate ) while ( root && !root->isRoot() ) { root = root->parent(); - cDebug() << Logger::SubEntry << "moved towards root" << Logger::Pointer(root); + cDebug() << Logger::SubEntry << "moved towards root" << Logger::Pointer( root ); } // Strange case: no root found, no partition table node? @@ -469,7 +470,7 @@ isEfiBootable( const Partition* candidate ) } const PartitionTable* table = dynamic_cast< const PartitionTable* >( root ); - cDebug() << Logger::SubEntry << "partition table" << Logger::Pointer(table) << "type" + cDebug() << Logger::SubEntry << "partition table" << Logger::Pointer( table ) << "type" << ( table ? table->type() : PartitionTable::TableType::unknownTableType ); return table && ( table->type() == PartitionTable::TableType::gpt ) && flags.testFlag( KPM_PARTITION_FLAG( Boot ) ); } diff --git a/src/modules/partition/core/PartUtils.h b/src/modules/partition/core/PartUtils.h index 0db49d0438..a56cb8a607 100644 --- a/src/modules/partition/core/PartUtils.h +++ b/src/modules/partition/core/PartUtils.h @@ -1,8 +1,9 @@ /* === This file is part of Calamares - === * - * Copyright 2015-2016, Teo Mrnjavac - * Copyright 2018-2019 Adriaan de Groot - * Copyright 2019, Collabora Ltd + * SPDX-FileCopyrightText: 2015-2016 Teo Mrnjavac + * SPDX-FileCopyrightText: 2018-2019 Adriaan de Groot + * SPDX-FileCopyrightText: 2019 Collabora Ltd + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/partition/core/PartitionActions.cpp b/src/modules/partition/core/PartitionActions.cpp index cae5025bfc..dba02318ee 100644 --- a/src/modules/partition/core/PartitionActions.cpp +++ b/src/modules/partition/core/PartitionActions.cpp @@ -1,8 +1,9 @@ /* === This file is part of Calamares - === * - * Copyright 2014-2017, Teo Mrnjavac - * Copyright 2017-2019, Adriaan de Groot - * Copyright 2019, Collabora Ltd + * SPDX-FileCopyrightText: 2014-2017 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017-2019 Adriaan de Groot + * SPDX-FileCopyrightText: 2019 Collabora Ltd + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/partition/core/PartitionActions.h b/src/modules/partition/core/PartitionActions.h index 6f4b41cc8f..63dfccb112 100644 --- a/src/modules/partition/core/PartitionActions.h +++ b/src/modules/partition/core/PartitionActions.h @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2014-2016, Teo Mrnjavac + * SPDX-FileCopyrightText: 2014-2016 Teo Mrnjavac + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/partition/core/PartitionCoreModule.cpp b/src/modules/partition/core/PartitionCoreModule.cpp index 8856778b3e..370caebfb6 100644 --- a/src/modules/partition/core/PartitionCoreModule.cpp +++ b/src/modules/partition/core/PartitionCoreModule.cpp @@ -1,10 +1,11 @@ /* === This file is part of Calamares - === * - * Copyright 2014, Aurélien Gâteau - * Copyright 2014-2015, Teo Mrnjavac - * Copyright 2017-2019, Adriaan de Groot - * Copyright 2018, Caio Carvalho - * Copyright 2019, Collabora Ltd + * SPDX-FileCopyrightText: 2014 Aurélien Gâteau + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017-2019 Adriaan de Groot + * SPDX-FileCopyrightText: 2018 Caio Carvalho + * SPDX-FileCopyrightText: 2019 Collabora Ltd + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/partition/core/PartitionCoreModule.h b/src/modules/partition/core/PartitionCoreModule.h index f88544ae8b..b75f67d758 100644 --- a/src/modules/partition/core/PartitionCoreModule.h +++ b/src/modules/partition/core/PartitionCoreModule.h @@ -1,8 +1,9 @@ /* === This file is part of Calamares - === * - * Copyright 2014, Aurélien Gâteau - * Copyright 2014-2016, Teo Mrnjavac - * Copyright 2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2014 Aurélien Gâteau + * SPDX-FileCopyrightText: 2014-2016 Teo Mrnjavac + * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/partition/core/PartitionInfo.cpp b/src/modules/partition/core/PartitionInfo.cpp index fe38bf2d6d..415fdc5c16 100644 --- a/src/modules/partition/core/PartitionInfo.cpp +++ b/src/modules/partition/core/PartitionInfo.cpp @@ -1,7 +1,8 @@ /* === This file is part of Calamares - === * - * Copyright 2014, Aurélien Gâteau - * Copyright 2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2014 Aurélien Gâteau + * SPDX-FileCopyrightText: 2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/partition/core/PartitionInfo.h b/src/modules/partition/core/PartitionInfo.h index 9f9cd2d1e5..3ddbe192b1 100644 --- a/src/modules/partition/core/PartitionInfo.h +++ b/src/modules/partition/core/PartitionInfo.h @@ -1,7 +1,8 @@ /* === This file is part of Calamares - === * - * Copyright 2014, Aurélien Gâteau - * Copyright 2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2014 Aurélien Gâteau + * SPDX-FileCopyrightText: 2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/partition/core/PartitionLayout.cpp b/src/modules/partition/core/PartitionLayout.cpp index 367b7487a5..3df9b21c25 100644 --- a/src/modules/partition/core/PartitionLayout.cpp +++ b/src/modules/partition/core/PartitionLayout.cpp @@ -1,8 +1,9 @@ /* === This file is part of Calamares - === * - * Copyright 2014-2017, Teo Mrnjavac - * Copyright 2017-2018, Adriaan de Groot - * Copyright 2018-2019, Collabora Ltd + * SPDX-FileCopyrightText: 2014-2017 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017-2018 Adriaan de Groot + * SPDX-FileCopyrightText: 2018-2019 Collabora Ltd + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/partition/core/PartitionLayout.h b/src/modules/partition/core/PartitionLayout.h index da691d200c..52bd96e428 100644 --- a/src/modules/partition/core/PartitionLayout.h +++ b/src/modules/partition/core/PartitionLayout.h @@ -1,7 +1,8 @@ /* === This file is part of Calamares - === * - * Copyright 2018-2019, Collabora Ltd - * Copyright 2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2018-2019 Collabora Ltd + * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/partition/core/PartitionModel.cpp b/src/modules/partition/core/PartitionModel.cpp index 1135f57191..662e26032e 100644 --- a/src/modules/partition/core/PartitionModel.cpp +++ b/src/modules/partition/core/PartitionModel.cpp @@ -1,7 +1,8 @@ /* === This file is part of Calamares - === * - * Copyright 2014, Aurélien Gâteau - * Copyright 2018-2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2014 Aurélien Gâteau + * SPDX-FileCopyrightText: 2018-2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/partition/core/PartitionModel.h b/src/modules/partition/core/PartitionModel.h index 7066aa5a50..9d1e40f204 100644 --- a/src/modules/partition/core/PartitionModel.h +++ b/src/modules/partition/core/PartitionModel.h @@ -1,7 +1,8 @@ /* === This file is part of Calamares - === * - * Copyright 2014, Aurélien Gâteau - * Copyright 2017, 2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2014 Aurélien Gâteau + * SPDX-FileCopyrightText: 2017 2019, Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/partition/gui/BootInfoWidget.cpp b/src/modules/partition/gui/BootInfoWidget.cpp index 696628c37a..d1df9ae334 100644 --- a/src/modules/partition/gui/BootInfoWidget.cpp +++ b/src/modules/partition/gui/BootInfoWidget.cpp @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2015-2016, Teo Mrnjavac + * SPDX-FileCopyrightText: 2015-2016 Teo Mrnjavac + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -24,16 +25,16 @@ #include "utils/Retranslator.h" #include -#include #include +#include BootInfoWidget::BootInfoWidget( QWidget* parent ) : QWidget( parent ) , m_bootIcon( new QLabel ) , m_bootLabel( new QLabel ) { - m_bootIcon->setObjectName("bootInfoIcon"); - m_bootLabel->setObjectName("bootInfoLabel"); + m_bootIcon->setObjectName( "bootInfoIcon" ); + m_bootLabel->setObjectName( "bootInfoLabel" ); QHBoxLayout* mainLayout = new QHBoxLayout; setLayout( mainLayout ); @@ -46,16 +47,15 @@ BootInfoWidget::BootInfoWidget( QWidget* parent ) m_bootIcon->setMargin( 0 ); m_bootIcon->setFixedSize( iconSize ); - m_bootIcon->setPixmap( CalamaresUtils::defaultPixmap( CalamaresUtils::BootEnvironment, - CalamaresUtils::Original, - iconSize ) ); - + m_bootIcon->setPixmap( + CalamaresUtils::defaultPixmap( CalamaresUtils::BootEnvironment, CalamaresUtils::Original, iconSize ) ); + QFontMetrics fm = QFontMetrics( QFont() ); m_bootLabel->setMinimumWidth( fm.boundingRect( "BIOS" ).width() + CalamaresUtils::defaultFontHeight() / 2 ); m_bootLabel->setAlignment( Qt::AlignCenter ); QPalette palette; - palette.setBrush( QPalette::Foreground, QColor( "#4D4D4D" ) ); //dark grey + palette.setBrush( QPalette::Foreground, QColor( "#4D4D4D" ) ); //dark grey m_bootIcon->setAutoFillBackground( true ); m_bootLabel->setAutoFillBackground( true ); @@ -100,7 +100,6 @@ BootInfoWidget::retranslateUi() "This is automatic, unless " "you choose manual partitioning, in which case you must " "set it up on your own." ); - } m_bootLabel->setToolTip( bootToolTip ); } diff --git a/src/modules/partition/gui/BootInfoWidget.h b/src/modules/partition/gui/BootInfoWidget.h index 257b3904a3..5865a3b9c1 100644 --- a/src/modules/partition/gui/BootInfoWidget.h +++ b/src/modules/partition/gui/BootInfoWidget.h @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2015-2016, Teo Mrnjavac + * SPDX-FileCopyrightText: 2015-2016 Teo Mrnjavac + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -38,4 +39,4 @@ public slots: QLabel* m_bootLabel; }; -#endif // BOOTINFOWIDGET_H +#endif // BOOTINFOWIDGET_H diff --git a/src/modules/partition/gui/ChoicePage.cpp b/src/modules/partition/gui/ChoicePage.cpp index d7b5e497e0..b032065cf7 100644 --- a/src/modules/partition/gui/ChoicePage.cpp +++ b/src/modules/partition/gui/ChoicePage.cpp @@ -1,8 +1,9 @@ /* === This file is part of Calamares - === * - * Copyright 2014-2017, Teo Mrnjavac - * Copyright 2017-2019, Adriaan de Groot - * Copyright 2019, Collabora Ltd + * SPDX-FileCopyrightText: 2014-2017 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017-2019 Adriaan de Groot + * SPDX-FileCopyrightText: 2019 Collabora Ltd + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -59,16 +60,16 @@ #include #include #include +#include #include #include -#include #include -using PartitionActions::Choices::SwapChoice; -using CalamaresUtils::Partition::PartitionIterator; -using CalamaresUtils::Partition::isPartitionFreeSpace; -using CalamaresUtils::Partition::findPartitionByPath; using Calamares::PrettyRadioButton; +using CalamaresUtils::Partition::findPartitionByPath; +using CalamaresUtils::Partition::isPartitionFreeSpace; +using CalamaresUtils::Partition::PartitionIterator; +using PartitionActions::Choices::SwapChoice; /** * @brief ChoicePage::ChoicePage is the default constructor. Called on startup as part of @@ -107,7 +108,9 @@ ChoicePage::ChoicePage( Config* config, QWidget* parent ) m_allowManualPartitioning = gs->value( "allowManualPartitioning" ).toBool(); if ( FileSystem::typeForName( m_defaultFsType ) == FileSystem::Unknown ) + { m_defaultFsType = "ext4"; + } // Set up drives combo m_mainLayout->setDirection( QBoxLayout::TopToBottom ); @@ -134,12 +137,9 @@ ChoicePage::ChoicePage( Config* config, QWidget* parent ) CalamaresUtils::unmarginLayout( m_itemsLayout ); // Drive selector + preview - CALAMARES_RETRANSLATE( - retranslateUi( this ); - m_drivesLabel->setText( tr( "Select storage de&vice:" ) ); - m_previewBeforeLabel->setText( tr( "Current:" ) ); - m_previewAfterLabel->setText( tr( "After:" ) ); - ) + CALAMARES_RETRANSLATE( retranslateUi( this ); m_drivesLabel->setText( tr( "Select storage de&vice:" ) ); + m_previewBeforeLabel->setText( tr( "Current:" ) ); + m_previewAfterLabel->setText( tr( "After:" ) ); ) m_previewBeforeFrame->setSizePolicy( QSizePolicy::Preferred, QSizePolicy::Expanding ); m_previewAfterFrame->setSizePolicy( QSizePolicy::Preferred, QSizePolicy::Expanding ); @@ -151,8 +151,7 @@ ChoicePage::ChoicePage( Config* config, QWidget* parent ) } -ChoicePage::~ChoicePage() -{} +ChoicePage::~ChoicePage() {} void @@ -165,9 +164,7 @@ ChoicePage::init( PartitionCoreModule* core ) // We need to do this because a PCM revert invalidates the deviceModel. - connect( core, &PartitionCoreModule::reverted, - this, [=] - { + connect( core, &PartitionCoreModule::reverted, this, [=] { m_drivesCombo->setModel( core->deviceModel() ); m_drivesCombo->setCurrentIndex( m_lastSelectedDeviceIndex ); } ); @@ -175,12 +172,11 @@ ChoicePage::init( PartitionCoreModule* core ) connect( m_drivesCombo, static_cast< void ( QComboBox::* )( int ) >( &QComboBox::currentIndexChanged ), - this, &ChoicePage::applyDeviceChoice ); + this, + &ChoicePage::applyDeviceChoice ); - connect( m_encryptWidget, &EncryptWidget::stateChanged, - this, &ChoicePage::onEncryptWidgetStateChanged ); - connect( m_reuseHomeCheckBox, &QCheckBox::stateChanged, - this, &ChoicePage::onHomeCheckBoxStateChanged ); + connect( m_encryptWidget, &EncryptWidget::stateChanged, this, &ChoicePage::onEncryptWidgetStateChanged ); + connect( m_reuseHomeCheckBox, &QCheckBox::stateChanged, this, &ChoicePage::onHomeCheckBoxStateChanged ); ChoicePage::applyDeviceChoice(); } @@ -195,13 +191,21 @@ static inline QComboBox* createCombo( const QSet< SwapChoice >& s, SwapChoice dflt ) { QComboBox* box = new QComboBox; - for ( SwapChoice c : { SwapChoice::NoSwap, SwapChoice::SmallSwap, SwapChoice::FullSwap, SwapChoice::ReuseSwap, SwapChoice::SwapFile } ) + for ( SwapChoice c : { SwapChoice::NoSwap, + SwapChoice::SmallSwap, + SwapChoice::FullSwap, + SwapChoice::ReuseSwap, + SwapChoice::SwapFile } ) if ( s.contains( c ) ) + { box->addItem( QString(), c ); + } int dfltIndex = box->findData( dflt ); if ( dfltIndex >= 0 ) + { box->setCurrentIndex( dfltIndex ); + } return box; } @@ -233,30 +237,26 @@ ChoicePage::setupChoices() // 3) Manual // TBD: upgrade option? - QSize iconSize( CalamaresUtils::defaultIconSize().width() * 2, - CalamaresUtils::defaultIconSize().height() * 2 ); + QSize iconSize( CalamaresUtils::defaultIconSize().width() * 2, CalamaresUtils::defaultIconSize().height() * 2 ); m_grp = new QButtonGroup( this ); m_alongsideButton = new PrettyRadioButton; m_alongsideButton->setIconSize( iconSize ); - m_alongsideButton->setIcon( CalamaresUtils::defaultPixmap( CalamaresUtils::PartitionAlongside, - CalamaresUtils::Original, - iconSize ) ); + m_alongsideButton->setIcon( + CalamaresUtils::defaultPixmap( CalamaresUtils::PartitionAlongside, CalamaresUtils::Original, iconSize ) ); m_alongsideButton->addToGroup( m_grp, InstallChoice::Alongside ); m_eraseButton = new PrettyRadioButton; m_eraseButton->setIconSize( iconSize ); - m_eraseButton->setIcon( CalamaresUtils::defaultPixmap( CalamaresUtils::PartitionEraseAuto, - CalamaresUtils::Original, - iconSize ) ); + m_eraseButton->setIcon( + CalamaresUtils::defaultPixmap( CalamaresUtils::PartitionEraseAuto, CalamaresUtils::Original, iconSize ) ); m_eraseButton->addToGroup( m_grp, InstallChoice::Erase ); m_replaceButton = new PrettyRadioButton; m_replaceButton->setIconSize( iconSize ); - m_replaceButton->setIcon( CalamaresUtils::defaultPixmap( CalamaresUtils::PartitionReplaceOs, - CalamaresUtils::Original, - iconSize ) ); + m_replaceButton->setIcon( + CalamaresUtils::defaultPixmap( CalamaresUtils::PartitionReplaceOs, CalamaresUtils::Original, iconSize ) ); m_replaceButton->addToGroup( m_grp, InstallChoice::Replace ); // Fill up swap options @@ -273,17 +273,14 @@ ChoicePage::setupChoices() m_somethingElseButton = new PrettyRadioButton; m_somethingElseButton->setIconSize( iconSize ); - m_somethingElseButton->setIcon( CalamaresUtils::defaultPixmap( CalamaresUtils::PartitionManual, - CalamaresUtils::Original, - iconSize ) ); + m_somethingElseButton->setIcon( + CalamaresUtils::defaultPixmap( CalamaresUtils::PartitionManual, CalamaresUtils::Original, iconSize ) ); m_itemsLayout->addWidget( m_somethingElseButton ); m_somethingElseButton->addToGroup( m_grp, InstallChoice::Manual ); m_itemsLayout->addStretch(); - connect( m_grp, QOverload::of( &QButtonGroup::buttonToggled ), - this, [ this ]( int id, bool checked ) - { + connect( m_grp, QOverload< int, bool >::of( &QButtonGroup::buttonToggled ), this, [this]( int id, bool checked ) { if ( checked ) // An action was picked. { m_choice = static_cast< InstallChoice >( id ); @@ -291,10 +288,11 @@ ChoicePage::setupChoices() emit actionChosen(); } - else // An action was unpicked, either on its own or because of another selection. + else // An action was unpicked, either on its own or because of another selection. { if ( m_grp->checkedButton() == nullptr ) // If no other action is chosen, we must - { // set m_choice to NoChoice and reset previews. + { + // set m_choice to NoChoice and reset previews. m_choice = InstallChoice::NoChoice; updateNextEnabled(); @@ -307,17 +305,16 @@ ChoicePage::setupChoices() m_rightLayout->setStretchFactor( m_previewBeforeFrame, 0 ); m_rightLayout->setStretchFactor( m_previewAfterFrame, 0 ); - connect( this, &ChoicePage::actionChosen, - this, &ChoicePage::onActionChanged ); + connect( this, &ChoicePage::actionChosen, this, &ChoicePage::onActionChanged ); if ( m_eraseSwapChoiceComboBox ) - connect( m_eraseSwapChoiceComboBox, QOverload::of(&QComboBox::currentIndexChanged), - this, &ChoicePage::onEraseSwapChoiceChanged ); - - CALAMARES_RETRANSLATE( - m_somethingElseButton->setText( tr( "Manual partitioning
    " - "You can create or resize partitions yourself." ) ); - updateSwapChoicesTr( m_eraseSwapChoiceComboBox ); - ) + connect( m_eraseSwapChoiceComboBox, + QOverload< int >::of( &QComboBox::currentIndexChanged ), + this, + &ChoicePage::onEraseSwapChoiceChanged ); + + CALAMARES_RETRANSLATE( m_somethingElseButton->setText( tr( "Manual partitioning
    " + "You can create or resize partitions yourself." ) ); + updateSwapChoicesTr( m_eraseSwapChoiceComboBox ); ) } @@ -331,9 +328,8 @@ Device* ChoicePage::selectedDevice() { Device* currentDevice = nullptr; - currentDevice = m_core->deviceModel()->deviceForIndex( - m_core->deviceModel()->index( - m_drivesCombo->currentIndex() ) ); + currentDevice + = m_core->deviceModel()->deviceForIndex( m_core->deviceModel()->index( m_drivesCombo->currentIndex() ) ); return currentDevice; } @@ -367,16 +363,13 @@ ChoicePage::applyDeviceChoice() if ( m_core->isDirty() ) { - ScanningDialog::run( QtConcurrent::run( [ = ] - { - QMutexLocker locker( &m_coreMutex ); - m_core->revertAllDevices(); - } ), - [ this ] - { - continueApplyDeviceChoice(); - }, - this ); + ScanningDialog::run( + QtConcurrent::run( [=] { + QMutexLocker locker( &m_coreMutex ); + m_core->revertAllDevices(); + } ), + [this] { continueApplyDeviceChoice(); }, + this ); } else { @@ -426,7 +419,8 @@ ChoicePage::onEraseSwapChoiceChanged() { if ( m_eraseSwapChoiceComboBox ) { - m_eraseSwapChoice = static_cast( m_eraseSwapChoiceComboBox->currentData().toInt() ); + m_eraseSwapChoice + = static_cast< PartitionActions::Choices::SwapChoice >( m_eraseSwapChoiceComboBox->currentData().toInt() ); onActionChanged(); } } @@ -434,85 +428,85 @@ ChoicePage::onEraseSwapChoiceChanged() void ChoicePage::applyActionChoice( ChoicePage::InstallChoice choice ) { - m_beforePartitionBarsView->selectionModel()-> - disconnect( SIGNAL( currentRowChanged( QModelIndex, QModelIndex ) ) ); + m_beforePartitionBarsView->selectionModel()->disconnect( SIGNAL( currentRowChanged( QModelIndex, QModelIndex ) ) ); m_beforePartitionBarsView->selectionModel()->clearSelection(); m_beforePartitionBarsView->selectionModel()->clearCurrentIndex(); switch ( choice ) { case InstallChoice::Erase: - { - auto gs = Calamares::JobQueue::instance()->globalStorage(); - - PartitionActions::Choices::AutoPartitionOptions options { - gs->value( "defaultFileSystemType" ).toString(), - m_encryptWidget->passphrase(), - gs->value( "efiSystemPartition" ).toString(), - CalamaresUtils::GiBtoBytes( gs->value( "requiredStorageGiB" ).toDouble() ), - m_eraseSwapChoice - }; + { + auto gs = Calamares::JobQueue::instance()->globalStorage(); - if ( m_core->isDirty() ) - { - ScanningDialog::run( QtConcurrent::run( [ = ] - { + PartitionActions::Choices::AutoPartitionOptions options { gs->value( "defaultFileSystemType" ).toString(), + m_encryptWidget->passphrase(), + gs->value( "efiSystemPartition" ).toString(), + CalamaresUtils::GiBtoBytes( + gs->value( "requiredStorageGiB" ).toDouble() ), + m_eraseSwapChoice }; + + if ( m_core->isDirty() ) + { + ScanningDialog::run( + QtConcurrent::run( [=] { QMutexLocker locker( &m_coreMutex ); m_core->revertDevice( selectedDevice() ); } ), - [ = ] - { + [=] { PartitionActions::doAutopartition( m_core, selectedDevice(), options ); emit deviceChosen(); }, this ); - } - else - { - PartitionActions::doAutopartition( m_core, selectedDevice(), options ); - emit deviceChosen(); - } } - break; + else + { + PartitionActions::doAutopartition( m_core, selectedDevice(), options ); + emit deviceChosen(); + } + } + break; case InstallChoice::Replace: if ( m_core->isDirty() ) { - ScanningDialog::run( QtConcurrent::run( [ = ] - { - QMutexLocker locker( &m_coreMutex ); - m_core->revertDevice( selectedDevice() ); - } ), - []{}, - this ); + ScanningDialog::run( + QtConcurrent::run( [=] { + QMutexLocker locker( &m_coreMutex ); + m_core->revertDevice( selectedDevice() ); + } ), + [] {}, + this ); } updateNextEnabled(); - connect( m_beforePartitionBarsView->selectionModel(), SIGNAL( currentRowChanged( QModelIndex, QModelIndex ) ), - this, SLOT( onPartitionToReplaceSelected( QModelIndex, QModelIndex ) ), + connect( m_beforePartitionBarsView->selectionModel(), + SIGNAL( currentRowChanged( QModelIndex, QModelIndex ) ), + this, + SLOT( onPartitionToReplaceSelected( QModelIndex, QModelIndex ) ), Qt::UniqueConnection ); break; case InstallChoice::Alongside: if ( m_core->isDirty() ) { - ScanningDialog::run( QtConcurrent::run( [ = ] - { - QMutexLocker locker( &m_coreMutex ); - m_core->revertDevice( selectedDevice() ); - } ), - [this] - { - // We need to reupdate after reverting because the splitter widget is - // not a true view. - updateActionChoicePreview( currentChoice() ); - updateNextEnabled(); - }, - this ); + ScanningDialog::run( + QtConcurrent::run( [=] { + QMutexLocker locker( &m_coreMutex ); + m_core->revertDevice( selectedDevice() ); + } ), + [this] { + // We need to reupdate after reverting because the splitter widget is + // not a true view. + updateActionChoicePreview( currentChoice() ); + updateNextEnabled(); + }, + this ); } updateNextEnabled(); - connect( m_beforePartitionBarsView->selectionModel(), SIGNAL( currentRowChanged( QModelIndex, QModelIndex ) ), - this, SLOT( doAlongsideSetupSplitter( QModelIndex, QModelIndex ) ), + connect( m_beforePartitionBarsView->selectionModel(), + SIGNAL( currentRowChanged( QModelIndex, QModelIndex ) ), + this, + SLOT( doAlongsideSetupSplitter( QModelIndex, QModelIndex ) ), Qt::UniqueConnection ); break; case InstallChoice::NoChoice: @@ -524,19 +518,24 @@ ChoicePage::applyActionChoice( ChoicePage::InstallChoice choice ) void -ChoicePage::doAlongsideSetupSplitter( const QModelIndex& current, - const QModelIndex& previous ) +ChoicePage::doAlongsideSetupSplitter( const QModelIndex& current, const QModelIndex& previous ) { Q_UNUSED( previous ) if ( !current.isValid() ) + { return; + } if ( !m_afterPartitionSplitterWidget ) + { return; + } const PartitionModel* modl = qobject_cast< const PartitionModel* >( current.model() ); if ( !modl ) + { return; + } Partition* part = modl->partitionForIndex( current ); if ( !part ) @@ -545,21 +544,20 @@ ChoicePage::doAlongsideSetupSplitter( const QModelIndex& current, return; } - double requiredStorageGB = Calamares::JobQueue::instance() - ->globalStorage() - ->value( "requiredStorageGiB" ) - .toDouble(); + double requiredStorageGB + = Calamares::JobQueue::instance()->globalStorage()->value( "requiredStorageGiB" ).toDouble(); qint64 requiredStorageB = CalamaresUtils::GiBtoBytes( requiredStorageGB + 0.1 + 2.0 ); - m_afterPartitionSplitterWidget->setSplitPartition( - part->partitionPath(), - qRound64( part->used() * 1.1 ), - part->capacity() - requiredStorageB, - part->capacity() / 2 ); + m_afterPartitionSplitterWidget->setSplitPartition( part->partitionPath(), + qRound64( part->used() * 1.1 ), + part->capacity() - requiredStorageB, + part->capacity() / 2 ); if ( m_isEfi ) + { setupEfiSystemPartitionSelector(); + } cDebug() << "Partition selected for Alongside."; @@ -573,20 +571,17 @@ ChoicePage::onEncryptWidgetStateChanged() EncryptWidget::Encryption state = m_encryptWidget->state(); if ( m_choice == InstallChoice::Erase ) { - if ( state == EncryptWidget::Encryption::Confirmed || - state == EncryptWidget::Encryption::Disabled ) + if ( state == EncryptWidget::Encryption::Confirmed || state == EncryptWidget::Encryption::Disabled ) + { applyActionChoice( m_choice ); + } } else if ( m_choice == InstallChoice::Replace ) { - if ( m_beforePartitionBarsView && - m_beforePartitionBarsView->selectionModel()->currentIndex().isValid() && - ( state == EncryptWidget::Encryption::Confirmed || - state == EncryptWidget::Encryption::Disabled ) ) + if ( m_beforePartitionBarsView && m_beforePartitionBarsView->selectionModel()->currentIndex().isValid() + && ( state == EncryptWidget::Encryption::Confirmed || state == EncryptWidget::Encryption::Disabled ) ) { - doReplaceSelectedPartition( m_beforePartitionBarsView-> - selectionModel()-> - currentIndex() ); + doReplaceSelectedPartition( m_beforePartitionBarsView->selectionModel()->currentIndex() ); } } updateNextEnabled(); @@ -596,12 +591,10 @@ ChoicePage::onEncryptWidgetStateChanged() void ChoicePage::onHomeCheckBoxStateChanged() { - if ( currentChoice() == InstallChoice::Replace && - m_beforePartitionBarsView->selectionModel()->currentIndex().isValid() ) + if ( currentChoice() == InstallChoice::Replace + && m_beforePartitionBarsView->selectionModel()->currentIndex().isValid() ) { - doReplaceSelectedPartition( m_beforePartitionBarsView-> - selectionModel()-> - currentIndex() ); + doReplaceSelectedPartition( m_beforePartitionBarsView->selectionModel()->currentIndex() ); } } @@ -610,7 +603,9 @@ void ChoicePage::onLeave() { if ( m_choice == InstallChoice::Alongside ) + { doAlongsideApply(); + } if ( m_isEfi && ( m_choice == InstallChoice::Alongside || m_choice == InstallChoice::Replace ) ) { @@ -618,27 +613,22 @@ ChoicePage::onLeave() if ( efiSystemPartitions.count() == 1 ) { PartitionInfo::setMountPoint( - efiSystemPartitions.first(), - Calamares::JobQueue::instance()-> - globalStorage()-> - value( "efiSystemPartition" ).toString() ); + efiSystemPartitions.first(), + Calamares::JobQueue::instance()->globalStorage()->value( "efiSystemPartition" ).toString() ); } else if ( efiSystemPartitions.count() > 1 && m_efiComboBox ) { PartitionInfo::setMountPoint( - efiSystemPartitions.at( m_efiComboBox->currentIndex() ), - Calamares::JobQueue::instance()-> - globalStorage()-> - value( "efiSystemPartition" ).toString() ); + efiSystemPartitions.at( m_efiComboBox->currentIndex() ), + Calamares::JobQueue::instance()->globalStorage()->value( "efiSystemPartition" ).toString() ); } else { - cError() << "cannot set up EFI system partition.\nESP count:" - << efiSystemPartitions.count() << "\nm_efiComboBox:" - << m_efiComboBox; + cError() << "cannot set up EFI system partition.\nESP count:" << efiSystemPartitions.count() + << "\nm_efiComboBox:" << m_efiComboBox; } } - else // installPath is then passed to the bootloader module for MBR setup + else // installPath is then passed to the bootloader module for MBR setup { if ( !m_isEfi ) { @@ -646,15 +636,21 @@ ChoicePage::onLeave() { auto d_p = selectedDevice(); if ( d_p ) + { m_core->setBootLoaderInstallPath( d_p->deviceNode() ); + } else + { cWarning() << "No device selected for bootloader."; + } } else { QVariant var = m_bootloaderComboBox->currentData( BootLoaderModel::BootLoaderPathRole ); if ( !var.isValid() ) + { return; + } m_core->setBootLoaderInstallPath( var.toString() ); } } @@ -666,13 +662,14 @@ void ChoicePage::doAlongsideApply() { Q_ASSERT( m_afterPartitionSplitterWidget->splitPartitionSize() >= 0 ); - Q_ASSERT( m_afterPartitionSplitterWidget->newPartitionSize() >= 0 ); + Q_ASSERT( m_afterPartitionSplitterWidget->newPartitionSize() >= 0 ); QMutexLocker locker( &m_coreMutex ); - QString path = m_beforePartitionBarsView-> - selectionModel()-> - currentIndex().data( PartitionModel::PartitionPathRole ).toString(); + QString path = m_beforePartitionBarsView->selectionModel() + ->currentIndex() + .data( PartitionModel::PartitionPathRole ) + .toString(); DeviceModel* dm = m_core->deviceModel(); for ( int i = 0; i < dm->rowCount(); ++i ) @@ -683,15 +680,16 @@ ChoicePage::doAlongsideApply() { qint64 firstSector = candidate->firstSector(); qint64 oldLastSector = candidate->lastSector(); - qint64 newLastSector = firstSector + - m_afterPartitionSplitterWidget->splitPartitionSize() / - dev->logicalSize(); + qint64 newLastSector + = firstSector + m_afterPartitionSplitterWidget->splitPartitionSize() / dev->logicalSize(); m_core->resizePartition( dev, candidate, firstSector, newLastSector ); - m_core->layoutApply( dev, newLastSector + 2, oldLastSector, - m_encryptWidget->passphrase(), candidate->parent(), - candidate->roles() - ); + m_core->layoutApply( dev, + newLastSector + 2, + oldLastSector, + m_encryptWidget->passphrase(), + candidate->parent(), + candidate->roles() ); m_core->dumpQueue(); break; @@ -701,12 +699,13 @@ ChoicePage::doAlongsideApply() void -ChoicePage::onPartitionToReplaceSelected( const QModelIndex& current, - const QModelIndex& previous ) +ChoicePage::onPartitionToReplaceSelected( const QModelIndex& current, const QModelIndex& previous ) { Q_UNUSED( previous ) if ( !current.isValid() ) + { return; + } // Reset state on selection regardless of whether this will be used. m_reuseHomeCheckBox->setChecked( false ); @@ -719,111 +718,114 @@ void ChoicePage::doReplaceSelectedPartition( const QModelIndex& current ) { if ( !current.isValid() ) + { return; + } QString* homePartitionPath = new QString(); bool doReuseHomePartition = m_reuseHomeCheckBox->isChecked(); // NOTE: using by-ref captures because we need to write homePartitionPath and // doReuseHomePartition *after* the device revert, for later use. - ScanningDialog::run( QtConcurrent::run( - [ this, current ]( QString* homePartitionPath, bool doReuseHomePartition ) - { - QMutexLocker locker( &m_coreMutex ); - - if ( m_core->isDirty() ) - { - m_core->revertDevice( selectedDevice() ); - } - - // if the partition is unallocated(free space), we don't replace it but create new one - // with the same first and last sector - Partition* selectedPartition = - static_cast< Partition* >( current.data( PartitionModel::PartitionPtrRole ) - .value< void* >() ); - if ( isPartitionFreeSpace( selectedPartition ) ) - { - //NOTE: if the selected partition is free space, we don't deal with - // a separate /home partition at all because there's no existing - // rootfs to read it from. - PartitionRole newRoles = PartitionRole( PartitionRole::Primary ); - PartitionNode* newParent = selectedDevice()->partitionTable(); + ScanningDialog::run( + QtConcurrent::run( + [this, current]( QString* homePartitionPath, bool doReuseHomePartition ) { + QMutexLocker locker( &m_coreMutex ); - if ( selectedPartition->parent() ) - { - Partition* parent = dynamic_cast< Partition* >( selectedPartition->parent() ); - if ( parent && parent->roles().has( PartitionRole::Extended ) ) + if ( m_core->isDirty() ) { - newRoles = PartitionRole( PartitionRole::Logical ); - newParent = findPartitionByPath( { selectedDevice() }, parent->partitionPath() ); + m_core->revertDevice( selectedDevice() ); } - } - m_core->layoutApply( selectedDevice(), selectedPartition->firstSector(), - selectedPartition->lastSector(), - m_encryptWidget->passphrase(), newParent, newRoles - ); - } - else - { - // We can't use the PartitionPtrRole because we need to make changes to the - // main DeviceModel, not the immutable copy. - QString partPath = current.data( PartitionModel::PartitionPathRole ).toString(); - selectedPartition = findPartitionByPath( { selectedDevice() }, - partPath ); - if ( selectedPartition ) - { - // Find out is the selected partition has a rootfs. If yes, then make the - // m_reuseHomeCheckBox visible and set its text to something meaningful. - homePartitionPath->clear(); - for ( const OsproberEntry& osproberEntry : m_core->osproberEntries() ) - if ( osproberEntry.path == partPath ) - *homePartitionPath = osproberEntry.homePath; - if ( homePartitionPath->isEmpty() ) - doReuseHomePartition = false; - - Calamares::GlobalStorage* gs = Calamares::JobQueue::instance()->globalStorage(); - - PartitionActions::doReplacePartition( - m_core, - selectedDevice(), - selectedPartition, + // if the partition is unallocated(free space), we don't replace it but create new one + // with the same first and last sector + Partition* selectedPartition + = static_cast< Partition* >( current.data( PartitionModel::PartitionPtrRole ).value< void* >() ); + if ( isPartitionFreeSpace( selectedPartition ) ) + { + //NOTE: if the selected partition is free space, we don't deal with + // a separate /home partition at all because there's no existing + // rootfs to read it from. + PartitionRole newRoles = PartitionRole( PartitionRole::Primary ); + PartitionNode* newParent = selectedDevice()->partitionTable(); + + if ( selectedPartition->parent() ) { - gs->value( "defaultFileSystemType" ).toString(), - m_encryptWidget->passphrase() - } ); - Partition* homePartition = findPartitionByPath( { selectedDevice() }, - *homePartitionPath ); + Partition* parent = dynamic_cast< Partition* >( selectedPartition->parent() ); + if ( parent && parent->roles().has( PartitionRole::Extended ) ) + { + newRoles = PartitionRole( PartitionRole::Logical ); + newParent = findPartitionByPath( { selectedDevice() }, parent->partitionPath() ); + } + } - if ( homePartition && doReuseHomePartition ) - { - PartitionInfo::setMountPoint( homePartition, "/home" ); - gs->insert( "reuseHome", true ); + m_core->layoutApply( selectedDevice(), + selectedPartition->firstSector(), + selectedPartition->lastSector(), + m_encryptWidget->passphrase(), + newParent, + newRoles ); } else { - gs->insert( "reuseHome", false ); - } - } - } - }, homePartitionPath, doReuseHomePartition ), - [ = ] - { - m_reuseHomeCheckBox->setVisible( !homePartitionPath->isEmpty() ); - if ( !homePartitionPath->isEmpty() ) - m_reuseHomeCheckBox->setText( tr( "Reuse %1 as home partition for %2." ) - .arg( *homePartitionPath ) - .arg( Calamares::Branding::instance()->shortProductName() ) ); - delete homePartitionPath; + // We can't use the PartitionPtrRole because we need to make changes to the + // main DeviceModel, not the immutable copy. + QString partPath = current.data( PartitionModel::PartitionPathRole ).toString(); + selectedPartition = findPartitionByPath( { selectedDevice() }, partPath ); + if ( selectedPartition ) + { + // Find out is the selected partition has a rootfs. If yes, then make the + // m_reuseHomeCheckBox visible and set its text to something meaningful. + homePartitionPath->clear(); + for ( const OsproberEntry& osproberEntry : m_core->osproberEntries() ) + if ( osproberEntry.path == partPath ) + { + *homePartitionPath = osproberEntry.homePath; + } + if ( homePartitionPath->isEmpty() ) + { + doReuseHomePartition = false; + } - if ( m_isEfi ) - setupEfiSystemPartitionSelector(); + Calamares::GlobalStorage* gs = Calamares::JobQueue::instance()->globalStorage(); - updateNextEnabled(); - if ( !m_bootloaderComboBox.isNull() && - m_bootloaderComboBox->currentIndex() < 0 ) - m_bootloaderComboBox->setCurrentIndex( m_lastSelectedDeviceIndex ); - }, this ); + PartitionActions::doReplacePartition( + m_core, + selectedDevice(), + selectedPartition, + { gs->value( "defaultFileSystemType" ).toString(), m_encryptWidget->passphrase() } ); + Partition* homePartition = findPartitionByPath( { selectedDevice() }, *homePartitionPath ); + + if ( homePartition && doReuseHomePartition ) + { + PartitionInfo::setMountPoint( homePartition, "/home" ); + gs->insert( "reuseHome", true ); + } + else + { + gs->insert( "reuseHome", false ); + } + } + } + }, + homePartitionPath, + doReuseHomePartition ), + [=] { + m_reuseHomeCheckBox->setVisible( !homePartitionPath->isEmpty() ); + if ( !homePartitionPath->isEmpty() ) + m_reuseHomeCheckBox->setText( tr( "Reuse %1 as home partition for %2." ) + .arg( *homePartitionPath ) + .arg( Calamares::Branding::instance()->shortProductName() ) ); + delete homePartitionPath; + + if ( m_isEfi ) + setupEfiSystemPartitionSelector(); + + updateNextEnabled(); + if ( !m_bootloaderComboBox.isNull() && m_bootloaderComboBox->currentIndex() < 0 ) + m_bootloaderComboBox->setCurrentIndex( m_lastSelectedDeviceIndex ); + }, + this ); } @@ -847,17 +849,19 @@ ChoicePage::updateDeviceStatePreview() auto layout = m_previewBeforeFrame->layout(); if ( layout ) + { layout->deleteLater(); // Doesn't like nullptr + } layout = new QVBoxLayout; m_previewBeforeFrame->setLayout( layout ); CalamaresUtils::unmarginLayout( layout ); layout->setSpacing( 6 ); - PartitionBarsView::NestedPartitionsMode mode = Calamares::JobQueue::instance()->globalStorage()-> - value( "drawNestedPartitions" ).toBool() ? - PartitionBarsView::DrawNestedPartitions : - PartitionBarsView::NoNestedPartitions; + PartitionBarsView::NestedPartitionsMode mode + = Calamares::JobQueue::instance()->globalStorage()->value( "drawNestedPartitions" ).toBool() + ? PartitionBarsView::DrawNestedPartitions + : PartitionBarsView::NoNestedPartitions; m_beforePartitionBarsView = new PartitionBarsView( m_previewBeforeFrame ); m_beforePartitionBarsView->setNestedPartitionsMode( mode ); m_beforePartitionLabelsView = new PartitionLabelsView( m_previewBeforeFrame ); @@ -875,7 +879,9 @@ ChoicePage::updateDeviceStatePreview() auto sm = m_beforePartitionLabelsView->selectionModel(); m_beforePartitionLabelsView->setSelectionModel( m_beforePartitionBarsView->selectionModel() ); if ( sm ) + { sm->deleteLater(); + } switch ( m_choice ) { @@ -914,17 +920,19 @@ ChoicePage::updateActionChoicePreview( ChoicePage::InstallChoice choice ) auto oldlayout = m_previewAfterFrame->layout(); if ( oldlayout ) + { oldlayout->deleteLater(); + } QVBoxLayout* layout = new QVBoxLayout; m_previewAfterFrame->setLayout( layout ); CalamaresUtils::unmarginLayout( layout ); layout->setSpacing( 6 ); - PartitionBarsView::NestedPartitionsMode mode = Calamares::JobQueue::instance()->globalStorage()-> - value( "drawNestedPartitions" ).toBool() ? - PartitionBarsView::DrawNestedPartitions : - PartitionBarsView::NoNestedPartitions; + PartitionBarsView::NestedPartitionsMode mode + = Calamares::JobQueue::instance()->globalStorage()->value( "drawNestedPartitions" ).toBool() + ? PartitionBarsView::DrawNestedPartitions + : PartitionBarsView::NoNestedPartitions; m_reuseHomeCheckBox->hide(); Calamares::JobQueue::instance()->globalStorage()->insert( "reuseHome", false ); @@ -932,136 +940,142 @@ ChoicePage::updateActionChoicePreview( ChoicePage::InstallChoice choice ) switch ( choice ) { case InstallChoice::Alongside: + { + if ( m_enableEncryptionWidget ) { - if ( m_enableEncryptionWidget ) - m_encryptWidget->show(); - m_previewBeforeLabel->setText( tr( "Current:" ) ); - m_selectLabel->setText( tr( "Select a partition to shrink, " - "then drag the bottom bar to resize" ) ); - m_selectLabel->show(); + m_encryptWidget->show(); + } + m_previewBeforeLabel->setText( tr( "Current:" ) ); + m_selectLabel->setText( tr( "Select a partition to shrink, " + "then drag the bottom bar to resize" ) ); + m_selectLabel->show(); + + m_afterPartitionSplitterWidget = new PartitionSplitterWidget( m_previewAfterFrame ); + m_afterPartitionSplitterWidget->init( selectedDevice(), mode == PartitionBarsView::DrawNestedPartitions ); + layout->addWidget( m_afterPartitionSplitterWidget ); + + QLabel* sizeLabel = new QLabel( m_previewAfterFrame ); + layout->addWidget( sizeLabel ); + sizeLabel->setWordWrap( true ); + connect( m_afterPartitionSplitterWidget, + &PartitionSplitterWidget::partitionResized, + this, + [this, sizeLabel]( const QString& path, qint64 size, qint64 sizeNext ) { + Q_UNUSED( path ) + sizeLabel->setText( + tr( "%1 will be shrunk to %2MiB and a new " + "%3MiB partition will be created for %4." ) + .arg( m_beforePartitionBarsView->selectionModel()->currentIndex().data().toString() ) + .arg( CalamaresUtils::BytesToMiB( size ) ) + .arg( CalamaresUtils::BytesToMiB( sizeNext ) ) + .arg( Calamares::Branding::instance()->shortProductName() ) ); + } ); + + m_previewAfterFrame->show(); + m_previewAfterLabel->show(); + + SelectionFilter filter = [this]( const QModelIndex& index ) { + return PartUtils::canBeResized( + static_cast< Partition* >( index.data( PartitionModel::PartitionPtrRole ).value< void* >() ) ); + }; + m_beforePartitionBarsView->setSelectionFilter( filter ); + m_beforePartitionLabelsView->setSelectionFilter( filter ); - m_afterPartitionSplitterWidget = new PartitionSplitterWidget( m_previewAfterFrame ); - m_afterPartitionSplitterWidget->init( selectedDevice(), mode == PartitionBarsView::DrawNestedPartitions ); - layout->addWidget( m_afterPartitionSplitterWidget ); + break; + } + case InstallChoice::Erase: + case InstallChoice::Replace: + { + if ( m_enableEncryptionWidget ) + { + m_encryptWidget->show(); + } + m_previewBeforeLabel->setText( tr( "Current:" ) ); + m_afterPartitionBarsView = new PartitionBarsView( m_previewAfterFrame ); + m_afterPartitionBarsView->setNestedPartitionsMode( mode ); + m_afterPartitionLabelsView = new PartitionLabelsView( m_previewAfterFrame ); + m_afterPartitionLabelsView->setExtendedPartitionHidden( mode == PartitionBarsView::NoNestedPartitions ); + m_afterPartitionLabelsView->setCustomNewRootLabel( + Calamares::Branding::instance()->string( Calamares::Branding::BootloaderEntryName ) ); - QLabel* sizeLabel = new QLabel( m_previewAfterFrame ); - layout->addWidget( sizeLabel ); - sizeLabel->setWordWrap( true ); - connect( m_afterPartitionSplitterWidget, &PartitionSplitterWidget::partitionResized, this, - [ this, sizeLabel ]( const QString& path, qint64 size, qint64 sizeNext ) - { - Q_UNUSED( path ) - sizeLabel->setText( tr( "%1 will be shrunk to %2MiB and a new " - "%3MiB partition will be created for %4." ) - .arg( m_beforePartitionBarsView->selectionModel()->currentIndex().data().toString() ) - .arg( CalamaresUtils::BytesToMiB( size ) ) - .arg( CalamaresUtils::BytesToMiB( sizeNext ) ) - .arg( Calamares::Branding::instance()->shortProductName() ) ); - } - ); + PartitionModel* model = m_core->partitionModelForDevice( selectedDevice() ); - m_previewAfterFrame->show(); - m_previewAfterLabel->show(); + // The QObject parents tree is meaningful for memory management here, + // see qDeleteAll above. + m_afterPartitionBarsView->setModel( model ); + m_afterPartitionLabelsView->setModel( model ); + m_afterPartitionBarsView->setSelectionMode( QAbstractItemView::NoSelection ); + m_afterPartitionLabelsView->setSelectionMode( QAbstractItemView::NoSelection ); - SelectionFilter filter = [ this ]( const QModelIndex& index ) - { - return PartUtils::canBeResized( - static_cast< Partition* >( - index.data( PartitionModel::PartitionPtrRole ) - .value< void* >() ) ); - }; - m_beforePartitionBarsView->setSelectionFilter( filter ); - m_beforePartitionLabelsView->setSelectionFilter( filter ); + layout->addWidget( m_afterPartitionBarsView ); + layout->addWidget( m_afterPartitionLabelsView ); - break; - } - case InstallChoice::Erase: - case InstallChoice::Replace: + if ( !m_isEfi ) { - if ( m_enableEncryptionWidget ) - m_encryptWidget->show(); - m_previewBeforeLabel->setText( tr( "Current:" ) ); - m_afterPartitionBarsView = new PartitionBarsView( m_previewAfterFrame ); - m_afterPartitionBarsView->setNestedPartitionsMode( mode ); - m_afterPartitionLabelsView = new PartitionLabelsView( m_previewAfterFrame ); - m_afterPartitionLabelsView->setExtendedPartitionHidden( mode == PartitionBarsView::NoNestedPartitions ); - m_afterPartitionLabelsView->setCustomNewRootLabel( Calamares::Branding::instance()->string(Calamares::Branding::BootloaderEntryName) ); - - PartitionModel* model = m_core->partitionModelForDevice( selectedDevice() ); - - // The QObject parents tree is meaningful for memory management here, - // see qDeleteAll above. - m_afterPartitionBarsView->setModel( model ); - m_afterPartitionLabelsView->setModel( model ); - m_afterPartitionBarsView->setSelectionMode( QAbstractItemView::NoSelection ); - m_afterPartitionLabelsView->setSelectionMode( QAbstractItemView::NoSelection ); - - layout->addWidget( m_afterPartitionBarsView ); - layout->addWidget( m_afterPartitionLabelsView ); - - if ( !m_isEfi ) - { - QWidget* eraseWidget = new QWidget; - - QHBoxLayout* eraseLayout = new QHBoxLayout; - eraseWidget->setLayout( eraseLayout ); - eraseLayout->setContentsMargins( 0, 0, 0, 0 ); - QLabel* eraseBootloaderLabel = new QLabel( eraseWidget ); - eraseLayout->addWidget( eraseBootloaderLabel ); - eraseBootloaderLabel->setText( tr( "Boot loader location:" ) ); - - m_bootloaderComboBox = createBootloaderComboBox( eraseWidget ); - connect( m_core->bootLoaderModel(), &QAbstractItemModel::modelReset, - [ this ]() - { - if ( !m_bootloaderComboBox.isNull() ) - Calamares::restoreSelectedBootLoader( *m_bootloaderComboBox, m_core->bootLoaderInstallPath() ); - } - ); - connect( m_core, &PartitionCoreModule::deviceReverted, this, - [ this ]( Device* dev ) + QWidget* eraseWidget = new QWidget; + + QHBoxLayout* eraseLayout = new QHBoxLayout; + eraseWidget->setLayout( eraseLayout ); + eraseLayout->setContentsMargins( 0, 0, 0, 0 ); + QLabel* eraseBootloaderLabel = new QLabel( eraseWidget ); + eraseLayout->addWidget( eraseBootloaderLabel ); + eraseBootloaderLabel->setText( tr( "Boot loader location:" ) ); + + m_bootloaderComboBox = createBootloaderComboBox( eraseWidget ); + connect( m_core->bootLoaderModel(), &QAbstractItemModel::modelReset, [this]() { + if ( !m_bootloaderComboBox.isNull() ) + { + Calamares::restoreSelectedBootLoader( *m_bootloaderComboBox, m_core->bootLoaderInstallPath() ); + } + } ); + connect( + m_core, + &PartitionCoreModule::deviceReverted, + this, + [this]( Device* dev ) { + Q_UNUSED( dev ) + if ( !m_bootloaderComboBox.isNull() ) { - Q_UNUSED( dev ) - if ( !m_bootloaderComboBox.isNull() ) + if ( m_bootloaderComboBox->model() != m_core->bootLoaderModel() ) { - if ( m_bootloaderComboBox->model() != m_core->bootLoaderModel() ) - m_bootloaderComboBox->setModel( m_core->bootLoaderModel() ); - - m_bootloaderComboBox->setCurrentIndex( m_lastSelectedDeviceIndex ); + m_bootloaderComboBox->setModel( m_core->bootLoaderModel() ); } - }, Qt::QueuedConnection ); - // ^ Must be Queued so it's sure to run when the widget is already visible. - eraseLayout->addWidget( m_bootloaderComboBox ); - eraseBootloaderLabel->setBuddy( m_bootloaderComboBox ); - eraseLayout->addStretch(); + m_bootloaderComboBox->setCurrentIndex( m_lastSelectedDeviceIndex ); + } + }, + Qt::QueuedConnection ); + // ^ Must be Queued so it's sure to run when the widget is already visible. - layout->addWidget( eraseWidget ); - } + eraseLayout->addWidget( m_bootloaderComboBox ); + eraseBootloaderLabel->setBuddy( m_bootloaderComboBox ); + eraseLayout->addStretch(); - m_previewAfterFrame->show(); - m_previewAfterLabel->show(); + layout->addWidget( eraseWidget ); + } - if ( m_choice == InstallChoice::Erase ) - m_selectLabel->hide(); - else - { - SelectionFilter filter = [ this ]( const QModelIndex& index ) - { - return PartUtils::canBeReplaced( - static_cast< Partition* >( - index.data( PartitionModel::PartitionPtrRole ) - .value< void* >() ) ); - }; - m_beforePartitionBarsView->setSelectionFilter( filter ); - m_beforePartitionLabelsView->setSelectionFilter( filter ); - - m_selectLabel->show(); - m_selectLabel->setText( tr( "Select a partition to install on" ) ); - } + m_previewAfterFrame->show(); + m_previewAfterLabel->show(); - break; + if ( m_choice == InstallChoice::Erase ) + { + m_selectLabel->hide(); + } + else + { + SelectionFilter filter = [this]( const QModelIndex& index ) { + return PartUtils::canBeReplaced( + static_cast< Partition* >( index.data( PartitionModel::PartitionPtrRole ).value< void* >() ) ); + }; + m_beforePartitionBarsView->setSelectionFilter( filter ); + m_beforePartitionLabelsView->setSelectionFilter( filter ); + + m_selectLabel->show(); + m_selectLabel->setText( tr( "Select a partition to install on" ) ); } + + break; + } case InstallChoice::NoChoice: case InstallChoice::Manual: m_selectLabel->hide(); @@ -1110,22 +1124,20 @@ ChoicePage::setupEfiSystemPartitionSelector() // Only the already existing ones: QList< Partition* > efiSystemPartitions = m_core->efiSystemPartitions(); - if ( efiSystemPartitions.count() == 0 ) //should never happen + if ( efiSystemPartitions.count() == 0 ) //should never happen { - m_efiLabel->setText( - tr( "An EFI system partition cannot be found anywhere " - "on this system. Please go back and use manual " - "partitioning to set up %1." ) - .arg( Calamares::Branding::instance()->shortProductName() ) ); + m_efiLabel->setText( tr( "An EFI system partition cannot be found anywhere " + "on this system. Please go back and use manual " + "partitioning to set up %1." ) + .arg( Calamares::Branding::instance()->shortProductName() ) ); updateNextEnabled(); } - else if ( efiSystemPartitions.count() == 1 ) //probably most usual situation + else if ( efiSystemPartitions.count() == 1 ) //probably most usual situation { - m_efiLabel->setText( - tr( "The EFI system partition at %1 will be used for " - "starting %2." ) - .arg( efiSystemPartitions.first()->partitionPath() ) - .arg( Calamares::Branding::instance()->shortProductName() ) ); + m_efiLabel->setText( tr( "The EFI system partition at %1 will be used for " + "starting %2." ) + .arg( efiSystemPartitions.first()->partitionPath() ) + .arg( Calamares::Branding::instance()->shortProductName() ) ); } else { @@ -1137,9 +1149,10 @@ ChoicePage::setupEfiSystemPartitionSelector() m_efiComboBox->addItem( efiPartition->partitionPath(), i ); // We pick an ESP on the currently selected device, if possible - if ( efiPartition->devicePath() == selectedDevice()->deviceNode() && - efiPartition->number() == 1 ) + if ( efiPartition->devicePath() == selectedDevice()->deviceNode() && efiPartition->number() == 1 ) + { m_efiComboBox->setCurrentIndex( i ); + } } } } @@ -1152,15 +1165,15 @@ ChoicePage::createBootloaderComboBox( QWidget* parent ) bcb->setModel( m_core->bootLoaderModel() ); // When the chosen bootloader device changes, we update the choice in the PCM - connect( bcb, QOverload::of( &QComboBox::currentIndexChanged ), - this, [this]( int newIndex ) - { + connect( bcb, QOverload< int >::of( &QComboBox::currentIndexChanged ), this, [this]( int newIndex ) { QComboBox* bcb = qobject_cast< QComboBox* >( sender() ); if ( bcb ) { QVariant var = bcb->itemData( newIndex, BootLoaderModel::BootLoaderPathRole ); if ( !var.isValid() ) + { return; + } m_core->setBootLoaderInstallPath( var.toString() ); } } ); @@ -1170,7 +1183,7 @@ ChoicePage::createBootloaderComboBox( QWidget* parent ) static inline void -force_uncheck(QButtonGroup* grp, PrettyRadioButton* button) +force_uncheck( QButtonGroup* grp, PrettyRadioButton* button ) { button->hide(); grp->setExclusive( false ); @@ -1179,7 +1192,7 @@ force_uncheck(QButtonGroup* grp, PrettyRadioButton* button) } static inline QDebug& -operator <<( QDebug& s, PartitionIterator& it ) +operator<<( QDebug& s, PartitionIterator& it ) { s << ( ( *it ) ? ( *it )->deviceNode() : QString( "" ) ); return s; @@ -1195,21 +1208,28 @@ void ChoicePage::setupActions() { Device* currentDevice = selectedDevice(); - OsproberEntryList osproberEntriesForCurrentDevice = - getOsproberEntriesForDevice( currentDevice ); + OsproberEntryList osproberEntriesForCurrentDevice = getOsproberEntriesForDevice( currentDevice ); - cDebug() << "Setting up actions for" << currentDevice->deviceNode() - << "with" << osproberEntriesForCurrentDevice.count() << "entries."; + cDebug() << "Setting up actions for" << currentDevice->deviceNode() << "with" + << osproberEntriesForCurrentDevice.count() << "entries."; if ( currentDevice->partitionTable() ) + { m_deviceInfoWidget->setPartitionTableType( currentDevice->partitionTable()->type() ); + } else + { m_deviceInfoWidget->setPartitionTableType( PartitionTable::unknownTableType ); + } if ( m_allowManualPartitioning ) + { m_somethingElseButton->show(); + } else + { force_uncheck( m_grp, m_somethingElseButton ); + } bool atLeastOneCanBeResized = false; bool atLeastOneCanBeReplaced = false; @@ -1217,16 +1237,15 @@ ChoicePage::setupActions() bool isInactiveRAID = false; #ifdef WITH_KPMCORE4API - if ( currentDevice->type() == Device::Type::SoftwareRAID_Device && - static_cast< SoftwareRAID* >(currentDevice)->status() == SoftwareRAID::Status::Inactive ) + if ( currentDevice->type() == Device::Type::SoftwareRAID_Device + && static_cast< SoftwareRAID* >( currentDevice )->status() == SoftwareRAID::Status::Inactive ) { cDebug() << Logger::SubEntry << "part of an inactive RAID device"; isInactiveRAID = true; } #endif - for ( auto it = PartitionIterator::begin( currentDevice ); - it != PartitionIterator::end( currentDevice ); ++it ) + for ( auto it = PartitionIterator::begin( currentDevice ); it != PartitionIterator::end( currentDevice ); ++it ) { if ( PartUtils::canBeResized( *it ) ) { @@ -1238,7 +1257,7 @@ ChoicePage::setupActions() cDebug() << Logger::SubEntry << "contains replaceable" << it; atLeastOneCanBeReplaced = true; } - if ( (*it)->isMounted() ) + if ( ( *it )->isMounted() ) { atLeastOneIsMounted = true; } @@ -1259,12 +1278,11 @@ ChoicePage::setupActions() m_alongsideButton->setText( tr( "Install alongside
    " "The installer will shrink a partition to make room for %1." ) - .arg( Calamares::Branding::instance()->shortVersionedName() ) ); + .arg( Calamares::Branding::instance()->shortVersionedName() ) ); m_replaceButton->setText( tr( "Replace a partition
    " "Replaces a partition with %1." ) - .arg( Calamares::Branding::instance()->shortVersionedName() ) ); - ) + .arg( Calamares::Branding::instance()->shortVersionedName() ) ); ) m_replaceButton->hide(); m_alongsideButton->hide(); @@ -1285,11 +1303,11 @@ ChoicePage::setupActions() "What would you like to do?
    " "You will be able to review and confirm your choices " "before any change is made to the storage device." ) - .arg( osName ) ); + .arg( osName ) ); m_alongsideButton->setText( tr( "Install alongside
    " "The installer will shrink a partition to make room for %1." ) - .arg( Calamares::Branding::instance()->shortVersionedName() ) ); + .arg( Calamares::Branding::instance()->shortVersionedName() ) ); m_eraseButton->setText( tr( "Erase disk
    " "This will delete all data " @@ -1298,8 +1316,7 @@ ChoicePage::setupActions() m_replaceButton->setText( tr( "Replace a partition
    " "Replaces a partition with %1." ) - .arg( Calamares::Branding::instance()->shortVersionedName() ) ); - ) + .arg( Calamares::Branding::instance()->shortVersionedName() ) ); ) } else { @@ -1312,7 +1329,7 @@ ChoicePage::setupActions() m_alongsideButton->setText( tr( "Install alongside
    " "The installer will shrink a partition to make room for %1." ) - .arg( Calamares::Branding::instance()->shortVersionedName() ) ); + .arg( Calamares::Branding::instance()->shortVersionedName() ) ); m_eraseButton->setText( tr( "Erase disk
    " "This will delete all data " @@ -1320,8 +1337,7 @@ ChoicePage::setupActions() m_replaceButton->setText( tr( "Replace a partition
    " "Replaces a partition with %1." ) - .arg( Calamares::Branding::instance()->shortVersionedName() ) ); - ) + .arg( Calamares::Branding::instance()->shortVersionedName() ) ); ) } } else @@ -1338,7 +1354,7 @@ ChoicePage::setupActions() m_alongsideButton->setText( tr( "Install alongside
    " "The installer will shrink a partition to make room for %1." ) - .arg( Calamares::Branding::instance()->shortVersionedName() ) ); + .arg( Calamares::Branding::instance()->shortVersionedName() ) ); m_eraseButton->setText( tr( "Erase disk
    " "This will delete all data " @@ -1346,8 +1362,7 @@ ChoicePage::setupActions() m_replaceButton->setText( tr( "Replace a partition
    " "Replaces a partition with %1." ) - .arg( Calamares::Branding::instance()->shortVersionedName() ) ); - ) + .arg( Calamares::Branding::instance()->shortVersionedName() ) ); ) } #ifdef DEBUG_PARTITION_UNSAFE @@ -1361,7 +1376,9 @@ ChoicePage::setupActions() #endif if ( atLeastOneCanBeReplaced ) + { m_replaceButton->show(); + } else { cDebug() << "Replace button suppressed because none can be replaced."; @@ -1369,7 +1386,9 @@ ChoicePage::setupActions() } if ( atLeastOneCanBeResized ) + { m_alongsideButton->show(); + } else { cDebug() << "Alongside button suppressed because none can be resized."; @@ -1377,12 +1396,13 @@ ChoicePage::setupActions() } if ( !atLeastOneIsMounted && !isInactiveRAID ) + { m_eraseButton->show(); // None mounted + } else { cDebug() << "Erase button suppressed" - << "mount?" << atLeastOneIsMounted - << "raid?" << isInactiveRAID; + << "mount?" << atLeastOneIsMounted << "raid?" << isInactiveRAID; force_uncheck( m_grp, m_eraseButton ); } @@ -1392,7 +1412,7 @@ ChoicePage::setupActions() if ( isEfi && !efiSystemPartitionFound ) { cWarning() << "System is EFI but there's no EFI system partition, " - "DISABLING alongside and replace features."; + "DISABLING alongside and replace features."; m_alongsideButton->hide(); m_replaceButton->hide(); } @@ -1406,7 +1426,9 @@ ChoicePage::getOsproberEntriesForDevice( Device* device ) const for ( const OsproberEntry& entry : m_core->osproberEntries() ) { if ( entry.path.startsWith( device->deviceNode() ) ) + { eList.append( entry ); + } } return eList; } @@ -1450,7 +1472,7 @@ ChoicePage::calculateNextEnabled() const enabled = true; } - if (!enabled) + if ( !enabled ) { cDebug() << "No valid choice made"; return false; @@ -1470,13 +1492,13 @@ ChoicePage::calculateNextEnabled() const { switch ( m_encryptWidget->state() ) { - case EncryptWidget::Encryption::Unconfirmed: - cDebug() << "No passphrase provided"; - return false; - case EncryptWidget::Encryption::Disabled: - case EncryptWidget::Encryption::Confirmed: - // Checkbox not checked, **or** passphrases match - break; + case EncryptWidget::Encryption::Unconfirmed: + cDebug() << "No passphrase provided"; + return false; + case EncryptWidget::Encryption::Disabled: + case EncryptWidget::Encryption::Confirmed: + // Checkbox not checked, **or** passphrases match + break; } } @@ -1497,12 +1519,14 @@ ChoicePage::updateNextEnabled() } void -ChoicePage::updateSwapChoicesTr(QComboBox* box) +ChoicePage::updateSwapChoicesTr( QComboBox* box ) { if ( !box ) + { return; + } - static_assert(SwapChoice::NoSwap == 0, "Enum values out-of-sync"); + static_assert( SwapChoice::NoSwap == 0, "Enum values out-of-sync" ); for ( int index = 0; index < box->count(); ++index ) { bool ok = false; @@ -1510,28 +1534,32 @@ ChoicePage::updateSwapChoicesTr(QComboBox* box) switch ( value = box->itemData( index ).toInt( &ok ) ) { - // case 0: - case SwapChoice::NoSwap: - // toInt() returns 0 on failure, so check for ok - if ( ok ) // It was explicitly set to 0 - box->setItemText( index, tr( "No Swap" ) ); - else - cWarning() << "Box item" << index << box->itemText( index ) << "has non-integer role."; - break; - case SwapChoice::ReuseSwap: - box->setItemText( index, tr( "Reuse Swap" ) ); - break; - case SwapChoice::SmallSwap: - box->setItemText( index, tr( "Swap (no Hibernate)" ) ); - break; - case SwapChoice::FullSwap: - box->setItemText( index, tr( "Swap (with Hibernate)" ) ); - break; - case SwapChoice::SwapFile: - box->setItemText( index, tr( "Swap to file" ) ); - break; - default: - cWarning() << "Box item" << index << box->itemText( index ) << "has role" << value; + // case 0: + case SwapChoice::NoSwap: + // toInt() returns 0 on failure, so check for ok + if ( ok ) // It was explicitly set to 0 + { + box->setItemText( index, tr( "No Swap" ) ); + } + else + { + cWarning() << "Box item" << index << box->itemText( index ) << "has non-integer role."; + } + break; + case SwapChoice::ReuseSwap: + box->setItemText( index, tr( "Reuse Swap" ) ); + break; + case SwapChoice::SmallSwap: + box->setItemText( index, tr( "Swap (no Hibernate)" ) ); + break; + case SwapChoice::FullSwap: + box->setItemText( index, tr( "Swap (with Hibernate)" ) ); + break; + case SwapChoice::SwapFile: + box->setItemText( index, tr( "Swap to file" ) ); + break; + default: + cWarning() << "Box item" << index << box->itemText( index ) << "has role" << value; } } } diff --git a/src/modules/partition/gui/ChoicePage.h b/src/modules/partition/gui/ChoicePage.h index af8ee90607..9aa8befedd 100644 --- a/src/modules/partition/gui/ChoicePage.h +++ b/src/modules/partition/gui/ChoicePage.h @@ -1,8 +1,9 @@ /* === This file is part of Calamares - === * - * Copyright 2014-2016, Teo Mrnjavac - * Copyright 2018-2019, Adriaan de Groot - * Copyright 2019, Collabora Ltd + * SPDX-FileCopyrightText: 2014-2016 Teo Mrnjavac + * SPDX-FileCopyrightText: 2018-2019 Adriaan de Groot + * SPDX-FileCopyrightText: 2019 Collabora Ltd + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/partition/gui/CreatePartitionDialog.cpp b/src/modules/partition/gui/CreatePartitionDialog.cpp index a73441bc34..ae500c5001 100644 --- a/src/modules/partition/gui/CreatePartitionDialog.cpp +++ b/src/modules/partition/gui/CreatePartitionDialog.cpp @@ -1,10 +1,11 @@ /* === This file is part of Calamares - === * - * Copyright 2014, Aurélien Gâteau - * Copyright 2016, Teo Mrnjavac - * Copyright 2018, 2020, Adriaan de Groot - * Copyright 2018, Andrius Štikonas - * Copyright 2018, Caio Carvalho + * SPDX-FileCopyrightText: 2014 Aurélien Gâteau + * SPDX-FileCopyrightText: 2016 Teo Mrnjavac + * SPDX-FileCopyrightText: 2018 2020, Adriaan de Groot + * SPDX-FileCopyrightText: 2018 Andrius Štikonas + * SPDX-FileCopyrightText: 2018 Caio Carvalho + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -24,16 +25,16 @@ #include "ui_CreatePartitionDialog.h" #include "core/ColorUtils.h" -#include "core/PartitionInfo.h" -#include "core/PartUtils.h" #include "core/KPMHelpers.h" +#include "core/PartUtils.h" +#include "core/PartitionInfo.h" #include "gui/PartitionDialogHelpers.h" #include "gui/PartitionSizeController.h" #include "GlobalStorage.h" #include "JobQueue.h" -#include "partition/PartitionQuery.h" #include "partition/FileSystem.h" +#include "partition/PartitionQuery.h" #include "utils/Logger.h" #include @@ -53,16 +54,17 @@ using CalamaresUtils::Partition::untranslatedFS; using CalamaresUtils::Partition::userVisibleFS; -static QSet< FileSystem::Type > s_unmountableFS( -{ - FileSystem::Unformatted, - FileSystem::LinuxSwap, - FileSystem::Extended, - FileSystem::Unknown, - FileSystem::Lvm2_PV -} ); - -CreatePartitionDialog::CreatePartitionDialog( Device* device, PartitionNode* parentPartition, Partition* partition, const QStringList& usedMountPoints, QWidget* parentWidget ) +static QSet< FileSystem::Type > s_unmountableFS( { FileSystem::Unformatted, + FileSystem::LinuxSwap, + FileSystem::Extended, + FileSystem::Unknown, + FileSystem::Lvm2_PV } ); + +CreatePartitionDialog::CreatePartitionDialog( Device* device, + PartitionNode* parentPartition, + Partition* partition, + const QStringList& usedMountPoints, + QWidget* parentWidget ) : QDialog( parentWidget ) , m_ui( new Ui_CreatePartitionDialog ) , m_partitionSizeController( new PartitionSizeController( this ) ) @@ -74,33 +76,38 @@ CreatePartitionDialog::CreatePartitionDialog( Device* device, PartitionNode* par m_ui->encryptWidget->setText( tr( "En&crypt" ) ); m_ui->encryptWidget->hide(); - if (m_device->type() != Device::Type::LVM_Device) { + if ( m_device->type() != Device::Type::LVM_Device ) + { m_ui->lvNameLabel->hide(); m_ui->lvNameLineEdit->hide(); } - if (m_device->type() == Device::Type::LVM_Device) { + if ( m_device->type() == Device::Type::LVM_Device ) + { /* LVM logical volume name can consist of: letters numbers _ . - + * It cannot start with underscore _ and must not be equal to . or .. or any entry in /dev/ * QLineEdit accepts QValidator::Intermediate, so we just disable . at the beginning */ - QRegularExpression re(QStringLiteral(R"(^(?!_|\.)[\w\-.+]+)")); - QRegularExpressionValidator *validator = new QRegularExpressionValidator(re, this); - m_ui->lvNameLineEdit->setValidator(validator); + QRegularExpression re( QStringLiteral( R"(^(?!_|\.)[\w\-.+]+)" ) ); + QRegularExpressionValidator* validator = new QRegularExpressionValidator( re, this ); + m_ui->lvNameLineEdit->setValidator( validator ); } - standardMountPoints( *(m_ui->mountPointComboBox), partition ? PartitionInfo::mountPoint( partition ) : QString() ); + standardMountPoints( *( m_ui->mountPointComboBox ), + partition ? PartitionInfo::mountPoint( partition ) : QString() ); - if ( device->partitionTable()->type() == PartitionTable::msdos || - device->partitionTable()->type() == PartitionTable::msdos_sectorbased ) + if ( device->partitionTable()->type() == PartitionTable::msdos + || device->partitionTable()->type() == PartitionTable::msdos_sectorbased ) + { initMbrPartitionTypeUi(); + } else + { initGptPartitionTypeUi(); + } // File system; the config value is translated (best-effort) to a type FileSystem::Type defaultFSType; QString untranslatedFSName = PartUtils::findFS( - Calamares::JobQueue::instance()-> - globalStorage()-> - value( "defaultFileSystemType" ).toString(), &defaultFSType ); + Calamares::JobQueue::instance()->globalStorage()->value( "defaultFileSystemType" ).toString(), &defaultFSType ); if ( defaultFSType == FileSystem::Type::Unknown ) { defaultFSType = FileSystem::Type::Ext4; @@ -111,12 +118,13 @@ CreatePartitionDialog::CreatePartitionDialog( Device* device, PartitionNode* par QStringList fsNames; for ( auto fs : FileSystemFactory::map() ) { - if ( fs->supportCreate() != FileSystem::cmdSupportNone && - fs->type() != FileSystem::Extended ) + if ( fs->supportCreate() != FileSystem::cmdSupportNone && fs->type() != FileSystem::Extended ) { fsNames << userVisibleFS( fs ); // This is put into the combobox if ( fs->type() == defaultFSType ) + { defaultFsIndex = fsCounter; + } fsCounter++; } } @@ -126,26 +134,30 @@ CreatePartitionDialog::CreatePartitionDialog( Device* device, PartitionNode* par connect( m_ui->fsComboBox, SIGNAL( activated( int ) ), SLOT( updateMountPointUi() ) ); connect( m_ui->extendedRadioButton, SIGNAL( toggled( bool ) ), SLOT( updateMountPointUi() ) ); - connect( m_ui->mountPointComboBox, &QComboBox::currentTextChanged, this, &CreatePartitionDialog::checkMountPointSelection ); + connect( m_ui->mountPointComboBox, + &QComboBox::currentTextChanged, + this, + &CreatePartitionDialog::checkMountPointSelection ); // Select a default m_ui->fsComboBox->setCurrentIndex( defaultFsIndex ); updateMountPointUi(); - setFlagList( *(m_ui->m_listFlags), static_cast< PartitionTable::Flags >( ~PartitionTable::Flags::Int(0) ), partition ? PartitionInfo::flags( partition ) : PartitionTable::Flags() ); + setFlagList( *( m_ui->m_listFlags ), + static_cast< PartitionTable::Flags >( ~PartitionTable::Flags::Int( 0 ) ), + partition ? PartitionInfo::flags( partition ) : PartitionTable::Flags() ); // Checks the initial selection. checkMountPointSelection(); } -CreatePartitionDialog::~CreatePartitionDialog() -{} +CreatePartitionDialog::~CreatePartitionDialog() {} PartitionTable::Flags CreatePartitionDialog::newFlags() const { - return flagsFromList( *(m_ui->m_listFlags) ); + return flagsFromList( *( m_ui->m_listFlags ) ); } void @@ -165,7 +177,9 @@ CreatePartitionDialog::initMbrPartitionTypeUi() } if ( fixedPartitionString.isEmpty() ) + { m_ui->fixedPartitionLabel->hide(); + } else { m_ui->fixedPartitionLabel->setText( fixedPartitionString ); @@ -188,44 +202,33 @@ CreatePartitionDialog::createPartition() { if ( m_role.roles() == PartitionRole::None ) { - m_role = PartitionRole( - m_ui->extendedRadioButton->isChecked() - ? PartitionRole::Extended - : PartitionRole::Primary - ); + m_role = PartitionRole( m_ui->extendedRadioButton->isChecked() ? PartitionRole::Extended + : PartitionRole::Primary ); } qint64 first = m_partitionSizeController->firstSector(); qint64 last = m_partitionSizeController->lastSector(); FileSystem::Type fsType = m_role.has( PartitionRole::Extended ) - ? FileSystem::Extended - : FileSystem::typeForName( m_ui->fsComboBox->currentText() ); + ? FileSystem::Extended + : FileSystem::typeForName( m_ui->fsComboBox->currentText() ); Partition* partition = nullptr; QString luksPassphrase = m_ui->encryptWidget->passphrase(); - if ( m_ui->encryptWidget->state() == EncryptWidget::Encryption::Confirmed && - !luksPassphrase.isEmpty() ) + if ( m_ui->encryptWidget->state() == EncryptWidget::Encryption::Confirmed && !luksPassphrase.isEmpty() ) { partition = KPMHelpers::createNewEncryptedPartition( - m_parent, - *m_device, - m_role, - fsType, first, last, luksPassphrase, newFlags() - ); + m_parent, *m_device, m_role, fsType, first, last, luksPassphrase, newFlags() ); } else { - partition = KPMHelpers::createNewPartition( - m_parent, - *m_device, - m_role, - fsType, first, last, newFlags() - ); + partition = KPMHelpers::createNewPartition( m_parent, *m_device, m_role, fsType, first, last, newFlags() ); } - if (m_device->type() == Device::Type::LVM_Device) { - partition->setPartitionPath(m_device->deviceNode() + QStringLiteral("/") + m_ui->lvNameLineEdit->text().trimmed()); + if ( m_device->type() == Device::Type::LVM_Device ) + { + partition->setPartitionPath( m_device->deviceNode() + QStringLiteral( "/" ) + + m_ui->lvNameLineEdit->text().trimmed() ); } PartitionInfo::setMountPoint( partition, selectedMountPoint( m_ui->mountPointComboBox ) ); @@ -244,9 +247,8 @@ CreatePartitionDialog::updateMountPointUi() FileSystem::Type type = FileSystem::typeForName( m_ui->fsComboBox->currentText() ); enabled = !s_unmountableFS.contains( type ); - if ( FileSystemFactory::map()[FileSystem::Type::Luks]->supportCreate() && - FS::luks::canEncryptType( type ) && - !m_role.has( PartitionRole::Extended ) ) + if ( FileSystemFactory::map()[ FileSystem::Type::Luks ]->supportCreate() && FS::luks::canEncryptType( type ) + && !m_role.has( PartitionRole::Extended ) ) { m_ui->encryptWidget->show(); m_ui->encryptWidget->reset(); @@ -260,7 +262,9 @@ CreatePartitionDialog::updateMountPointUi() m_ui->mountPointLabel->setEnabled( enabled ); m_ui->mountPointComboBox->setEnabled( enabled ); if ( !enabled ) + { m_ui->mountPointComboBox->setCurrentText( QString() ); + } } void @@ -282,8 +286,8 @@ void CreatePartitionDialog::initPartResizerWidget( Partition* partition ) { QColor color = CalamaresUtils::Partition::isPartitionFreeSpace( partition ) - ? ColorUtils::colorForPartitionInFreeSpace( partition ) - : ColorUtils::colorForPartition( partition ); + ? ColorUtils::colorForPartitionInFreeSpace( partition ) + : ColorUtils::colorForPartition( partition ); m_partitionSizeController->init( m_device, partition, color ); m_partitionSizeController->setPartResizerWidget( m_ui->partResizerWidget ); m_partitionSizeController->setSpinBox( m_ui->sizeSpinBox ); diff --git a/src/modules/partition/gui/CreatePartitionDialog.h b/src/modules/partition/gui/CreatePartitionDialog.h index 2f3cc14a5f..6991d1fa5a 100644 --- a/src/modules/partition/gui/CreatePartitionDialog.h +++ b/src/modules/partition/gui/CreatePartitionDialog.h @@ -1,8 +1,9 @@ /* === This file is part of Calamares - === * - * Copyright 2014, Aurélien Gâteau - * Copyright 2016, Teo Mrnjavac - * Copyright 2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2014 Aurélien Gâteau + * SPDX-FileCopyrightText: 2016 Teo Mrnjavac + * SPDX-FileCopyrightText: 2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -49,7 +50,11 @@ class CreatePartitionDialog : public QDialog * For the (unlikely) case that a newly created partition is being re-edited, * pass a pointer to that @p partition, otherwise pass nullptr. */ - CreatePartitionDialog( Device* device, PartitionNode* parentPartition, Partition* partition, const QStringList& usedMountPoints, QWidget* parentWidget = nullptr ); + CreatePartitionDialog( Device* device, + PartitionNode* parentPartition, + Partition* partition, + const QStringList& usedMountPoints, + QWidget* parentWidget = nullptr ); ~CreatePartitionDialog(); /** diff --git a/src/modules/partition/gui/CreateVolumeGroupDialog.cpp b/src/modules/partition/gui/CreateVolumeGroupDialog.cpp index a255e99026..2f5984301c 100644 --- a/src/modules/partition/gui/CreateVolumeGroupDialog.cpp +++ b/src/modules/partition/gui/CreateVolumeGroupDialog.cpp @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2018, Caio Jordão Carvalho + * SPDX-FileCopyrightText: 2018 Caio Jordão Carvalho + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/partition/gui/CreateVolumeGroupDialog.h b/src/modules/partition/gui/CreateVolumeGroupDialog.h index 02ca6410cc..3c3d5cc1be 100644 --- a/src/modules/partition/gui/CreateVolumeGroupDialog.h +++ b/src/modules/partition/gui/CreateVolumeGroupDialog.h @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2018, Caio Jordão Carvalho + * SPDX-FileCopyrightText: 2018 Caio Jordão Carvalho + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -39,4 +40,4 @@ class CreateVolumeGroupDialog : public VolumeGroupBaseDialog qint64& m_peSize; }; -#endif // CREATEVOLUMEGROUPDIALOG_H +#endif // CREATEVOLUMEGROUPDIALOG_H diff --git a/src/modules/partition/gui/DeviceInfoWidget.cpp b/src/modules/partition/gui/DeviceInfoWidget.cpp index ea318e85c1..d7059c71e3 100644 --- a/src/modules/partition/gui/DeviceInfoWidget.cpp +++ b/src/modules/partition/gui/DeviceInfoWidget.cpp @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2015-2016, Teo Mrnjavac + * SPDX-FileCopyrightText: 2015-2016 Teo Mrnjavac + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -19,15 +20,15 @@ #include "DeviceInfoWidget.h" +#include "GlobalStorage.h" +#include "JobQueue.h" #include "utils/CalamaresUtilsGui.h" #include "utils/Logger.h" #include "utils/Retranslator.h" -#include "JobQueue.h" -#include "GlobalStorage.h" #include -#include #include +#include DeviceInfoWidget::DeviceInfoWidget( QWidget* parent ) : QWidget( parent ) @@ -39,8 +40,8 @@ DeviceInfoWidget::DeviceInfoWidget( QWidget* parent ) setLayout( mainLayout ); CalamaresUtils::unmarginLayout( mainLayout ); - m_ptLabel->setObjectName("deviceInfoLabel"); - m_ptIcon->setObjectName("deviceInfoIcon"); + m_ptLabel->setObjectName( "deviceInfoLabel" ); + m_ptIcon->setObjectName( "deviceInfoIcon" ); mainLayout->addWidget( m_ptIcon ); mainLayout->addWidget( m_ptLabel ); @@ -49,16 +50,14 @@ DeviceInfoWidget::DeviceInfoWidget( QWidget* parent ) m_ptIcon->setMargin( 0 ); m_ptIcon->setFixedSize( iconSize ); m_ptIcon->setPixmap( - CalamaresUtils::defaultPixmap( CalamaresUtils::PartitionTable, - CalamaresUtils::Original, - iconSize ) ); + CalamaresUtils::defaultPixmap( CalamaresUtils::PartitionTable, CalamaresUtils::Original, iconSize ) ); QFontMetrics fm = QFontMetrics( QFont() ); m_ptLabel->setMinimumWidth( fm.boundingRect( "Amiga" ).width() + CalamaresUtils::defaultFontHeight() / 2 ); m_ptLabel->setAlignment( Qt::AlignCenter ); QPalette palette; - palette.setBrush( QPalette::Foreground, QColor( "#4D4D4D" ) ); //dark grey + palette.setBrush( QPalette::Foreground, QColor( "#4D4D4D" ) ); //dark grey m_ptIcon->setAutoFillBackground( true ); m_ptLabel->setAutoFillBackground( true ); @@ -107,7 +106,7 @@ DeviceInfoWidget::retranslateUi() QString toolTipString = tr( "This device has a %1 partition " "table." ) - .arg( typeString ); + .arg( typeString ); switch ( m_tableType ) { @@ -149,11 +148,11 @@ DeviceInfoWidget::retranslateUi() m_ptLabel->setToolTip( toolTipString ); m_ptIcon->setToolTip( tr( "The type of partition table on the " - "selected storage device.

    " - "The only way to change the partition table type is to " - "erase and recreate the partition table from scratch, " - "which destroys all data on the storage device.
    " - "This installer will keep the current partition table " - "unless you explicitly choose otherwise.
    " - "If unsure, on modern systems GPT is preferred." ) ); + "selected storage device.

    " + "The only way to change the partition table type is to " + "erase and recreate the partition table from scratch, " + "which destroys all data on the storage device.
    " + "This installer will keep the current partition table " + "unless you explicitly choose otherwise.
    " + "If unsure, on modern systems GPT is preferred." ) ); } diff --git a/src/modules/partition/gui/DeviceInfoWidget.h b/src/modules/partition/gui/DeviceInfoWidget.h index b1769c19d8..38a0309f38 100644 --- a/src/modules/partition/gui/DeviceInfoWidget.h +++ b/src/modules/partition/gui/DeviceInfoWidget.h @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2015-2016, Teo Mrnjavac + * SPDX-FileCopyrightText: 2015-2016 Teo Mrnjavac + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -43,4 +44,4 @@ public slots: PartitionTable::TableType m_tableType; }; -#endif // DEVICEINFOWIDGET_H +#endif // DEVICEINFOWIDGET_H diff --git a/src/modules/partition/gui/EditExistingPartitionDialog.cpp b/src/modules/partition/gui/EditExistingPartitionDialog.cpp index 37868c7ff9..633418ec39 100644 --- a/src/modules/partition/gui/EditExistingPartitionDialog.cpp +++ b/src/modules/partition/gui/EditExistingPartitionDialog.cpp @@ -1,12 +1,13 @@ /* === This file is part of Calamares - === * - * Copyright 2014, Aurélien Gâteau - * Copyright 2016, Teo Mrnjavac - * Copyright 2018, 2020, Adriaan de Groot + * SPDX-FileCopyrightText: 2008-2009 Volker Lanz + * SPDX-FileCopyrightText: 2014 Aurélien Gâteau + * SPDX-FileCopyrightText: 2016 Andrius Štikonas + * SPDX-FileCopyrightText: 2016 Teo Mrnjavac + * SPDX-FileCopyrightText: 2018 2020, Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Flags handling originally from KDE Partition Manager, - * Copyright 2008-2009, Volker Lanz - * Copyright 2016, Andrius Štikonas + * Flags handling originally from KDE Partition Manager. * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -26,9 +27,9 @@ #include "ui_EditExistingPartitionDialog.h" #include "core/ColorUtils.h" +#include "core/PartUtils.h" #include "core/PartitionCoreModule.h" #include "core/PartitionInfo.h" -#include "core/PartUtils.h" #include "gui/PartitionDialogHelpers.h" #include "gui/PartitionSizeController.h" @@ -48,7 +49,10 @@ using CalamaresUtils::Partition::untranslatedFS; using CalamaresUtils::Partition::userVisibleFS; -EditExistingPartitionDialog::EditExistingPartitionDialog( Device* device, Partition* partition, const QStringList& usedMountPoints, QWidget* parentWidget ) +EditExistingPartitionDialog::EditExistingPartitionDialog( Device* device, + Partition* partition, + const QStringList& usedMountPoints, + QWidget* parentWidget ) : QDialog( parentWidget ) , m_ui( new Ui_EditExistingPartitionDialog ) , m_device( device ) @@ -57,51 +61,50 @@ EditExistingPartitionDialog::EditExistingPartitionDialog( Device* device, Partit , m_usedMountPoints( usedMountPoints ) { m_ui->setupUi( this ); - standardMountPoints( *(m_ui->mountPointComboBox), PartitionInfo::mountPoint( partition ) ); + standardMountPoints( *( m_ui->mountPointComboBox ), PartitionInfo::mountPoint( partition ) ); QColor color = ColorUtils::colorForPartition( m_partition ); m_partitionSizeController->init( m_device, m_partition, color ); m_partitionSizeController->setSpinBox( m_ui->sizeSpinBox ); - connect( m_ui->mountPointComboBox, &QComboBox::currentTextChanged, - this, &EditExistingPartitionDialog::checkMountPointSelection ); + connect( m_ui->mountPointComboBox, + &QComboBox::currentTextChanged, + this, + &EditExistingPartitionDialog::checkMountPointSelection ); replacePartResizerWidget(); - connect( m_ui->formatRadioButton, &QAbstractButton::toggled, - [ this ]( bool doFormat ) - { + connect( m_ui->formatRadioButton, &QAbstractButton::toggled, [this]( bool doFormat ) { replacePartResizerWidget(); m_ui->fileSystemLabel->setEnabled( doFormat ); m_ui->fileSystemComboBox->setEnabled( doFormat ); if ( !doFormat ) + { m_ui->fileSystemComboBox->setCurrentText( userVisibleFS( m_partition->fileSystem() ) ); + } updateMountPointPicker(); } ); - connect( m_ui->fileSystemComboBox, &QComboBox::currentTextChanged, - [ this ]( QString ) - { - updateMountPointPicker(); - } ); + connect( + m_ui->fileSystemComboBox, &QComboBox::currentTextChanged, [this]( QString ) { updateMountPointPicker(); } ); // File system QStringList fsNames; for ( auto fs : FileSystemFactory::map() ) { if ( fs->supportCreate() != FileSystem::cmdSupportNone && fs->type() != FileSystem::Extended ) - fsNames << userVisibleFS( fs ); // For the combo box + { + fsNames << userVisibleFS( fs ); // For the combo box + } } m_ui->fileSystemComboBox->addItems( fsNames ); FileSystem::Type defaultFSType; QString untranslatedFSName = PartUtils::findFS( - Calamares::JobQueue::instance()-> - globalStorage()-> - value( "defaultFileSystemType" ).toString(), &defaultFSType ); + Calamares::JobQueue::instance()->globalStorage()->value( "defaultFileSystemType" ).toString(), &defaultFSType ); if ( defaultFSType == FileSystem::Type::Unknown ) { defaultFSType = FileSystem::Type::Ext4; @@ -109,39 +112,40 @@ EditExistingPartitionDialog::EditExistingPartitionDialog( Device* device, Partit QString thisFSNameForUser = userVisibleFS( m_partition->fileSystem() ); if ( fsNames.contains( thisFSNameForUser ) ) + { m_ui->fileSystemComboBox->setCurrentText( thisFSNameForUser ); + } else + { m_ui->fileSystemComboBox->setCurrentText( FileSystem::nameForType( defaultFSType ) ); + } m_ui->fileSystemLabel->setEnabled( m_ui->formatRadioButton->isChecked() ); m_ui->fileSystemComboBox->setEnabled( m_ui->formatRadioButton->isChecked() ); - setFlagList( *(m_ui->m_listFlags), m_partition->availableFlags(), PartitionInfo::flags( m_partition ) ); + setFlagList( *( m_ui->m_listFlags ), m_partition->availableFlags(), PartitionInfo::flags( m_partition ) ); } -EditExistingPartitionDialog::~EditExistingPartitionDialog() -{} +EditExistingPartitionDialog::~EditExistingPartitionDialog() {} PartitionTable::Flags EditExistingPartitionDialog::newFlags() const { - return flagsFromList( *(m_ui->m_listFlags) ); + return flagsFromList( *( m_ui->m_listFlags ) ); } void EditExistingPartitionDialog::applyChanges( PartitionCoreModule* core ) { - PartitionInfo::setMountPoint( m_partition, selectedMountPoint(m_ui->mountPointComboBox) ); + PartitionInfo::setMountPoint( m_partition, selectedMountPoint( m_ui->mountPointComboBox ) ); qint64 newFirstSector = m_partitionSizeController->firstSector(); - qint64 newLastSector = m_partitionSizeController->lastSector(); - bool partResizedMoved = newFirstSector != m_partition->firstSector() || - newLastSector != m_partition->lastSector(); + qint64 newLastSector = m_partitionSizeController->lastSector(); + bool partResizedMoved = newFirstSector != m_partition->firstSector() || newLastSector != m_partition->lastSector(); - cDebug() << "old boundaries:" << m_partition->firstSector() - << m_partition->lastSector() << m_partition->length(); + cDebug() << "old boundaries:" << m_partition->firstSector() << m_partition->lastSector() << m_partition->length(); cDebug() << "new boundaries:" << newFirstSector << newLastSector; cDebug() << "dirty status:" << m_partitionSizeController->isDirty(); @@ -149,22 +153,21 @@ EditExistingPartitionDialog::applyChanges( PartitionCoreModule* core ) if ( m_ui->formatRadioButton->isChecked() ) { fsType = m_partition->roles().has( PartitionRole::Extended ) - ? FileSystem::Extended - : FileSystem::typeForName( m_ui->fileSystemComboBox->currentText() ); + ? FileSystem::Extended + : FileSystem::typeForName( m_ui->fileSystemComboBox->currentText() ); } if ( partResizedMoved ) { if ( m_ui->formatRadioButton->isChecked() ) { - Partition* newPartition = KPMHelpers::createNewPartition( - m_partition->parent(), - *m_device, - m_partition->roles(), - fsType, - newFirstSector, - newLastSector, - newFlags() ); + Partition* newPartition = KPMHelpers::createNewPartition( m_partition->parent(), + *m_device, + m_partition->roles(), + fsType, + newFirstSector, + newLastSector, + newFlags() ); PartitionInfo::setMountPoint( newPartition, PartitionInfo::mountPoint( m_partition ) ); PartitionInfo::setFormat( newPartition, true ); @@ -174,12 +177,11 @@ EditExistingPartitionDialog::applyChanges( PartitionCoreModule* core ) } else { - core->resizePartition( m_device, - m_partition, - newFirstSector, - newLastSector ); + core->resizePartition( m_device, m_partition, newFirstSector, newLastSector ); if ( m_partition->activeFlags() != newFlags() ) + { core->setPartitionFlags( m_device, m_partition, newFlags() ); + } } } else @@ -192,18 +194,19 @@ EditExistingPartitionDialog::applyChanges( PartitionCoreModule* core ) { core->formatPartition( m_device, m_partition ); if ( m_partition->activeFlags() != newFlags() ) + { core->setPartitionFlags( m_device, m_partition, newFlags() ); + } } - else // otherwise, we delete and recreate the partition with new fs type + else // otherwise, we delete and recreate the partition with new fs type { - Partition* newPartition = KPMHelpers::createNewPartition( - m_partition->parent(), - *m_device, - m_partition->roles(), - fsType, - m_partition->firstSector(), - m_partition->lastSector(), - newFlags() ); + Partition* newPartition = KPMHelpers::createNewPartition( m_partition->parent(), + *m_device, + m_partition->roles(), + fsType, + m_partition->firstSector(), + m_partition->lastSector(), + newFlags() ); PartitionInfo::setMountPoint( newPartition, PartitionInfo::mountPoint( m_partition ) ); PartitionInfo::setFormat( newPartition, true ); @@ -216,7 +219,9 @@ EditExistingPartitionDialog::applyChanges( PartitionCoreModule* core ) { core->refreshPartition( m_device, m_partition ); if ( m_partition->activeFlags() != newFlags() ) + { core->setPartitionFlags( m_device, m_partition, newFlags() ); + } } } } @@ -255,11 +260,8 @@ EditExistingPartitionDialog::updateMountPointPicker() fsType = m_partition->fileSystem().type(); } bool canMount = true; - if ( fsType == FileSystem::Extended || - fsType == FileSystem::LinuxSwap || - fsType == FileSystem::Unformatted || - fsType == FileSystem::Unknown || - fsType == FileSystem::Lvm2_PV ) + if ( fsType == FileSystem::Extended || fsType == FileSystem::LinuxSwap || fsType == FileSystem::Unformatted + || fsType == FileSystem::Unknown || fsType == FileSystem::Lvm2_PV ) { canMount = false; } @@ -267,7 +269,9 @@ EditExistingPartitionDialog::updateMountPointPicker() m_ui->mountPointLabel->setEnabled( canMount ); m_ui->mountPointComboBox->setEnabled( canMount ); if ( !canMount ) + { setSelectedMountPoint( m_ui->mountPointComboBox, QString() ); + } } void diff --git a/src/modules/partition/gui/EditExistingPartitionDialog.h b/src/modules/partition/gui/EditExistingPartitionDialog.h index e98563bc07..7788305fc3 100644 --- a/src/modules/partition/gui/EditExistingPartitionDialog.h +++ b/src/modules/partition/gui/EditExistingPartitionDialog.h @@ -1,7 +1,8 @@ /* === This file is part of Calamares - === * - * Copyright 2014, Aurélien Gâteau - * Copyright 2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2014 Aurélien Gâteau + * SPDX-FileCopyrightText: 2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -41,7 +42,10 @@ class EditExistingPartitionDialog : public QDialog { Q_OBJECT public: - EditExistingPartitionDialog( Device* device, Partition* partition, const QStringList& usedMountPoints, QWidget* parentWidget = nullptr ); + EditExistingPartitionDialog( Device* device, + Partition* partition, + const QStringList& usedMountPoints, + QWidget* parentWidget = nullptr ); ~EditExistingPartitionDialog(); void applyChanges( PartitionCoreModule* module ); diff --git a/src/modules/partition/gui/EncryptWidget.cpp b/src/modules/partition/gui/EncryptWidget.cpp index 5e44c15fde..cf9a0c922f 100644 --- a/src/modules/partition/gui/EncryptWidget.cpp +++ b/src/modules/partition/gui/EncryptWidget.cpp @@ -1,7 +1,8 @@ /* === This file is part of Calamares - === * - * Copyright 2016, Teo Mrnjavac - * Copyright 2020, Adriaan de Groot + * SPDX-FileCopyrightText: 2016 Teo Mrnjavac + * SPDX-FileCopyrightText: 2020 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/partition/gui/EncryptWidget.h b/src/modules/partition/gui/EncryptWidget.h index 79beb1fa78..c3f7928fe9 100644 --- a/src/modules/partition/gui/EncryptWidget.h +++ b/src/modules/partition/gui/EncryptWidget.h @@ -1,7 +1,8 @@ /* === This file is part of Calamares - === * - * Copyright 2016, Teo Mrnjavac - * Copyright 2020, Adriaan de Groot + * SPDX-FileCopyrightText: 2016 Teo Mrnjavac + * SPDX-FileCopyrightText: 2020 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -25,7 +26,7 @@ namespace Ui { - class EncryptWidget; +class EncryptWidget; } class EncryptWidget : public QWidget diff --git a/src/modules/partition/gui/ListPhysicalVolumeWidgetItem.cpp b/src/modules/partition/gui/ListPhysicalVolumeWidgetItem.cpp index cd480aa558..f9f1b9c6bf 100644 --- a/src/modules/partition/gui/ListPhysicalVolumeWidgetItem.cpp +++ b/src/modules/partition/gui/ListPhysicalVolumeWidgetItem.cpp @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2018, Caio Jordão Carvalho + * SPDX-FileCopyrightText: 2018 Caio Jordão Carvalho + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -21,11 +22,12 @@ #include ListPhysicalVolumeWidgetItem::ListPhysicalVolumeWidgetItem( const Partition* partition, bool checked ) - : QListWidgetItem(QString("%1 | %2").arg( partition->deviceNode(), Capacity::formatByteSize( partition->capacity() ))) - , m_partition(partition) + : QListWidgetItem( + QString( "%1 | %2" ).arg( partition->deviceNode(), Capacity::formatByteSize( partition->capacity() ) ) ) + , m_partition( partition ) { setToolTip( partition->deviceNode() ); - setSizeHint( QSize(0, 32) ); + setSizeHint( QSize( 0, 32 ) ); setCheckState( checked ? Qt::Checked : Qt::Unchecked ); } diff --git a/src/modules/partition/gui/ListPhysicalVolumeWidgetItem.h b/src/modules/partition/gui/ListPhysicalVolumeWidgetItem.h index 44ba8c3bf1..7d8e8faf00 100644 --- a/src/modules/partition/gui/ListPhysicalVolumeWidgetItem.h +++ b/src/modules/partition/gui/ListPhysicalVolumeWidgetItem.h @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2018, Caio Jordão Carvalho + * SPDX-FileCopyrightText: 2018 Caio Jordão Carvalho + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -34,4 +35,4 @@ class ListPhysicalVolumeWidgetItem : public QListWidgetItem const Partition* m_partition; }; -#endif // LISTPHYSICALVOLUMEWIDGETITEM_H +#endif // LISTPHYSICALVOLUMEWIDGETITEM_H diff --git a/src/modules/partition/gui/PartitionBarsView.cpp b/src/modules/partition/gui/PartitionBarsView.cpp index b7c21473cf..6799b26f00 100644 --- a/src/modules/partition/gui/PartitionBarsView.cpp +++ b/src/modules/partition/gui/PartitionBarsView.cpp @@ -1,7 +1,8 @@ /* === This file is part of Calamares - === * - * Copyright 2014, Aurélien Gâteau - * Copyright 2015-2016, Teo Mrnjavac + * SPDX-FileCopyrightText: 2014 Aurélien Gâteau + * SPDX-FileCopyrightText: 2015-2016 Teo Mrnjavac + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -18,8 +19,8 @@ */ #include "gui/PartitionBarsView.h" -#include "core/PartitionModel.h" #include "core/ColorUtils.h" +#include "core/PartitionModel.h" #include "utils/CalamaresUtilsGui.h" #include "utils/Logger.h" @@ -32,8 +33,9 @@ #include -static const int VIEW_HEIGHT = qMax( CalamaresUtils::defaultFontHeight() + 8, // wins out with big fonts - int( CalamaresUtils::defaultFontHeight() * 0.6 ) + 22 ); // wins out with small fonts +static const int VIEW_HEIGHT + = qMax( CalamaresUtils::defaultFontHeight() + 8, // wins out with big fonts + int( CalamaresUtils::defaultFontHeight() * 0.6 ) + 22 ); // wins out with small fonts static constexpr int CORNER_RADIUS = 3; static const int EXTENDED_PARTITION_MARGIN = qMax( 4, VIEW_HEIGHT / 6 ); @@ -45,8 +47,8 @@ static const int EXTENDED_PARTITION_MARGIN = qMax( 4, VIEW_HEIGHT / 6 ); // and the extended partition box (the "- 2" part). // At worst, on low DPI systems, this will mean in order: // 1px outer rect, 1 px gap, 1px selection rect, 1px gap, 1px extended partition rect. -static const int SELECTION_MARGIN = qMin( ( EXTENDED_PARTITION_MARGIN - 2 ) / 2, - ( EXTENDED_PARTITION_MARGIN - 2 ) - 2 ); +static const int SELECTION_MARGIN + = qMin( ( EXTENDED_PARTITION_MARGIN - 2 ) / 2, ( EXTENDED_PARTITION_MARGIN - 2 ) - 2 ); PartitionBarsView::PartitionBarsView( QWidget* parent ) @@ -55,25 +57,21 @@ PartitionBarsView::PartitionBarsView( QWidget* parent ) , canBeSelected( []( const QModelIndex& ) { return true; } ) , m_hoveredIndex( QModelIndex() ) { - this->setObjectName("partitionBarView"); + this->setObjectName( "partitionBarView" ); setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ); setFrameStyle( QFrame::NoFrame ); setSelectionBehavior( QAbstractItemView::SelectRows ); setSelectionMode( QAbstractItemView::SingleSelection ); // Debug - connect( this, &PartitionBarsView::clicked, - this, [=]( const QModelIndex& index ) - { + connect( this, &PartitionBarsView::clicked, this, [=]( const QModelIndex& index ) { cDebug() << "Clicked row" << index.row(); } ); setMouseTracking( true ); } -PartitionBarsView::~PartitionBarsView() -{ -} +PartitionBarsView::~PartitionBarsView() {} void @@ -117,12 +115,9 @@ PartitionBarsView::paintEvent( QPaintEvent* event ) void PartitionBarsView::drawSection( QPainter* painter, const QRect& rect_, int x, int width, const QModelIndex& index ) { - QColor color = index.isValid() ? - index.data( Qt::DecorationRole ).value< QColor >() : - ColorUtils::unknownDisklabelColor(); - bool isFreeSpace = index.isValid() ? - index.data( PartitionModel::IsFreeSpaceRole ).toBool() : - true; + QColor color + = index.isValid() ? index.data( Qt::DecorationRole ).value< QColor >() : ColorUtils::unknownDisklabelColor(); + bool isFreeSpace = index.isValid() ? index.data( PartitionModel::IsFreeSpaceRole ).toBool() : true; QRect rect = rect_; const int y = rect.y(); @@ -134,14 +129,17 @@ PartitionBarsView::drawSection( QPainter* painter, const QRect& rect_, int x, in rect.adjust( 0, 0, -1, -1 ); - if ( selectionMode() != QAbstractItemView::NoSelection && // no hover without selection - m_hoveredIndex.isValid() && - index == m_hoveredIndex ) + if ( selectionMode() != QAbstractItemView::NoSelection && // no hover without selection + m_hoveredIndex.isValid() && index == m_hoveredIndex ) { if ( canBeSelected( index ) ) + { painter->setBrush( color.lighter( 115 ) ); + } else + { painter->setBrush( color ); + } } else { @@ -156,7 +154,9 @@ PartitionBarsView::drawSection( QPainter* painter, const QRect& rect_, int x, in // Draw shade if ( !isFreeSpace ) + { rect.adjust( 2, 2, -2, -2 ); + } QLinearGradient gradient( 0, 0, 0, height / 2 ); @@ -169,11 +169,8 @@ PartitionBarsView::drawSection( QPainter* painter, const QRect& rect_, int x, in painter->setBrush( gradient ); painter->drawRoundedRect( rect, radius, radius ); - if ( selectionMode() != QAbstractItemView::NoSelection && - index.isValid() && - selectionModel() && - !selectionModel()->selectedIndexes().isEmpty() && - selectionModel()->selectedIndexes().first() == index ) + if ( selectionMode() != QAbstractItemView::NoSelection && index.isValid() && selectionModel() + && !selectionModel()->selectedIndexes().isEmpty() && selectionModel()->selectedIndexes().first() == index ) { painter->setPen( QPen( borderColor, 1 ) ); QColor highlightColor = QPalette().highlight().color(); @@ -183,22 +180,21 @@ PartitionBarsView::drawSection( QPainter* painter, const QRect& rect_, int x, in QRect selectionRect = rect; selectionRect.setX( x + 1 ); - selectionRect.setWidth( width - 3 ); //account for the previous rect.adjust + selectionRect.setWidth( width - 3 ); //account for the previous rect.adjust - if ( rect.x() > selectionRect.x() ) //hack for first item + if ( rect.x() > selectionRect.x() ) //hack for first item + { selectionRect.adjust( rect.x() - selectionRect.x(), 0, 0, 0 ); + } - if ( rect.right() < selectionRect.right() ) //hack for last item - selectionRect.adjust( 0, 0, - ( selectionRect.right() - rect.right() ), 0 ); + if ( rect.right() < selectionRect.right() ) //hack for last item + { + selectionRect.adjust( 0, 0, -( selectionRect.right() - rect.right() ), 0 ); + } - selectionRect.adjust( SELECTION_MARGIN, - SELECTION_MARGIN, - -SELECTION_MARGIN, - -SELECTION_MARGIN ); + selectionRect.adjust( SELECTION_MARGIN, SELECTION_MARGIN, -SELECTION_MARGIN, -SELECTION_MARGIN ); - painter->drawRoundedRect( selectionRect, - radius - 1, - radius - 1 ); + painter->drawRoundedRect( selectionRect, radius - 1, radius - 1 ); } painter->translate( -0.5, -0.5 ); @@ -210,7 +206,9 @@ PartitionBarsView::drawPartitions( QPainter* painter, const QRect& rect, const Q { PartitionModel* modl = qobject_cast< PartitionModel* >( model() ); if ( !modl ) + { return; + } const int totalWidth = rect.width(); auto pair = computeItemsVector( parent ); @@ -222,29 +220,29 @@ PartitionBarsView::drawPartitions( QPainter* painter, const QRect& rect, const Q const auto& item = items[ row ]; int width; if ( row < items.count() - 1 ) + { width = totalWidth * ( item.size / total ); + } else - // Make sure we fill the last pixel column + // Make sure we fill the last pixel column + { width = rect.right() - x + 1; + } drawSection( painter, rect, x, width, item.index ); - if ( m_nestedPartitionsMode == DrawNestedPartitions && - modl->hasChildren( item.index ) ) + if ( m_nestedPartitionsMode == DrawNestedPartitions && modl->hasChildren( item.index ) ) { - QRect subRect( - x + EXTENDED_PARTITION_MARGIN, - rect.y() + EXTENDED_PARTITION_MARGIN, - width - 2 * EXTENDED_PARTITION_MARGIN, - rect.height() - 2 * EXTENDED_PARTITION_MARGIN - ); + QRect subRect( x + EXTENDED_PARTITION_MARGIN, + rect.y() + EXTENDED_PARTITION_MARGIN, + width - 2 * EXTENDED_PARTITION_MARGIN, + rect.height() - 2 * EXTENDED_PARTITION_MARGIN ); drawPartitions( painter, subRect, item.index ); } x += width; } - if ( !items.count() && - !modl->device()->partitionTable() ) // No disklabel or unknown + if ( !items.count() && !modl->device()->partitionTable() ) // No disklabel or unknown { int width = rect.right() - rect.x() + 1; drawSection( painter, rect, rect.x(), width, QModelIndex() ); @@ -260,13 +258,13 @@ PartitionBarsView::indexAt( const QPoint& point ) const QModelIndex -PartitionBarsView::indexAt( const QPoint &point, - const QRect &rect, - const QModelIndex& parent ) const +PartitionBarsView::indexAt( const QPoint& point, const QRect& rect, const QModelIndex& parent ) const { PartitionModel* modl = qobject_cast< PartitionModel* >( model() ); if ( !modl ) + { return QModelIndex(); + } const int totalWidth = rect.width(); auto pair = computeItemsVector( parent ); @@ -278,23 +276,24 @@ PartitionBarsView::indexAt( const QPoint &point, const auto& item = items[ row ]; int width; if ( row < items.count() - 1 ) + { width = totalWidth * ( item.size / total ); + } else - // Make sure we fill the last pixel column + // Make sure we fill the last pixel column + { width = rect.right() - x + 1; + } QRect thisItemRect( x, rect.y(), width, rect.height() ); if ( thisItemRect.contains( point ) ) { - if ( m_nestedPartitionsMode == DrawNestedPartitions && - modl->hasChildren( item.index ) ) + if ( m_nestedPartitionsMode == DrawNestedPartitions && modl->hasChildren( item.index ) ) { - QRect subRect( - x + EXTENDED_PARTITION_MARGIN, - rect.y() + EXTENDED_PARTITION_MARGIN, - width - 2 * EXTENDED_PARTITION_MARGIN, - rect.height() - 2 * EXTENDED_PARTITION_MARGIN - ); + QRect subRect( x + EXTENDED_PARTITION_MARGIN, + rect.y() + EXTENDED_PARTITION_MARGIN, + width - 2 * EXTENDED_PARTITION_MARGIN, + rect.height() - 2 * EXTENDED_PARTITION_MARGIN ); if ( subRect.contains( point ) ) { @@ -302,7 +301,7 @@ PartitionBarsView::indexAt( const QPoint &point, } return item.index; } - else // contains but no children, we win + else // contains but no children, we win { return item.index; } @@ -322,13 +321,13 @@ PartitionBarsView::visualRect( const QModelIndex& index ) const QRect -PartitionBarsView::visualRect( const QModelIndex& index, - const QRect& rect, - const QModelIndex& parent ) const +PartitionBarsView::visualRect( const QModelIndex& index, const QRect& rect, const QModelIndex& parent ) const { PartitionModel* modl = qobject_cast< PartitionModel* >( model() ); if ( !modl ) + { return QRect(); + } const int totalWidth = rect.width(); auto pair = computeItemsVector( parent ); @@ -340,29 +339,34 @@ PartitionBarsView::visualRect( const QModelIndex& index, const auto& item = items[ row ]; int width; if ( row < items.count() - 1 ) + { width = totalWidth * ( item.size / total ); + } else - // Make sure we fill the last pixel column + // Make sure we fill the last pixel column + { width = rect.right() - x + 1; + } QRect thisItemRect( x, rect.y(), width, rect.height() ); if ( item.index == index ) + { return thisItemRect; + } - if ( m_nestedPartitionsMode == DrawNestedPartitions && - modl->hasChildren( item.index ) && - index.parent() == item.index ) + if ( m_nestedPartitionsMode == DrawNestedPartitions && modl->hasChildren( item.index ) + && index.parent() == item.index ) { - QRect subRect( - x + EXTENDED_PARTITION_MARGIN, - rect.y() + EXTENDED_PARTITION_MARGIN, - width - 2 * EXTENDED_PARTITION_MARGIN, - rect.height() - 2 * EXTENDED_PARTITION_MARGIN - ); + QRect subRect( x + EXTENDED_PARTITION_MARGIN, + rect.y() + EXTENDED_PARTITION_MARGIN, + width - 2 * EXTENDED_PARTITION_MARGIN, + rect.height() - 2 * EXTENDED_PARTITION_MARGIN ); QRect candidateVisualRect = visualRect( index, subRect, item.index ); if ( !candidateVisualRect.isNull() ) + { return candidateVisualRect; + } } x += width; @@ -405,23 +409,18 @@ void PartitionBarsView::setSelectionModel( QItemSelectionModel* selectionModel ) { QAbstractItemView::setSelectionModel( selectionModel ); - connect( selectionModel, &QItemSelectionModel::selectionChanged, - this, [=] - { - viewport()->repaint(); - } ); + connect( selectionModel, &QItemSelectionModel::selectionChanged, this, [=] { viewport()->repaint(); } ); } void -PartitionBarsView::setSelectionFilter( std::function< bool ( const QModelIndex& ) > canBeSelected ) +PartitionBarsView::setSelectionFilter( std::function< bool( const QModelIndex& ) > canBeSelected ) { this->canBeSelected = canBeSelected; } -QModelIndex -PartitionBarsView::moveCursor( CursorAction, Qt::KeyboardModifiers ) +QModelIndex PartitionBarsView::moveCursor( CursorAction, Qt::KeyboardModifiers ) { return QModelIndex(); } @@ -456,7 +455,9 @@ PartitionBarsView::setSelection( const QRect& rect, QItemSelectionModel::Selecti QModelIndex eventIndex = indexAt( QPoint( x2, y2 ) ); if ( canBeSelected( eventIndex ) ) + { selectionModel()->select( eventIndex, flags ); + } viewport()->repaint(); } @@ -480,9 +481,13 @@ PartitionBarsView::mouseMoveEvent( QMouseEvent* event ) if ( oldHoveredIndex != m_hoveredIndex ) { if ( m_hoveredIndex.isValid() && !canBeSelected( m_hoveredIndex ) ) + { QGuiApplication::setOverrideCursor( Qt::ForbiddenCursor ); + } else + { QGuiApplication::restoreOverrideCursor(); + } viewport()->repaint(); } @@ -506,16 +511,20 @@ PartitionBarsView::mousePressEvent( QMouseEvent* event ) { QModelIndex candidateIndex = indexAt( event->pos() ); if ( canBeSelected( candidateIndex ) ) + { QAbstractItemView::mousePressEvent( event ); + } else + { event->accept(); + } } void PartitionBarsView::updateGeometries() { - updateGeometry(); //get a new rect() for redrawing all the labels + updateGeometry(); //get a new rect() for redrawing all the labels } @@ -529,11 +538,9 @@ PartitionBarsView::computeItemsVector( const QModelIndex& parent ) const for ( int row = 0; row < count; ++row ) { QModelIndex index = model()->index( row, 0, parent ); - if ( m_nestedPartitionsMode == NoNestedPartitions && - model()->hasChildren( index ) ) + if ( m_nestedPartitionsMode == NoNestedPartitions && model()->hasChildren( index ) ) { - QPair< QVector< PartitionBarsView::Item >, qreal > childVect = - computeItemsVector( index ); + QPair< QVector< PartitionBarsView::Item >, qreal > childVect = computeItemsVector( index ); items += childVect.first; total += childVect.second; } @@ -552,8 +559,9 @@ PartitionBarsView::computeItemsVector( const QModelIndex& parent ) const qreal adjustedTotal = total; for ( int row = 0; row < count; ++row ) { - if ( items[ row ].size < 0.01 * total ) // If this item is smaller than 1% of everything, - { // force its width to 1%. + if ( items[ row ].size < 0.01 * total ) // If this item is smaller than 1% of everything, + { + // force its width to 1%. adjustedTotal -= items[ row ].size; items[ row ].size = 0.01 * total; adjustedTotal += items[ row ].size; @@ -562,4 +570,3 @@ PartitionBarsView::computeItemsVector( const QModelIndex& parent ) const return qMakePair( items, adjustedTotal ); } - diff --git a/src/modules/partition/gui/PartitionBarsView.h b/src/modules/partition/gui/PartitionBarsView.h index 0d5051b41f..1f0100ffa6 100644 --- a/src/modules/partition/gui/PartitionBarsView.h +++ b/src/modules/partition/gui/PartitionBarsView.h @@ -1,8 +1,9 @@ /* === This file is part of Calamares - === * - * Copyright 2014, Aurélien Gâteau - * Copyright 2015-2016, Teo Mrnjavac - * Copyright 2017, Adriaan de Groot + * SPDX-FileCopyrightText: 2014 Aurélien Gâteau + * SPDX-FileCopyrightText: 2015-2016 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/partition/gui/PartitionDialogHelpers.cpp b/src/modules/partition/gui/PartitionDialogHelpers.cpp index 112d12ceac..8ab1f38d7d 100644 --- a/src/modules/partition/gui/PartitionDialogHelpers.cpp +++ b/src/modules/partition/gui/PartitionDialogHelpers.cpp @@ -1,8 +1,9 @@ /* === This file is part of Calamares - === * - * Copyright 2014, Aurélien Gâteau - * Copyright 2016, Teo Mrnjavac - * Copyright 2018-2019 Adriaan de Groot + * SPDX-FileCopyrightText: 2014 Aurélien Gâteau + * SPDX-FileCopyrightText: 2016 Teo Mrnjavac + * SPDX-FileCopyrightText: 2018-2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -32,16 +33,18 @@ QStringList standardMountPoints() { - QStringList mountPoints{ "/", "/boot", "/home", "/opt", "/srv", "/usr", "/var" }; + QStringList mountPoints { "/", "/boot", "/home", "/opt", "/srv", "/usr", "/var" }; if ( PartUtils::isEfiSystem() ) + { mountPoints << Calamares::JobQueue::instance()->globalStorage()->value( "efiSystemPartition" ).toString(); + } mountPoints.removeDuplicates(); mountPoints.sort(); return mountPoints; } void -standardMountPoints(QComboBox& combo) +standardMountPoints( QComboBox& combo ) { combo.clear(); combo.addItem( QObject::tr( "(no mount point)" ) ); @@ -49,25 +52,29 @@ standardMountPoints(QComboBox& combo) } void -standardMountPoints(QComboBox& combo, const QString& selected) +standardMountPoints( QComboBox& combo, const QString& selected ) { standardMountPoints( combo ); setSelectedMountPoint( combo, selected ); } QString -selectedMountPoint(QComboBox& combo) +selectedMountPoint( QComboBox& combo ) { if ( combo.currentIndex() == 0 ) + { return QString(); + } return combo.currentText(); } void -setSelectedMountPoint(QComboBox& combo, const QString& selected) +setSelectedMountPoint( QComboBox& combo, const QString& selected ) { if ( selected.isEmpty() ) + { combo.setCurrentIndex( 0 ); // (no mount point) + } else { for ( int i = 0; i < combo.count(); ++i ) @@ -77,7 +84,7 @@ setSelectedMountPoint(QComboBox& combo, const QString& selected) return; } combo.addItem( selected ); - combo.setCurrentIndex( combo.count() - 1); + combo.setCurrentIndex( combo.count() - 1 ); } } @@ -89,8 +96,9 @@ flagsFromList( const QListWidget& list ) for ( int i = 0; i < list.count(); i++ ) if ( list.item( i )->checkState() == Qt::Checked ) - flags |= static_cast< PartitionTable::Flag >( - list.item( i )->data( Qt::UserRole ).toInt() ); + { + flags |= static_cast< PartitionTable::Flag >( list.item( i )->data( Qt::UserRole ).toInt() ); + } return flags; } @@ -108,9 +116,7 @@ setFlagList( QListWidget& list, PartitionTable::Flags available, PartitionTable: list.addItem( item ); item->setFlags( Qt::ItemIsUserCheckable | Qt::ItemIsEnabled ); item->setData( Qt::UserRole, f ); - item->setCheckState( ( checked & f ) ? - Qt::Checked : - Qt::Unchecked ); + item->setCheckState( ( checked & f ) ? Qt::Checked : Qt::Unchecked ); } f <<= 1; diff --git a/src/modules/partition/gui/PartitionDialogHelpers.h b/src/modules/partition/gui/PartitionDialogHelpers.h index 5941429938..fd485a6906 100644 --- a/src/modules/partition/gui/PartitionDialogHelpers.h +++ b/src/modules/partition/gui/PartitionDialogHelpers.h @@ -1,8 +1,9 @@ /* === This file is part of Calamares - === * - * Copyright 2014, Aurélien Gâteau - * Copyright 2016, Teo Mrnjavac - * Copyright 2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2014 Aurélien Gâteau + * SPDX-FileCopyrightText: 2016 Teo Mrnjavac + * SPDX-FileCopyrightText: 2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -54,10 +55,18 @@ void standardMountPoints( QComboBox&, const QString& selected ); * to blank, to allow easy detection of no-mount-selected. */ QString selectedMountPoint( QComboBox& combo ); -static inline QString selectedMountPoint(QComboBox* combo) { return selectedMountPoint(*combo); } +static inline QString +selectedMountPoint( QComboBox* combo ) +{ + return selectedMountPoint( *combo ); +} void setSelectedMountPoint( QComboBox& combo, const QString& selected ); -static inline void setSelectedMountPoint(QComboBox* combo, const QString& selected) { setSelectedMountPoint( *combo, selected); } +static inline void +setSelectedMountPoint( QComboBox* combo, const QString& selected ) +{ + setSelectedMountPoint( *combo, selected ); +} /** * Get the flags that have been checked in the list widget. diff --git a/src/modules/partition/gui/PartitionLabelsView.cpp b/src/modules/partition/gui/PartitionLabelsView.cpp index 270710e028..e42e9de890 100644 --- a/src/modules/partition/gui/PartitionLabelsView.cpp +++ b/src/modules/partition/gui/PartitionLabelsView.cpp @@ -1,7 +1,8 @@ /* === This file is part of Calamares - === * - * Copyright 2014, Aurélien Gâteau - * Copyright 2015-2016, Teo Mrnjavac + * SPDX-FileCopyrightText: 2014 Aurélien Gâteau + * SPDX-FileCopyrightText: 2015-2016 Teo Mrnjavac + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -19,8 +20,8 @@ #include "PartitionLabelsView.h" -#include "core/PartitionModel.h" #include "core/ColorUtils.h" +#include "core/PartitionModel.h" #include "utils/CalamaresUtilsGui.h" #include "utils/Logger.h" @@ -39,8 +40,7 @@ using CalamaresUtils::operator""_MiB; static const int LAYOUT_MARGIN = 4; -static const int LABEL_PARTITION_SQUARE_MARGIN = - qMax( QFontMetrics( CalamaresUtils::defaultFont() ).ascent() - 2, 18 ); +static const int LABEL_PARTITION_SQUARE_MARGIN = qMax( QFontMetrics( CalamaresUtils::defaultFont() ).ascent() - 2, 18 ); static const int LABELS_MARGIN = LABEL_PARTITION_SQUARE_MARGIN; static const int CORNER_RADIUS = 2; @@ -63,14 +63,12 @@ PartitionLabelsView::PartitionLabelsView( QWidget* parent ) setFrameStyle( QFrame::NoFrame ); setSelectionBehavior( QAbstractItemView::SelectRows ); setSelectionMode( QAbstractItemView::SingleSelection ); - this->setObjectName("partitionLabel"); + this->setObjectName( "partitionLabel" ); setMouseTracking( true ); } -PartitionLabelsView::~PartitionLabelsView() -{ -} +PartitionLabelsView::~PartitionLabelsView() {} QSize @@ -80,7 +78,6 @@ PartitionLabelsView::minimumSizeHint() const } - QSize PartitionLabelsView::sizeHint() const { @@ -150,7 +147,9 @@ PartitionLabelsView::getIndexesToDraw( const QModelIndex& parent ) const QAbstractItemModel* modl = model(); if ( !modl ) + { return list; + } for ( int row = 0; row < modl->rowCount( parent ); ++row ) { @@ -160,15 +159,21 @@ PartitionLabelsView::getIndexesToDraw( const QModelIndex& parent ) const // To save vertical space, we choose to hide short instances of free space. // Arbitrary limit: 10MiB. const qint64 maxHiddenB = 10_MiB; - if ( index.data( PartitionModel::IsFreeSpaceRole ).toBool() && - index.data( PartitionModel::SizeRole ).toLongLong() < maxHiddenB ) + if ( index.data( PartitionModel::IsFreeSpaceRole ).toBool() + && index.data( PartitionModel::SizeRole ).toLongLong() < maxHiddenB ) + { continue; + } if ( !modl->hasChildren( index ) || !m_extendedPartitionHidden ) + { list.append( index ); + } if ( modl->hasChildren( index ) ) + { list.append( getIndexesToDraw( index ) ); + } } return list; } @@ -189,64 +194,74 @@ PartitionLabelsView::buildTexts( const QModelIndex& index ) const } else { - QString mountPoint = index.sibling( index.row(), - PartitionModel::MountPointColumn ) - .data().toString(); + QString mountPoint = index.sibling( index.row(), PartitionModel::MountPointColumn ).data().toString(); if ( mountPoint == "/" ) - firstLine = m_customNewRootLabel.isEmpty() ? - tr( "Root" ) : - m_customNewRootLabel; + { + firstLine = m_customNewRootLabel.isEmpty() ? tr( "Root" ) : m_customNewRootLabel; + } else if ( mountPoint == "/home" ) + { firstLine = tr( "Home" ); + } else if ( mountPoint == "/boot" ) + { firstLine = tr( "Boot" ); - else if ( mountPoint.contains( "/efi" ) && - index.data( PartitionModel::FileSystemTypeRole ).toInt() == FileSystem::Fat32 ) + } + else if ( mountPoint.contains( "/efi" ) + && index.data( PartitionModel::FileSystemTypeRole ).toInt() == FileSystem::Fat32 ) + { firstLine = tr( "EFI system" ); + } else if ( index.data( PartitionModel::FileSystemTypeRole ).toInt() == FileSystem::LinuxSwap ) + { firstLine = tr( "Swap" ); + } else if ( !mountPoint.isEmpty() ) + { firstLine = tr( "New partition for %1" ).arg( mountPoint ); + } else + { firstLine = tr( "New partition" ); + } } } else if ( index.data( PartitionModel::OsproberNameRole ).toString().isEmpty() ) { firstLine = index.data().toString(); if ( firstLine.startsWith( "/dev/" ) ) - firstLine.remove( 0, 5 ); // "/dev/" + { + firstLine.remove( 0, 5 ); // "/dev/" + } } else + { firstLine = index.data( PartitionModel::OsproberNameRole ).toString(); + } - if ( index.data( PartitionModel::IsFreeSpaceRole ).toBool() || - index.data( PartitionModel::FileSystemTypeRole ).toInt() == FileSystem::Extended ) - secondLine = index.sibling( index.row(), - PartitionModel::SizeColumn ) - .data().toString(); + if ( index.data( PartitionModel::IsFreeSpaceRole ).toBool() + || index.data( PartitionModel::FileSystemTypeRole ).toInt() == FileSystem::Extended ) + { + secondLine = index.sibling( index.row(), PartitionModel::SizeColumn ).data().toString(); + } else //: size[number] filesystem[name] secondLine = tr( "%1 %2" ) - .arg( index.sibling( index.row(), - PartitionModel::SizeColumn ) - .data().toString() ) - .arg( index.sibling( index.row(), - PartitionModel::FileSystemColumn ) - .data().toString() ); + .arg( index.sibling( index.row(), PartitionModel::SizeColumn ).data().toString() ) + .arg( index.sibling( index.row(), PartitionModel::FileSystemColumn ).data().toString() ); return { firstLine, secondLine }; } void -PartitionLabelsView::drawLabels( QPainter* painter, - const QRect& rect, - const QModelIndex& parent ) +PartitionLabelsView::drawLabels( QPainter* painter, const QRect& rect, const QModelIndex& parent ) { PartitionModel* modl = qobject_cast< PartitionModel* >( model() ); if ( !modl ) + { return; + } const QModelIndexList indexesToDraw = getIndexesToDraw( parent ); @@ -260,20 +275,19 @@ PartitionLabelsView::drawLabels( QPainter* painter, QColor labelColor = index.data( Qt::DecorationRole ).value< QColor >(); - if ( label_x + labelSize.width() > rect.width() ) //wrap to new line if overflow + if ( label_x + labelSize.width() > rect.width() ) //wrap to new line if overflow { label_x = rect.x(); label_y += labelSize.height() + labelSize.height() / 4; } // Draw hover - if ( selectionMode() != QAbstractItemView::NoSelection && // no hover without selection - m_hoveredIndex.isValid() && - index == m_hoveredIndex ) + if ( selectionMode() != QAbstractItemView::NoSelection && // no hover without selection + m_hoveredIndex.isValid() && index == m_hoveredIndex ) { painter->save(); QRect labelRect( QPoint( label_x, label_y ), labelSize ); - labelRect.adjust( 0, -LAYOUT_MARGIN, 0, -2*LAYOUT_MARGIN ); + labelRect.adjust( 0, -LAYOUT_MARGIN, 0, -2 * LAYOUT_MARGIN ); painter->translate( 0.5, 0.5 ); QRect hoverRect = labelRect.adjusted( 0, 0, -1, -1 ); painter->setBrush( QPalette().window().color().lighter( 102 ) ); @@ -285,19 +299,15 @@ PartitionLabelsView::drawLabels( QPainter* painter, } // Is this element the selected one? - bool sel = selectionMode() != QAbstractItemView::NoSelection && - index.isValid() && - selectionModel() && - !selectionModel()->selectedIndexes().isEmpty() && - selectionModel()->selectedIndexes().first() == index; + bool sel = selectionMode() != QAbstractItemView::NoSelection && index.isValid() && selectionModel() + && !selectionModel()->selectedIndexes().isEmpty() && selectionModel()->selectedIndexes().first() == index; drawLabel( painter, texts, labelColor, QPoint( label_x, label_y ), sel ); label_x += labelSize.width() + LABELS_MARGIN; } - if ( !modl->rowCount() && - !modl->device()->partitionTable() ) // No disklabel or unknown + if ( !modl->rowCount() && !modl->device()->partitionTable() ) // No disklabel or unknown { QStringList texts = buildUnknownDisklabelTexts( modl->device() ); QColor labelColor = ColorUtils::unknownDisklabelColor(); @@ -311,7 +321,9 @@ PartitionLabelsView::sizeForAllLabels( int maxLineWidth ) const { PartitionModel* modl = qobject_cast< PartitionModel* >( model() ); if ( !modl ) + { return QSize(); + } const QModelIndexList indexesToDraw = getIndexesToDraw( QModelIndex() ); @@ -337,15 +349,12 @@ PartitionLabelsView::sizeForAllLabels( int maxLineWidth ) const singleLabelHeight = qMax( singleLabelHeight, labelSize.height() ); } - if ( !modl->rowCount() && - !modl->device()->partitionTable() ) // Unknown or no disklabel + if ( !modl->rowCount() && !modl->device()->partitionTable() ) // Unknown or no disklabel { - singleLabelHeight = sizeForLabel( buildUnknownDisklabelTexts( modl->device() ) ) - .height(); + singleLabelHeight = sizeForLabel( buildUnknownDisklabelTexts( modl->device() ) ).height(); } - int totalHeight = numLines * singleLabelHeight + - ( numLines - 1 ) * singleLabelHeight / 4; //spacings + int totalHeight = numLines * singleLabelHeight + ( numLines - 1 ) * singleLabelHeight / 4; //spacings return QSize( maxLineWidth, totalHeight ); } @@ -363,7 +372,7 @@ PartitionLabelsView::sizeForLabel( const QStringList& text ) const vertOffset += textSize.height(); width = qMax( width, textSize.width() ); } - width += LABEL_PARTITION_SQUARE_MARGIN; //for the color square + width += LABEL_PARTITION_SQUARE_MARGIN; //for the color square return QSize( width, vertOffset ); } @@ -381,22 +390,21 @@ PartitionLabelsView::drawLabel( QPainter* painter, for ( const QString& textLine : text ) { QSize textSize = painter->fontMetrics().size( Qt::TextSingleLine, textLine ); - painter->drawText( pos.x()+LABEL_PARTITION_SQUARE_MARGIN, - pos.y() + vertOffset + textSize.height() / 2, - textLine ); + painter->drawText( + pos.x() + LABEL_PARTITION_SQUARE_MARGIN, pos.y() + vertOffset + textSize.height() / 2, textLine ); vertOffset += textSize.height(); painter->setPen( Qt::gray ); width = qMax( width, textSize.width() ); } - QRect partitionSquareRect( pos.x(), - pos.y() - 3, - LABEL_PARTITION_SQUARE_MARGIN - 5, - LABEL_PARTITION_SQUARE_MARGIN - 5 ); + QRect partitionSquareRect( + pos.x(), pos.y() - 3, LABEL_PARTITION_SQUARE_MARGIN - 5, LABEL_PARTITION_SQUARE_MARGIN - 5 ); drawPartitionSquare( painter, partitionSquareRect, color ); if ( selected ) + { drawSelectionSquare( painter, partitionSquareRect.adjusted( 2, 2, -2, -2 ), color ); + } painter->setPen( Qt::black ); } @@ -407,7 +415,9 @@ PartitionLabelsView::indexAt( const QPoint& point ) const { PartitionModel* modl = qobject_cast< PartitionModel* >( model() ); if ( !modl ) + { return QModelIndex(); + } const QModelIndexList indexesToDraw = getIndexesToDraw( QModelIndex() ); @@ -420,7 +430,7 @@ PartitionLabelsView::indexAt( const QPoint& point ) const QSize labelSize = sizeForLabel( texts ); - if ( label_x + labelSize.width() > rect.width() ) //wrap to new line if overflow + if ( label_x + labelSize.width() > rect.width() ) //wrap to new line if overflow { label_x = rect.x(); label_y += labelSize.height() + labelSize.height() / 4; @@ -428,7 +438,9 @@ PartitionLabelsView::indexAt( const QPoint& point ) const QRect labelRect( QPoint( label_x, label_y ), labelSize ); if ( labelRect.contains( point ) ) + { return index; + } label_x += labelSize.width() + LABELS_MARGIN; } @@ -442,7 +454,9 @@ PartitionLabelsView::visualRect( const QModelIndex& idx ) const { PartitionModel* modl = qobject_cast< PartitionModel* >( model() ); if ( !modl ) + { return QRect(); + } const QModelIndexList indexesToDraw = getIndexesToDraw( QModelIndex() ); @@ -455,14 +469,16 @@ PartitionLabelsView::visualRect( const QModelIndex& idx ) const QSize labelSize = sizeForLabel( texts ); - if ( label_x + labelSize.width() > rect.width() ) //wrap to new line if overflow + if ( label_x + labelSize.width() > rect.width() ) //wrap to new line if overflow { label_x = rect.x(); label_y += labelSize.height() + labelSize.height() / 4; } if ( idx.isValid() && idx == index ) + { return QRect( QPoint( label_x, label_y ), labelSize ); + } label_x += labelSize.width() + LABELS_MARGIN; } @@ -514,11 +530,7 @@ void PartitionLabelsView::setSelectionModel( QItemSelectionModel* selectionModel ) { QAbstractItemView::setSelectionModel( selectionModel ); - connect( selectionModel, &QItemSelectionModel::selectionChanged, - this, [=] - { - viewport()->repaint(); - } ); + connect( selectionModel, &QItemSelectionModel::selectionChanged, this, [=] { viewport()->repaint(); } ); } @@ -560,7 +572,9 @@ PartitionLabelsView::setSelection( const QRect& rect, QItemSelectionModel::Selec { QModelIndex eventIndex = indexAt( rect.topLeft() ); if ( m_canBeSelected( eventIndex ) ) + { selectionModel()->select( eventIndex, flags ); + } } @@ -582,9 +596,13 @@ PartitionLabelsView::mouseMoveEvent( QMouseEvent* event ) if ( oldHoveredIndex != m_hoveredIndex ) { if ( m_hoveredIndex.isValid() && !m_canBeSelected( m_hoveredIndex ) ) + { QGuiApplication::setOverrideCursor( Qt::ForbiddenCursor ); + } else + { QGuiApplication::restoreOverrideCursor(); + } viewport()->repaint(); } @@ -610,14 +628,18 @@ PartitionLabelsView::mousePressEvent( QMouseEvent* event ) { QModelIndex candidateIndex = indexAt( event->pos() ); if ( m_canBeSelected( candidateIndex ) ) + { QAbstractItemView::mousePressEvent( event ); + } else + { event->accept(); + } } void PartitionLabelsView::updateGeometries() { - updateGeometry(); //get a new rect() for redrawing all the labels + updateGeometry(); //get a new rect() for redrawing all the labels } diff --git a/src/modules/partition/gui/PartitionLabelsView.h b/src/modules/partition/gui/PartitionLabelsView.h index e461a8dd8d..45b2b3407c 100644 --- a/src/modules/partition/gui/PartitionLabelsView.h +++ b/src/modules/partition/gui/PartitionLabelsView.h @@ -1,8 +1,9 @@ /* === This file is part of Calamares - === * - * Copyright 2014, Aurélien Gâteau - * Copyright 2015-2016, Teo Mrnjavac - * Copyright 2017, Adriaan de Groot + * SPDX-FileCopyrightText: 2014 Aurélien Gâteau + * SPDX-FileCopyrightText: 2015-2016 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -79,8 +80,7 @@ protected slots: void drawLabels( QPainter* painter, const QRect& rect, const QModelIndex& parent ); QSize sizeForAllLabels( int maxLineWidth ) const; QSize sizeForLabel( const QStringList& text ) const; - void drawLabel( QPainter* painter, const QStringList& text, const QColor& color, - const QPoint& pos , bool selected ); + void drawLabel( QPainter* painter, const QStringList& text, const QColor& color, const QPoint& pos, bool selected ); QModelIndexList getIndexesToDraw( const QModelIndex& parent ) const; QStringList buildTexts( const QModelIndex& index ) const; @@ -91,4 +91,4 @@ protected slots: QPersistentModelIndex m_hoveredIndex; }; -#endif // PARTITIONLABELSVIEW_H +#endif // PARTITIONLABELSVIEW_H diff --git a/src/modules/partition/gui/PartitionPage.cpp b/src/modules/partition/gui/PartitionPage.cpp index d2ad49c23f..3b73f061ee 100644 --- a/src/modules/partition/gui/PartitionPage.cpp +++ b/src/modules/partition/gui/PartitionPage.cpp @@ -1,11 +1,12 @@ /* === This file is part of Calamares - === * - * Copyright 2014, Aurélien Gâteau - * Copyright 2015-2016, Teo Mrnjavac - * Copyright 2018-2019, Adriaan de Groot - * Copyright 2018, Andrius Štikonas - * Copyright 2018, Caio Jordão Carvalho - * Copyright 2019, Collabora Ltd + * SPDX-FileCopyrightText: 2014 Aurélien Gâteau + * SPDX-FileCopyrightText: 2015-2016 Teo Mrnjavac + * SPDX-FileCopyrightText: 2018-2019 Adriaan de Groot + * SPDX-FileCopyrightText: 2018 Andrius Štikonas + * SPDX-FileCopyrightText: 2018 Caio Jordão Carvalho + * SPDX-FileCopyrightText: 2019 Collabora Ltd + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -26,19 +27,19 @@ // Local #include "core/BootLoaderModel.h" #include "core/DeviceModel.h" +#include "core/KPMHelpers.h" +#include "core/PartUtils.h" #include "core/PartitionCoreModule.h" #include "core/PartitionInfo.h" #include "core/PartitionModel.h" -#include "core/PartUtils.h" -#include "core/KPMHelpers.h" #include "gui/CreatePartitionDialog.h" #include "gui/CreateVolumeGroupDialog.h" #include "gui/EditExistingPartitionDialog.h" #include "gui/ResizeVolumeGroupDialog.h" #include "gui/ScanningDialog.h" -#include "ui_PartitionPage.h" #include "ui_CreatePartitionTableDialog.h" +#include "ui_PartitionPage.h" #include "GlobalStorage.h" #include "JobQueue.h" @@ -58,34 +59,34 @@ #include // Qt +#include +#include #include #include #include #include -#include -#include #include PartitionPage::PartitionPage( PartitionCoreModule* core, QWidget* parent ) : QWidget( parent ) , m_ui( new Ui_PartitionPage ) , m_core( core ) - , m_lastSelectedBootLoaderIndex(-1) + , m_lastSelectedBootLoaderIndex( -1 ) , m_isEfi( false ) { m_isEfi = PartUtils::isEfiSystem(); m_ui->setupUi( this ); m_ui->partitionLabelsView->setVisible( - Calamares::JobQueue::instance()->globalStorage()-> - value( "alwaysShowPartitionLabels" ).toBool() ); + Calamares::JobQueue::instance()->globalStorage()->value( "alwaysShowPartitionLabels" ).toBool() ); m_ui->deviceComboBox->setModel( m_core->deviceModel() ); m_ui->bootLoaderComboBox->setModel( m_core->bootLoaderModel() ); - connect( m_core->bootLoaderModel(), &QAbstractItemModel::modelReset, this, &PartitionPage::restoreSelectedBootLoader ); - PartitionBarsView::NestedPartitionsMode mode = Calamares::JobQueue::instance()->globalStorage()-> - value( "drawNestedPartitions" ).toBool() ? - PartitionBarsView::DrawNestedPartitions : - PartitionBarsView::NoNestedPartitions; + connect( + m_core->bootLoaderModel(), &QAbstractItemModel::modelReset, this, &PartitionPage::restoreSelectedBootLoader ); + PartitionBarsView::NestedPartitionsMode mode + = Calamares::JobQueue::instance()->globalStorage()->value( "drawNestedPartitions" ).toBool() + ? PartitionBarsView::DrawNestedPartitions + : PartitionBarsView::NoNestedPartitions; m_ui->partitionBarsView->setNestedPartitionsMode( mode ); updateButtons(); updateBootLoaderInstallPath(); @@ -93,23 +94,35 @@ PartitionPage::PartitionPage( PartitionCoreModule* core, QWidget* parent ) updateFromCurrentDevice(); connect( m_ui->deviceComboBox, &QComboBox::currentTextChanged, this, &PartitionPage::updateFromCurrentDevice ); - connect( m_ui->bootLoaderComboBox, QOverload::of(&QComboBox::activated), this, &PartitionPage::updateSelectedBootLoaderIndex ); - connect( m_ui->bootLoaderComboBox, &QComboBox::currentTextChanged, this, &PartitionPage::updateBootLoaderInstallPath ); + connect( m_ui->bootLoaderComboBox, + QOverload< int >::of( &QComboBox::activated ), + this, + &PartitionPage::updateSelectedBootLoaderIndex ); + connect( + m_ui->bootLoaderComboBox, &QComboBox::currentTextChanged, this, &PartitionPage::updateBootLoaderInstallPath ); connect( m_core, &PartitionCoreModule::isDirtyChanged, m_ui->revertButton, &QWidget::setEnabled ); - connect( m_ui->partitionTreeView, &QAbstractItemView::doubleClicked, this, &PartitionPage::onPartitionViewActivated ); + connect( + m_ui->partitionTreeView, &QAbstractItemView::doubleClicked, this, &PartitionPage::onPartitionViewActivated ); connect( m_ui->revertButton, &QAbstractButton::clicked, this, &PartitionPage::onRevertClicked ); connect( m_ui->newVolumeGroupButton, &QAbstractButton::clicked, this, &PartitionPage::onNewVolumeGroupClicked ); - connect( m_ui->resizeVolumeGroupButton, &QAbstractButton::clicked, this, &PartitionPage::onResizeVolumeGroupClicked ); - connect( m_ui->deactivateVolumeGroupButton, &QAbstractButton::clicked, this, &PartitionPage::onDeactivateVolumeGroupClicked ); - connect( m_ui->removeVolumeGroupButton, &QAbstractButton::clicked, this, &PartitionPage::onRemoveVolumeGroupClicked ); - connect( m_ui->newPartitionTableButton, &QAbstractButton::clicked, this, &PartitionPage::onNewPartitionTableClicked ); + connect( + m_ui->resizeVolumeGroupButton, &QAbstractButton::clicked, this, &PartitionPage::onResizeVolumeGroupClicked ); + connect( m_ui->deactivateVolumeGroupButton, + &QAbstractButton::clicked, + this, + &PartitionPage::onDeactivateVolumeGroupClicked ); + connect( + m_ui->removeVolumeGroupButton, &QAbstractButton::clicked, this, &PartitionPage::onRemoveVolumeGroupClicked ); + connect( + m_ui->newPartitionTableButton, &QAbstractButton::clicked, this, &PartitionPage::onNewPartitionTableClicked ); connect( m_ui->createButton, &QAbstractButton::clicked, this, &PartitionPage::onCreateClicked ); connect( m_ui->editButton, &QAbstractButton::clicked, this, &PartitionPage::onEditClicked ); connect( m_ui->deleteButton, &QAbstractButton::clicked, this, &PartitionPage::onDeleteClicked ); - if ( m_isEfi ) { + if ( m_isEfi ) + { m_ui->bootLoaderComboBox->hide(); m_ui->label_3->hide(); } @@ -117,14 +130,13 @@ PartitionPage::PartitionPage( PartitionCoreModule* core, QWidget* parent ) CALAMARES_RETRANSLATE( m_ui->retranslateUi( this ); ) } -PartitionPage::~PartitionPage() -{ -} +PartitionPage::~PartitionPage() {} void PartitionPage::updateButtons() { - bool create = false, createTable = false, edit = false, del = false, currentDeviceIsVG = false, isDeactivable = false; + bool create = false, createTable = false, edit = false, del = false, currentDeviceIsVG = false, + isDeactivable = false; bool isRemovable = false, isVGdeactivated = false; QModelIndex index = m_ui->partitionTreeView->currentIndex(); @@ -157,16 +169,20 @@ PartitionPage::updateButtons() Device* device = nullptr; QModelIndex deviceIndex = m_core->deviceModel()->index( m_ui->deviceComboBox->currentIndex(), 0 ); if ( deviceIndex.isValid() ) + { device = m_core->deviceModel()->deviceForIndex( deviceIndex ); + } if ( !device ) + { cWarning() << "Device for updateButtons is nullptr"; + } else if ( device->type() != Device::Type::LVM_Device ) { createTable = true; #ifdef WITH_KPMCORE4API - if ( device->type() == Device::Type::SoftwareRAID_Device && - static_cast< SoftwareRAID* >(device)->status() == SoftwareRAID::Status::Inactive ) + if ( device->type() == Device::Type::SoftwareRAID_Device + && static_cast< SoftwareRAID* >( device )->status() == SoftwareRAID::Status::Inactive ) { createTable = false; create = false; @@ -177,7 +193,7 @@ PartitionPage::updateButtons() { currentDeviceIsVG = true; - LvmDevice* lvmDevice = dynamic_cast(m_core->deviceModel()->deviceForIndex( deviceIndex )); + LvmDevice* lvmDevice = dynamic_cast< LvmDevice* >( m_core->deviceModel()->deviceForIndex( deviceIndex ) ); isDeactivable = DeactivateVolumeGroupOperation::isDeactivatable( lvmDevice ); isRemovable = RemoveVolumeGroupOperation::isRemovable( lvmDevice ); @@ -185,7 +201,9 @@ PartitionPage::updateButtons() isVGdeactivated = m_core->isVGdeactivated( lvmDevice ); if ( isVGdeactivated ) + { m_ui->revertButton->setEnabled( true ); + } } } @@ -205,14 +223,18 @@ PartitionPage::onNewPartitionTableClicked() Q_ASSERT( index.isValid() ); Device* device = m_core->deviceModel()->deviceForIndex( index ); - QPointer dlg = new QDialog( this ); + QPointer< QDialog > dlg = new QDialog( this ); Ui_CreatePartitionTableDialog ui; ui.setupUi( dlg.data() ); QString areYouSure = tr( "Are you sure you want to create a new partition table on %1?" ).arg( device->name() ); if ( PartUtils::isEfiSystem() ) + { ui.gptRadioButton->setChecked( true ); + } else + { ui.mbrRadioButton->setChecked( true ); + } ui.areYouSureLabel->setText( areYouSure ); if ( dlg->exec() == QDialog::Accepted ) @@ -231,22 +253,27 @@ PartitionPage::checkCanCreate( Device* device ) { auto table = device->partitionTable(); - if ( table->type() == PartitionTable::msdos ||table->type() == PartitionTable::msdos_sectorbased ) + if ( table->type() == PartitionTable::msdos || table->type() == PartitionTable::msdos_sectorbased ) { cDebug() << "Checking MSDOS partition" << table->numPrimaries() << "primaries, max" << table->maxPrimaries(); if ( ( table->numPrimaries() >= table->maxPrimaries() ) && !table->hasExtended() ) { - QMessageBox::warning( this, tr( "Can not create new partition" ), + QMessageBox::warning( + this, + tr( "Can not create new partition" ), tr( "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." ).arg( device->name() ).arg( table->numPrimaries() ) - ); + "Please remove one primary partition and add an extended partition, instead." ) + .arg( device->name() ) + .arg( table->numPrimaries() ) ); return false; } return true; } else + { return true; // GPT is fine + } } void @@ -260,13 +287,12 @@ PartitionPage::onNewVolumeGroupClicked() for ( const Partition* p : m_core->lvmPVs() ) if ( !m_core->isInVG( p ) ) + { availablePVs << p; + } - QPointer< CreateVolumeGroupDialog > dlg = new CreateVolumeGroupDialog( vgName, - selectedPVs, - availablePVs, - peSize, - this ); + QPointer< CreateVolumeGroupDialog > dlg + = new CreateVolumeGroupDialog( vgName, selectedPVs, availablePVs, peSize, this ); if ( dlg->exec() == QDialog::Accepted ) { @@ -282,7 +308,9 @@ PartitionPage::onNewVolumeGroupClicked() // Disable delete button if current partition was selected to be in VG // TODO: Should Calamares edit LVM PVs which are in VGs? if ( selectedPVs.contains( partition ) ) + { m_ui->deleteButton->setEnabled( false ); + } } QModelIndex deviceIndex = m_core->deviceModel()->index( m_ui->deviceComboBox->currentIndex(), 0 ); @@ -297,7 +325,7 @@ PartitionPage::onNewVolumeGroupClicked() // is needed to set the current index in deviceComboBox as the previous one int previousIndex = m_ui->deviceComboBox->findData( previousIndexDeviceData, Qt::ToolTipRole ); - m_ui->deviceComboBox->setCurrentIndex( ( previousIndex < 0 ) ? 0 : previousIndex ); + m_ui->deviceComboBox->setCurrentIndex( ( previousIndex < 0 ) ? 0 : previousIndex ); updateFromCurrentDevice(); } @@ -317,15 +345,16 @@ PartitionPage::onResizeVolumeGroupClicked() for ( const Partition* p : m_core->lvmPVs() ) if ( !m_core->isInVG( p ) ) + { availablePVs << p; + } - QPointer< ResizeVolumeGroupDialog > dlg = new ResizeVolumeGroupDialog( device, - availablePVs, - selectedPVs, - this ); + QPointer< ResizeVolumeGroupDialog > dlg = new ResizeVolumeGroupDialog( device, availablePVs, selectedPVs, this ); if ( dlg->exec() == QDialog::Accepted ) + { m_core->resizeVolumeGroup( device, selectedPVs ); + } delete dlg; } @@ -368,14 +397,11 @@ PartitionPage::onCreateClicked() Q_ASSERT( partition ); if ( !checkCanCreate( model->device() ) ) + { return; + } - CreatePartitionDialog dlg( - model->device(), - partition->parent(), - nullptr, - getCurrentUsedMountpoints(), - this ); + CreatePartitionDialog dlg( model->device(), partition->parent(), nullptr, getCurrentUsedMountpoints(), this ); dlg.initFromFreeSpace( partition ); if ( dlg.exec() == QDialog::Accepted ) { @@ -395,10 +421,13 @@ PartitionPage::onEditClicked() Q_ASSERT( partition ); if ( CalamaresUtils::Partition::isPartitionNew( partition ) ) + { updatePartitionToCreate( model->device(), partition ); + } else + { editExistingPartition( model->device(), partition ); - + } } void @@ -419,18 +448,18 @@ void PartitionPage::onRevertClicked() { ScanningDialog::run( - QtConcurrent::run( [ this ] - { + QtConcurrent::run( [this] { QMutexLocker locker( &m_revertMutex ); int oldIndex = m_ui->deviceComboBox->currentIndex(); m_core->revertAllDevices(); - m_ui->deviceComboBox->setCurrentIndex( ( oldIndex < 0 ) ? 0 : oldIndex ); + m_ui->deviceComboBox->setCurrentIndex( ( oldIndex < 0 ) ? 0 : oldIndex ); updateFromCurrentDevice(); } ), - [ this ]{ + [this] { m_lastSelectedBootLoaderIndex = -1; - if( m_ui->bootLoaderComboBox->currentIndex() < 0 ) { + if ( m_ui->bootLoaderComboBox->currentIndex() < 0 ) + { m_ui->bootLoaderComboBox->setCurrentIndex( 0 ); } }, @@ -442,7 +471,9 @@ PartitionPage::onPartitionViewActivated() { QModelIndex index = m_ui->partitionTreeView->currentIndex(); if ( !index.isValid() ) + { return; + } const PartitionModel* model = static_cast< const PartitionModel* >( index.model() ); Q_ASSERT( model ); @@ -455,9 +486,13 @@ PartitionPage::onPartitionViewActivated() // action from multiple UI elements in this page, so it does not feel worth // the price. if ( CalamaresUtils::Partition::isPartitionFreeSpace( partition ) ) + { m_ui->createButton->click(); + } else + { m_ui->editButton->click(); + } } void @@ -466,11 +501,8 @@ PartitionPage::updatePartitionToCreate( Device* device, Partition* partition ) QStringList mountPoints = getCurrentUsedMountpoints(); mountPoints.removeOne( PartitionInfo::mountPoint( partition ) ); - QPointer< CreatePartitionDialog > dlg = new CreatePartitionDialog( device, - partition->parent(), - partition, - mountPoints, - this ); + QPointer< CreatePartitionDialog > dlg + = new CreatePartitionDialog( device, partition->parent(), partition, mountPoints, this ); dlg->initFromPartitionToCreate( partition ); if ( dlg->exec() == QDialog::Accepted ) { @@ -487,9 +519,12 @@ PartitionPage::editExistingPartition( Device* device, Partition* partition ) QStringList mountPoints = getCurrentUsedMountpoints(); mountPoints.removeOne( PartitionInfo::mountPoint( partition ) ); - QPointer dlg = new EditExistingPartitionDialog( device, partition, mountPoints, this ); + QPointer< EditExistingPartitionDialog > dlg + = new EditExistingPartitionDialog( device, partition, mountPoints, this ); if ( dlg->exec() == QDialog::Accepted ) + { dlg->applyChanges( m_core ); + } delete dlg; } @@ -497,11 +532,15 @@ void PartitionPage::updateBootLoaderInstallPath() { if ( m_isEfi || !m_ui->bootLoaderComboBox->isVisible() ) + { return; + } QVariant var = m_ui->bootLoaderComboBox->currentData( BootLoaderModel::BootLoaderPathRole ); if ( !var.isValid() ) + { return; + } cDebug() << "PartitionPage::updateBootLoaderInstallPath" << var.toString(); m_core->setBootLoaderInstallPath( var.toString() ); } @@ -516,7 +555,7 @@ PartitionPage::updateSelectedBootLoaderIndex() void PartitionPage::restoreSelectedBootLoader() { - Calamares::restoreSelectedBootLoader( *(m_ui->bootLoaderComboBox), m_core->bootLoaderInstallPath() ); + Calamares::restoreSelectedBootLoader( *( m_ui->bootLoaderComboBox ), m_core->bootLoaderInstallPath() ); } @@ -525,13 +564,17 @@ PartitionPage::updateFromCurrentDevice() { QModelIndex index = m_core->deviceModel()->index( m_ui->deviceComboBox->currentIndex(), 0 ); if ( !index.isValid() ) + { return; + } Device* device = m_core->deviceModel()->deviceForIndex( index ); QAbstractItemModel* oldModel = m_ui->partitionTreeView->model(); if ( oldModel ) + { disconnect( oldModel, nullptr, this, nullptr ); + } PartitionModel* model = m_core->partitionModelForDevice( device ); m_ui->partitionBarsView->setModel( model ); @@ -540,10 +583,8 @@ PartitionPage::updateFromCurrentDevice() m_ui->partitionTreeView->expandAll(); // Make all views use the same selection model. - if ( m_ui->partitionBarsView->selectionModel() != - m_ui->partitionTreeView->selectionModel() || - m_ui->partitionBarsView->selectionModel() != - m_ui->partitionLabelsView->selectionModel() ) + if ( m_ui->partitionBarsView->selectionModel() != m_ui->partitionTreeView->selectionModel() + || m_ui->partitionBarsView->selectionModel() != m_ui->partitionLabelsView->selectionModel() ) { // Tree view QItemSelectionModel* selectionModel = m_ui->partitionTreeView->selectionModel(); @@ -559,14 +600,17 @@ PartitionPage::updateFromCurrentDevice() // This is necessary because even with the same selection model it might happen that // a !=0 column is selected in the tree view, which for some reason doesn't trigger a // timely repaint in the bars view. - connect( m_ui->partitionBarsView->selectionModel(), &QItemSelectionModel::currentChanged, - this, [=] - { - QModelIndex selectedIndex = m_ui->partitionBarsView->selectionModel()->currentIndex(); - selectedIndex = selectedIndex.sibling( selectedIndex.row(), 0 ); - m_ui->partitionBarsView->setCurrentIndex( selectedIndex ); - m_ui->partitionLabelsView->setCurrentIndex( selectedIndex ); - }, Qt::UniqueConnection ); + connect( + m_ui->partitionBarsView->selectionModel(), + &QItemSelectionModel::currentChanged, + this, + [=] { + QModelIndex selectedIndex = m_ui->partitionBarsView->selectionModel()->currentIndex(); + selectedIndex = selectedIndex.sibling( selectedIndex.row(), 0 ); + m_ui->partitionBarsView->setCurrentIndex( selectedIndex ); + m_ui->partitionLabelsView->setCurrentIndex( selectedIndex ); + }, + Qt::UniqueConnection ); // Must be done here because we need to have a model set to define // individual column resize mode @@ -577,11 +621,9 @@ PartitionPage::updateFromCurrentDevice() updateButtons(); // Establish connection here because selection model is destroyed when // model changes - connect( m_ui->partitionTreeView->selectionModel(), &QItemSelectionModel::currentChanged, - [ this ]( const QModelIndex&, const QModelIndex& ) - { - updateButtons(); - } ); + connect( m_ui->partitionTreeView->selectionModel(), + &QItemSelectionModel::currentChanged, + [this]( const QModelIndex&, const QModelIndex& ) { updateButtons(); } ); connect( model, &QAbstractItemModel::modelReset, this, &PartitionPage::onPartitionModelReset ); } @@ -597,7 +639,8 @@ void PartitionPage::updateBootLoaderIndex() { // set bootloader back to user selected index - if ( m_lastSelectedBootLoaderIndex >= 0 && m_ui->bootLoaderComboBox->count() ) { + if ( m_lastSelectedBootLoaderIndex >= 0 && m_ui->bootLoaderComboBox->count() ) + { m_ui->bootLoaderComboBox->setCurrentIndex( m_lastSelectedBootLoaderIndex ); } } @@ -605,10 +648,11 @@ PartitionPage::updateBootLoaderIndex() QStringList PartitionPage::getCurrentUsedMountpoints() { - QModelIndex index = m_core->deviceModel()->index( - m_ui->deviceComboBox->currentIndex(), 0 ); + QModelIndex index = m_core->deviceModel()->index( m_ui->deviceComboBox->currentIndex(), 0 ); if ( !index.isValid() ) + { return QStringList(); + } Device* device = m_core->deviceModel()->deviceForIndex( index ); QStringList mountPoints; @@ -617,7 +661,9 @@ PartitionPage::getCurrentUsedMountpoints() { const QString& mountPoint = PartitionInfo::mountPoint( partition ); if ( !mountPoint.isEmpty() ) + { mountPoints << mountPoint; + } } return mountPoints; @@ -630,7 +676,7 @@ PartitionPage::selectedDeviceIndex() } void -PartitionPage::selectDeviceByIndex ( int index ) +PartitionPage::selectDeviceByIndex( int index ) { - m_ui->deviceComboBox->setCurrentIndex( index ); + m_ui->deviceComboBox->setCurrentIndex( index ); } diff --git a/src/modules/partition/gui/PartitionPage.h b/src/modules/partition/gui/PartitionPage.h index e8a96a4cf8..d23879e15c 100644 --- a/src/modules/partition/gui/PartitionPage.h +++ b/src/modules/partition/gui/PartitionPage.h @@ -1,8 +1,9 @@ /* === This file is part of Calamares - === * - * Copyright 2014, Aurélien Gâteau - * Copyright 2018-2019, Adriaan de Groot - * Copyright 2019, Collabora Ltd + * SPDX-FileCopyrightText: 2014 Aurélien Gâteau + * SPDX-FileCopyrightText: 2018-2019 Adriaan de Groot + * SPDX-FileCopyrightText: 2019 Collabora Ltd + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -21,9 +22,9 @@ #ifndef PARTITIONPAGE_H #define PARTITIONPAGE_H -#include -#include #include +#include +#include class PartitionCoreModule; class Ui_PartitionPage; @@ -90,8 +91,8 @@ private slots: QStringList getCurrentUsedMountpoints(); QMutex m_revertMutex; - int m_lastSelectedBootLoaderIndex; - bool m_isEfi; + int m_lastSelectedBootLoaderIndex; + bool m_isEfi; }; -#endif // PARTITIONPAGE_H +#endif // PARTITIONPAGE_H diff --git a/src/modules/partition/gui/PartitionSizeController.cpp b/src/modules/partition/gui/PartitionSizeController.cpp index 39879dab97..aefc13992e 100644 --- a/src/modules/partition/gui/PartitionSizeController.cpp +++ b/src/modules/partition/gui/PartitionSizeController.cpp @@ -1,7 +1,8 @@ /* === This file is part of Calamares - === * - * Copyright 2014, Aurélien Gâteau - * Copyright 2016, Teo Mrnjavac + * SPDX-FileCopyrightText: 2014 Aurélien Gâteau + * SPDX-FileCopyrightText: 2016 Teo Mrnjavac + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -36,7 +37,8 @@ PartitionSizeController::PartitionSizeController( QObject* parent ) : QObject( parent ) -{} +{ +} void PartitionSizeController::init( Device* device, Partition* partition, const QColor& color ) @@ -58,7 +60,9 @@ PartitionSizeController::setPartResizerWidget( PartResizerWidget* widget, bool f Q_ASSERT( m_device ); if ( m_partResizerWidget ) + { disconnect( m_partResizerWidget, nullptr, this, nullptr ); + } m_dirty = false; m_currentSpinBoxValue = -1; @@ -108,7 +112,9 @@ void PartitionSizeController::setSpinBox( QSpinBox* spinBox ) { if ( m_spinBox ) + { disconnect( m_spinBox, nullptr, this, nullptr ); + } m_spinBox = spinBox; m_spinBox->setMaximum( std::numeric_limits< int >::max() ); connectWidgets(); @@ -118,7 +124,9 @@ void PartitionSizeController::connectWidgets() { if ( !m_spinBox || !m_partResizerWidget ) + { return; + } connect( m_spinBox, SIGNAL( editingFinished() ), SLOT( updatePartResizerWidget() ) ); connect( m_partResizerWidget, SIGNAL( firstSectorChanged( qint64 ) ), SLOT( updateSpinBox() ) ); @@ -132,9 +140,13 @@ void PartitionSizeController::updatePartResizerWidget() { if ( m_updating ) + { return; + } if ( m_spinBox->value() == m_currentSpinBoxValue ) + { return; + } m_updating = true; qint64 sectorSize = qint64( m_spinBox->value() ) * 1024 * 1024 / m_device->logicalSize(); @@ -148,8 +160,7 @@ PartitionSizeController::updatePartResizerWidget() } void -PartitionSizeController::doAlignAndUpdatePartResizerWidget( qint64 firstSector, - qint64 lastSector ) +PartitionSizeController::doAlignAndUpdatePartResizerWidget( qint64 firstSector, qint64 lastSector ) { if ( lastSector > m_partResizerWidget->maximumLastSector() ) { @@ -176,7 +187,9 @@ void PartitionSizeController::updateSpinBox() { if ( m_updating ) + { return; + } m_updating = true; doUpdateSpinBox(); m_updating = false; @@ -186,12 +199,16 @@ void PartitionSizeController::doUpdateSpinBox() { if ( !m_spinBox ) + { return; + } int mbSize = CalamaresUtils::BytesToMiB( m_partition->length() * m_device->logicalSize() ); m_spinBox->setValue( mbSize ); - if ( m_currentSpinBoxValue != -1 && //if it's not the first time we're setting it - m_currentSpinBoxValue != mbSize ) //and the operation changes the SB value + if ( m_currentSpinBoxValue != -1 && //if it's not the first time we're setting it + m_currentSpinBoxValue != mbSize ) //and the operation changes the SB value + { m_dirty = true; + } m_currentSpinBoxValue = mbSize; } diff --git a/src/modules/partition/gui/PartitionSizeController.h b/src/modules/partition/gui/PartitionSizeController.h index 7337968f53..1353404c52 100644 --- a/src/modules/partition/gui/PartitionSizeController.h +++ b/src/modules/partition/gui/PartitionSizeController.h @@ -1,7 +1,8 @@ /* === This file is part of Calamares - === * - * Copyright 2014, Aurélien Gâteau - * Copyright 2016, Teo Mrnjavac + * SPDX-FileCopyrightText: 2014 Aurélien Gâteau + * SPDX-FileCopyrightText: 2016 Teo Mrnjavac + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/partition/gui/PartitionSplitterWidget.cpp b/src/modules/partition/gui/PartitionSplitterWidget.cpp index b8a8017ab0..08543756ca 100644 --- a/src/modules/partition/gui/PartitionSplitterWidget.cpp +++ b/src/modules/partition/gui/PartitionSplitterWidget.cpp @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2014-2016, Teo Mrnjavac + * SPDX-FileCopyrightText: 2014-2016 Teo Mrnjavac + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/partition/gui/PartitionSplitterWidget.h b/src/modules/partition/gui/PartitionSplitterWidget.h index ed4f0d1124..36bd965597 100644 --- a/src/modules/partition/gui/PartitionSplitterWidget.h +++ b/src/modules/partition/gui/PartitionSplitterWidget.h @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2014-2016, Teo Mrnjavac + * SPDX-FileCopyrightText: 2014-2016 Teo Mrnjavac + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -57,10 +58,7 @@ class PartitionSplitterWidget : public QWidget void init( Device* dev, bool drawNestedPartitions ); - void setSplitPartition( const QString& path, - qint64 minSize, - qint64 maxSize, - qint64 preferredSize ); + void setSplitPartition( const QString& path, qint64 minSize, qint64 maxSize, qint64 preferredSize ); qint64 splitPartitionSize() const; qint64 newPartitionSize() const; @@ -80,20 +78,15 @@ class PartitionSplitterWidget : public QWidget private: void setupItems( const QVector< PartitionSplitterItem >& items ); - void drawPartitions( QPainter* painter, - const QRect& rect, - const QVector< PartitionSplitterItem >& itemList ); - void drawSection( QPainter* painter, const QRect& rect_, int x, int width, - const PartitionSplitterItem& item ); - void drawResizeHandle( QPainter* painter, - const QRect& rect_, - int x ); + void drawPartitions( QPainter* painter, const QRect& rect, const QVector< PartitionSplitterItem >& itemList ); + void drawSection( QPainter* painter, const QRect& rect_, int x, int width, const PartitionSplitterItem& item ); + void drawResizeHandle( QPainter* painter, const QRect& rect_, int x ); PartitionSplitterItem _findItem( QVector< PartitionSplitterItem >& items, - std::function< bool ( PartitionSplitterItem& ) > condition ) const; + std::function< bool( PartitionSplitterItem& ) > condition ) const; int _eachItem( QVector< PartitionSplitterItem >& items, - std::function< bool ( PartitionSplitterItem& ) > operation ) const; + std::function< bool( PartitionSplitterItem& ) > operation ) const; QPair< QVector< PartitionSplitterItem >, qreal > computeItemsVector( const QVector< PartitionSplitterItem >& originalItems ) const; @@ -114,4 +107,4 @@ class PartitionSplitterWidget : public QWidget bool m_drawNestedPartitions; }; -#endif // PARTITIONSPLITTERWIDGET_H +#endif // PARTITIONSPLITTERWIDGET_H diff --git a/src/modules/partition/gui/PartitionViewSelectionFilter.h b/src/modules/partition/gui/PartitionViewSelectionFilter.h index 75572a5bba..078999f318 100644 --- a/src/modules/partition/gui/PartitionViewSelectionFilter.h +++ b/src/modules/partition/gui/PartitionViewSelectionFilter.h @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2016, Teo Mrnjavac + * SPDX-FileCopyrightText: 2016 Teo Mrnjavac + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -25,4 +26,4 @@ typedef std::function< bool( const QModelIndex& ) > SelectionFilter; -#endif // PARTITIONVIEWSELECTIONFILTER_H +#endif // PARTITIONVIEWSELECTIONFILTER_H diff --git a/src/modules/partition/gui/PartitionViewStep.cpp b/src/modules/partition/gui/PartitionViewStep.cpp index c05ed31776..59f117b260 100644 --- a/src/modules/partition/gui/PartitionViewStep.cpp +++ b/src/modules/partition/gui/PartitionViewStep.cpp @@ -1,10 +1,11 @@ /* === This file is part of Calamares - === * - * Copyright 2014, Aurélien Gâteau - * Copyright 2014-2017, Teo Mrnjavac - * Copyright 2018-2019, 2020, Adriaan de Groot - * Copyright 2019, Collabora Ltd - * Copyright 2020, Anke Boersma + * SPDX-FileCopyrightText: 2014-2017 Teo Mrnjavac + * SPDX-FileCopyrightText: 2018-2019 2020, Adriaan de Groot + * SPDX-FileCopyrightText: 2019 Collabora Ltd + * SPDX-FileCopyrightText: 2020 Anke Boersma shortVersionedName() ); break; case ChoicePage::InstallChoice::Erase: - modeText - = tr( "Erase disk and install %1." ).arg( branding->shortVersionedName() ); + modeText = tr( "Erase disk and install %1." ).arg( branding->shortVersionedName() ); break; case ChoicePage::InstallChoice::Replace: - modeText - = tr( "Replace a partition with %1." ).arg( branding->shortVersionedName() ); + modeText = tr( "Replace a partition with %1." ).arg( branding->shortVersionedName() ); break; case ChoicePage::InstallChoice::NoChoice: case ChoicePage::InstallChoice::Manual: @@ -259,7 +258,8 @@ PartitionViewStep::createSummaryWidget() const previewLabels->setModel( info.partitionModelAfter ); preview->setSelectionMode( QAbstractItemView::NoSelection ); previewLabels->setSelectionMode( QAbstractItemView::NoSelection ); - previewLabels->setCustomNewRootLabel( Calamares::Branding::instance()->string( Calamares::Branding::BootloaderEntryName )); + previewLabels->setCustomNewRootLabel( + Calamares::Branding::instance()->string( Calamares::Branding::BootloaderEntryName ) ); info.partitionModelAfter->setParent( widget ); field = new QVBoxLayout; CalamaresUtils::unmarginLayout( field ); @@ -350,7 +350,7 @@ PartitionViewStep::isNextEnabled() const } void -PartitionViewStep::nextPossiblyChanged(bool) +PartitionViewStep::nextPossiblyChanged( bool ) { emit nextStatusChanged( isNextEnabled() ); } @@ -378,7 +378,8 @@ PartitionViewStep::isAtEnd() const { if ( m_widget->currentWidget() == m_choicePage ) { - if ( m_choicePage->currentChoice() == ChoicePage::InstallChoice::Erase || m_choicePage->currentChoice() == ChoicePage::InstallChoice::Replace + if ( m_choicePage->currentChoice() == ChoicePage::InstallChoice::Erase + || m_choicePage->currentChoice() == ChoicePage::InstallChoice::Replace || m_choicePage->currentChoice() == ChoicePage::InstallChoice::Alongside ) { return true; @@ -395,7 +396,8 @@ PartitionViewStep::onActivate() m_config->updateGlobalStorage(); // if we're coming back to PVS from the next VS - if ( m_widget->currentWidget() == m_choicePage && m_choicePage->currentChoice() == ChoicePage::InstallChoice::Alongside ) + if ( m_widget->currentWidget() == m_choicePage + && m_choicePage->currentChoice() == ChoicePage::InstallChoice::Alongside ) { m_choicePage->applyActionChoice( ChoicePage::InstallChoice::Alongside ); // m_choicePage->reset(); @@ -475,17 +477,17 @@ PartitionViewStep::onLeave() QString message = tr( "Option to use GPT on BIOS" ); QString description = tr( "A GPT partition table is the best option for all " - "systems. This installer supports such a setup for " - "BIOS systems too." - "

    " - "To configure a GPT partition table on BIOS, " - "(if not done so already) go back " - "and set the partition table to GPT, next create a 8 MB " - "unformatted partition with the " - "bios_grub flag enabled.

    " - "An unformatted 8 MB partition is necessary " - "to start %1 on a BIOS system with GPT." ) - .arg( branding->shortProductName() ); + "systems. This installer supports such a setup for " + "BIOS systems too." + "

    " + "To configure a GPT partition table on BIOS, " + "(if not done so already) go back " + "and set the partition table to GPT, next create a 8 MB " + "unformatted partition with the " + "bios_grub flag enabled.

    " + "An unformatted 8 MB partition is necessary " + "to start %1 on a BIOS system with GPT." ) + .arg( branding->shortProductName() ); QMessageBox::information( m_manualPartitionPage, message, description ); } diff --git a/src/modules/partition/gui/PartitionViewStep.h b/src/modules/partition/gui/PartitionViewStep.h index 1b0baf1426..da1ec52557 100644 --- a/src/modules/partition/gui/PartitionViewStep.h +++ b/src/modules/partition/gui/PartitionViewStep.h @@ -1,8 +1,9 @@ /* === This file is part of Calamares - === * - * Copyright 2014, Aurélien Gâteau - * Copyright 2014-2016, Teo Mrnjavac - * Copyright 2017, Adriaan de Groot + * SPDX-FileCopyrightText: 2014 Aurélien Gâteau + * SPDX-FileCopyrightText: 2014-2016 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -36,7 +37,8 @@ class PartitionCoreModule; class QStackedWidget; class WaitingWidget; -template class QFutureWatcher; +template < typename T > +class QFutureWatcher; /** * The starting point of the module. Instantiates PartitionCoreModule, @@ -83,14 +85,14 @@ class PLUGINDLLEXPORT PartitionViewStep : public Calamares::ViewStep Config* m_config; PartitionCoreModule* m_core; - QStackedWidget* m_widget; - ChoicePage* m_choicePage; - PartitionPage* m_manualPartitionPage; + QStackedWidget* m_widget; + ChoicePage* m_choicePage; + PartitionPage* m_manualPartitionPage; WaitingWidget* m_waitingWidget; - QFutureWatcher* m_future; + QFutureWatcher< void >* m_future; }; CALAMARES_PLUGIN_FACTORY_DECLARATION( PartitionViewStepFactory ) -#endif // PARTITIONVIEWSTEP_H +#endif // PARTITIONVIEWSTEP_H diff --git a/src/modules/partition/gui/ReplaceWidget.cpp b/src/modules/partition/gui/ReplaceWidget.cpp index 8594a3e151..6c4d800dd2 100644 --- a/src/modules/partition/gui/ReplaceWidget.cpp +++ b/src/modules/partition/gui/ReplaceWidget.cpp @@ -1,8 +1,9 @@ /* === This file is part of Calamares - === * - * Copyright 2014-2015, Teo Mrnjavac - * Copyright 2014, Aurélien Gâteau - * Copyright 2019-2020, Adriaan de Groot + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2014 Aurélien Gâteau + * SPDX-FileCopyrightText: 2019-2020 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -22,8 +23,8 @@ #include "ui_ReplaceWidget.h" #include "core/DeviceModel.h" -#include "core/PartitionCoreModule.h" #include "core/PartitionActions.h" +#include "core/PartitionCoreModule.h" #include "core/PartitionInfo.h" #include "Branding.h" @@ -41,9 +42,7 @@ using CalamaresUtils::Partition::untranslatedFS; using CalamaresUtils::Partition::userVisibleFS; -ReplaceWidget::ReplaceWidget( PartitionCoreModule* core, - QComboBox* devicesComboBox, - QWidget* parent ) +ReplaceWidget::ReplaceWidget( PartitionCoreModule* core, QComboBox* devicesComboBox, QWidget* parent ) : QWidget( parent ) , m_ui( new Ui_ReplaceWidget ) , m_core( core ) @@ -57,20 +56,15 @@ ReplaceWidget::ReplaceWidget( PartitionCoreModule* core, m_ui->bootStatusLabel->clear(); updateFromCurrentDevice( devicesComboBox ); - connect( devicesComboBox, &QComboBox::currentTextChanged, - this, [=]( const QString& /* text */ ) - { + connect( devicesComboBox, &QComboBox::currentTextChanged, this, [=]( const QString& /* text */ ) { updateFromCurrentDevice( devicesComboBox ); } ); - CALAMARES_RETRANSLATE( - onPartitionSelected(); - ) + CALAMARES_RETRANSLATE( onPartitionSelected(); ) } -ReplaceWidget::~ReplaceWidget() -{} +ReplaceWidget::~ReplaceWidget() {} bool @@ -101,23 +95,20 @@ ReplaceWidget::applyChanges() Device* dev = model->device(); PartitionActions::doReplacePartition( - m_core, dev, partition, - { gs->value( "defaultFileSystemType" ).toString(), QString() } ); + m_core, dev, partition, { gs->value( "defaultFileSystemType" ).toString(), QString() } ); if ( m_isEfi ) { QList< Partition* > efiSystemPartitions = m_core->efiSystemPartitions(); if ( efiSystemPartitions.count() == 1 ) { - PartitionInfo::setMountPoint( - efiSystemPartitions.first(), - gs->value( "efiSystemPartition" ).toString() ); + PartitionInfo::setMountPoint( efiSystemPartitions.first(), + gs->value( "efiSystemPartition" ).toString() ); } else if ( efiSystemPartitions.count() > 1 ) { - PartitionInfo::setMountPoint( - efiSystemPartitions.at( m_ui->bootComboBox->currentIndex() ), - gs->value( "efiSystemPartition" ).toString() ); + PartitionInfo::setMountPoint( efiSystemPartitions.at( m_ui->bootComboBox->currentIndex() ), + gs->value( "efiSystemPartition" ).toString() ); } } @@ -131,7 +122,9 @@ void ReplaceWidget::onPartitionSelected() { if ( Calamares::JobQueue::instance()->globalStorage()->value( "firmwareType" ) == "efi" ) + { m_isEfi = true; + } const auto* branding = Calamares::Branding::instance(); if ( m_ui->partitionTreeView->currentIndex() == QModelIndex() ) @@ -146,24 +139,20 @@ ReplaceWidget::onPartitionSelected() } bool ok = false; - double requiredSpaceB = Calamares::JobQueue::instance() - ->globalStorage() - ->value( "requiredStorageGiB" ) - .toDouble( &ok ) * 1024 * 1024 * 1024; + double requiredSpaceB + = Calamares::JobQueue::instance()->globalStorage()->value( "requiredStorageGiB" ).toDouble( &ok ) * 1024 * 1024 + * 1024; PartitionModel* model = qobject_cast< PartitionModel* >( m_ui->partitionTreeView->model() ); if ( model && ok ) { - const QStringList osproberLines = Calamares::JobQueue::instance() - ->globalStorage() - ->value( "osproberLines" ).toStringList(); + const QStringList osproberLines + = Calamares::JobQueue::instance()->globalStorage()->value( "osproberLines" ).toStringList(); Partition* partition = model->partitionForIndex( m_ui->partitionTreeView->currentIndex() ); - if ( !partition || - partition->state() != KPM_PARTITION_STATE(None) ) + if ( !partition || partition->state() != KPM_PARTITION_STATE( None ) ) { - updateStatus( CalamaresUtils::Fail, - tr( "The selected item does not appear to be a valid partition." ) ); + updateStatus( CalamaresUtils::Fail, tr( "The selected item does not appear to be a valid partition." ) ); setNextEnabled( false ); return; } @@ -173,7 +162,7 @@ ReplaceWidget::onPartitionSelected() updateStatus( CalamaresUtils::Fail, tr( "%1 cannot be installed on empty space. Please select an " "existing partition." ) - .arg( branding->versionedName() ) ); + .arg( branding->versionedName() ) ); setNextEnabled( false ); return; } @@ -183,7 +172,7 @@ ReplaceWidget::onPartitionSelected() updateStatus( CalamaresUtils::Fail, tr( "%1 cannot be installed on an extended partition. Please select an " "existing primary or logical partition." ) - .arg( branding->versionedName() ) ); + .arg( branding->versionedName() ) ); setNextEnabled( false ); return; } @@ -191,8 +180,7 @@ ReplaceWidget::onPartitionSelected() if ( partition->partitionPath().isEmpty() ) { updateStatus( CalamaresUtils::Fail, - tr( "%1 cannot be installed on this partition." ) - .arg( branding->versionedName() ) ); + tr( "%1 cannot be installed on this partition." ).arg( branding->versionedName() ) ); setNextEnabled( false ); return; } @@ -208,20 +196,23 @@ ReplaceWidget::onPartitionSelected() { QString osName; if ( !lineColumns.value( 1 ).simplified().isEmpty() ) + { osName = lineColumns.value( 1 ).simplified(); + } else if ( !lineColumns.value( 2 ).simplified().isEmpty() ) + { osName = lineColumns.value( 2 ).simplified(); + } if ( osName.isEmpty() ) { - prettyName = tr( "Unknown system partition (%1)" ) - .arg( fsNameForUser ); + prettyName = tr( "Unknown system partition (%1)" ).arg( fsNameForUser ); } else { - prettyName = tr ( "%1 system partition (%2)" ) - .arg( osName.replace( 0, 1, osName.at( 0 ).toUpper() ) ) - .arg( fsNameForUser ); + prettyName = tr( "%1 system partition (%2)" ) + .arg( osName.replace( 0, 1, osName.at( 0 ).toUpper() ) ) + .arg( fsNameForUser ); } break; } @@ -233,11 +224,10 @@ ReplaceWidget::onPartitionSelected() tr( "%4

    " "The partition %1 is too small for %2. Please select a partition " "with capacity at least %3 GiB." ) - .arg( partition->partitionPath() ) - .arg( branding->versionedName() ) - .arg( requiredSpaceB / ( 1024. * 1024. * 1024. ), - 0, 'f', 1 ) - .arg( prettyName ) ); + .arg( partition->partitionPath() ) + .arg( branding->versionedName() ) + .arg( requiredSpaceB / ( 1024. * 1024. * 1024. ), 0, 'f', 1 ) + .arg( prettyName ) ); setNextEnabled( false ); return; } @@ -257,8 +247,8 @@ ReplaceWidget::onPartitionSelected() "An EFI system partition cannot be found anywhere " "on this system. Please go back and use manual " "partitioning to set up %1." ) - .arg( branding->shortProductName() ) - .arg( prettyName ) ); + .arg( branding->shortProductName() ) + .arg( prettyName ) ); setNextEnabled( false ); } else if ( efiSystemPartitions.count() == 1 ) @@ -267,15 +257,14 @@ ReplaceWidget::onPartitionSelected() tr( "%3

    " "%1 will be installed on %2.
    " "Warning: all data on partition " - "%2 will be lost.") - .arg( branding->versionedName() ) - .arg( partition->partitionPath() ) - .arg( prettyName ) ); + "%2 will be lost." ) + .arg( branding->versionedName() ) + .arg( partition->partitionPath() ) + .arg( prettyName ) ); m_ui->bootStatusLabel->show(); - m_ui->bootStatusLabel->setText( - tr( "The EFI system partition at %1 will be used for starting %2." ) - .arg( efiSystemPartitions.first()->partitionPath() ) - .arg( branding->shortProductName() ) ); + m_ui->bootStatusLabel->setText( tr( "The EFI system partition at %1 will be used for starting %2." ) + .arg( efiSystemPartitions.first()->partitionPath() ) + .arg( branding->shortProductName() ) ); setNextEnabled( true ); } else @@ -284,10 +273,10 @@ ReplaceWidget::onPartitionSelected() tr( "%3

    " "%1 will be installed on %2.
    " "Warning: all data on partition " - "%2 will be lost.") - .arg( branding->versionedName() ) - .arg( partition->partitionPath() ) - .arg( prettyName ) ); + "%2 will be lost." ) + .arg( branding->versionedName() ) + .arg( partition->partitionPath() ) + .arg( prettyName ) ); m_ui->bootStatusLabel->show(); m_ui->bootStatusLabel->setText( tr( "EFI system partition:" ) ); m_ui->bootComboBox->show(); @@ -295,9 +284,10 @@ ReplaceWidget::onPartitionSelected() { Partition* efiPartition = efiSystemPartitions.at( i ); m_ui->bootComboBox->addItem( efiPartition->partitionPath(), i ); - if ( efiPartition->devicePath() == partition->devicePath() && - efiPartition->number() == 1 ) + if ( efiPartition->devicePath() == partition->devicePath() && efiPartition->number() == 1 ) + { m_ui->bootComboBox->setCurrentIndex( i ); + } } setNextEnabled( true ); } @@ -308,10 +298,10 @@ ReplaceWidget::onPartitionSelected() tr( "%3

    " "%1 will be installed on %2.
    " "Warning: all data on partition " - "%2 will be lost.") - .arg( branding->versionedName() ) - .arg( partition->partitionPath() ) - .arg( prettyName ) ); + "%2 will be lost." ) + .arg( branding->versionedName() ) + .arg( partition->partitionPath() ) + .arg( prettyName ) ); setNextEnabled( true ); } } @@ -322,7 +312,9 @@ void ReplaceWidget::setNextEnabled( bool enabled ) { if ( enabled == m_nextEnabled ) + { return; + } m_nextEnabled = enabled; emit nextStatusChanged( enabled ); @@ -333,27 +325,29 @@ void ReplaceWidget::updateStatus( CalamaresUtils::ImageType imageType, const QString& text ) { int iconSize = CalamaresUtils::defaultFontHeight() * 6; - m_ui->selectedIconLabel->setPixmap( CalamaresUtils::defaultPixmap( imageType, - CalamaresUtils::Original, - QSize( iconSize, iconSize ) ) ); + m_ui->selectedIconLabel->setPixmap( + CalamaresUtils::defaultPixmap( imageType, CalamaresUtils::Original, QSize( iconSize, iconSize ) ) ); m_ui->selectedIconLabel->setFixedHeight( iconSize ); m_ui->selectedStatusLabel->setText( text ); } - void ReplaceWidget::updateFromCurrentDevice( QComboBox* devicesComboBox ) { QModelIndex index = m_core->deviceModel()->index( devicesComboBox->currentIndex(), 0 ); if ( !index.isValid() ) + { return; + } Device* device = m_core->deviceModel()->deviceForIndex( index ); QAbstractItemModel* oldModel = m_ui->partitionTreeView->model(); if ( oldModel ) + { disconnect( oldModel, nullptr, this, nullptr ); + } PartitionModel* model = m_core->partitionModelForDevice( device ); m_ui->partitionTreeView->setModel( model ); @@ -368,8 +362,10 @@ ReplaceWidget::updateFromCurrentDevice( QComboBox* devicesComboBox ) //updateButtons(); // Establish connection here because selection model is destroyed when // model changes - connect( m_ui->partitionTreeView->selectionModel(), &QItemSelectionModel::currentRowChanged, - this, &ReplaceWidget::onPartitionViewActivated ); + connect( m_ui->partitionTreeView->selectionModel(), + &QItemSelectionModel::currentRowChanged, + this, + &ReplaceWidget::onPartitionViewActivated ); connect( model, &QAbstractItemModel::modelReset, this, &ReplaceWidget::onPartitionModelReset ); } @@ -380,7 +376,9 @@ ReplaceWidget::onPartitionViewActivated() { QModelIndex index = m_ui->partitionTreeView->currentIndex(); if ( !index.isValid() ) + { return; + } const PartitionModel* model = static_cast< const PartitionModel* >( index.model() ); Q_ASSERT( model ); diff --git a/src/modules/partition/gui/ReplaceWidget.h b/src/modules/partition/gui/ReplaceWidget.h index c09c604b13..e30b57bb35 100644 --- a/src/modules/partition/gui/ReplaceWidget.h +++ b/src/modules/partition/gui/ReplaceWidget.h @@ -1,8 +1,9 @@ /* === This file is part of Calamares - === * - * Copyright 2014-2015, Teo Mrnjavac - * Copyright 2014, Aurélien Gâteau - * Copyright 2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2014 Aurélien Gâteau + * SPDX-FileCopyrightText: 2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -23,8 +24,8 @@ #include "utils/CalamaresUtilsGui.h" -#include #include +#include class Ui_ReplaceWidget; class QComboBox; @@ -35,9 +36,7 @@ class ReplaceWidget : public QWidget { Q_OBJECT public: - explicit ReplaceWidget( PartitionCoreModule* core, - QComboBox* devicesComboBox, - QWidget* parent = nullptr ); + explicit ReplaceWidget( PartitionCoreModule* core, QComboBox* devicesComboBox, QWidget* parent = nullptr ); virtual ~ReplaceWidget(); bool isNextEnabled() const; @@ -69,4 +68,4 @@ private slots: void onPartitionModelReset(); }; -#endif // REPLACEWIDGET_H +#endif // REPLACEWIDGET_H diff --git a/src/modules/partition/gui/ResizeVolumeGroupDialog.cpp b/src/modules/partition/gui/ResizeVolumeGroupDialog.cpp index 2de9993602..1aae5f49bc 100644 --- a/src/modules/partition/gui/ResizeVolumeGroupDialog.cpp +++ b/src/modules/partition/gui/ResizeVolumeGroupDialog.cpp @@ -1,7 +1,8 @@ /* === This file is part of Calamares - === * - * Copyright 2018, Caio Jordão Carvalho - * Copyright 2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2018 Caio Jordão Carvalho + * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -29,7 +30,7 @@ #include #include -ResizeVolumeGroupDialog::ResizeVolumeGroupDialog( LvmDevice *device, +ResizeVolumeGroupDialog::ResizeVolumeGroupDialog( LvmDevice* device, const PartitionVector& availablePVs, PartitionVector& selectedPVs, QWidget* parent ) @@ -39,12 +40,17 @@ ResizeVolumeGroupDialog::ResizeVolumeGroupDialog( LvmDevice *device, setWindowTitle( tr( "Resize Volume Group" ) ); for ( int i = 0; i < pvList()->count(); i++ ) - pvList()->item(i)->setCheckState( Qt::Checked ); + { + pvList()->item( i )->setCheckState( Qt::Checked ); + } for ( const Partition* p : availablePVs ) + { pvList()->addItem( new ListPhysicalVolumeWidgetItem( p, false ) ); + } - peSize()->setValue( static_cast( device->peSize() / Capacity::unitFactor(Capacity::Unit::Byte, Capacity::Unit::MiB) ) ); + peSize()->setValue( + static_cast< int >( device->peSize() / Capacity::unitFactor( Capacity::Unit::Byte, Capacity::Unit::MiB ) ) ); vgName()->setEnabled( false ); peSize()->setEnabled( false ); diff --git a/src/modules/partition/gui/ResizeVolumeGroupDialog.h b/src/modules/partition/gui/ResizeVolumeGroupDialog.h index bc088de4d1..af5a29ae63 100644 --- a/src/modules/partition/gui/ResizeVolumeGroupDialog.h +++ b/src/modules/partition/gui/ResizeVolumeGroupDialog.h @@ -1,7 +1,8 @@ /* === This file is part of Calamares - === * - * Copyright 2018, Caio Jordão Carvalho - * Copyright 2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2018 Caio Jordão Carvalho + * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -30,7 +31,7 @@ class ResizeVolumeGroupDialog : public VolumeGroupBaseDialog public: using PartitionVector = QVector< const Partition* >; - ResizeVolumeGroupDialog( LvmDevice *device, + ResizeVolumeGroupDialog( LvmDevice* device, const PartitionVector& availablePVs, PartitionVector& selectedPVs, QWidget* parent ); @@ -41,4 +42,4 @@ class ResizeVolumeGroupDialog : public VolumeGroupBaseDialog PartitionVector& m_selectedPVs; }; -#endif // RESIZEVOLUMEGROUPDIALOG_H +#endif // RESIZEVOLUMEGROUPDIALOG_H diff --git a/src/modules/partition/gui/ScanningDialog.cpp b/src/modules/partition/gui/ScanningDialog.cpp index 85479fbb37..5099484d9b 100644 --- a/src/modules/partition/gui/ScanningDialog.cpp +++ b/src/modules/partition/gui/ScanningDialog.cpp @@ -1,7 +1,8 @@ /* === This file is part of Calamares - === * - * Copyright 2015, Teo Mrnjavac - * Copyright 2017, Adriaan de Groot + * SPDX-FileCopyrightText: 2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -22,14 +23,12 @@ #include "3rdparty/waitingspinnerwidget.h" #include -#include #include +#include #include -ScanningDialog::ScanningDialog( const QString& text, - const QString& windowTitle, - QWidget* parent ) +ScanningDialog::ScanningDialog( const QString& text, const QString& windowTitle, QWidget* parent ) : QDialog( parent ) { setModal( true ); @@ -42,8 +41,7 @@ ScanningDialog::ScanningDialog( const QString& text, dialogLayout->addWidget( spinner ); spinner->start(); - QLabel* rescanningLabel = new QLabel( text, - this ); + QLabel* rescanningLabel = new QLabel( text, this ); dialogLayout->addWidget( rescanningLabel ); } @@ -55,16 +53,11 @@ ScanningDialog::run( const QFuture< void >& future, const std::function< void() >& callback, QWidget* parent ) { - ScanningDialog* theDialog = - new ScanningDialog( text, - windowTitle, - parent ); + ScanningDialog* theDialog = new ScanningDialog( text, windowTitle, parent ); theDialog->show(); QFutureWatcher< void >* watcher = new QFutureWatcher< void >(); - connect( watcher, &QFutureWatcher< void >::finished, - theDialog, [ watcher, theDialog, callback ] - { + connect( watcher, &QFutureWatcher< void >::finished, theDialog, [watcher, theDialog, callback] { watcher->deleteLater(); theDialog->hide(); theDialog->deleteLater(); @@ -76,18 +69,13 @@ ScanningDialog::run( const QFuture< void >& future, void -ScanningDialog::run( const QFuture< void >& future, - const std::function< void() >& callback, - QWidget* parent ) +ScanningDialog::run( const QFuture< void >& future, const std::function< void() >& callback, QWidget* parent ) { - ScanningDialog::run( future, - tr( "Scanning storage devices..." ), - tr( "Partitioning" ), - callback, - parent ); + ScanningDialog::run( future, tr( "Scanning storage devices..." ), tr( "Partitioning" ), callback, parent ); } -void ScanningDialog::setVisible(bool visible) +void +ScanningDialog::setVisible( bool visible ) { QDialog::setVisible( visible ); emit visibilityChanged(); diff --git a/src/modules/partition/gui/ScanningDialog.h b/src/modules/partition/gui/ScanningDialog.h index 4f52545901..25cd362279 100644 --- a/src/modules/partition/gui/ScanningDialog.h +++ b/src/modules/partition/gui/ScanningDialog.h @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2015, Teo Mrnjavac + * SPDX-FileCopyrightText: 2015 Teo Mrnjavac + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -28,19 +29,19 @@ class ScanningDialog : public QDialog { Q_OBJECT public: - explicit ScanningDialog( const QString& text, - const QString& windowTitle, - QWidget* parent = nullptr ); + explicit ScanningDialog( const QString& text, const QString& windowTitle, QWidget* parent = nullptr ); - static void run( const QFuture< void >& future, - const QString& text, - const QString& windowTitle, - const std::function< void() >& callback = []{}, - QWidget* parent = nullptr ); + static void run( + const QFuture< void >& future, + const QString& text, + const QString& windowTitle, + const std::function< void() >& callback = [] {}, + QWidget* parent = nullptr ); - static void run( const QFuture< void >& future, - const std::function< void() >& callback = []{}, - QWidget* parent = nullptr ); + static void run( + const QFuture< void >& future, + const std::function< void() >& callback = [] {}, + QWidget* parent = nullptr ); public slots: void setVisible( bool visible ) override; @@ -49,4 +50,4 @@ public slots: void visibilityChanged(); }; -#endif // SCANNINGDIALOG_H +#endif // SCANNINGDIALOG_H diff --git a/src/modules/partition/gui/VolumeGroupBaseDialog.cpp b/src/modules/partition/gui/VolumeGroupBaseDialog.cpp index 8078253b38..95aa75ac23 100644 --- a/src/modules/partition/gui/VolumeGroupBaseDialog.cpp +++ b/src/modules/partition/gui/VolumeGroupBaseDialog.cpp @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2018, Caio Jordão Carvalho + * SPDX-FileCopyrightText: 2018 Caio Jordão Carvalho + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -30,46 +31,42 @@ #include #include -VolumeGroupBaseDialog::VolumeGroupBaseDialog( QString& vgName, - QVector< const Partition* > pvList, - QWidget *parent ) - : QDialog(parent) - , ui(new Ui::VolumeGroupBaseDialog) - , m_vgNameValue(vgName) - , m_totalSizeValue(0) - , m_usedSizeValue(0) +VolumeGroupBaseDialog::VolumeGroupBaseDialog( QString& vgName, QVector< const Partition* > pvList, QWidget* parent ) + : QDialog( parent ) + , ui( new Ui::VolumeGroupBaseDialog ) + , m_vgNameValue( vgName ) + , m_totalSizeValue( 0 ) + , m_usedSizeValue( 0 ) { - ui->setupUi(this); + ui->setupUi( this ); for ( const Partition* p : pvList ) + { ui->pvList->addItem( new ListPhysicalVolumeWidgetItem( p, false ) ); + } - ui->vgType->addItems( QStringList() << "LVM" << "RAID" ); - ui->vgType->setCurrentIndex(0); + ui->vgType->addItems( QStringList() << "LVM" + << "RAID" ); + ui->vgType->setCurrentIndex( 0 ); - QRegularExpression re(R"(^(?!_|\.)[\w\-.+]+)"); + QRegularExpression re( R"(^(?!_|\.)[\w\-.+]+)" ); ui->vgName->setValidator( new QRegularExpressionValidator( re, this ) ); ui->vgName->setText( m_vgNameValue ); updateOkButton(); updateTotalSize(); - connect( ui->pvList, &QListWidget::itemChanged, this, - [&](QListWidgetItem*) { - updateTotalSize(); - updateOkButton(); - } ); - - connect( ui->peSize, qOverload(&QSpinBox::valueChanged), this, - [&](int) { - updateTotalSectors(); - updateOkButton(); - }); - - connect( ui->vgName, &QLineEdit::textChanged, this, - [&](const QString&) { - updateOkButton(); - }); + connect( ui->pvList, &QListWidget::itemChanged, this, [&]( QListWidgetItem* ) { + updateTotalSize(); + updateOkButton(); + } ); + + connect( ui->peSize, qOverload< int >( &QSpinBox::valueChanged ), this, [&]( int ) { + updateTotalSectors(); + updateOkButton(); + } ); + + connect( ui->vgName, &QLineEdit::textChanged, this, [&]( const QString& ) { updateOkButton(); } ); } VolumeGroupBaseDialog::~VolumeGroupBaseDialog() @@ -82,11 +79,14 @@ VolumeGroupBaseDialog::checkedItems() const { QVector< const Partition* > items; - for ( int i = 0; i < ui->pvList->count(); i++) { - ListPhysicalVolumeWidgetItem* item = dynamic_cast< ListPhysicalVolumeWidgetItem* >( ui->pvList->item(i) ); + for ( int i = 0; i < ui->pvList->count(); i++ ) + { + ListPhysicalVolumeWidgetItem* item = dynamic_cast< ListPhysicalVolumeWidgetItem* >( ui->pvList->item( i ) ); if ( item && item->checkState() == Qt::Checked ) + { items << item->partition(); + } } return items; @@ -101,10 +101,8 @@ VolumeGroupBaseDialog::isSizeValid() const void VolumeGroupBaseDialog::updateOkButton() { - okButton()->setEnabled(isSizeValid() && - !checkedItems().empty() && - !ui->vgName->text().isEmpty() && - ui->peSize->value() > 0); + okButton()->setEnabled( isSizeValid() && !checkedItems().empty() && !ui->vgName->text().isEmpty() + && ui->peSize->value() > 0 ); } void @@ -112,7 +110,7 @@ VolumeGroupBaseDialog::setUsedSizeValue( qint64 usedSize ) { m_usedSizeValue = usedSize; - ui->usedSize->setText( Capacity::formatByteSize(m_usedSizeValue) ); + ui->usedSize->setText( Capacity::formatByteSize( m_usedSizeValue ) ); } void @@ -126,10 +124,14 @@ VolumeGroupBaseDialog::updateTotalSize() { m_totalSizeValue = 0; - for ( const Partition *p : checkedItems()) - m_totalSizeValue += p->capacity() - p->capacity() % (ui->peSize->value() * Capacity::unitFactor(Capacity::Unit::Byte, Capacity::Unit::MiB)); + for ( const Partition* p : checkedItems() ) + { + m_totalSizeValue += p->capacity() + - p->capacity() + % ( ui->peSize->value() * Capacity::unitFactor( Capacity::Unit::Byte, Capacity::Unit::MiB ) ); + } - ui->totalSize->setText(Capacity::formatByteSize(m_totalSizeValue)); + ui->totalSize->setText( Capacity::formatByteSize( m_totalSizeValue ) ); updateTotalSectors(); } @@ -139,10 +141,12 @@ VolumeGroupBaseDialog::updateTotalSectors() { qint64 totalSectors = 0; - qint64 extentSize = ui->peSize->value() * Capacity::unitFactor(Capacity::Unit::Byte, Capacity::Unit::MiB); + qint64 extentSize = ui->peSize->value() * Capacity::unitFactor( Capacity::Unit::Byte, Capacity::Unit::MiB ); if ( extentSize > 0 ) + { totalSectors = m_totalSizeValue / extentSize; + } ui->totalSectors->setText( QString::number( totalSectors ) ); } diff --git a/src/modules/partition/gui/VolumeGroupBaseDialog.h b/src/modules/partition/gui/VolumeGroupBaseDialog.h index e6011ce623..7c7b43e485 100644 --- a/src/modules/partition/gui/VolumeGroupBaseDialog.h +++ b/src/modules/partition/gui/VolumeGroupBaseDialog.h @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2018, Caio Jordão Carvalho + * SPDX-FileCopyrightText: 2018 Caio Jordão Carvalho + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -23,7 +24,8 @@ #include -namespace Ui { +namespace Ui +{ class VolumeGroupBaseDialog; } @@ -37,9 +39,7 @@ class VolumeGroupBaseDialog : public QDialog Q_OBJECT public: - explicit VolumeGroupBaseDialog( QString& vgName, - QVector< const Partition* > pvList, - QWidget* parent = nullptr ); + explicit VolumeGroupBaseDialog( QString& vgName, QVector< const Partition* > pvList, QWidget* parent = nullptr ); ~VolumeGroupBaseDialog(); protected: @@ -78,4 +78,4 @@ class VolumeGroupBaseDialog : public QDialog qint64 m_usedSizeValue; }; -#endif // VOLUMEGROUPBASEDIALOG_H +#endif // VOLUMEGROUPBASEDIALOG_H diff --git a/src/modules/partition/jobs/ClearMountsJob.cpp b/src/modules/partition/jobs/ClearMountsJob.cpp index 29f00ebd2a..c51a784c16 100644 --- a/src/modules/partition/jobs/ClearMountsJob.cpp +++ b/src/modules/partition/jobs/ClearMountsJob.cpp @@ -1,8 +1,9 @@ /* === This file is part of Calamares - === * - * Copyright 2014-2015, Teo Mrnjavac - * Copyright 2018, Adriaan de Groot - * Copyright 2019, Kevin Kofler + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2018 Adriaan de Groot + * SPDX-FileCopyrightText: 2019 Kevin Kofler + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/partition/jobs/ClearMountsJob.h b/src/modules/partition/jobs/ClearMountsJob.h index 2accc652d9..7d9df270ae 100644 --- a/src/modules/partition/jobs/ClearMountsJob.h +++ b/src/modules/partition/jobs/ClearMountsJob.h @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2014-2015, Teo Mrnjavac + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/partition/jobs/ClearTempMountsJob.cpp b/src/modules/partition/jobs/ClearTempMountsJob.cpp index cf2c71f0cb..36b83f56cd 100644 --- a/src/modules/partition/jobs/ClearTempMountsJob.cpp +++ b/src/modules/partition/jobs/ClearTempMountsJob.cpp @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2014-2015, Teo Mrnjavac + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/partition/jobs/ClearTempMountsJob.h b/src/modules/partition/jobs/ClearTempMountsJob.h index 433cfd8ad7..6f29f197ce 100644 --- a/src/modules/partition/jobs/ClearTempMountsJob.h +++ b/src/modules/partition/jobs/ClearTempMountsJob.h @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2014-2015, Teo Mrnjavac + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/partition/jobs/CreatePartitionJob.cpp b/src/modules/partition/jobs/CreatePartitionJob.cpp index fd322a94ec..ac61518f8e 100644 --- a/src/modules/partition/jobs/CreatePartitionJob.cpp +++ b/src/modules/partition/jobs/CreatePartitionJob.cpp @@ -1,8 +1,9 @@ /* === This file is part of Calamares - === * - * Copyright 2014, Aurélien Gâteau - * Copyright 2015, Teo Mrnjavac - * Copyright 2017, 2020, Adriaan de Groot + * SPDX-FileCopyrightText: 2014 Aurélien Gâteau + * SPDX-FileCopyrightText: 2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017 2020, Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/partition/jobs/CreatePartitionJob.h b/src/modules/partition/jobs/CreatePartitionJob.h index f315e24fb9..b11874fad0 100644 --- a/src/modules/partition/jobs/CreatePartitionJob.h +++ b/src/modules/partition/jobs/CreatePartitionJob.h @@ -1,7 +1,8 @@ /* === This file is part of Calamares - === * - * Copyright 2014, Aurélien Gâteau - * Copyright 2015, Teo Mrnjavac + * SPDX-FileCopyrightText: 2014 Aurélien Gâteau + * SPDX-FileCopyrightText: 2015 Teo Mrnjavac + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/partition/jobs/CreatePartitionTableJob.cpp b/src/modules/partition/jobs/CreatePartitionTableJob.cpp index 79675c324c..a585c094ac 100644 --- a/src/modules/partition/jobs/CreatePartitionTableJob.cpp +++ b/src/modules/partition/jobs/CreatePartitionTableJob.cpp @@ -1,8 +1,9 @@ /* === This file is part of Calamares - === * - * Copyright 2014, Aurélien Gâteau - * Copyright 2015, Teo Mrnjavac - * Copyright 2017, Adriaan de Groot + * SPDX-FileCopyrightText: 2014 Aurélien Gâteau + * SPDX-FileCopyrightText: 2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/partition/jobs/CreatePartitionTableJob.h b/src/modules/partition/jobs/CreatePartitionTableJob.h index e0ed6f9180..02f23d1693 100644 --- a/src/modules/partition/jobs/CreatePartitionTableJob.h +++ b/src/modules/partition/jobs/CreatePartitionTableJob.h @@ -1,7 +1,8 @@ /* === This file is part of Calamares - === * - * Copyright 2014, Aurélien Gâteau - * Copyright 2015, Teo Mrnjavac + * SPDX-FileCopyrightText: 2014 Aurélien Gâteau + * SPDX-FileCopyrightText: 2015 Teo Mrnjavac + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/partition/jobs/CreateVolumeGroupJob.cpp b/src/modules/partition/jobs/CreateVolumeGroupJob.cpp index 28a08f5ad7..6d9c9d6e04 100644 --- a/src/modules/partition/jobs/CreateVolumeGroupJob.cpp +++ b/src/modules/partition/jobs/CreateVolumeGroupJob.cpp @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2018, Caio Jordão Carvalho + * SPDX-FileCopyrightText: 2018 Caio Jordão Carvalho + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/partition/jobs/CreateVolumeGroupJob.h b/src/modules/partition/jobs/CreateVolumeGroupJob.h index 9ed5e24e22..0e73c52fab 100644 --- a/src/modules/partition/jobs/CreateVolumeGroupJob.h +++ b/src/modules/partition/jobs/CreateVolumeGroupJob.h @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2018, Caio Jordão Carvalho + * SPDX-FileCopyrightText: 2018 Caio Jordão Carvalho + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/partition/jobs/DeactivateVolumeGroupJob.cpp b/src/modules/partition/jobs/DeactivateVolumeGroupJob.cpp index 77df64e3de..3adce640c7 100644 --- a/src/modules/partition/jobs/DeactivateVolumeGroupJob.cpp +++ b/src/modules/partition/jobs/DeactivateVolumeGroupJob.cpp @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2018, Caio Jordão Carvalho + * SPDX-FileCopyrightText: 2018 Caio Jordão Carvalho + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/partition/jobs/DeactivateVolumeGroupJob.h b/src/modules/partition/jobs/DeactivateVolumeGroupJob.h index 7b1c9c473a..13b60069ee 100644 --- a/src/modules/partition/jobs/DeactivateVolumeGroupJob.h +++ b/src/modules/partition/jobs/DeactivateVolumeGroupJob.h @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2018, Caio Jordão Carvalho + * SPDX-FileCopyrightText: 2018 Caio Jordão Carvalho + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/partition/jobs/DeletePartitionJob.cpp b/src/modules/partition/jobs/DeletePartitionJob.cpp index 9b2d4f37db..8a9fedce26 100644 --- a/src/modules/partition/jobs/DeletePartitionJob.cpp +++ b/src/modules/partition/jobs/DeletePartitionJob.cpp @@ -1,8 +1,9 @@ /* === This file is part of Calamares - === * - * Copyright 2014, Aurélien Gâteau - * Copyright 2015, Teo Mrnjavac - * Copyright 2017, Adriaan de Groot + * SPDX-FileCopyrightText: 2014 Aurélien Gâteau + * SPDX-FileCopyrightText: 2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/partition/jobs/DeletePartitionJob.h b/src/modules/partition/jobs/DeletePartitionJob.h index f68a4ea8f4..5a0332bf46 100644 --- a/src/modules/partition/jobs/DeletePartitionJob.h +++ b/src/modules/partition/jobs/DeletePartitionJob.h @@ -1,7 +1,8 @@ /* === This file is part of Calamares - === * - * Copyright 2014, Aurélien Gâteau - * Copyright 2015, Teo Mrnjavac + * SPDX-FileCopyrightText: 2014 Aurélien Gâteau + * SPDX-FileCopyrightText: 2015 Teo Mrnjavac + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/partition/jobs/FillGlobalStorageJob.cpp b/src/modules/partition/jobs/FillGlobalStorageJob.cpp index e3f696bbc4..a0b229d45f 100644 --- a/src/modules/partition/jobs/FillGlobalStorageJob.cpp +++ b/src/modules/partition/jobs/FillGlobalStorageJob.cpp @@ -1,8 +1,9 @@ /* === This file is part of Calamares - === * - * Copyright 2014, Aurélien Gâteau - * Copyright 2015-2016, Teo Mrnjavac - * Copyright 2017, 2019-2020, Adriaan de Groot + * SPDX-FileCopyrightText: 2014 Aurélien Gâteau + * SPDX-FileCopyrightText: 2015-2016 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017 2019-2020, Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/partition/jobs/FillGlobalStorageJob.h b/src/modules/partition/jobs/FillGlobalStorageJob.h index e3850da373..823f64f2f2 100644 --- a/src/modules/partition/jobs/FillGlobalStorageJob.h +++ b/src/modules/partition/jobs/FillGlobalStorageJob.h @@ -1,7 +1,8 @@ /* === This file is part of Calamares - === * - * Copyright 2014, Aurélien Gâteau - * Copyright 2015, Teo Mrnjavac + * SPDX-FileCopyrightText: 2014 Aurélien Gâteau + * SPDX-FileCopyrightText: 2015 Teo Mrnjavac + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/partition/jobs/FormatPartitionJob.cpp b/src/modules/partition/jobs/FormatPartitionJob.cpp index 45e851baf3..d12c890229 100644 --- a/src/modules/partition/jobs/FormatPartitionJob.cpp +++ b/src/modules/partition/jobs/FormatPartitionJob.cpp @@ -1,8 +1,9 @@ /* === This file is part of Calamares - === * - * Copyright 2014, Aurélien Gâteau - * Copyright 2015-2016, Teo Mrnjavac - * Copyright 2020, Adriaan de Groot + * SPDX-FileCopyrightText: 2014 Aurélien Gâteau + * SPDX-FileCopyrightText: 2015-2016 Teo Mrnjavac + * SPDX-FileCopyrightText: 2020 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/partition/jobs/FormatPartitionJob.h b/src/modules/partition/jobs/FormatPartitionJob.h index 2031efc784..f3a721187a 100644 --- a/src/modules/partition/jobs/FormatPartitionJob.h +++ b/src/modules/partition/jobs/FormatPartitionJob.h @@ -1,7 +1,8 @@ /* === This file is part of Calamares - === * - * Copyright 2014, Aurélien Gâteau - * Copyright 2015, Teo Mrnjavac + * SPDX-FileCopyrightText: 2014 Aurélien Gâteau + * SPDX-FileCopyrightText: 2015 Teo Mrnjavac + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/partition/jobs/PartitionJob.cpp b/src/modules/partition/jobs/PartitionJob.cpp index 6b8dc90347..de96ef9502 100644 --- a/src/modules/partition/jobs/PartitionJob.cpp +++ b/src/modules/partition/jobs/PartitionJob.cpp @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2014, Aurélien Gâteau + * SPDX-FileCopyrightText: 2014 Aurélien Gâteau + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/partition/jobs/PartitionJob.h b/src/modules/partition/jobs/PartitionJob.h index eef6aaa4c8..66b9704a1c 100644 --- a/src/modules/partition/jobs/PartitionJob.h +++ b/src/modules/partition/jobs/PartitionJob.h @@ -1,7 +1,8 @@ /* === This file is part of Calamares - === * - * Copyright 2014, Aurélien Gâteau - * Copyright 2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2014 Aurélien Gâteau + * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/partition/jobs/RemoveVolumeGroupJob.cpp b/src/modules/partition/jobs/RemoveVolumeGroupJob.cpp index ed8353e725..7c4b2ea316 100644 --- a/src/modules/partition/jobs/RemoveVolumeGroupJob.cpp +++ b/src/modules/partition/jobs/RemoveVolumeGroupJob.cpp @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2018, Caio Jordão Carvalho + * SPDX-FileCopyrightText: 2018 Caio Jordão Carvalho + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/partition/jobs/RemoveVolumeGroupJob.h b/src/modules/partition/jobs/RemoveVolumeGroupJob.h index 0a52a837e9..06ed2ab2ae 100644 --- a/src/modules/partition/jobs/RemoveVolumeGroupJob.h +++ b/src/modules/partition/jobs/RemoveVolumeGroupJob.h @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2018, Caio Jordão Carvalho + * SPDX-FileCopyrightText: 2018 Caio Jordão Carvalho + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/partition/jobs/ResizePartitionJob.cpp b/src/modules/partition/jobs/ResizePartitionJob.cpp index 9ebd4ce7ea..c71078dc1a 100644 --- a/src/modules/partition/jobs/ResizePartitionJob.cpp +++ b/src/modules/partition/jobs/ResizePartitionJob.cpp @@ -1,8 +1,9 @@ /* === This file is part of Calamares - === * - * Copyright 2014, Aurélien Gâteau - * Copyright 2015, Teo Mrnjavac - * Copyright 2017, Andrius Štikonas + * SPDX-FileCopyrightText: 2014 Aurélien Gâteau + * SPDX-FileCopyrightText: 2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017 Andrius Štikonas + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/partition/jobs/ResizePartitionJob.h b/src/modules/partition/jobs/ResizePartitionJob.h index f8413f2149..f86b792fc7 100644 --- a/src/modules/partition/jobs/ResizePartitionJob.h +++ b/src/modules/partition/jobs/ResizePartitionJob.h @@ -1,7 +1,8 @@ /* === This file is part of Calamares - === * - * Copyright 2014, Aurélien Gâteau - * Copyright 2015, Teo Mrnjavac + * SPDX-FileCopyrightText: 2014 Aurélien Gâteau + * SPDX-FileCopyrightText: 2015 Teo Mrnjavac + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/partition/jobs/ResizeVolumeGroupJob.cpp b/src/modules/partition/jobs/ResizeVolumeGroupJob.cpp index b44fd017b0..b9828ccb4c 100644 --- a/src/modules/partition/jobs/ResizeVolumeGroupJob.cpp +++ b/src/modules/partition/jobs/ResizeVolumeGroupJob.cpp @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2018, Caio Jordão Carvalho + * SPDX-FileCopyrightText: 2018 Caio Jordão Carvalho + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/partition/jobs/ResizeVolumeGroupJob.h b/src/modules/partition/jobs/ResizeVolumeGroupJob.h index 808c39d32a..e77098184c 100644 --- a/src/modules/partition/jobs/ResizeVolumeGroupJob.h +++ b/src/modules/partition/jobs/ResizeVolumeGroupJob.h @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2018, Caio Jordão Carvalho + * SPDX-FileCopyrightText: 2018 Caio Jordão Carvalho + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/partition/jobs/SetPartitionFlagsJob.cpp b/src/modules/partition/jobs/SetPartitionFlagsJob.cpp index 3c9403b506..cf8aabd35c 100644 --- a/src/modules/partition/jobs/SetPartitionFlagsJob.cpp +++ b/src/modules/partition/jobs/SetPartitionFlagsJob.cpp @@ -1,10 +1,11 @@ /* === This file is part of Calamares - === * - * Copyright 2016, Teo Mrnjavac - * Copyright 2020, Adriaan de Groot + * SPDX-FileCopyrightText: 2008 2010, Volker Lanz + * SPDX-FileCopyrightText: 2016 Teo Mrnjavac + * SPDX-FileCopyrightText: 2020 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Based on the SetPartFlagsJob class from KDE Partition Manager, - * Copyright 2008, 2010, Volker Lanz + * Based on the SetPartFlagsJob class from KDE Partition Manager * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/partition/jobs/SetPartitionFlagsJob.h b/src/modules/partition/jobs/SetPartitionFlagsJob.h index 41b01ecded..957c6893f0 100644 --- a/src/modules/partition/jobs/SetPartitionFlagsJob.h +++ b/src/modules/partition/jobs/SetPartitionFlagsJob.h @@ -1,9 +1,10 @@ /* === This file is part of Calamares - === * - * Copyright 2016, Teo Mrnjavac + * SPDX-FileCopyrightText: 2016 Teo Mrnjavac + * SPDX-License-Identifier: GPL-3.0-or-later * * Based on the SetPartFlagsJob class from KDE Partition Manager, - * Copyright 2008, 2010, Volker Lanz + * SPDX-FileCopyrightText: 2008 2010, Volker Lanz * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/partition/tests/ClearMountsJobTests.cpp b/src/modules/partition/tests/ClearMountsJobTests.cpp index bdccc1bc45..69d34c8481 100644 --- a/src/modules/partition/tests/ClearMountsJobTests.cpp +++ b/src/modules/partition/tests/ClearMountsJobTests.cpp @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/partition/tests/ClearMountsJobTests.h b/src/modules/partition/tests/ClearMountsJobTests.h index 0cc2b5c78e..27dfca8b94 100644 --- a/src/modules/partition/tests/ClearMountsJobTests.h +++ b/src/modules/partition/tests/ClearMountsJobTests.h @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/partition/tests/PartitionJobTests.cpp b/src/modules/partition/tests/PartitionJobTests.cpp index ae40215dbf..9aa58ff583 100644 --- a/src/modules/partition/tests/PartitionJobTests.cpp +++ b/src/modules/partition/tests/PartitionJobTests.cpp @@ -1,7 +1,8 @@ /* === This file is part of Calamares - === * - * Copyright 2014, Aurélien Gâteau - * Copyright 2017, 2019 Adriaan de Groot + * SPDX-FileCopyrightText: 2014 Aurélien Gâteau + * SPDX-FileCopyrightText: 2017, 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/partition/tests/PartitionJobTests.h b/src/modules/partition/tests/PartitionJobTests.h index 4ce064ec72..d2f0eb16cb 100644 --- a/src/modules/partition/tests/PartitionJobTests.h +++ b/src/modules/partition/tests/PartitionJobTests.h @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2014, Aurélien Gâteau + * SPDX-FileCopyrightText: 2014 Aurélien Gâteau + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/plasmalnf/PlasmaLnfJob.cpp b/src/modules/plasmalnf/PlasmaLnfJob.cpp index 44bdb5cc71..b4ffadcd85 100644 --- a/src/modules/plasmalnf/PlasmaLnfJob.cpp +++ b/src/modules/plasmalnf/PlasmaLnfJob.cpp @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2017, Adriaan de Groot + * SPDX-FileCopyrightText: 2017 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -30,9 +31,7 @@ PlasmaLnfJob::PlasmaLnfJob( const QString& lnfPath, const QString& id ) } -PlasmaLnfJob::~PlasmaLnfJob() -{ -} +PlasmaLnfJob::~PlasmaLnfJob() {} QString @@ -41,7 +40,8 @@ PlasmaLnfJob::prettyName() const return tr( "Plasma Look-and-Feel Job" ); } -QString PlasmaLnfJob::prettyStatusMessage() const +QString +PlasmaLnfJob::prettyStatusMessage() const { return prettyName(); } @@ -55,18 +55,22 @@ PlasmaLnfJob::exec() auto system = CalamaresUtils::System::instance(); Calamares::GlobalStorage* gs = Calamares::JobQueue::instance()->globalStorage(); - QStringList command( - { - "sudo", "-E", "-H", "-u", gs->value( "username" ).toString(), - m_lnfPath, "-platform", "minimal", "--resetLayout", "--apply", m_id - } ); + QStringList command( { "sudo", + "-E", + "-H", + "-u", + gs->value( "username" ).toString(), + m_lnfPath, + "-platform", + "minimal", + "--resetLayout", + "--apply", + m_id } ); int r = system->targetEnvCall( command ); if ( r ) - return Calamares::JobResult::error( - tr( "Could not select KDE Plasma Look-and-Feel package" ), - tr( "Could not select KDE Plasma Look-and-Feel package" ) ); + return Calamares::JobResult::error( tr( "Could not select KDE Plasma Look-and-Feel package" ), + tr( "Could not select KDE Plasma Look-and-Feel package" ) ); return Calamares::JobResult::ok(); } - diff --git a/src/modules/plasmalnf/PlasmaLnfJob.h b/src/modules/plasmalnf/PlasmaLnfJob.h index 9c52f2c8d3..9462f66ac7 100644 --- a/src/modules/plasmalnf/PlasmaLnfJob.h +++ b/src/modules/plasmalnf/PlasmaLnfJob.h @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2017, Adriaan de Groot + * SPDX-FileCopyrightText: 2017 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -42,4 +43,4 @@ class PlasmaLnfJob : public Calamares::Job QString m_id; }; -#endif // PLASMALNFJOB_H +#endif // PLASMALNFJOB_H diff --git a/src/modules/plasmalnf/PlasmaLnfPage.cpp b/src/modules/plasmalnf/PlasmaLnfPage.cpp index 7e2ef8aa60..f3bcc09c89 100644 --- a/src/modules/plasmalnf/PlasmaLnfPage.cpp +++ b/src/modules/plasmalnf/PlasmaLnfPage.cpp @@ -1,7 +1,8 @@ /* === This file is part of Calamares - === * - * Copyright 2017-2018, Adriaan de Groot - * Copyright 2019, Collabora Ltd + * SPDX-FileCopyrightText: 2017-2018 Adriaan de Groot + * SPDX-FileCopyrightText: 2019 Collabora Ltd + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -21,9 +22,9 @@ #include "ui_page_plasmalnf.h" +#include "Settings.h" #include "utils/Logger.h" #include "utils/Retranslator.h" -#include "Settings.h" #include @@ -38,17 +39,18 @@ ThemeInfo::ThemeInfo( const KPluginMetaData& data ) { } -static ThemeInfoList plasma_themes() +static ThemeInfoList +plasma_themes() { ThemeInfoList packages; - QList pkgs = KPackage::PackageLoader::self()->listPackages( "Plasma/LookAndFeel" ); + QList< KPluginMetaData > pkgs = KPackage::PackageLoader::self()->listPackages( "Plasma/LookAndFeel" ); for ( const KPluginMetaData& data : pkgs ) { if ( data.isValid() && !data.isHidden() && !data.name().isEmpty() ) { - packages << ThemeInfo{ data }; + packages << ThemeInfo { data }; } } @@ -63,25 +65,21 @@ PlasmaLnfPage::PlasmaLnfPage( QWidget* parent ) , m_buttonGroup( nullptr ) { ui->setupUi( this ); - CALAMARES_RETRANSLATE( - { + CALAMARES_RETRANSLATE( { ui->retranslateUi( this ); if ( Calamares::Settings::instance()->isSetupMode() ) - ui->generalExplanation->setText( tr( - "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.") ); + ui->generalExplanation->setText( tr( "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." ) ); else - ui->generalExplanation->setText( tr( - "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 installed. Clicking on a look-and-feel " - "selection will give you a live preview of that look-and-feel.") ); + ui->generalExplanation->setText( tr( "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 installed. Clicking on a look-and-feel " + "selection will give you a live preview of that look-and-feel." ) ); updateThemeNames(); fillUi(); - } - ) + } ) } void @@ -91,7 +89,7 @@ PlasmaLnfPage::setLnfPath( const QString& path ) } void -PlasmaLnfPage::setEnabledThemes(const ThemeInfoList& themes, bool showAll ) +PlasmaLnfPage::setEnabledThemes( const ThemeInfoList& themes, bool showAll ) { m_enabledThemes = themes; @@ -100,7 +98,9 @@ PlasmaLnfPage::setEnabledThemes(const ThemeInfoList& themes, bool showAll ) auto plasmaThemes = plasma_themes(); for ( auto& installed_theme : plasmaThemes ) if ( !m_enabledThemes.findById( installed_theme.id ) ) + { m_enabledThemes.append( installed_theme ); + } } updateThemeNames(); @@ -121,10 +121,13 @@ PlasmaLnfPage::setPreselect( const QString& id ) { m_preselect = id; if ( !m_enabledThemes.isEmpty() ) + { fillUi(); + } } -void PlasmaLnfPage::updateThemeNames() +void +PlasmaLnfPage::updateThemeNames() { auto plasmaThemes = plasma_themes(); for ( auto& enabled_theme : m_enabledThemes ) @@ -138,7 +141,8 @@ void PlasmaLnfPage::updateThemeNames() } } -void PlasmaLnfPage::winnowThemes() +void +PlasmaLnfPage::winnowThemes() { auto plasmaThemes = plasma_themes(); bool winnowed = true; @@ -167,7 +171,8 @@ void PlasmaLnfPage::winnowThemes() } } -void PlasmaLnfPage::fillUi() +void +PlasmaLnfPage::fillUi() { if ( m_enabledThemes.isEmpty() ) { @@ -180,7 +185,7 @@ void PlasmaLnfPage::fillUi() m_buttonGroup->setExclusive( true ); } - int c = 1; // After the general explanation + int c = 1; // After the general explanation for ( auto& theme : m_enabledThemes ) { if ( !theme.widget ) @@ -188,7 +193,7 @@ void PlasmaLnfPage::fillUi() ThemeWidget* w = new ThemeWidget( theme ); m_buttonGroup->addButton( w->button() ); ui->verticalLayout->insertWidget( c, w ); - connect( w, &ThemeWidget::themeSelected, this, &PlasmaLnfPage::plasmaThemeSelected); + connect( w, &ThemeWidget::themeSelected, this, &PlasmaLnfPage::plasmaThemeSelected ); theme.widget = w; } else diff --git a/src/modules/plasmalnf/PlasmaLnfPage.h b/src/modules/plasmalnf/PlasmaLnfPage.h index 5a4c68b4e4..286a10418e 100644 --- a/src/modules/plasmalnf/PlasmaLnfPage.h +++ b/src/modules/plasmalnf/PlasmaLnfPage.h @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2017-2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2017-2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -75,8 +76,8 @@ class PlasmaLnfPage : public QWidget bool m_showAll; // If true, don't winnow according to enabledThemes ThemeInfoList m_enabledThemes; - QButtonGroup *m_buttonGroup; + QButtonGroup* m_buttonGroup; QList< ThemeWidget* > m_widgets; }; -#endif //PLASMALNFPAGE_H +#endif //PLASMALNFPAGE_H diff --git a/src/modules/plasmalnf/PlasmaLnfViewStep.cpp b/src/modules/plasmalnf/PlasmaLnfViewStep.cpp index ec5258c641..e9d1c3f61d 100644 --- a/src/modules/plasmalnf/PlasmaLnfViewStep.cpp +++ b/src/modules/plasmalnf/PlasmaLnfViewStep.cpp @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2017-2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2017-2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -32,7 +33,7 @@ #include #endif -CALAMARES_PLUGIN_FACTORY_DEFINITION( PlasmaLnfViewStepFactory, registerPlugin(); ) +CALAMARES_PLUGIN_FACTORY_DEFINITION( PlasmaLnfViewStepFactory, registerPlugin< PlasmaLnfViewStep >(); ) static QString currentPlasmaTheme() @@ -58,7 +59,9 @@ PlasmaLnfViewStep::PlasmaLnfViewStep( QObject* parent ) PlasmaLnfViewStep::~PlasmaLnfViewStep() { if ( m_widget && m_widget->parent() == nullptr ) + { m_widget->deleteLater(); + } } @@ -104,7 +107,8 @@ PlasmaLnfViewStep::isAtEnd() const } -void PlasmaLnfViewStep::onLeave() +void +PlasmaLnfViewStep::onLeave() { } @@ -118,9 +122,13 @@ PlasmaLnfViewStep::jobs() const if ( !m_themeId.isEmpty() ) { if ( !m_lnfPath.isEmpty() ) + { l.append( Calamares::job_ptr( new PlasmaLnfJob( m_lnfPath, m_themeId ) ) ); + } else + { cWarning() << "no lnftool given for plasmalnf module."; + } } return l; } @@ -133,20 +141,25 @@ PlasmaLnfViewStep::setConfigurationMap( const QVariantMap& configurationMap ) m_widget->setLnfPath( m_lnfPath ); if ( m_lnfPath.isEmpty() ) + { cWarning() << "no lnftool given for plasmalnf module."; + } m_liveUser = CalamaresUtils::getString( configurationMap, "liveuser" ); QString preselect = CalamaresUtils::getString( configurationMap, "preselect" ); if ( preselect == QStringLiteral( "*" ) ) + { preselect = currentPlasmaTheme(); + } if ( !preselect.isEmpty() ) + { m_widget->setPreselect( preselect ); + } bool showAll = CalamaresUtils::getBool( configurationMap, "showAll", false ); - if ( configurationMap.contains( "themes" ) && - configurationMap.value( "themes" ).type() == QVariant::List ) + if ( configurationMap.contains( "themes" ) && configurationMap.value( "themes" ).type() == QVariant::List ) { ThemeInfoList listedThemes; auto themeList = configurationMap.value( "themes" ).toList(); @@ -160,14 +173,20 @@ PlasmaLnfViewStep::setConfigurationMap( const QVariantMap& configurationMap ) listedThemes.append( ThemeInfo( iv.value( "theme" ).toString(), iv.value( "image" ).toString() ) ); } else if ( i.type() == QVariant::String ) + { listedThemes.append( ThemeInfo( i.toString() ) ); + } if ( listedThemes.length() == 1 ) + { cWarning() << "only one theme enabled in plasmalnf"; + } m_widget->setEnabledThemes( listedThemes, showAll ); } else + { m_widget->setEnabledThemesAll(); // All of them + } } void @@ -182,9 +201,9 @@ PlasmaLnfViewStep::themeSelected( const QString& id ) QProcess lnftool; if ( !m_liveUser.isEmpty() ) - lnftool.start( "sudo", {"-E", "-H", "-u", m_liveUser, m_lnfPath, "--resetLayout", "--apply", id} ); + lnftool.start( "sudo", { "-E", "-H", "-u", m_liveUser, m_lnfPath, "--resetLayout", "--apply", id } ); else - lnftool.start( m_lnfPath, {"--resetLayout", "--apply", id} ); + lnftool.start( m_lnfPath, { "--resetLayout", "--apply", id } ); if ( !lnftool.waitForStarted( 1000 ) ) { @@ -198,7 +217,11 @@ PlasmaLnfViewStep::themeSelected( const QString& id ) } if ( ( lnftool.exitCode() == 0 ) && ( lnftool.exitStatus() == QProcess::NormalExit ) ) + { cDebug() << "Plasma look-and-feel applied" << id; + } else + { cWarning() << "could not apply look-and-feel" << id; + } } diff --git a/src/modules/plasmalnf/PlasmaLnfViewStep.h b/src/modules/plasmalnf/PlasmaLnfViewStep.h index 0bf76934cb..c2ecf9ddd5 100644 --- a/src/modules/plasmalnf/PlasmaLnfViewStep.h +++ b/src/modules/plasmalnf/PlasmaLnfViewStep.h @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2017-2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2017-2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -19,9 +20,9 @@ #ifndef PLASMALNFVIEWSTEP_H #define PLASMALNFVIEWSTEP_H +#include "DllMacro.h" #include "utils/PluginFactory.h" #include "viewpages/ViewStep.h" -#include "DllMacro.h" #include #include @@ -60,9 +61,9 @@ public slots: PlasmaLnfPage* m_widget; QString m_lnfPath; // Path to the lnf tool QString m_themeId; // Id of selected theme - QString m_liveUser; // Name of the live user (for OEM mode) + QString m_liveUser; // Name of the live user (for OEM mode) }; CALAMARES_PLUGIN_FACTORY_DECLARATION( PlasmaLnfViewStepFactory ) -#endif // PLASMALNFVIEWSTEP_H +#endif // PLASMALNFVIEWSTEP_H diff --git a/src/modules/plasmalnf/ThemeInfo.h b/src/modules/plasmalnf/ThemeInfo.h index 9820640737..432738e178 100644 --- a/src/modules/plasmalnf/ThemeInfo.h +++ b/src/modules/plasmalnf/ThemeInfo.h @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2017, Adriaan de Groot + * SPDX-FileCopyrightText: 2017 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -42,7 +43,8 @@ struct ThemeInfo ThemeInfo() : widget( nullptr ) - {} + { + } explicit ThemeInfo( const QString& _id ) : id( _id ) @@ -54,13 +56,14 @@ struct ThemeInfo : id( _id ) , imagePath( image ) , widget( nullptr ) - {} + { + } // Defined in PlasmaLnfPage.cpp explicit ThemeInfo( const KPluginMetaData& ); bool isValid() const { return !id.isEmpty(); } -} ; +}; class ThemeInfoList : public QList< ThemeInfo > { @@ -71,7 +74,9 @@ class ThemeInfoList : public QList< ThemeInfo > for ( ThemeInfo& i : *this ) { if ( i.id == id ) + { return &i; + } } return nullptr; } @@ -82,16 +87,15 @@ class ThemeInfoList : public QList< ThemeInfo > for ( const ThemeInfo& i : *this ) { if ( i.id == id ) + { return &i; + } } return nullptr; } /** @brief Checks if a given @p id is in the list of themes. */ - bool contains( const QString& id ) const - { - return findById( id ) != nullptr; - } -} ; + bool contains( const QString& id ) const { return findById( id ) != nullptr; } +}; #endif diff --git a/src/modules/plasmalnf/ThemeWidget.cpp b/src/modules/plasmalnf/ThemeWidget.cpp index 92a88197f6..896b28772b 100644 --- a/src/modules/plasmalnf/ThemeWidget.cpp +++ b/src/modules/plasmalnf/ThemeWidget.cpp @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2017-2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2017-2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -20,9 +21,9 @@ #include "ThemeInfo.h" +#include "Branding.h" #include "utils/CalamaresUtilsGui.h" #include "utils/Logger.h" -#include "Branding.h" #include #include @@ -38,33 +39,41 @@ * empty screenshot. Returns blank if the path * doesn't exist anywhere in the search paths. */ -static QString _munge_imagepath( const QString& path ) +static QString +_munge_imagepath( const QString& path ) { if ( path.isEmpty() ) + { return ":/view-preview.png"; + } if ( path.startsWith( '/' ) ) + { return path; + } if ( QFileInfo::exists( path ) ) + { return path; + } QFileInfo fi( QDir( Calamares::Branding::instance()->componentDirectory() ), path ); if ( fi.exists() ) + { return fi.absoluteFilePath(); + } return QString(); } -ThemeWidget::ThemeWidget(const ThemeInfo& info, QWidget* parent) +ThemeWidget::ThemeWidget( const ThemeInfo& info, QWidget* parent ) : QWidget( parent ) , m_id( info.id ) , m_check( new QRadioButton( info.name.isEmpty() ? info.id : info.name, parent ) ) , m_description( new QLabel( info.description, parent ) ) { - const QSize image_size{ - qMax(12 * CalamaresUtils::defaultFontHeight(), 120), - qMax(8 * CalamaresUtils::defaultFontHeight(), 80) }; + const QSize image_size { qMax( 12 * CalamaresUtils::defaultFontHeight(), 120 ), + qMax( 8 * CalamaresUtils::defaultFontHeight(), 80 ) }; QHBoxLayout* layout = new QHBoxLayout( this ); this->setLayout( layout ); @@ -99,7 +108,9 @@ void ThemeWidget::clicked( bool checked ) { if ( checked ) + { emit themeSelected( m_id ); + } } QAbstractButton* @@ -108,7 +119,8 @@ ThemeWidget::button() const return m_check; } -void ThemeWidget::updateThemeName(const ThemeInfo& info) +void +ThemeWidget::updateThemeName( const ThemeInfo& info ) { m_check->setText( info.name ); m_description->setText( info.description ); diff --git a/src/modules/plasmalnf/ThemeWidget.h b/src/modules/plasmalnf/ThemeWidget.h index 83294cc773..e3574dface 100644 --- a/src/modules/plasmalnf/ThemeWidget.h +++ b/src/modules/plasmalnf/ThemeWidget.h @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2017, Adriaan de Groot + * SPDX-FileCopyrightText: 2017 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -47,7 +48,6 @@ public slots: QString m_id; QRadioButton* m_check; QLabel* m_description; -} ; +}; #endif - diff --git a/src/modules/plasmalnf/view-preview.png.license b/src/modules/plasmalnf/view-preview.png.license new file mode 100644 index 0000000000..ef0e9d7cdc --- /dev/null +++ b/src/modules/plasmalnf/view-preview.png.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: 2014 Uri Herrera and others +SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/modules/plasmalnf/view-preview.svg.license b/src/modules/plasmalnf/view-preview.svg.license new file mode 100644 index 0000000000..ef0e9d7cdc --- /dev/null +++ b/src/modules/plasmalnf/view-preview.svg.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: 2014 Uri Herrera and others +SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/modules/removeuser/RemoveUserJob.cpp b/src/modules/removeuser/RemoveUserJob.cpp index 0488d19a4d..221f4f5ecb 100644 --- a/src/modules/removeuser/RemoveUserJob.cpp +++ b/src/modules/removeuser/RemoveUserJob.cpp @@ -1,8 +1,9 @@ /* === This file is part of Calamares - === * - * Copyright 2015, Teo Mrnjavac - * Copyright 2017. Alf Gaida - * Copyright 2019-2020, Adriaan de Groot + * SPDX-FileCopyrightText: 2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017 Alf Gaida + * SPDX-FileCopyrightText: 2019-2020 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/removeuser/RemoveUserJob.h b/src/modules/removeuser/RemoveUserJob.h index d13e834f0e..25c5c8e735 100644 --- a/src/modules/removeuser/RemoveUserJob.h +++ b/src/modules/removeuser/RemoveUserJob.h @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2020, Adriaan de Groot + * SPDX-FileCopyrightText: 2020 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/shellprocess/ShellProcessJob.cpp b/src/modules/shellprocess/ShellProcessJob.cpp index d0507a7323..bbc79934c9 100644 --- a/src/modules/shellprocess/ShellProcessJob.cpp +++ b/src/modules/shellprocess/ShellProcessJob.cpp @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/shellprocess/ShellProcessJob.h b/src/modules/shellprocess/ShellProcessJob.h index 708a43087a..956f7b0c87 100644 --- a/src/modules/shellprocess/ShellProcessJob.h +++ b/src/modules/shellprocess/ShellProcessJob.h @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/shellprocess/Tests.cpp b/src/modules/shellprocess/Tests.cpp index caf9800c9e..434520ccab 100644 --- a/src/modules/shellprocess/Tests.cpp +++ b/src/modules/shellprocess/Tests.cpp @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2017-2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2017-2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/shellprocess/Tests.h b/src/modules/shellprocess/Tests.h index 5b4ebebbbb..76b05563b5 100644 --- a/src/modules/shellprocess/Tests.h +++ b/src/modules/shellprocess/Tests.h @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/summary/SummaryPage.cpp b/src/modules/summary/SummaryPage.cpp index 2885b1d616..ebcde6a2cf 100644 --- a/src/modules/summary/SummaryPage.cpp +++ b/src/modules/summary/SummaryPage.cpp @@ -1,8 +1,9 @@ /* === This file is part of Calamares - === * - * Copyright 2014-2015, Teo Mrnjavac - * Copyright 2017, 2019, Adriaan de Groot - * Copyright 2019, Collabora Ltd + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017 2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2019 Collabora Ltd + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -45,21 +46,18 @@ SummaryPage::SummaryPage( const SummaryViewStep* thisViewStep, QWidget* parent ) { Q_UNUSED( parent ) - this->setObjectName("summaryStep"); + this->setObjectName( "summaryStep" ); Q_ASSERT( m_thisViewStep ); QVBoxLayout* layout = new QVBoxLayout( this ); layout->setContentsMargins( 0, 0, 0, 0 ); QLabel* headerLabel = new QLabel( this ); - CALAMARES_RETRANSLATE( - if ( Calamares::Settings::instance()->isSetupMode() ) - headerLabel->setText( tr( "This is an overview of what will happen once you start " - "the setup procedure." ) ); - else - headerLabel->setText( tr( "This is an overview of what will happen once you start " - "the install procedure." ) ); - ) + CALAMARES_RETRANSLATE( if ( Calamares::Settings::instance()->isSetupMode() ) + headerLabel->setText( tr( "This is an overview of what will happen once you start " + "the setup procedure." ) ); + else headerLabel->setText( tr( "This is an overview of what will happen once you start " + "the install procedure." ) ); ) layout->addWidget( headerLabel ); layout->addWidget( m_scrollArea ); m_scrollArea->setWidgetResizable( true ); @@ -81,8 +79,7 @@ SummaryPage::onActivate() createContentWidget(); bool first = true; - const Calamares::ViewStepList steps = - stepsForSummary( Calamares::ViewManager::instance()->viewSteps() ); + const Calamares::ViewStepList steps = stepsForSummary( Calamares::ViewManager::instance()->viewSteps() ); for ( Calamares::ViewStep* step : steps ) { @@ -90,12 +87,18 @@ SummaryPage::onActivate() QWidget* widget = step->createSummaryWidget(); if ( text.isEmpty() && !widget ) + { continue; + } if ( first ) + { first = false; + } else + { m_layout->addSpacing( SECTION_SPACING ); + } m_layout->addWidget( createTitleLabel( step->prettyName() ) ); QHBoxLayout* itemBodyLayout = new QHBoxLayout; @@ -106,9 +109,13 @@ SummaryPage::onActivate() itemBodyLayout->addLayout( itemBodyCoreLayout ); CalamaresUtils::unmarginLayout( itemBodyLayout ); if ( !text.isEmpty() ) + { itemBodyCoreLayout->addWidget( createBodyLabel( text ) ); + } if ( widget ) + { itemBodyCoreLayout->addWidget( widget ); + } itemBodyLayout->addSpacing( CalamaresUtils::defaultFontHeight() * 2 ); } m_layout->addStretch(); @@ -147,7 +154,9 @@ SummaryPage::stepsForSummary( const Calamares::ViewStepList& allSteps ) const // If we reach the parent step of this page, we're done collecting the list of // steps to summarize. if ( m_thisViewStep == step ) + { break; + } steps.append( step ); } diff --git a/src/modules/summary/SummaryPage.h b/src/modules/summary/SummaryPage.h index b9a98f2a19..6d01487603 100644 --- a/src/modules/summary/SummaryPage.h +++ b/src/modules/summary/SummaryPage.h @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2014-2015, Teo Mrnjavac + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -70,4 +71,4 @@ class SummaryPage : public QWidget QScrollArea* m_scrollArea; }; -#endif // SUMMARYPAGE_H +#endif // SUMMARYPAGE_H diff --git a/src/modules/summary/SummaryViewStep.cpp b/src/modules/summary/SummaryViewStep.cpp index 6835b2b052..da0e10e1eb 100644 --- a/src/modules/summary/SummaryViewStep.cpp +++ b/src/modules/summary/SummaryViewStep.cpp @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2014-2015, Teo Mrnjavac + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -20,7 +21,7 @@ #include "SummaryPage.h" -CALAMARES_PLUGIN_FACTORY_DEFINITION( SummaryViewStepFactory, registerPlugin(); ) +CALAMARES_PLUGIN_FACTORY_DEFINITION( SummaryViewStepFactory, registerPlugin< SummaryViewStep >(); ) SummaryViewStep::SummaryViewStep( QObject* parent ) : Calamares::ViewStep( parent ) @@ -33,7 +34,9 @@ SummaryViewStep::SummaryViewStep( QObject* parent ) SummaryViewStep::~SummaryViewStep() { if ( m_widget && m_widget->parent() == nullptr ) + { m_widget->deleteLater(); + } } @@ -98,4 +101,3 @@ SummaryViewStep::onLeave() { m_widget->createContentWidget(); } - diff --git a/src/modules/summary/SummaryViewStep.h b/src/modules/summary/SummaryViewStep.h index 5b2f49b8e4..3e23199cac 100644 --- a/src/modules/summary/SummaryViewStep.h +++ b/src/modules/summary/SummaryViewStep.h @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2014-2015, Teo Mrnjavac + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -57,4 +58,4 @@ class PLUGINDLLEXPORT SummaryViewStep : public Calamares::ViewStep CALAMARES_PLUGIN_FACTORY_DECLARATION( SummaryViewStepFactory ) -#endif // SUMMARYPAGEPLUGIN_H +#endif // SUMMARYPAGEPLUGIN_H diff --git a/src/modules/tracking/Config.cpp b/src/modules/tracking/Config.cpp index 9e81799051..c840d541c9 100644 --- a/src/modules/tracking/Config.cpp +++ b/src/modules/tracking/Config.cpp @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2020, Adriaan de Groot + * SPDX-FileCopyrightText: 2020 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/tracking/Config.h b/src/modules/tracking/Config.h index ad7d1d4f2c..787a92dc51 100644 --- a/src/modules/tracking/Config.h +++ b/src/modules/tracking/Config.h @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2020, Adriaan de Groot + * SPDX-FileCopyrightText: 2020 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/tracking/Tests.cpp b/src/modules/tracking/Tests.cpp index b7ed57ab1c..0fed06947b 100644 --- a/src/modules/tracking/Tests.cpp +++ b/src/modules/tracking/Tests.cpp @@ -2,7 +2,6 @@ * * SPDX-FileCopyrightText: 2020 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later - * License-Filename: LICENSE */ #include "Config.h" diff --git a/src/modules/tracking/TrackingJobs.cpp b/src/modules/tracking/TrackingJobs.cpp index 2df3a66a03..f4ee504e23 100644 --- a/src/modules/tracking/TrackingJobs.cpp +++ b/src/modules/tracking/TrackingJobs.cpp @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2017-2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2017-2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/tracking/TrackingJobs.h b/src/modules/tracking/TrackingJobs.h index 33b8eceb10..d87deb412e 100644 --- a/src/modules/tracking/TrackingJobs.h +++ b/src/modules/tracking/TrackingJobs.h @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2017-2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2017-2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/tracking/TrackingPage.cpp b/src/modules/tracking/TrackingPage.cpp index 76b4a6f952..2644b0cd0b 100644 --- a/src/modules/tracking/TrackingPage.cpp +++ b/src/modules/tracking/TrackingPage.cpp @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2017-2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2017-2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/tracking/TrackingPage.h b/src/modules/tracking/TrackingPage.h index 7df43b846c..7600019bd8 100644 --- a/src/modules/tracking/TrackingPage.h +++ b/src/modules/tracking/TrackingPage.h @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2017, Adriaan de Groot + * SPDX-FileCopyrightText: 2017 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/tracking/TrackingType.h b/src/modules/tracking/TrackingType.h index 22e3157d6b..15c9cc792b 100644 --- a/src/modules/tracking/TrackingType.h +++ b/src/modules/tracking/TrackingType.h @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2017, Adriaan de Groot + * SPDX-FileCopyrightText: 2017 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/tracking/TrackingViewStep.cpp b/src/modules/tracking/TrackingViewStep.cpp index da5d9108d5..ce32bb2e63 100644 --- a/src/modules/tracking/TrackingViewStep.cpp +++ b/src/modules/tracking/TrackingViewStep.cpp @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2017, Adriaan de Groot + * SPDX-FileCopyrightText: 2017 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/tracking/TrackingViewStep.h b/src/modules/tracking/TrackingViewStep.h index b05f1b0536..335fc77d0f 100644 --- a/src/modules/tracking/TrackingViewStep.h +++ b/src/modules/tracking/TrackingViewStep.h @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2017, Adriaan de Groot + * SPDX-FileCopyrightText: 2017 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/tracking/level-install.svg.license b/src/modules/tracking/level-install.svg.license new file mode 100644 index 0000000000..ef0e9d7cdc --- /dev/null +++ b/src/modules/tracking/level-install.svg.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: 2014 Uri Herrera and others +SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/modules/tracking/level-machine.svg.license b/src/modules/tracking/level-machine.svg.license new file mode 100644 index 0000000000..ef0e9d7cdc --- /dev/null +++ b/src/modules/tracking/level-machine.svg.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: 2014 Uri Herrera and others +SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/modules/tracking/level-none.svg.license b/src/modules/tracking/level-none.svg.license new file mode 100644 index 0000000000..ef0e9d7cdc --- /dev/null +++ b/src/modules/tracking/level-none.svg.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: 2014 Uri Herrera and others +SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/modules/tracking/level-user.svg.license b/src/modules/tracking/level-user.svg.license new file mode 100644 index 0000000000..ef0e9d7cdc --- /dev/null +++ b/src/modules/tracking/level-user.svg.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: 2014 Uri Herrera and others +SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/modules/users/CheckPWQuality.h b/src/modules/users/CheckPWQuality.h index 1aeb34ba8d..80dc809fe9 100644 --- a/src/modules/users/CheckPWQuality.h +++ b/src/modules/users/CheckPWQuality.h @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/users/Config.cpp b/src/modules/users/Config.cpp index de246950fb..322884c0e4 100644 --- a/src/modules/users/Config.cpp +++ b/src/modules/users/Config.cpp @@ -2,7 +2,6 @@ * * SPDX-FileCopyrightText: 2020 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later - * License-Filename: LICENSE * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/users/Config.h b/src/modules/users/Config.h index 133f59c056..1e2a4c6391 100644 --- a/src/modules/users/Config.h +++ b/src/modules/users/Config.h @@ -2,7 +2,6 @@ * * SPDX-FileCopyrightText: 2020 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later - * License-Filename: LICENSE * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/users/CreateUserJob.cpp b/src/modules/users/CreateUserJob.cpp index 9a61c5d9e5..0f08b1700e 100644 --- a/src/modules/users/CreateUserJob.cpp +++ b/src/modules/users/CreateUserJob.cpp @@ -3,7 +3,6 @@ * SPDX-FileCopyrightText: 2014-2016 Teo Mrnjavac * SPDX-FileCopyrightText: 2018 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later - * License-Filename: LICENSE */ #include "CreateUserJob.h" diff --git a/src/modules/users/CreateUserJob.h b/src/modules/users/CreateUserJob.h index f2239307ec..b5d3e94900 100644 --- a/src/modules/users/CreateUserJob.h +++ b/src/modules/users/CreateUserJob.h @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2014-2015, Teo Mrnjavac + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/users/SetHostNameJob.cpp b/src/modules/users/SetHostNameJob.cpp index a4cfa02686..ff69c64a9f 100644 --- a/src/modules/users/SetHostNameJob.cpp +++ b/src/modules/users/SetHostNameJob.cpp @@ -1,8 +1,9 @@ /* === This file is part of Calamares - === * - * Copyright 2014, Rohan Garg - * Copyright 2015, Teo Mrnjavac - * Copyright 2018, 2020, Adriaan de Groot + * SPDX-FileCopyrightText: 2014 Rohan Garg + * SPDX-FileCopyrightText: 2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/users/SetHostNameJob.h b/src/modules/users/SetHostNameJob.h index 5d52b545b1..4cc29c9ac6 100644 --- a/src/modules/users/SetHostNameJob.h +++ b/src/modules/users/SetHostNameJob.h @@ -1,8 +1,9 @@ /* === This file is part of Calamares - === * - * Copyright 2014, Rohan Garg - * Copyright 2015, Teo Mrnjavac - * Copyright 2020, Adriaan de Groot + * SPDX-FileCopyrightText: 2014 Rohan Garg + * SPDX-FileCopyrightText: 2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2020 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/users/SetPasswordJob.cpp b/src/modules/users/SetPasswordJob.cpp index 3199a0a764..78efd3efc7 100644 --- a/src/modules/users/SetPasswordJob.cpp +++ b/src/modules/users/SetPasswordJob.cpp @@ -1,7 +1,8 @@ /* === This file is part of Calamares - === * - * Copyright 2014-2017, Teo Mrnjavac - * Copyright 2017, Adriaan de Groot + * SPDX-FileCopyrightText: 2014-2017 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/users/SetPasswordJob.h b/src/modules/users/SetPasswordJob.h index cf5b2f585f..aa1af04170 100644 --- a/src/modules/users/SetPasswordJob.h +++ b/src/modules/users/SetPasswordJob.h @@ -1,7 +1,8 @@ /* === This file is part of Calamares - === * - * Copyright 2014-2015, Teo Mrnjavac - * Copyright 2017, Adriaan de Groot + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/users/UsersPage.cpp b/src/modules/users/UsersPage.cpp index ad0c448d5b..3e04ff7a7a 100644 --- a/src/modules/users/UsersPage.cpp +++ b/src/modules/users/UsersPage.cpp @@ -1,9 +1,10 @@ /* === This file is part of Calamares - === * - * Copyright 2014-2017, Teo Mrnjavac - * Copyright 2017-2018, Adriaan de Groot - * Copyright 2019, Collabora Ltd - * Copyright 2020, Gabriel Craciunescu + * SPDX-FileCopyrightText: 2014-2017 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017-2018 Adriaan de Groot + * SPDX-FileCopyrightText: 2019 Collabora Ltd + * SPDX-FileCopyrightText: 2020 Gabriel Craciunescu + * SPDX-License-Identifier: GPL-3.0-or-later * * Portions from the Manjaro Installation Framework * by Roland Singer diff --git a/src/modules/users/UsersPage.h b/src/modules/users/UsersPage.h index 246a080838..9c3998feb3 100644 --- a/src/modules/users/UsersPage.h +++ b/src/modules/users/UsersPage.h @@ -1,7 +1,9 @@ /* === This file is part of Calamares - === * - * Copyright 2014-2015, Teo Mrnjavac - * Copyright 2017-2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2007 Free Software Foundation, Inc. + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017-2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Portions from the Manjaro Installation Framework * by Roland Singer diff --git a/src/modules/users/UsersViewStep.cpp b/src/modules/users/UsersViewStep.cpp index df77da0368..3b2b7152f6 100644 --- a/src/modules/users/UsersViewStep.cpp +++ b/src/modules/users/UsersViewStep.cpp @@ -1,8 +1,9 @@ /* === This file is part of Calamares - === * - * Copyright 2014-2015, Teo Mrnjavac - * Copyright 2017-2018, Adriaan de Groot - * Copyright 2017, Gabriel Craciunescu + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017-2018 Adriaan de Groot + * SPDX-FileCopyrightText: 2017 Gabriel Craciunescu + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/users/UsersViewStep.h b/src/modules/users/UsersViewStep.h index baf4e62926..6f6baf58b1 100644 --- a/src/modules/users/UsersViewStep.h +++ b/src/modules/users/UsersViewStep.h @@ -1,7 +1,8 @@ /* === This file is part of Calamares - === * - * Copyright 2014-2015, Teo Mrnjavac - * Copyright 2017, Adriaan de Groot + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/users/images/invalid.png.license b/src/modules/users/images/invalid.png.license new file mode 100644 index 0000000000..cc08e1f9f1 --- /dev/null +++ b/src/modules/users/images/invalid.png.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: 2014 Teo Mrnjavac +SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/modules/users/images/valid.png.license b/src/modules/users/images/valid.png.license new file mode 100644 index 0000000000..cc08e1f9f1 --- /dev/null +++ b/src/modules/users/images/valid.png.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: 2014 Teo Mrnjavac +SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/modules/usersq/UsersQmlViewStep.cpp b/src/modules/usersq/UsersQmlViewStep.cpp index 963383c103..1c011e9b6b 100644 --- a/src/modules/usersq/UsersQmlViewStep.cpp +++ b/src/modules/usersq/UsersQmlViewStep.cpp @@ -1,9 +1,10 @@ /* === This file is part of Calamares - === * - * Copyright 2014-2015, Teo Mrnjavac - * Copyright 2017-2018, Adriaan de Groot - * Copyright 2017, Gabriel Craciunescu - * Copyright 2020, Camilo Higuita + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017-2018 Adriaan de Groot + * SPDX-FileCopyrightText: 2017 Gabriel Craciunescu + * SPDX-FileCopyrightText: 2020 Camilo Higuita + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/usersq/UsersQmlViewStep.h b/src/modules/usersq/UsersQmlViewStep.h index 4636981994..2a3c1a6c51 100644 --- a/src/modules/usersq/UsersQmlViewStep.h +++ b/src/modules/usersq/UsersQmlViewStep.h @@ -1,8 +1,9 @@ /* === This file is part of Calamares - === * - * Copyright 2014-2015, Teo Mrnjavac - * Copyright 2017, Adriaan de Groot - * Copyright 2020, Camilo Higuita + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017 Adriaan de Groot + * SPDX-FileCopyrightText: 2020 Camilo Higuita + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/webview/WebViewConfig.h.in b/src/modules/webview/WebViewConfig.h.in index 6611e44c0b..ddc07b31c9 100644 --- a/src/modules/webview/WebViewConfig.h.in +++ b/src/modules/webview/WebViewConfig.h.in @@ -1,3 +1,6 @@ +/* SPDX-FileCopyrightText: no + SPDX-License-Identifier: CC0-1.0 +*/ #ifndef CALAMARESWEBVIEWCONFIG_H #define CALAMARESWEBVIEWCONFIG_H diff --git a/src/modules/webview/WebViewStep.cpp b/src/modules/webview/WebViewStep.cpp index e1261433cf..6711567371 100644 --- a/src/modules/webview/WebViewStep.cpp +++ b/src/modules/webview/WebViewStep.cpp @@ -1,7 +1,8 @@ /* === This file is part of Calamares - === * - * Copyright 2015, Rohan Garg - * Copyright 2016, Teo Mrnjavac + * SPDX-FileCopyrightText: 2015 Rohan Garg + * SPDX-FileCopyrightText: 2016 Teo Mrnjavac + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -29,7 +30,7 @@ #include #endif -CALAMARES_PLUGIN_FACTORY_DEFINITION( WebViewStepFactory, registerPlugin(); ) +CALAMARES_PLUGIN_FACTORY_DEFINITION( WebViewStepFactory, registerPlugin< WebViewStep >(); ) WebViewStep::WebViewStep( QObject* parent ) : Calamares::ViewStep( parent ) @@ -41,13 +42,9 @@ WebViewStep::WebViewStep( QObject* parent ) m_view = new C_QWEBVIEW(); #ifdef WEBVIEW_WITH_WEBKIT m_view->settings()->setFontFamily( QWebSettings::StandardFont, - m_view->settings()-> - fontFamily( QWebSettings::SansSerifFont ) ); - m_view->setRenderHints( QPainter::Antialiasing | - QPainter::TextAntialiasing | - QPainter::HighQualityAntialiasing | - QPainter::SmoothPixmapTransform | - QPainter::NonCosmeticDefaultPen ); + m_view->settings()->fontFamily( QWebSettings::SansSerifFont ) ); + m_view->setRenderHints( QPainter::Antialiasing | QPainter::TextAntialiasing | QPainter::HighQualityAntialiasing + | QPainter::SmoothPixmapTransform | QPainter::NonCosmeticDefaultPen ); #endif } @@ -55,7 +52,9 @@ WebViewStep::WebViewStep( QObject* parent ) WebViewStep::~WebViewStep() { if ( m_view && m_view->parent() == nullptr ) + { m_view->deleteLater(); + } } @@ -100,10 +99,11 @@ WebViewStep::isAtEnd() const return true; } -void WebViewStep::onActivate() +void +WebViewStep::onActivate() { - m_view->load(QUrl(m_url)); - m_view->show(); + m_view->load( QUrl( m_url ) ); + m_view->show(); } QList< Calamares::job_ptr > @@ -116,11 +116,14 @@ WebViewStep::jobs() const void WebViewStep::setConfigurationMap( const QVariantMap& configurationMap ) { - if ( configurationMap.contains("url") && - configurationMap.value("url").type() == QVariant::String ) - m_url = configurationMap.value("url").toString(); - - if ( configurationMap.contains("prettyName") && - configurationMap.value("prettyName").type() == QVariant::String ) - m_prettyName = configurationMap.value("prettyName").toString(); + if ( configurationMap.contains( "url" ) && configurationMap.value( "url" ).type() == QVariant::String ) + { + m_url = configurationMap.value( "url" ).toString(); + } + + if ( configurationMap.contains( "prettyName" ) + && configurationMap.value( "prettyName" ).type() == QVariant::String ) + { + m_prettyName = configurationMap.value( "prettyName" ).toString(); + } } diff --git a/src/modules/webview/WebViewStep.h b/src/modules/webview/WebViewStep.h index a97d465dea..9f6658cdc4 100644 --- a/src/modules/webview/WebViewStep.h +++ b/src/modules/webview/WebViewStep.h @@ -1,8 +1,9 @@ /* === This file is part of Calamares - === * - * Copyright 2015, Rohan Garg - * Copyright 2016, Teo Mrnjavac - * Copyright 2017, Adriaan de Groot + * SPDX-FileCopyrightText: 2015 Rohan Garg + * SPDX-FileCopyrightText: 2016 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -21,13 +22,10 @@ #ifndef WEBVIEWPLUGIN_H #define WEBVIEWPLUGIN_H -#include "WebViewConfig.h" - +#include "DllMacro.h" #include "utils/PluginFactory.h" #include "viewpages/ViewStep.h" -#include "DllMacro.h" - #include #ifdef WEBVIEW_WITH_WEBKIT @@ -63,11 +61,11 @@ class PLUGINDLLEXPORT WebViewStep : public Calamares::ViewStep void setConfigurationMap( const QVariantMap& configurationMap ) override; private: - C_QWEBVIEW *m_view; + C_QWEBVIEW* m_view; QString m_url; QString m_prettyName; }; CALAMARES_PLUGIN_FACTORY_DECLARATION( WebViewStepFactory ) -#endif // WEBVIEWPLUGIN_H +#endif // WEBVIEWPLUGIN_H diff --git a/src/modules/welcome/Config.cpp b/src/modules/welcome/Config.cpp index 2bf418ff14..d9f4ca19c4 100644 --- a/src/modules/welcome/Config.cpp +++ b/src/modules/welcome/Config.cpp @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2019-2020, Adriaan de Groot + * SPDX-FileCopyrightText: 2019-2020 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/welcome/Config.h b/src/modules/welcome/Config.h index 6d14097c5b..b248f81c87 100644 --- a/src/modules/welcome/Config.h +++ b/src/modules/welcome/Config.h @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2019-2020, Adriaan de Groot + * SPDX-FileCopyrightText: 2019-2020 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/welcome/WelcomePage.cpp b/src/modules/welcome/WelcomePage.cpp index 0c4f44c958..0f22631d34 100644 --- a/src/modules/welcome/WelcomePage.cpp +++ b/src/modules/welcome/WelcomePage.cpp @@ -1,8 +1,9 @@ /* === This file is part of Calamares - === * - * Copyright 2014-2015, Teo Mrnjavac - * Copyright 2015, Anke Boersma - * Copyright 2017-2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2015 Anke Boersma + * SPDX-FileCopyrightText: 2017-2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/welcome/WelcomePage.h b/src/modules/welcome/WelcomePage.h index 17fedc8120..07bea6d76d 100644 --- a/src/modules/welcome/WelcomePage.h +++ b/src/modules/welcome/WelcomePage.h @@ -1,7 +1,8 @@ /* === This file is part of Calamares - === * - * Copyright 2014, Teo Mrnjavac - * Copyright 2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2014 Teo Mrnjavac + * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/welcome/WelcomeViewStep.cpp b/src/modules/welcome/WelcomeViewStep.cpp index cad5349a93..7cf5e744a6 100644 --- a/src/modules/welcome/WelcomeViewStep.cpp +++ b/src/modules/welcome/WelcomeViewStep.cpp @@ -1,7 +1,8 @@ /* === This file is part of Calamares - === * - * Copyright 2014-2015, Teo Mrnjavac - * Copyright 2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/welcome/WelcomeViewStep.h b/src/modules/welcome/WelcomeViewStep.h index f4874dc16e..c28dc335ea 100644 --- a/src/modules/welcome/WelcomeViewStep.h +++ b/src/modules/welcome/WelcomeViewStep.h @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2014-2015, Teo Mrnjavac + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/welcome/checker/CheckerContainer.cpp b/src/modules/welcome/checker/CheckerContainer.cpp index 11ae9c7c36..58c9396fa0 100644 --- a/src/modules/welcome/checker/CheckerContainer.cpp +++ b/src/modules/welcome/checker/CheckerContainer.cpp @@ -1,8 +1,9 @@ /* === This file is part of Calamares - === * - * Copyright 2014-2017, Teo Mrnjavac - * Copyright 2017, 2019-2020, Adriaan de Groot - * Copyright 2017, Gabriel Craciunescu + * SPDX-FileCopyrightText: 2014-2017 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017 Adriaan de Groot + * SPDX-FileCopyrightText: 2017 Gabriel Craciunescu + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/welcome/checker/CheckerContainer.h b/src/modules/welcome/checker/CheckerContainer.h index 9744ecc77a..58358519f7 100644 --- a/src/modules/welcome/checker/CheckerContainer.h +++ b/src/modules/welcome/checker/CheckerContainer.h @@ -1,8 +1,9 @@ /* === This file is part of Calamares - === * - * Copyright 2014-2017, Teo Mrnjavac - * Copyright 2017, Adriaan de Groot - * Copyright 2017, Gabriel Craciunescu + * SPDX-FileCopyrightText: 2014-2017 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017 Adriaan de Groot + * SPDX-FileCopyrightText: 2017 Gabriel Craciunescu + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/welcome/checker/GeneralRequirements.cpp b/src/modules/welcome/checker/GeneralRequirements.cpp index e7994f9a00..32d971b6de 100644 --- a/src/modules/welcome/checker/GeneralRequirements.cpp +++ b/src/modules/welcome/checker/GeneralRequirements.cpp @@ -1,9 +1,10 @@ /* === This file is part of Calamares - === * - * Copyright 2014-2017, Teo Mrnjavac - * Copyright 2017-2018, 2020, Adriaan de Groot - * Copyright 2017, Gabriel Craciunescu - * Copyright 2019, Collabora Ltd + * SPDX-FileCopyrightText: 2014-2017 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017-2018 2020, Adriaan de Groot + * SPDX-FileCopyrightText: 2017 Gabriel Craciunescu + * SPDX-FileCopyrightText: 2019 Collabora Ltd + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/welcome/checker/GeneralRequirements.h b/src/modules/welcome/checker/GeneralRequirements.h index ce3abec839..a0a302054b 100644 --- a/src/modules/welcome/checker/GeneralRequirements.h +++ b/src/modules/welcome/checker/GeneralRequirements.h @@ -1,7 +1,8 @@ /* === This file is part of Calamares - === * - * Copyright 2014-2017, Teo Mrnjavac - * Copyright 2017, Adriaan de Groot + * SPDX-FileCopyrightText: 2014-2017 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/welcome/checker/ResultWidget.cpp b/src/modules/welcome/checker/ResultWidget.cpp index 5da120a2a9..b86cd23b05 100644 --- a/src/modules/welcome/checker/ResultWidget.cpp +++ b/src/modules/welcome/checker/ResultWidget.cpp @@ -1,7 +1,8 @@ /* === This file is part of Calamares - === * - * Copyright 2014-2015, Teo Mrnjavac - * Copyright 2017, 2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/welcome/checker/ResultWidget.h b/src/modules/welcome/checker/ResultWidget.h index f84310bb64..a56ed66e88 100644 --- a/src/modules/welcome/checker/ResultWidget.h +++ b/src/modules/welcome/checker/ResultWidget.h @@ -1,7 +1,8 @@ /* === This file is part of Calamares - === * - * Copyright 2014-2015, Teo Mrnjavac - * Copyright 2017, 2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/welcome/checker/ResultsListWidget.cpp b/src/modules/welcome/checker/ResultsListWidget.cpp index afde9f08d3..7286dd256c 100644 --- a/src/modules/welcome/checker/ResultsListWidget.cpp +++ b/src/modules/welcome/checker/ResultsListWidget.cpp @@ -1,7 +1,8 @@ /* === This file is part of Calamares - === * - * Copyright 2014-2015, Teo Mrnjavac - * Copyright 2017, 2019-2020, Adriaan de Groot + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/welcome/checker/ResultsListWidget.h b/src/modules/welcome/checker/ResultsListWidget.h index 3f21955baf..a93cc23716 100644 --- a/src/modules/welcome/checker/ResultsListWidget.h +++ b/src/modules/welcome/checker/ResultsListWidget.h @@ -1,7 +1,8 @@ /* === This file is part of Calamares - === * - * Copyright 2014-2015, Teo Mrnjavac - * Copyright 2019-2020, Adriaan de Groot + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2019-2020 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/welcome/checker/partman_devices.c b/src/modules/welcome/checker/partman_devices.c index caee5759ce..040c584bac 100644 --- a/src/modules/welcome/checker/partman_devices.c +++ b/src/modules/welcome/checker/partman_devices.c @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2014-2015, Teo Mrnjavac + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-License-Identifier: GPL-3.0-or-later * * Based on parted_devices.c, from partman-base. * diff --git a/src/modules/welcome/checker/partman_devices.h b/src/modules/welcome/checker/partman_devices.h index 9f7695ee92..9c14cda784 100644 --- a/src/modules/welcome/checker/partman_devices.h +++ b/src/modules/welcome/checker/partman_devices.h @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2014, Teo Mrnjavac + * SPDX-FileCopyrightText: 2014 Teo Mrnjavac + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/welcome/language-icon-128px.png.license b/src/modules/welcome/language-icon-128px.png.license new file mode 100644 index 0000000000..bc39975aea --- /dev/null +++ b/src/modules/welcome/language-icon-128px.png.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: 2011 Farhat Datta and Onur Mustak Cobanli, http://www.languageicon.org/ +SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/modules/welcome/language-icon-48px.png.license b/src/modules/welcome/language-icon-48px.png.license new file mode 100644 index 0000000000..bc39975aea --- /dev/null +++ b/src/modules/welcome/language-icon-48px.png.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: 2011 Farhat Datta and Onur Mustak Cobanli, http://www.languageicon.org/ +SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/modules/welcomeq/Recommended.qml b/src/modules/welcomeq/Recommended.qml index 5a6c1316dc..cc44c44a9f 100644 --- a/src/modules/welcomeq/Recommended.qml +++ b/src/modules/welcomeq/Recommended.qml @@ -1,7 +1,8 @@ /* === This file is part of Calamares - === * - * Copyright 2020, Anke Boersma - * Copyright 2020, Adriaan de Groot + * SPDX-FileCopyrightText: 2020 Anke Boersma + * SPDX-FileCopyrightText: 2020 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/welcomeq/Requirements.qml b/src/modules/welcomeq/Requirements.qml index e7835d868d..415b828d89 100644 --- a/src/modules/welcomeq/Requirements.qml +++ b/src/modules/welcomeq/Requirements.qml @@ -1,7 +1,8 @@ /* === This file is part of Calamares - === * - * Copyright 2020, Anke Boersma - * Copyright 2020, Adriaan de Groot + * SPDX-FileCopyrightText: 2020 Anke Boersma + * SPDX-FileCopyrightText: 2020 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/welcomeq/WelcomeQmlViewStep.cpp b/src/modules/welcomeq/WelcomeQmlViewStep.cpp index 42944f20d7..e76ab3e009 100644 --- a/src/modules/welcomeq/WelcomeQmlViewStep.cpp +++ b/src/modules/welcomeq/WelcomeQmlViewStep.cpp @@ -1,7 +1,8 @@ /* === This file is part of Calamares - === * - * Copyright 2014-2015, Teo Mrnjavac - * Copyright 2018,2020 Adriaan de Groot + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/welcomeq/WelcomeQmlViewStep.h b/src/modules/welcomeq/WelcomeQmlViewStep.h index 78999986c8..6dc06eef4c 100644 --- a/src/modules/welcomeq/WelcomeQmlViewStep.h +++ b/src/modules/welcomeq/WelcomeQmlViewStep.h @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2019-2020 Adriaan de Groot + * SPDX-FileCopyrightText: 2019-2020 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/modules/welcomeq/about.qml b/src/modules/welcomeq/about.qml index 7fa6fb462e..db8a801352 100644 --- a/src/modules/welcomeq/about.qml +++ b/src/modules/welcomeq/about.qml @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2020, Anke Boersma + * SPDX-FileCopyrightText: 2020 Anke Boersma + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -26,7 +27,7 @@ Item { width: parent.width height: parent.height focus: true - + property var appName: "Calamares" property var appVersion: "3.2.24" @@ -36,19 +37,19 @@ Item { y: 14 anchors.fill: parent color: "#f2f2f2" - + Column { id: column x: 130 y: 40 - + Rectangle { width: 560 height: 250 radius: 10 border.width: 0 - + Text { width: 400 height: 250 @@ -58,25 +59,25 @@ Item { for %3

    Copyright 2014-2017 Teo Mrnjavac <teo@kde.org>
    Copyright 2017-2020 Adriaan de Groot <groot@kde.org>
    - Thanks to
    the Calamares team - and the Calamares + Thanks to the Calamares team + and the Calamares translators team.

    - Calamares + Calamares development is sponsored by
    - Blue Systems - + Blue Systems - Liberating Software." ) .arg(appName) .arg(appVersion) .arg(Branding.string(Branding.VersionedName)) - + onLinkActivated: Qt.openUrlExternally(link) - + MouseArea { anchors.fill: parent acceptedButtons: Qt.NoButton cursorShape: parent.hoveredLink ? Qt.PointingHandCursor : Qt.ArrowCursor } - + font.pointSize: 10 anchors.verticalCenterOffset: 10 anchors.horizontalCenterOffset: 40 diff --git a/src/modules/welcomeq/img/chevron-left-solid.svg.license b/src/modules/welcomeq/img/chevron-left-solid.svg.license new file mode 100644 index 0000000000..5f43e650d3 --- /dev/null +++ b/src/modules/welcomeq/img/chevron-left-solid.svg.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: 2020 demmm +SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/modules/welcomeq/img/language-icon-48px.png.license b/src/modules/welcomeq/img/language-icon-48px.png.license new file mode 100644 index 0000000000..bc39975aea --- /dev/null +++ b/src/modules/welcomeq/img/language-icon-48px.png.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: 2011 Farhat Datta and Onur Mustak Cobanli, http://www.languageicon.org/ +SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/modules/welcomeq/img/squid.png.license b/src/modules/welcomeq/img/squid.png.license new file mode 100644 index 0000000000..cc08e1f9f1 --- /dev/null +++ b/src/modules/welcomeq/img/squid.png.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: 2014 Teo Mrnjavac +SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/modules/welcomeq/release_notes.qml b/src/modules/welcomeq/release_notes.qml index ce9d1d4afc..cd2ef257dc 100644 --- a/src/modules/welcomeq/release_notes.qml +++ b/src/modules/welcomeq/release_notes.qml @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * - * Copyright 2020, Anke Boersma + * SPDX-FileCopyrightText: 2020 Anke Boersma + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -33,9 +34,9 @@ Rectangle { id: flick anchors.fill: parent contentHeight: 3500 - + ScrollBar.vertical: ScrollBar { - id: fscrollbar + id: fscrollbar width: 10 policy: ScrollBar.AlwaysOn } diff --git a/src/modules/welcomeq/welcomeq.qml b/src/modules/welcomeq/welcomeq.qml index 7ba8933c8d..e749a621c8 100644 --- a/src/modules/welcomeq/welcomeq.qml +++ b/src/modules/welcomeq/welcomeq.qml @@ -1,7 +1,8 @@ /* === This file is part of Calamares - === * - * Copyright 2020, Adriaan de Groot - * Copyright 2020, Anke Boersma + * SPDX-FileCopyrightText: 2020 Adriaan de Groot + * SPDX-FileCopyrightText: 2020 Anke Boersma + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by From 5a3fb613d9694d2f29215337696ddd77eba2da6e Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Wed, 26 Aug 2020 02:09:23 +0200 Subject: [PATCH 119/157] REUSE: Default branding assets and explanation --- src/branding/README.md | 7 ++++++- src/branding/default/banner.png.license | 2 ++ src/branding/default/branding.desc | 3 +++ src/branding/default/languages.png.license | 2 ++ src/branding/default/show.qml | 7 ++++--- src/branding/default/squid.png.license | 2 ++ src/branding/default/stylesheet.qss | 4 ++++ 7 files changed, 23 insertions(+), 4 deletions(-) create mode 100644 src/branding/default/banner.png.license create mode 100644 src/branding/default/languages.png.license create mode 100644 src/branding/default/squid.png.license diff --git a/src/branding/README.md b/src/branding/README.md index 0991638369..234b2a9b15 100644 --- a/src/branding/README.md +++ b/src/branding/README.md @@ -1,5 +1,10 @@ # Branding directory + + Branding components can go here, or they can be installed separately. A branding component is a subdirectory with a `branding.desc` descriptor @@ -66,7 +71,7 @@ The setting *slideshowAPI* in `branding.desc` indicates which one to use for a given branding slideshow. Which API to use is really a function of the QML. Expect the version 1 API to be deprecated in the course of Calamares 3.3. -In Calamares 3.2.13 support for activation notification to the QML +In Calamares 3.2.13 support for activation notification to the QML parts is improved: - If the root object has a property *activatedInCalamares* (the examples do), then that property is set to *true* when the slideshow becomes visible diff --git a/src/branding/default/banner.png.license b/src/branding/default/banner.png.license new file mode 100644 index 0000000000..38aa3617ef --- /dev/null +++ b/src/branding/default/banner.png.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: 2020 Adriaan de Groot +SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/branding/default/branding.desc b/src/branding/default/branding.desc index fc0a16f7e9..c3ef2df723 100644 --- a/src/branding/default/branding.desc +++ b/src/branding/default/branding.desc @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# # Product branding information. This influences some global # user-visible aspects of Calamares, such as the product # name, window behavior, and the slideshow during installation. diff --git a/src/branding/default/languages.png.license b/src/branding/default/languages.png.license new file mode 100644 index 0000000000..ea82645713 --- /dev/null +++ b/src/branding/default/languages.png.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: 2015 Teo Mrnjavac +SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/branding/default/show.qml b/src/branding/default/show.qml index dcb0f9257f..92917cc5cd 100644 --- a/src/branding/default/show.qml +++ b/src/branding/default/show.qml @@ -1,7 +1,8 @@ /* === This file is part of Calamares - === * - * Copyright 2015, Teo Mrnjavac - * Copyright 2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -78,7 +79,7 @@ Presentation console.log("QML Component (default slideshow) activated"); presentation.currentSlide = 0; } - + function onLeave() { console.log("QML Component (default slideshow) deactivated"); } diff --git a/src/branding/default/squid.png.license b/src/branding/default/squid.png.license new file mode 100644 index 0000000000..cc08e1f9f1 --- /dev/null +++ b/src/branding/default/squid.png.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: 2014 Teo Mrnjavac +SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/branding/default/stylesheet.qss b/src/branding/default/stylesheet.qss index 72dd91ba4b..5c36738477 100644 --- a/src/branding/default/stylesheet.qss +++ b/src/branding/default/stylesheet.qss @@ -1,5 +1,9 @@ /* + * SPDX-FileCopyrightText: no + * SPDX-License-Identifier: CC0-1.0 + */ +/* A branding component can ship a stylesheet (like this one) which is applied to parts of the Calamares user-interface. In principle, all parts can be styled through CSS. From 7a78f2600e0e973def13c6d1d1378e1092f6446b Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Wed, 26 Aug 2020 01:41:43 +0200 Subject: [PATCH 120/157] REUSE: dep5-style licensing For some dozens of files, adding license information in or next to the file is unwanted: - the translations are variable, and licensing information embedded in them is removed on update; since the translations are derived from the sources, blanket-license them as GPL-3.0-or-later - FreeBSD packaging (ports) directories have a specific structure .. and more cases like that. See the dep5 file for details. --- .reuse/dep5 | 99 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 99 insertions(+) create mode 100644 .reuse/dep5 diff --git a/.reuse/dep5 b/.reuse/dep5 new file mode 100644 index 0000000000..6ed0da1497 --- /dev/null +++ b/.reuse/dep5 @@ -0,0 +1,99 @@ +Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ +Upstream-Name: Calamares +Source: https://github.com/calamares/calamares.git + +### ACTUAL LICENSES +# +# Images in the locale module are a bit unclear; they were added +# by Teo in 2014 but I suspect they came from somewhere else. +# +Files: src/modules/locale/images/timezone*.png +License: GPL-3.0-or-later +Copyright: 2014 Teo Mrnjavac + +Files: man/calamares.8 +License: GPL-3.0-or-later +Copyright: 2017 Jonathan Carter + +### BUILD ARTIFACTS / NOT SOURCE +# +# QRC Files are basically build artifacts +# +FILES: src/modules/*/*.qrc +License: CC0-1.0 +Copyright: no + +# GitHub issue templates are not part of the source +# +Files: .github/ISSUE_TEMPLATE/* +License: CC0-1.0 +Copyright: no + +# Packaging information +# +Files: data/FreeBSD/distinfo data/FreeBSD/pkg-descr data/FreeBSD/pkg-plist +License: CC0-1.0 +Copyright: no + +# Example data for timezones, which is copied out of zoneinfo, +# which has this notice: +# +# This file is in the public domain, so clarified as of +# 2009-05-17 by Arthur David Olson. +# +Files: data/example-root/usr/share/zoneinfo/Zulu data/example-root/usr/share/zoneinfo/UTC data/example-root/usr/share/zoneinfo/America/New_York +License: CC0-1.0 +Copyright: no + +### TRANSLATIONS +# +# .desktop files and template change only with translation +# +FILES: calamares.desktop* +License: CC0-1.0 +Copyright: no + +# Transifex translations derive from the source, and have no +# embedded copyright information. +# +Files: lang/*.ts +License: GPL-3.0-or-later +Copyright: 2020 Calamares authors and translators + +# Translations of branding slideshow are the same +Files: src/branding/default/lang/*.ts +License: GPL-3.0-or-later +Copyright: 2020 Calamares authors and translators + +# Python translation files have some copyright information, but +# it's generally very sketchy. +# +Files: lang/python.pot +License: GPL-3.0-or-later +Copyright: 2020 Calamares authors and translators + +Files: lang/python/*/LC_MESSAGES/python.po +License: GPL-3.0-or-later +Copyright: 2020 Calamares authors and translators + +Files: src/modules/dummypythonqt/lang/dummypythonqt.pot +License: GPL-3.0-or-later +Copyright: 2020 Calamares authors and translators + +Files: src/modules/dummypythonqt/lang/*/LC_MESSAGES/dummypythonqt.po +License: GPL-3.0-or-later +Copyright: 2020 Calamares authors and translators + +### FIXME ISSUES +# +# The .mo files are build artifacts +# +# FIXME: these shouldn't be in the source repo at all +# +Files: lang/python/*/LC_MESSAGES/python.mo +License: GPL-3.0-or-later +Copyright: 2020 Calamares authors and translators + +Files: src/modules/dummypythonqt/lang/*/LC_MESSAGES/dummypythonqt.mo +License: GPL-3.0-or-later +Copyright: 2020 Calamares authors and translators From 1cd9b93a224e3e4bf08a75ed1c86469fb26694ab Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Tue, 25 Aug 2020 16:05:56 +0200 Subject: [PATCH 121/157] REUSE: Giant boilerplate cleanup - point to main Calamares site in the 'part of' headers instead of to github (this is the "this file is part of Calamares" opening line for most files). - remove boilerplate from all source files, CMake modules and completions, this is the 3-paragraph summary of the GPL-3.0-or-later, which has a meaning entirely covered by the SPDX tag. --- CMakeLists.txt | 15 ++----------- CMakeModules/BoostPython3.cmake | 2 +- CMakeModules/CMakeColors.cmake | 2 +- CMakeModules/CMakeDateStamp.cmake | 2 +- CMakeModules/CMakeVersionSource.cmake | 2 +- .../CalamaresAddBrandingSubdirectory.cmake | 14 ++----------- CMakeModules/CalamaresAddLibrary.cmake | 14 ++----------- .../CalamaresAddModuleSubdirectory.cmake | 14 ++----------- CMakeModules/CalamaresAddPlugin.cmake | 14 ++----------- CMakeModules/CalamaresAddTest.cmake | 14 ++----------- CMakeModules/CalamaresAddTranslations.cmake | 14 ++----------- CMakeModules/CalamaresAutomoc.cmake | 14 ++----------- CMakeModules/FindCrypt.cmake | 2 +- CMakeModules/FindLibPWQuality.cmake | 2 +- CMakeModules/FindPythonQt.cmake | 2 +- CMakeModules/FindYAMLCPP.cmake | 2 +- ci/txcheck.sh | 2 +- ci/txpull.sh | 2 +- ci/txpush.sh | 2 +- data/completion/bash/calamares | 14 ++----------- lang/CMakeLists.txt | 2 +- lang/txload.cpp | 19 ++++------------- src/CMakeLists.txt | 2 +- src/branding/CMakeLists.txt | 2 +- src/branding/default/show.qml | 14 ++----------- src/calamares/CMakeLists.txt | 2 +- src/calamares/CalamaresApplication.cpp | 14 ++----------- src/calamares/CalamaresApplication.h | 14 ++----------- src/calamares/CalamaresWindow.cpp | 14 ++----------- src/calamares/CalamaresWindow.h | 14 ++----------- src/calamares/DebugWindow.cpp | 14 ++----------- src/calamares/DebugWindow.h | 14 ++----------- src/calamares/VariantModel.cpp | 14 ++----------- src/calamares/VariantModel.h | 14 ++----------- src/calamares/main.cpp | 14 ++----------- .../progresstree/ProgressTreeDelegate.cpp | 14 ++----------- .../progresstree/ProgressTreeDelegate.h | 14 ++----------- .../progresstree/ProgressTreeView.cpp | 14 ++----------- src/calamares/progresstree/ProgressTreeView.h | 14 ++----------- src/calamares/test_conf.cpp | 14 ++----------- src/calamares/testmain.cpp | 14 ++----------- src/libcalamares/CMakeLists.txt | 2 +- src/libcalamares/CalamaresConfig.h.in | 19 +++-------------- src/libcalamares/CppJob.cpp | 21 ++++--------------- src/libcalamares/CppJob.h | 21 ++++--------------- src/libcalamares/DllMacro.h | 19 +++-------------- src/libcalamares/GlobalStorage.cpp | 14 ++----------- src/libcalamares/GlobalStorage.h | 14 ++----------- src/libcalamares/Job.cpp | 19 +++-------------- src/libcalamares/Job.h | 14 ++----------- src/libcalamares/JobExample.cpp | 21 ++++--------------- src/libcalamares/JobExample.h | 21 ++++--------------- src/libcalamares/JobQueue.cpp | 19 +++-------------- src/libcalamares/JobQueue.h | 19 +++-------------- src/libcalamares/ProcessJob.cpp | 21 ++++--------------- src/libcalamares/ProcessJob.h | 21 ++++--------------- src/libcalamares/PythonHelper.cpp | 21 ++++--------------- src/libcalamares/PythonHelper.h | 21 ++++--------------- src/libcalamares/PythonJob.cpp | 19 +++-------------- src/libcalamares/PythonJob.h | 19 +++-------------- src/libcalamares/PythonJobApi.cpp | 21 ++++--------------- src/libcalamares/PythonJobApi.h | 21 ++++--------------- src/libcalamares/Settings.cpp | 14 ++----------- src/libcalamares/Settings.h | 14 ++----------- src/libcalamares/Tests.cpp | 14 ++----------- src/libcalamares/geoip/GeoIPFixed.cpp | 18 +++------------- src/libcalamares/geoip/GeoIPFixed.h | 18 +++------------- src/libcalamares/geoip/GeoIPJSON.cpp | 21 ++++--------------- src/libcalamares/geoip/GeoIPJSON.h | 21 ++++--------------- src/libcalamares/geoip/GeoIPTests.cpp | 21 ++++--------------- src/libcalamares/geoip/GeoIPTests.h | 21 ++++--------------- src/libcalamares/geoip/GeoIPXML.cpp | 21 ++++--------------- src/libcalamares/geoip/GeoIPXML.h | 21 ++++--------------- src/libcalamares/geoip/Handler.cpp | 21 ++++--------------- src/libcalamares/geoip/Handler.h | 21 ++++--------------- src/libcalamares/geoip/Interface.cpp | 19 +++-------------- src/libcalamares/geoip/Interface.h | 21 ++++--------------- src/libcalamares/geoip/test_geoip.cpp | 21 ++++--------------- src/libcalamares/locale/CountryData_p.cpp | 2 +- src/libcalamares/locale/Label.cpp | 14 ++----------- src/libcalamares/locale/Label.h | 14 ++----------- src/libcalamares/locale/LabelModel.cpp | 14 ++----------- src/libcalamares/locale/LabelModel.h | 14 ++----------- src/libcalamares/locale/Lookup.cpp | 14 ++----------- src/libcalamares/locale/Lookup.h | 14 ++----------- src/libcalamares/locale/Tests.cpp | 14 ++----------- src/libcalamares/locale/TimeZone.cpp | 14 ++----------- src/libcalamares/locale/TimeZone.h | 14 ++----------- .../locale/TranslatableConfiguration.cpp | 14 ++----------- .../locale/TranslatableConfiguration.h | 14 ++----------- .../locale/TranslatableString.cpp | 14 ++----------- src/libcalamares/locale/TranslatableString.h | 14 ++----------- src/libcalamares/locale/cldr-extractor.py | 4 ++-- src/libcalamares/locale/zone-extractor.py | 4 ++-- src/libcalamares/modulesystem/Actions.h | 14 ++----------- src/libcalamares/modulesystem/Descriptor.cpp | 2 +- src/libcalamares/modulesystem/Descriptor.h | 14 ++----------- src/libcalamares/modulesystem/InstanceKey.cpp | 14 ++----------- src/libcalamares/modulesystem/InstanceKey.h | 14 ++----------- src/libcalamares/modulesystem/Module.cpp | 14 ++----------- src/libcalamares/modulesystem/Module.h | 14 ++----------- src/libcalamares/modulesystem/Requirement.h | 14 ++----------- .../modulesystem/RequirementsChecker.cpp | 14 ++----------- .../modulesystem/RequirementsChecker.h | 14 ++----------- .../modulesystem/RequirementsModel.cpp | 14 ++----------- .../modulesystem/RequirementsModel.h | 14 ++----------- src/libcalamares/modulesystem/Tests.cpp | 14 ++----------- src/libcalamares/network/Manager.cpp | 19 +++-------------- src/libcalamares/network/Manager.h | 19 +++-------------- src/libcalamares/network/Tests.cpp | 21 ++++--------------- src/libcalamares/network/Tests.h | 21 ++++--------------- src/libcalamares/partition/FileSystem.cpp | 14 ++----------- src/libcalamares/partition/FileSystem.h | 14 ++----------- src/libcalamares/partition/KPMManager.cpp | 14 ++----------- src/libcalamares/partition/KPMManager.h | 14 ++----------- src/libcalamares/partition/KPMTests.cpp | 14 ++----------- src/libcalamares/partition/Mount.cpp | 14 ++----------- src/libcalamares/partition/Mount.h | 14 ++----------- .../partition/PartitionIterator.cpp | 14 ++----------- .../partition/PartitionIterator.h | 14 ++----------- src/libcalamares/partition/PartitionQuery.cpp | 14 ++----------- src/libcalamares/partition/PartitionQuery.h | 14 ++----------- src/libcalamares/partition/PartitionSize.cpp | 14 ++----------- src/libcalamares/partition/PartitionSize.h | 14 ++----------- src/libcalamares/partition/Sync.cpp | 14 ++----------- src/libcalamares/partition/Sync.h | 14 ++----------- src/libcalamares/partition/Tests.cpp | 14 ++----------- src/libcalamares/partition/Tests.h | 14 ++----------- src/libcalamares/utils/BoostPython.h | 14 ++----------- .../utils/CalamaresUtilsSystem.cpp | 14 ++----------- src/libcalamares/utils/CalamaresUtilsSystem.h | 14 ++----------- src/libcalamares/utils/CommandList.cpp | 14 ++----------- src/libcalamares/utils/CommandList.h | 14 ++----------- src/libcalamares/utils/Dirs.cpp | 14 ++----------- src/libcalamares/utils/Dirs.h | 14 ++----------- src/libcalamares/utils/Entropy.cpp | 14 ++----------- src/libcalamares/utils/Entropy.h | 14 ++----------- src/libcalamares/utils/Logger.cpp | 14 ++----------- src/libcalamares/utils/Logger.h | 14 ++----------- src/libcalamares/utils/NamedEnum.h | 14 ++----------- src/libcalamares/utils/NamedSuffix.h | 14 ++----------- src/libcalamares/utils/Permissions.cpp | 2 +- src/libcalamares/utils/Permissions.h | 2 +- src/libcalamares/utils/PluginFactory.cpp | 14 ++----------- src/libcalamares/utils/PluginFactory.h | 14 ++----------- src/libcalamares/utils/RAII.h | 14 ++----------- src/libcalamares/utils/Retranslator.cpp | 14 ++----------- src/libcalamares/utils/Retranslator.h | 14 ++----------- src/libcalamares/utils/String.cpp | 14 ++----------- src/libcalamares/utils/String.h | 14 ++----------- src/libcalamares/utils/TestPaths.cpp | 14 ++----------- src/libcalamares/utils/Tests.cpp | 14 ++----------- src/libcalamares/utils/Traits.h | 14 ++----------- src/libcalamares/utils/UMask.cpp | 14 ++----------- src/libcalamares/utils/UMask.h | 14 ++----------- src/libcalamares/utils/Units.h | 14 ++----------- src/libcalamares/utils/Variant.cpp | 14 ++----------- src/libcalamares/utils/Variant.h | 14 ++----------- src/libcalamares/utils/Yaml.cpp | 14 ++----------- src/libcalamares/utils/Yaml.h | 14 ++----------- src/libcalamares/utils/moc-warnings.h | 14 ++----------- src/libcalamaresui/Branding.cpp | 14 ++----------- src/libcalamaresui/Branding.h | 14 ++----------- src/libcalamaresui/CMakeLists.txt | 2 +- src/libcalamaresui/ViewManager.cpp | 14 ++----------- src/libcalamaresui/ViewManager.h | 14 ++----------- .../modulesystem/CppJobModule.cpp | 14 ++----------- .../modulesystem/CppJobModule.h | 14 ++----------- .../modulesystem/ModuleFactory.cpp | 14 ++----------- .../modulesystem/ModuleFactory.h | 14 ++----------- .../modulesystem/ModuleManager.cpp | 14 ++----------- .../modulesystem/ModuleManager.h | 14 ++----------- .../modulesystem/ProcessJobModule.cpp | 14 ++----------- .../modulesystem/ProcessJobModule.h | 14 ++----------- .../modulesystem/PythonJobModule.cpp | 14 ++----------- .../modulesystem/PythonJobModule.h | 14 ++----------- .../modulesystem/PythonQtViewModule.cpp | 14 ++----------- .../modulesystem/PythonQtViewModule.h | 14 ++----------- .../modulesystem/ViewModule.cpp | 14 ++----------- src/libcalamaresui/modulesystem/ViewModule.h | 14 ++----------- .../utils/CalamaresUtilsGui.cpp | 14 ++----------- src/libcalamaresui/utils/CalamaresUtilsGui.h | 14 ++----------- src/libcalamaresui/utils/ImageRegistry.cpp | 2 +- src/libcalamaresui/utils/ImageRegistry.h | 2 +- src/libcalamaresui/utils/Paste.cpp | 14 ++----------- src/libcalamaresui/utils/Paste.h | 14 ++----------- src/libcalamaresui/utils/PythonQtUtils.cpp | 14 ++----------- src/libcalamaresui/utils/PythonQtUtils.h | 14 ++----------- src/libcalamaresui/utils/Qml.cpp | 14 ++----------- src/libcalamaresui/utils/Qml.h | 14 ++----------- .../viewpages/BlankViewStep.cpp | 14 ++----------- src/libcalamaresui/viewpages/BlankViewStep.h | 14 ++----------- .../viewpages/ExecutionViewStep.cpp | 14 ++----------- .../viewpages/ExecutionViewStep.h | 14 ++----------- .../PythonQtGlobalStorageWrapper.cpp | 14 ++----------- .../viewpages/PythonQtGlobalStorageWrapper.h | 14 ++----------- src/libcalamaresui/viewpages/PythonQtJob.cpp | 14 ++----------- src/libcalamaresui/viewpages/PythonQtJob.h | 14 ++----------- .../viewpages/PythonQtUtilsWrapper.cpp | 14 ++----------- .../viewpages/PythonQtUtilsWrapper.h | 14 ++----------- .../viewpages/PythonQtViewStep.cpp | 14 ++----------- .../viewpages/PythonQtViewStep.h | 14 ++----------- src/libcalamaresui/viewpages/QmlViewStep.cpp | 14 ++----------- src/libcalamaresui/viewpages/QmlViewStep.h | 14 ++----------- src/libcalamaresui/viewpages/Slideshow.cpp | 14 ++----------- src/libcalamaresui/viewpages/Slideshow.h | 14 ++----------- src/libcalamaresui/viewpages/ViewStep.cpp | 14 ++----------- src/libcalamaresui/viewpages/ViewStep.h | 14 ++----------- src/libcalamaresui/widgets/ClickableLabel.cpp | 14 ++----------- src/libcalamaresui/widgets/ClickableLabel.h | 14 ++----------- .../widgets/FixedAspectRatioLabel.cpp | 14 ++----------- .../widgets/FixedAspectRatioLabel.h | 14 ++----------- .../widgets/PrettyRadioButton.cpp | 14 ++----------- .../widgets/PrettyRadioButton.h | 14 ++----------- src/libcalamaresui/widgets/WaitingWidget.cpp | 14 ++----------- src/libcalamaresui/widgets/WaitingWidget.h | 14 ++----------- src/modules/CMakeLists.txt | 2 +- src/modules/bootloader/main.py | 14 ++----------- src/modules/contextualprocess/Binding.h | 14 ++----------- src/modules/contextualprocess/CMakeLists.txt | 2 +- .../ContextualProcessJob.cpp | 14 ++----------- .../contextualprocess/ContextualProcessJob.h | 14 ++----------- src/modules/contextualprocess/Tests.cpp | 14 ++----------- src/modules/contextualprocess/Tests.h | 14 ++----------- src/modules/displaymanager/main.py | 14 ++----------- src/modules/dracut/main.py | 14 ++----------- src/modules/dracutlukscfg/CMakeLists.txt | 2 +- .../dracutlukscfg/DracutLuksCfgJob.cpp | 14 ++----------- src/modules/dracutlukscfg/DracutLuksCfgJob.h | 14 ++----------- src/modules/dummycpp/CMakeLists.txt | 2 +- src/modules/dummycpp/DummyCppJob.cpp | 14 ++----------- src/modules/dummycpp/DummyCppJob.h | 14 ++----------- src/modules/dummypython/main.py | 14 ++----------- src/modules/dummypythonqt/main.py | 14 ++----------- src/modules/finished/CMakeLists.txt | 2 +- src/modules/finished/FinishedPage.cpp | 14 ++----------- src/modules/finished/FinishedPage.h | 14 ++----------- src/modules/finished/FinishedViewStep.cpp | 14 ++----------- src/modules/finished/FinishedViewStep.h | 14 ++----------- src/modules/fsresizer/CMakeLists.txt | 2 +- src/modules/fsresizer/ResizeFSJob.cpp | 14 ++----------- src/modules/fsresizer/ResizeFSJob.h | 14 ++----------- src/modules/fsresizer/Tests.cpp | 14 ++----------- src/modules/fsresizer/Tests.h | 14 ++----------- src/modules/fstab/main.py | 14 ++----------- src/modules/grubcfg/main.py | 14 ++----------- src/modules/hostinfo/CMakeLists.txt | 2 +- src/modules/hostinfo/HostInfoJob.cpp | 14 ++----------- src/modules/hostinfo/HostInfoJob.h | 14 ++----------- src/modules/hostinfo/Tests.cpp | 14 ++----------- src/modules/hwclock/main.py | 14 ++----------- src/modules/initcpio/CMakeLists.txt | 2 +- src/modules/initcpio/InitcpioJob.cpp | 14 ++----------- src/modules/initcpio/InitcpioJob.h | 14 ++----------- src/modules/initcpio/Tests.cpp | 14 ++----------- src/modules/initcpio/Tests.h | 14 ++----------- src/modules/initcpiocfg/main.py | 14 ++----------- src/modules/initramfs/CMakeLists.txt | 2 +- src/modules/initramfs/InitramfsJob.cpp | 14 ++----------- src/modules/initramfs/InitramfsJob.h | 14 ++----------- src/modules/initramfs/Tests.cpp | 14 ++----------- src/modules/initramfs/Tests.h | 14 ++----------- src/modules/initramfscfg/main.py | 14 ++----------- .../interactiveterminal/CMakeLists.txt | 2 +- .../InteractiveTerminalPage.cpp | 14 ++----------- .../InteractiveTerminalPage.h | 14 ++----------- .../InteractiveTerminalViewStep.cpp | 14 ++----------- .../InteractiveTerminalViewStep.h | 14 ++----------- src/modules/keyboard/CMakeLists.txt | 2 +- src/modules/keyboard/Config.cpp | 14 ++----------- src/modules/keyboard/Config.h | 14 ++----------- src/modules/keyboard/KeyboardLayoutModel.cpp | 14 ++----------- src/modules/keyboard/KeyboardLayoutModel.h | 14 ++----------- src/modules/keyboard/KeyboardPage.cpp | 14 ++----------- src/modules/keyboard/KeyboardPage.h | 14 ++----------- src/modules/keyboard/KeyboardViewStep.cpp | 14 ++----------- src/modules/keyboard/KeyboardViewStep.h | 14 ++----------- src/modules/keyboard/SetKeyboardLayoutJob.cpp | 14 ++----------- src/modules/keyboard/SetKeyboardLayoutJob.h | 14 ++----------- .../keyboardwidget/keyboardglobal.cpp | 14 ++----------- .../keyboard/keyboardwidget/keyboardglobal.h | 14 ++----------- .../keyboardwidget/keyboardpreview.cpp | 14 ++----------- .../keyboard/keyboardwidget/keyboardpreview.h | 14 ++----------- src/modules/keyboardq/CMakeLists.txt | 2 +- src/modules/keyboardq/KeyboardQmlViewStep.cpp | 14 ++----------- src/modules/keyboardq/KeyboardQmlViewStep.h | 14 ++----------- src/modules/license/CMakeLists.txt | 2 +- src/modules/license/LicensePage.cpp | 14 ++----------- src/modules/license/LicensePage.h | 14 ++----------- src/modules/license/LicenseViewStep.cpp | 14 ++----------- src/modules/license/LicenseViewStep.h | 14 ++----------- src/modules/license/LicenseWidget.cpp | 14 ++----------- src/modules/license/LicenseWidget.h | 14 ++----------- src/modules/locale/CMakeLists.txt | 2 +- src/modules/locale/Config.cpp | 14 ++----------- src/modules/locale/Config.h | 14 ++----------- src/modules/locale/LCLocaleDialog.cpp | 14 ++----------- src/modules/locale/LCLocaleDialog.h | 14 ++----------- src/modules/locale/LocaleConfiguration.cpp | 14 ++----------- src/modules/locale/LocaleConfiguration.h | 14 ++----------- src/modules/locale/LocalePage.cpp | 14 ++----------- src/modules/locale/LocalePage.h | 14 ++----------- src/modules/locale/LocaleViewStep.cpp | 14 ++----------- src/modules/locale/LocaleViewStep.h | 14 ++----------- src/modules/locale/SetTimezoneJob.cpp | 14 ++----------- src/modules/locale/SetTimezoneJob.h | 14 ++----------- src/modules/locale/Tests.cpp | 14 ++----------- .../locale/timezonewidget/TimeZoneImage.cpp | 14 ++----------- .../locale/timezonewidget/TimeZoneImage.h | 14 ++----------- .../locale/timezonewidget/timezonewidget.cpp | 14 ++----------- .../locale/timezonewidget/timezonewidget.h | 14 ++----------- src/modules/localecfg/main.py | 14 ++----------- src/modules/localeq/CMakeLists.txt | 2 +- src/modules/localeq/LocaleQmlViewStep.cpp | 14 ++----------- src/modules/localeq/LocaleQmlViewStep.h | 14 ++----------- src/modules/localeq/Map.qml | 14 ++----------- src/modules/localeq/Offline.qml | 14 ++----------- src/modules/localeq/i18n.qml | 14 ++----------- src/modules/localeq/localeq.qml | 14 ++----------- src/modules/luksbootkeyfile/CMakeLists.txt | 2 +- .../luksbootkeyfile/LuksBootKeyFileJob.cpp | 2 +- .../luksbootkeyfile/LuksBootKeyFileJob.h | 2 +- src/modules/luksopenswaphookcfg/main.py | 14 ++----------- src/modules/machineid/CMakeLists.txt | 2 +- src/modules/machineid/MachineIdJob.cpp | 14 ++----------- src/modules/machineid/MachineIdJob.h | 14 ++----------- src/modules/machineid/Tests.cpp | 14 ++----------- src/modules/machineid/Workers.cpp | 14 ++----------- src/modules/machineid/Workers.h | 14 ++----------- src/modules/mkinitfs/main.py | 14 ++----------- src/modules/mount/main.py | 14 ++----------- src/modules/netinstall/CMakeLists.txt | 2 +- src/modules/netinstall/Config.cpp | 12 +---------- src/modules/netinstall/Config.h | 12 +---------- src/modules/netinstall/NetInstallPage.cpp | 12 +---------- src/modules/netinstall/NetInstallPage.h | 12 +---------- src/modules/netinstall/NetInstallViewStep.cpp | 12 +---------- src/modules/netinstall/NetInstallViewStep.h | 12 +---------- src/modules/netinstall/PackageModel.cpp | 14 ++----------- src/modules/netinstall/PackageModel.h | 14 ++----------- src/modules/netinstall/PackageTreeItem.cpp | 14 ++----------- src/modules/netinstall/PackageTreeItem.h | 14 ++----------- src/modules/netinstall/Tests.cpp | 14 ++----------- src/modules/networkcfg/main.py | 14 ++----------- src/modules/notesqml/CMakeLists.txt | 2 +- src/modules/notesqml/NotesQmlViewStep.cpp | 2 +- src/modules/notesqml/NotesQmlViewStep.h | 2 +- .../notesqml/examples/notesqml.qml.example | 2 +- src/modules/notesqml/notesqml.qml | 2 +- src/modules/oemid/CMakeLists.txt | 2 +- src/modules/oemid/IDJob.cpp | 14 ++----------- src/modules/oemid/IDJob.h | 14 ++----------- src/modules/oemid/OEMViewStep.cpp | 14 ++----------- src/modules/oemid/OEMViewStep.h | 14 ++----------- src/modules/openrcdmcryptcfg/main.py | 14 ++----------- src/modules/packagechooser/CMakeLists.txt | 2 +- src/modules/packagechooser/ItemAppData.cpp | 14 ++----------- src/modules/packagechooser/ItemAppData.h | 14 ++----------- src/modules/packagechooser/ItemAppStream.cpp | 14 ++----------- src/modules/packagechooser/ItemAppStream.h | 14 ++----------- .../packagechooser/PackageChooserPage.cpp | 14 ++----------- .../packagechooser/PackageChooserPage.h | 14 ++----------- .../packagechooser/PackageChooserViewStep.cpp | 14 ++----------- .../packagechooser/PackageChooserViewStep.h | 14 ++----------- src/modules/packagechooser/PackageModel.cpp | 14 ++----------- src/modules/packagechooser/PackageModel.h | 14 ++----------- src/modules/packagechooser/Tests.cpp | 14 ++----------- src/modules/packagechooser/Tests.h | 14 ++----------- src/modules/packages/main.py | 14 ++----------- src/modules/partition/CMakeLists.txt | 2 +- .../partition/core/BootLoaderModel.cpp | 14 ++----------- src/modules/partition/core/BootLoaderModel.h | 14 ++----------- src/modules/partition/core/ColorUtils.cpp | 14 ++----------- src/modules/partition/core/ColorUtils.h | 14 ++----------- src/modules/partition/core/Config.cpp | 14 ++----------- src/modules/partition/core/Config.h | 14 ++----------- src/modules/partition/core/DeviceList.cpp | 14 ++----------- src/modules/partition/core/DeviceList.h | 14 ++----------- src/modules/partition/core/DeviceModel.cpp | 14 ++----------- src/modules/partition/core/DeviceModel.h | 14 ++----------- src/modules/partition/core/KPMHelpers.cpp | 14 ++----------- src/modules/partition/core/KPMHelpers.h | 14 ++----------- src/modules/partition/core/OsproberEntry.h | 14 ++----------- src/modules/partition/core/PartUtils.cpp | 14 ++----------- src/modules/partition/core/PartUtils.h | 14 ++----------- .../partition/core/PartitionActions.cpp | 14 ++----------- src/modules/partition/core/PartitionActions.h | 14 ++----------- .../partition/core/PartitionCoreModule.cpp | 14 ++----------- .../partition/core/PartitionCoreModule.h | 14 ++----------- src/modules/partition/core/PartitionInfo.cpp | 14 ++----------- src/modules/partition/core/PartitionInfo.h | 14 ++----------- .../partition/core/PartitionLayout.cpp | 14 ++----------- src/modules/partition/core/PartitionLayout.h | 14 ++----------- src/modules/partition/core/PartitionModel.cpp | 14 ++----------- src/modules/partition/core/PartitionModel.h | 14 ++----------- src/modules/partition/gui/BootInfoWidget.cpp | 14 ++----------- src/modules/partition/gui/BootInfoWidget.h | 14 ++----------- src/modules/partition/gui/ChoicePage.cpp | 14 ++----------- src/modules/partition/gui/ChoicePage.h | 14 ++----------- .../partition/gui/CreatePartitionDialog.cpp | 14 ++----------- .../partition/gui/CreatePartitionDialog.h | 14 ++----------- .../partition/gui/CreateVolumeGroupDialog.cpp | 14 ++----------- .../partition/gui/CreateVolumeGroupDialog.h | 14 ++----------- .../partition/gui/DeviceInfoWidget.cpp | 14 ++----------- src/modules/partition/gui/DeviceInfoWidget.h | 14 ++----------- .../gui/EditExistingPartitionDialog.cpp | 14 ++----------- .../gui/EditExistingPartitionDialog.h | 14 ++----------- src/modules/partition/gui/EncryptWidget.cpp | 14 ++----------- src/modules/partition/gui/EncryptWidget.h | 14 ++----------- .../gui/ListPhysicalVolumeWidgetItem.cpp | 14 ++----------- .../gui/ListPhysicalVolumeWidgetItem.h | 14 ++----------- .../partition/gui/PartitionBarsView.cpp | 14 ++----------- src/modules/partition/gui/PartitionBarsView.h | 14 ++----------- .../partition/gui/PartitionDialogHelpers.cpp | 14 ++----------- .../partition/gui/PartitionDialogHelpers.h | 14 ++----------- .../partition/gui/PartitionLabelsView.cpp | 14 ++----------- .../partition/gui/PartitionLabelsView.h | 14 ++----------- src/modules/partition/gui/PartitionPage.cpp | 14 ++----------- src/modules/partition/gui/PartitionPage.h | 14 ++----------- .../partition/gui/PartitionSizeController.cpp | 14 ++----------- .../partition/gui/PartitionSizeController.h | 14 ++----------- .../partition/gui/PartitionSplitterWidget.cpp | 14 ++----------- .../partition/gui/PartitionSplitterWidget.h | 14 ++----------- .../gui/PartitionViewSelectionFilter.h | 14 ++----------- .../partition/gui/PartitionViewStep.cpp | 14 ++----------- src/modules/partition/gui/PartitionViewStep.h | 14 ++----------- src/modules/partition/gui/ReplaceWidget.cpp | 14 ++----------- src/modules/partition/gui/ReplaceWidget.h | 14 ++----------- .../partition/gui/ResizeVolumeGroupDialog.cpp | 14 ++----------- .../partition/gui/ResizeVolumeGroupDialog.h | 14 ++----------- src/modules/partition/gui/ScanningDialog.cpp | 14 ++----------- src/modules/partition/gui/ScanningDialog.h | 14 ++----------- .../partition/gui/VolumeGroupBaseDialog.cpp | 14 ++----------- .../partition/gui/VolumeGroupBaseDialog.h | 14 ++----------- src/modules/partition/jobs/ClearMountsJob.cpp | 14 ++----------- src/modules/partition/jobs/ClearMountsJob.h | 14 ++----------- .../partition/jobs/ClearTempMountsJob.cpp | 14 ++----------- .../partition/jobs/ClearTempMountsJob.h | 14 ++----------- .../partition/jobs/CreatePartitionJob.cpp | 14 ++----------- .../partition/jobs/CreatePartitionJob.h | 14 ++----------- .../jobs/CreatePartitionTableJob.cpp | 14 ++----------- .../partition/jobs/CreatePartitionTableJob.h | 14 ++----------- .../partition/jobs/CreateVolumeGroupJob.cpp | 14 ++----------- .../partition/jobs/CreateVolumeGroupJob.h | 14 ++----------- .../jobs/DeactivateVolumeGroupJob.cpp | 14 ++----------- .../partition/jobs/DeactivateVolumeGroupJob.h | 14 ++----------- .../partition/jobs/DeletePartitionJob.cpp | 14 ++----------- .../partition/jobs/DeletePartitionJob.h | 14 ++----------- .../partition/jobs/FillGlobalStorageJob.cpp | 14 ++----------- .../partition/jobs/FillGlobalStorageJob.h | 14 ++----------- .../partition/jobs/FormatPartitionJob.cpp | 14 ++----------- .../partition/jobs/FormatPartitionJob.h | 14 ++----------- src/modules/partition/jobs/PartitionJob.cpp | 14 ++----------- src/modules/partition/jobs/PartitionJob.h | 14 ++----------- .../partition/jobs/RemoveVolumeGroupJob.cpp | 14 ++----------- .../partition/jobs/RemoveVolumeGroupJob.h | 14 ++----------- .../partition/jobs/ResizePartitionJob.cpp | 14 ++----------- .../partition/jobs/ResizePartitionJob.h | 14 ++----------- .../partition/jobs/ResizeVolumeGroupJob.cpp | 14 ++----------- .../partition/jobs/ResizeVolumeGroupJob.h | 14 ++----------- .../partition/jobs/SetPartitionFlagsJob.cpp | 14 ++----------- .../partition/jobs/SetPartitionFlagsJob.h | 14 ++----------- src/modules/partition/tests/CMakeLists.txt | 2 +- .../partition/tests/ClearMountsJobTests.cpp | 14 ++----------- .../partition/tests/ClearMountsJobTests.h | 14 ++----------- .../partition/tests/PartitionJobTests.cpp | 14 ++----------- .../partition/tests/PartitionJobTests.h | 14 ++----------- src/modules/plasmalnf/CMakeLists.txt | 2 +- src/modules/plasmalnf/PlasmaLnfJob.cpp | 14 ++----------- src/modules/plasmalnf/PlasmaLnfJob.h | 14 ++----------- src/modules/plasmalnf/PlasmaLnfPage.cpp | 14 ++----------- src/modules/plasmalnf/PlasmaLnfPage.h | 14 ++----------- src/modules/plasmalnf/PlasmaLnfViewStep.cpp | 14 ++----------- src/modules/plasmalnf/PlasmaLnfViewStep.h | 14 ++----------- src/modules/plasmalnf/ThemeInfo.h | 14 ++----------- src/modules/plasmalnf/ThemeWidget.cpp | 14 ++----------- src/modules/plasmalnf/ThemeWidget.h | 14 ++----------- src/modules/plymouthcfg/main.py | 14 ++----------- src/modules/preservefiles/CMakeLists.txt | 2 +- src/modules/preservefiles/PreserveFiles.cpp | 3 +-- src/modules/preservefiles/PreserveFiles.h | 3 +-- src/modules/rawfs/main.py | 14 ++----------- src/modules/removeuser/CMakeLists.txt | 2 +- src/modules/removeuser/RemoveUserJob.cpp | 14 ++----------- src/modules/removeuser/RemoveUserJob.h | 14 ++----------- src/modules/services-openrc/main.py | 14 ++----------- src/modules/services-systemd/main.py | 14 ++----------- src/modules/shellprocess/CMakeLists.txt | 2 +- src/modules/shellprocess/ShellProcessJob.cpp | 14 ++----------- src/modules/shellprocess/ShellProcessJob.h | 14 ++----------- src/modules/shellprocess/Tests.cpp | 14 ++----------- src/modules/shellprocess/Tests.h | 14 ++----------- src/modules/summary/CMakeLists.txt | 2 +- src/modules/summary/SummaryPage.cpp | 14 ++----------- src/modules/summary/SummaryPage.h | 14 ++----------- src/modules/summary/SummaryViewStep.cpp | 14 ++----------- src/modules/summary/SummaryViewStep.h | 14 ++----------- src/modules/tracking/CMakeLists.txt | 2 +- src/modules/tracking/Config.cpp | 14 ++----------- src/modules/tracking/Config.h | 14 ++----------- src/modules/tracking/Tests.cpp | 2 +- src/modules/tracking/TrackingJobs.cpp | 14 ++----------- src/modules/tracking/TrackingJobs.h | 14 ++----------- src/modules/tracking/TrackingPage.cpp | 14 ++----------- src/modules/tracking/TrackingPage.h | 14 ++----------- src/modules/tracking/TrackingType.h | 14 ++----------- src/modules/tracking/TrackingViewStep.cpp | 14 ++----------- src/modules/tracking/TrackingViewStep.h | 14 ++----------- src/modules/umount/main.py | 14 ++----------- src/modules/unpackfs/main.py | 14 ++----------- src/modules/users/CMakeLists.txt | 2 +- src/modules/users/CheckPWQuality.cpp | 14 ++----------- src/modules/users/CheckPWQuality.h | 14 ++----------- src/modules/users/Config.cpp | 14 ++----------- src/modules/users/Config.h | 14 ++----------- src/modules/users/CreateUserJob.cpp | 2 +- src/modules/users/CreateUserJob.h | 14 ++----------- src/modules/users/SetHostNameJob.cpp | 14 ++----------- src/modules/users/SetHostNameJob.h | 14 ++----------- src/modules/users/SetPasswordJob.cpp | 14 ++----------- src/modules/users/SetPasswordJob.h | 14 ++----------- src/modules/users/TestCreateUserJob.cpp | 14 ++----------- src/modules/users/TestPasswordJob.cpp | 14 ++----------- src/modules/users/TestSetHostNameJob.cpp | 14 ++----------- src/modules/users/Tests.cpp | 14 ++----------- src/modules/users/UsersPage.cpp | 14 ++----------- src/modules/users/UsersPage.h | 14 ++----------- src/modules/users/UsersViewStep.cpp | 14 ++----------- src/modules/users/UsersViewStep.h | 14 ++----------- src/modules/usersq/CMakeLists.txt | 2 +- src/modules/usersq/UsersQmlViewStep.cpp | 14 ++----------- src/modules/usersq/UsersQmlViewStep.h | 14 ++----------- src/modules/usersq/usersq.qml | 21 +++++-------------- src/modules/webview/CMakeLists.txt | 2 +- src/modules/webview/WebViewStep.cpp | 14 ++----------- src/modules/webview/WebViewStep.h | 14 ++----------- src/modules/welcome/CMakeLists.txt | 2 +- src/modules/welcome/Config.cpp | 14 ++----------- src/modules/welcome/Config.h | 14 ++----------- src/modules/welcome/WelcomePage.cpp | 14 ++----------- src/modules/welcome/WelcomePage.h | 14 ++----------- src/modules/welcome/WelcomeViewStep.cpp | 14 ++----------- src/modules/welcome/WelcomeViewStep.h | 14 ++----------- .../welcome/checker/CheckerContainer.cpp | 14 ++----------- .../welcome/checker/CheckerContainer.h | 14 ++----------- .../welcome/checker/GeneralRequirements.cpp | 14 ++----------- .../welcome/checker/GeneralRequirements.h | 14 ++----------- src/modules/welcome/checker/ResultWidget.cpp | 14 ++----------- src/modules/welcome/checker/ResultWidget.h | 14 ++----------- .../welcome/checker/ResultsListWidget.cpp | 14 ++----------- .../welcome/checker/ResultsListWidget.h | 14 ++----------- src/modules/welcome/checker/partman_devices.c | 14 ++----------- src/modules/welcome/checker/partman_devices.h | 14 ++----------- src/modules/welcomeq/CMakeLists.txt | 2 +- src/modules/welcomeq/Recommended.qml | 14 ++----------- src/modules/welcomeq/Requirements.qml | 14 ++----------- src/modules/welcomeq/WelcomeQmlViewStep.cpp | 14 ++----------- src/modules/welcomeq/WelcomeQmlViewStep.h | 14 ++----------- src/modules/welcomeq/about.qml | 14 ++----------- src/modules/welcomeq/release_notes.qml | 14 ++----------- src/modules/welcomeq/welcomeq.qml | 14 ++----------- src/qml/calamares/CMakeLists.txt | 2 +- src/qml/calamares/slideshow/BackButton.qml | 14 ++----------- src/qml/calamares/slideshow/ForwardButton.qml | 14 ++----------- src/qml/calamares/slideshow/NavButton.qml | 14 ++----------- src/qml/calamares/slideshow/Presentation.qml | 2 +- src/qml/calamares/slideshow/Slide.qml | 2 +- src/qml/calamares/slideshow/SlideCounter.qml | 14 ++----------- 568 files changed, 1121 insertions(+), 6186 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index e35253a10c..4e95dad8bd 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,22 +1,11 @@ -# === This file is part of Calamares - === +# === This file is part of Calamares - === # # SPDX-FileCopyrightText: 2017 Adriaan de Groot # SPDX-License-Identifier: BSD-2-Clause # ### # -# Calamares is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# Calamares is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Calamares. If not, see . +# Calamares is Free Software: see the License-Identifier above. # # Individual files may have different licenses (like the CMake # infrastructure, which is BSD-2-Clause licensed). Check the SPDX diff --git a/CMakeModules/BoostPython3.cmake b/CMakeModules/BoostPython3.cmake index e53f9072db..bd1d24e0e8 100644 --- a/CMakeModules/BoostPython3.cmake +++ b/CMakeModules/BoostPython3.cmake @@ -1,4 +1,4 @@ -# === This file is part of Calamares - === +# === This file is part of Calamares - === # # SPDX-FileCopyrightText: 2014 Aurélien Gâteau # SPDX-FileCopyrightText: 2017 Adriaan de Groot diff --git a/CMakeModules/CMakeColors.cmake b/CMakeModules/CMakeColors.cmake index 7de050e9be..073c24de6f 100644 --- a/CMakeModules/CMakeColors.cmake +++ b/CMakeModules/CMakeColors.cmake @@ -1,4 +1,4 @@ -# === This file is part of Calamares - === +# === This file is part of Calamares - === # # SPDX-FileCopyrightText: 2014 Teo Mrnjavac # SPDX-FileCopyrightText: 2014 Kevin Kofler diff --git a/CMakeModules/CMakeDateStamp.cmake b/CMakeModules/CMakeDateStamp.cmake index 383475ca29..15482100f1 100644 --- a/CMakeModules/CMakeDateStamp.cmake +++ b/CMakeModules/CMakeDateStamp.cmake @@ -1,4 +1,4 @@ -# === This file is part of Calamares - === +# === This file is part of Calamares - === # # SPDX-FileCopyrightText: 2014 Teo Mrnjavac # SPDX-License-Identifier: BSD-2-Clause diff --git a/CMakeModules/CMakeVersionSource.cmake b/CMakeModules/CMakeVersionSource.cmake index 69ef8ee593..295fffa5d9 100644 --- a/CMakeModules/CMakeVersionSource.cmake +++ b/CMakeModules/CMakeVersionSource.cmake @@ -1,4 +1,4 @@ -# === This file is part of Calamares - === +# === This file is part of Calamares - === # # SPDX-FileCopyrightText: 2014 Teo Mrnjavac # SPDX-License-Identifier: BSD-2-Clause diff --git a/CMakeModules/CalamaresAddBrandingSubdirectory.cmake b/CMakeModules/CalamaresAddBrandingSubdirectory.cmake index d0ecbae5d8..062ad6706e 100644 --- a/CMakeModules/CalamaresAddBrandingSubdirectory.cmake +++ b/CMakeModules/CalamaresAddBrandingSubdirectory.cmake @@ -1,21 +1,11 @@ -# === This file is part of Calamares - === +# === This file is part of Calamares - === # # SPDX-FileCopyrightText: 2014 Teo Mrnjavac # SPDX-FileCopyrightText: 2017 Adriaan de Groot # SPDX-License-Identifier: BSD-2-Clause # -# Calamares is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. +# Calamares is Free Software: see the License-Identifier above. # -# Calamares is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Calamares. If not, see . # ### # diff --git a/CMakeModules/CalamaresAddLibrary.cmake b/CMakeModules/CalamaresAddLibrary.cmake index 892653ae6d..0cbad74245 100644 --- a/CMakeModules/CalamaresAddLibrary.cmake +++ b/CMakeModules/CalamaresAddLibrary.cmake @@ -1,21 +1,11 @@ -# === This file is part of Calamares - === +# === This file is part of Calamares - === # # SPDX-FileCopyrightText: 2014 Teo Mrnjavac # SPDX-FileCopyrightText: 2017 Adriaan de Groot # SPDX-License-Identifier: BSD-2-Clause # -# Calamares is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. +# Calamares is Free Software: see the License-Identifier above. # -# Calamares is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Calamares. If not, see . # ### # diff --git a/CMakeModules/CalamaresAddModuleSubdirectory.cmake b/CMakeModules/CalamaresAddModuleSubdirectory.cmake index 395cd936eb..87f8547f80 100644 --- a/CMakeModules/CalamaresAddModuleSubdirectory.cmake +++ b/CMakeModules/CalamaresAddModuleSubdirectory.cmake @@ -1,21 +1,11 @@ -# === This file is part of Calamares - === +# === This file is part of Calamares - === # # SPDX-FileCopyrightText: 2014 Teo Mrnjavac # SPDX-FileCopyrightText: 2017 Adriaan de Groot # SPDX-License-Identifier: BSD-2-Clause # -# Calamares is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. +# Calamares is Free Software: see the License-Identifier above. # -# Calamares is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Calamares. If not, see . # ### # diff --git a/CMakeModules/CalamaresAddPlugin.cmake b/CMakeModules/CalamaresAddPlugin.cmake index ad85315118..55865999c1 100644 --- a/CMakeModules/CalamaresAddPlugin.cmake +++ b/CMakeModules/CalamaresAddPlugin.cmake @@ -1,21 +1,11 @@ -# === This file is part of Calamares - === +# === This file is part of Calamares - === # # SPDX-FileCopyrightText: 2014 Teo Mrnjavac # SPDX-FileCopyrightText: 2019 Adriaan de Groot # SPDX-License-Identifier: BSD-2-Clause # -# Calamares is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. +# Calamares is Free Software: see the License-Identifier above. # -# Calamares is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Calamares. If not, see . # ### # diff --git a/CMakeModules/CalamaresAddTest.cmake b/CMakeModules/CalamaresAddTest.cmake index 14f9d4144d..5bedf81b54 100644 --- a/CMakeModules/CalamaresAddTest.cmake +++ b/CMakeModules/CalamaresAddTest.cmake @@ -1,20 +1,10 @@ -# === This file is part of Calamares - === +# === This file is part of Calamares - === # # SPDX-FileCopyrightText: 2020 Adriaan de Groot # SPDX-License-Identifier: BSD-2-Clause # -# Calamares is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. +# Calamares is Free Software: see the License-Identifier above. # -# Calamares is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Calamares. If not, see . # ### # diff --git a/CMakeModules/CalamaresAddTranslations.cmake b/CMakeModules/CalamaresAddTranslations.cmake index 27ee1b917a..4d2fa265cd 100644 --- a/CMakeModules/CalamaresAddTranslations.cmake +++ b/CMakeModules/CalamaresAddTranslations.cmake @@ -1,20 +1,10 @@ -# === This file is part of Calamares - === +# === This file is part of Calamares - === # # SPDX-FileCopyrightText: 2017 Adriaan de Groot # SPDX-License-Identifier: BSD-2-Clause # -# Calamares is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. +# Calamares is Free Software: see the License-Identifier above. # -# Calamares is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Calamares. If not, see . # ### # diff --git a/CMakeModules/CalamaresAutomoc.cmake b/CMakeModules/CalamaresAutomoc.cmake index 21ce35d9ca..c7dbd72bfd 100644 --- a/CMakeModules/CalamaresAutomoc.cmake +++ b/CMakeModules/CalamaresAutomoc.cmake @@ -1,20 +1,10 @@ -# === This file is part of Calamares - === +# === This file is part of Calamares - === # # SPDX-FileCopyrightText: 2019 Adriaan de Groot # SPDX-License-Identifier: BSD-2-Clause # -# Calamares is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. +# Calamares is Free Software: see the License-Identifier above. # -# Calamares is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Calamares. If not, see . # ### # diff --git a/CMakeModules/FindCrypt.cmake b/CMakeModules/FindCrypt.cmake index 2a65f9d924..94f8a45106 100644 --- a/CMakeModules/FindCrypt.cmake +++ b/CMakeModules/FindCrypt.cmake @@ -1,4 +1,4 @@ -# === This file is part of Calamares - === +# === This file is part of Calamares - === # # SPDX-FileCopyrightText: 2014 Teo Mrnjavac # SPDX-FileCopyrightText: 2017 Adriaan de Groot diff --git a/CMakeModules/FindLibPWQuality.cmake b/CMakeModules/FindLibPWQuality.cmake index 903c767bb5..2a9943f3dc 100644 --- a/CMakeModules/FindLibPWQuality.cmake +++ b/CMakeModules/FindLibPWQuality.cmake @@ -1,4 +1,4 @@ -# === This file is part of Calamares - === +# === This file is part of Calamares - === # # SPDX-FileCopyrightText: 2018 Adriaan de Groot # SPDX-License-Identifier: BSD-2-Clause diff --git a/CMakeModules/FindPythonQt.cmake b/CMakeModules/FindPythonQt.cmake index 700b381170..81208a86e7 100644 --- a/CMakeModules/FindPythonQt.cmake +++ b/CMakeModules/FindPythonQt.cmake @@ -1,4 +1,4 @@ -# === This file is part of Calamares - === +# === This file is part of Calamares - === # # SPDX-FileCopyrightText: 2016 Teo Mrnjavac # SPDX-FileCopyrightText: 2017 Adriaan de Groot diff --git a/CMakeModules/FindYAMLCPP.cmake b/CMakeModules/FindYAMLCPP.cmake index cc114de921..0752c7bd7c 100644 --- a/CMakeModules/FindYAMLCPP.cmake +++ b/CMakeModules/FindYAMLCPP.cmake @@ -1,4 +1,4 @@ -# === This file is part of Calamares - === +# === This file is part of Calamares - === # # SPDX-FileCopyrightText: 2014 Teo Mrnjavac # SPDX-FileCopyrightText: 2020 Adriaan de Groot diff --git a/ci/txcheck.sh b/ci/txcheck.sh index a2fb5a6154..cedae6682b 100644 --- a/ci/txcheck.sh +++ b/ci/txcheck.sh @@ -1,7 +1,7 @@ #! /bin/sh ### LICENSE -# === This file is part of Calamares - === +# === This file is part of Calamares - === # # SPDX-FileCopyrightText: 2019-2020 Adriaan de Groot # SPDX-License-Identifier: BSD-2-Clause diff --git a/ci/txpull.sh b/ci/txpull.sh index 730e2a3f32..8c3a824cc8 100755 --- a/ci/txpull.sh +++ b/ci/txpull.sh @@ -1,7 +1,7 @@ #!/bin/sh ### LICENSE -# === This file is part of Calamares - === +# === This file is part of Calamares - === # # SPDX-FileCopyrightText: 2015-2016 Teo Mrnjavac # SPDX-FileCopyrightText: 2017-2020 Adriaan de Groot diff --git a/ci/txpush.sh b/ci/txpush.sh index 796f6cfc19..363a234e8b 100755 --- a/ci/txpush.sh +++ b/ci/txpush.sh @@ -1,7 +1,7 @@ #!/bin/sh ### LICENSE -# === This file is part of Calamares - === +# === This file is part of Calamares - === # # SPDX-FileCopyrightText: 2015-2016 Teo Mrnjavac # SPDX-FileCopyrightText: 2017-2020 Adriaan de Groot diff --git a/data/completion/bash/calamares b/data/completion/bash/calamares index 21f2edba47..a73ca38a97 100644 --- a/data/completion/bash/calamares +++ b/data/completion/bash/calamares @@ -1,20 +1,10 @@ -# === This file is part of Calamares - === +# === This file is part of Calamares - === # # SPDX-FileCopyrightText: 2020 Gaël PORTAY # SPDX-License-Identifier: GPL-3.0-or-later # -# Calamares is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. +# Calamares is Free Software: see the License-Identifier above. # -# Calamares is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Calamares. If not, see . _calamares() { diff --git a/lang/CMakeLists.txt b/lang/CMakeLists.txt index 6c9b12b9e6..790d6098ad 100644 --- a/lang/CMakeLists.txt +++ b/lang/CMakeLists.txt @@ -1,4 +1,4 @@ -# === This file is part of Calamares - === +# === This file is part of Calamares - === # # SPDX-FileCopyrightText: 2018 Adriaan de Groot # SPDX-License-Identifier: BSD-2-Clause diff --git a/lang/txload.cpp b/lang/txload.cpp index 68a157b818..62dc13e7d8 100644 --- a/lang/txload.cpp +++ b/lang/txload.cpp @@ -1,21 +1,10 @@ -/* === This file is part of Calamares - === - * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2018 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later - * License-Filename: LICENSE + * + * Calamares is Free Software: see the License-Identifier above. + * */ /* diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 3d35ac3e4b..e35a894cdf 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,4 +1,4 @@ -# === This file is part of Calamares - === +# === This file is part of Calamares - === # # SPDX-FileCopyrightText: 2020 Adriaan de Groot # SPDX-License-Identifier: BSD-2-Clause diff --git a/src/branding/CMakeLists.txt b/src/branding/CMakeLists.txt index 6d99bbe4d9..09d60118e2 100644 --- a/src/branding/CMakeLists.txt +++ b/src/branding/CMakeLists.txt @@ -1,4 +1,4 @@ -# === This file is part of Calamares - === +# === This file is part of Calamares - === # # SPDX-FileCopyrightText: 2020 Adriaan de Groot # SPDX-License-Identifier: BSD-2-Clause diff --git a/src/branding/default/show.qml b/src/branding/default/show.qml index 92917cc5cd..f4c50e629f 100644 --- a/src/branding/default/show.qml +++ b/src/branding/default/show.qml @@ -1,21 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2015 Teo Mrnjavac * SPDX-FileCopyrightText: 2018 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ import QtQuick 2.0; diff --git a/src/calamares/CMakeLists.txt b/src/calamares/CMakeLists.txt index faec6d1a4b..6d4eceb8a2 100644 --- a/src/calamares/CMakeLists.txt +++ b/src/calamares/CMakeLists.txt @@ -1,4 +1,4 @@ -# === This file is part of Calamares - === +# === This file is part of Calamares - === # # SPDX-FileCopyrightText: 2020 Adriaan de Groot # SPDX-License-Identifier: BSD-2-Clause diff --git a/src/calamares/CalamaresApplication.cpp b/src/calamares/CalamaresApplication.cpp index 2b93cc9d15..3f4bf808cf 100644 --- a/src/calamares/CalamaresApplication.cpp +++ b/src/calamares/CalamaresApplication.cpp @@ -1,21 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac * SPDX-FileCopyrightText: 2018 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "CalamaresApplication.h" diff --git a/src/calamares/CalamaresApplication.h b/src/calamares/CalamaresApplication.h index b36577591b..e7dea4c61b 100644 --- a/src/calamares/CalamaresApplication.h +++ b/src/calamares/CalamaresApplication.h @@ -1,21 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac * SPDX-FileCopyrightText: 2018-2019 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef CALAMARESAPPLICATION_H diff --git a/src/calamares/CalamaresWindow.cpp b/src/calamares/CalamaresWindow.cpp index 2119670be6..0960da10ac 100644 --- a/src/calamares/CalamaresWindow.cpp +++ b/src/calamares/CalamaresWindow.cpp @@ -1,4 +1,4 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac * SPDX-FileCopyrightText: 2017-2018 Adriaan de Groot @@ -6,18 +6,8 @@ * SPDX-FileCopyrightText: 2019 Collabora Ltd * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "CalamaresWindow.h" diff --git a/src/calamares/CalamaresWindow.h b/src/calamares/CalamaresWindow.h index 9fa13b44fd..8eed50ca5a 100644 --- a/src/calamares/CalamaresWindow.h +++ b/src/calamares/CalamaresWindow.h @@ -1,21 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac * SPDX-FileCopyrightText: 2017-2018 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef CALAMARESWINDOW_H diff --git a/src/calamares/DebugWindow.cpp b/src/calamares/DebugWindow.cpp index c5effb45f2..fecf71ea16 100644 --- a/src/calamares/DebugWindow.cpp +++ b/src/calamares/DebugWindow.cpp @@ -1,21 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2015-2016 Teo Mrnjavac * SPDX-FileCopyrightText: 2019 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "DebugWindow.h" diff --git a/src/calamares/DebugWindow.h b/src/calamares/DebugWindow.h index e0e939912a..a07487b4ca 100644 --- a/src/calamares/DebugWindow.h +++ b/src/calamares/DebugWindow.h @@ -1,21 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2015 Teo Mrnjavac * SPDX-FileCopyrightText: 2019 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef CALAMARES_DEBUGWINDOW_H diff --git a/src/calamares/VariantModel.cpp b/src/calamares/VariantModel.cpp index 9753787ad7..8b0378f03d 100644 --- a/src/calamares/VariantModel.cpp +++ b/src/calamares/VariantModel.cpp @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2019 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "VariantModel.h" diff --git a/src/calamares/VariantModel.h b/src/calamares/VariantModel.h index 7deafc88d7..3b0b594b75 100644 --- a/src/calamares/VariantModel.h +++ b/src/calamares/VariantModel.h @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2019 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef VARIANTMODEL_H diff --git a/src/calamares/main.cpp b/src/calamares/main.cpp index c5815154f8..d601082159 100644 --- a/src/calamares/main.cpp +++ b/src/calamares/main.cpp @@ -1,21 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014 Teo Mrnjavac * SPDX-FileCopyrightText: 2017-2020 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ diff --git a/src/calamares/progresstree/ProgressTreeDelegate.cpp b/src/calamares/progresstree/ProgressTreeDelegate.cpp index a11cd3795f..48b5b43284 100644 --- a/src/calamares/progresstree/ProgressTreeDelegate.cpp +++ b/src/calamares/progresstree/ProgressTreeDelegate.cpp @@ -1,21 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac * SPDX-FileCopyrightText: 2017 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "ProgressTreeDelegate.h" diff --git a/src/calamares/progresstree/ProgressTreeDelegate.h b/src/calamares/progresstree/ProgressTreeDelegate.h index 7a2641b7d6..55dcf7ac49 100644 --- a/src/calamares/progresstree/ProgressTreeDelegate.h +++ b/src/calamares/progresstree/ProgressTreeDelegate.h @@ -1,21 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac * SPDX-FileCopyrightText: 2019 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef PROGRESSTREEDELEGATE_H diff --git a/src/calamares/progresstree/ProgressTreeView.cpp b/src/calamares/progresstree/ProgressTreeView.cpp index ad8effd66a..b953db64df 100644 --- a/src/calamares/progresstree/ProgressTreeView.cpp +++ b/src/calamares/progresstree/ProgressTreeView.cpp @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014 Teo Mrnjavac * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "ProgressTreeView.h" diff --git a/src/calamares/progresstree/ProgressTreeView.h b/src/calamares/progresstree/ProgressTreeView.h index b72291a924..98bbe10b42 100644 --- a/src/calamares/progresstree/ProgressTreeView.h +++ b/src/calamares/progresstree/ProgressTreeView.h @@ -1,21 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014 Teo Mrnjavac * SPDX-FileCopyrightText: 2017 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef PROGRESSTREEVIEW_H diff --git a/src/calamares/test_conf.cpp b/src/calamares/test_conf.cpp index 18330d9a2b..a1b6634685 100644 --- a/src/calamares/test_conf.cpp +++ b/src/calamares/test_conf.cpp @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2017-2018 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ /** diff --git a/src/calamares/testmain.cpp b/src/calamares/testmain.cpp index 6e4384b621..7a7967f436 100644 --- a/src/calamares/testmain.cpp +++ b/src/calamares/testmain.cpp @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2018 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ /* diff --git a/src/libcalamares/CMakeLists.txt b/src/libcalamares/CMakeLists.txt index d915708f33..8498964462 100644 --- a/src/libcalamares/CMakeLists.txt +++ b/src/libcalamares/CMakeLists.txt @@ -1,4 +1,4 @@ -# === This file is part of Calamares - === +# === This file is part of Calamares - === # # SPDX-FileCopyrightText: 2020 Adriaan de Groot # SPDX-License-Identifier: BSD-2-Clause diff --git a/src/libcalamares/CalamaresConfig.h.in b/src/libcalamares/CalamaresConfig.h.in index c081b158ff..3d551b8e89 100644 --- a/src/libcalamares/CalamaresConfig.h.in +++ b/src/libcalamares/CalamaresConfig.h.in @@ -1,22 +1,9 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2020 Adriaan de Groot - * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . - * * SPDX-License-Identifier: GPL-3.0-or-later - * License-Filename: LICENSE + * + * Calamares is Free Software: see the License-Identifier above. * */ #ifndef CALAMARESCONFIG_H diff --git a/src/libcalamares/CppJob.cpp b/src/libcalamares/CppJob.cpp index a2647463a6..45a321cc23 100644 --- a/src/libcalamares/CppJob.cpp +++ b/src/libcalamares/CppJob.cpp @@ -1,23 +1,10 @@ -/* === This file is part of Calamares - === - * +/* === This file is part of Calamares - === + * * SPDX-FileCopyrightText: 2014 Teo Mrnjavac * SPDX-FileCopyrightText: 2016 Kevin Kofler - * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . - * * SPDX-License-Identifier: GPL-3.0-or-later - * License-Filename: LICENSE + * + * Calamares is Free Software: see the License-Identifier above. * */ diff --git a/src/libcalamares/CppJob.h b/src/libcalamares/CppJob.h index ee093675aa..7569debe9e 100644 --- a/src/libcalamares/CppJob.h +++ b/src/libcalamares/CppJob.h @@ -1,24 +1,11 @@ -/* === This file is part of Calamares - === - * +/* === This file is part of Calamares - === + * * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac * SPDX-FileCopyrightText: 2016 Kevin Kofler * SPDX-FileCopyrightText: 2020 Adriaan de Groot - * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . - * * SPDX-License-Identifier: GPL-3.0-or-later - * License-Filename: LICENSE + * + * Calamares is Free Software: see the License-Identifier above. * */ diff --git a/src/libcalamares/DllMacro.h b/src/libcalamares/DllMacro.h index 5677e928bc..662ace44d4 100644 --- a/src/libcalamares/DllMacro.h +++ b/src/libcalamares/DllMacro.h @@ -1,23 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014 Teo Mrnjavac * SPDX-FileCopyrightText: 2020 Adriaan de Groot - * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . - * * SPDX-License-Identifier: GPL-3.0-or-later - * License-Filename: LICENSE + * + * Calamares is Free Software: see the License-Identifier above. * */ diff --git a/src/libcalamares/GlobalStorage.cpp b/src/libcalamares/GlobalStorage.cpp index 253a4d6ad3..6cae46eeb2 100644 --- a/src/libcalamares/GlobalStorage.cpp +++ b/src/libcalamares/GlobalStorage.cpp @@ -1,21 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac * SPDX-FileCopyrightText: 2017-2018 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . * */ diff --git a/src/libcalamares/GlobalStorage.h b/src/libcalamares/GlobalStorage.h index a12d789788..9d8e3849b1 100644 --- a/src/libcalamares/GlobalStorage.h +++ b/src/libcalamares/GlobalStorage.h @@ -1,21 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac * SPDX-FileCopyrightText: 2017-2018 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . * */ diff --git a/src/libcalamares/Job.cpp b/src/libcalamares/Job.cpp index a7e67b5f65..902bb2b648 100644 --- a/src/libcalamares/Job.cpp +++ b/src/libcalamares/Job.cpp @@ -1,22 +1,9 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac - * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . - * * SPDX-License-Identifier: GPL-3.0-or-later - * License-Filename: LICENSE + * + * Calamares is Free Software: see the License-Identifier above. * */ diff --git a/src/libcalamares/Job.h b/src/libcalamares/Job.h index dd13f8608f..ed349ab30d 100644 --- a/src/libcalamares/Job.h +++ b/src/libcalamares/Job.h @@ -1,21 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac * SPDX-FileCopyrightText: 2017 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . * */ #ifndef CALAMARES_JOB_H diff --git a/src/libcalamares/JobExample.cpp b/src/libcalamares/JobExample.cpp index ba085be6e3..4852d3ae4e 100644 --- a/src/libcalamares/JobExample.cpp +++ b/src/libcalamares/JobExample.cpp @@ -1,22 +1,9 @@ -/* === This file is part of Calamares - === - * - * SPDX-FileCopyrightText: 2019 Adriaan de Groot - * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . +/* === This file is part of Calamares - === * + * SPDX-FileCopyrightText: 2019 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later - * License-Filename: LICENSE + * + * Calamares is Free Software: see the License-Identifier above. * */ #include "JobExample.h" diff --git a/src/libcalamares/JobExample.h b/src/libcalamares/JobExample.h index e0307f64a9..5c527af6d8 100644 --- a/src/libcalamares/JobExample.h +++ b/src/libcalamares/JobExample.h @@ -1,22 +1,9 @@ -/* === This file is part of Calamares - === - * - * SPDX-FileCopyrightText: 2019 Adriaan de Groot - * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . +/* === This file is part of Calamares - === * + * SPDX-FileCopyrightText: 2019 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later - * License-Filename: LICENSE + * + * Calamares is Free Software: see the License-Identifier above. * */ diff --git a/src/libcalamares/JobQueue.cpp b/src/libcalamares/JobQueue.cpp index b39b437596..a09d03b38c 100644 --- a/src/libcalamares/JobQueue.cpp +++ b/src/libcalamares/JobQueue.cpp @@ -1,23 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac * SPDX-FileCopyrightText: 2018 Adriaan de Groot - * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . - * * SPDX-License-Identifier: GPL-3.0-or-later - * License-Filename: LICENSE + * + * Calamares is Free Software: see the License-Identifier above. * */ diff --git a/src/libcalamares/JobQueue.h b/src/libcalamares/JobQueue.h index 31b5407ef5..0283172fb6 100644 --- a/src/libcalamares/JobQueue.h +++ b/src/libcalamares/JobQueue.h @@ -1,22 +1,9 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac - * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . - * * SPDX-License-Identifier: GPL-3.0-or-later - * License-Filename: LICENSE + * + * Calamares is Free Software: see the License-Identifier above. * */ diff --git a/src/libcalamares/ProcessJob.cpp b/src/libcalamares/ProcessJob.cpp index c6cb943593..f7404438a7 100644 --- a/src/libcalamares/ProcessJob.cpp +++ b/src/libcalamares/ProcessJob.cpp @@ -1,23 +1,10 @@ -/* === This file is part of Calamares - === - * +/* === This file is part of Calamares - === + * * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac * SPDX-FileCopyrightText: 2018 Adriaan de Groot - * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . - * * SPDX-License-Identifier: GPL-3.0-or-later - * License-Filename: LICENSE + * + * Calamares is Free Software: see the License-Identifier above. * */ diff --git a/src/libcalamares/ProcessJob.h b/src/libcalamares/ProcessJob.h index 75ef6f6e36..126eab1f90 100644 --- a/src/libcalamares/ProcessJob.h +++ b/src/libcalamares/ProcessJob.h @@ -1,23 +1,10 @@ -/* === This file is part of Calamares - === - * +/* === This file is part of Calamares - === + * * SPDX-FileCopyrightText: 2014 Teo Mrnjavac * SPDX-FileCopyrightText: 2017-2019 Adriaan de Groot - * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . - * * SPDX-License-Identifier: GPL-3.0-or-later - * License-Filename: LICENSE + * + * Calamares is Free Software: see the License-Identifier above. * */ diff --git a/src/libcalamares/PythonHelper.cpp b/src/libcalamares/PythonHelper.cpp index 2f5418888f..f13f5979fe 100644 --- a/src/libcalamares/PythonHelper.cpp +++ b/src/libcalamares/PythonHelper.cpp @@ -1,23 +1,10 @@ -/* === This file is part of Calamares - === - * +/* === This file is part of Calamares - === + * * SPDX-FileCopyrightText: 2014 Teo Mrnjavac * SPDX-FileCopyrightText: 2017-2020 Adriaan de Groot - * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . - * * SPDX-License-Identifier: GPL-3.0-or-later - * License-Filename: LICENSE + * + * Calamares is Free Software: see the License-Identifier above. * */ diff --git a/src/libcalamares/PythonHelper.h b/src/libcalamares/PythonHelper.h index 7acea58325..c439f46196 100644 --- a/src/libcalamares/PythonHelper.h +++ b/src/libcalamares/PythonHelper.h @@ -1,23 +1,10 @@ -/* === This file is part of Calamares - === - * +/* === This file is part of Calamares - === + * * SPDX-FileCopyrightText: 2014 Teo Mrnjavac * SPDX-FileCopyrightText: 2018-2020 Adriaan de Groot - * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . - * * SPDX-License-Identifier: GPL-3.0-or-later - * License-Filename: LICENSE + * + * Calamares is Free Software: see the License-Identifier above. * */ diff --git a/src/libcalamares/PythonJob.cpp b/src/libcalamares/PythonJob.cpp index c1cfbbc1c9..1f46800170 100644 --- a/src/libcalamares/PythonJob.cpp +++ b/src/libcalamares/PythonJob.cpp @@ -1,23 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2016 Teo Mrnjavac * SPDX-FileCopyrightText: 2018-2020 Adriaan de Groot - * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . - * * SPDX-License-Identifier: GPL-3.0-or-later - * License-Filename: LICENSE + * + * Calamares is Free Software: see the License-Identifier above. * */ #include "PythonJob.h" diff --git a/src/libcalamares/PythonJob.h b/src/libcalamares/PythonJob.h index b34b40b0bc..5b5cfb7cc4 100644 --- a/src/libcalamares/PythonJob.h +++ b/src/libcalamares/PythonJob.h @@ -1,23 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014 Teo Mrnjavac * SPDX-FileCopyrightText: 2020 Adriaan de Groot - * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . - * * SPDX-License-Identifier: GPL-3.0-or-later - * License-Filename: LICENSE + * + * Calamares is Free Software: see the License-Identifier above. * */ diff --git a/src/libcalamares/PythonJobApi.cpp b/src/libcalamares/PythonJobApi.cpp index 2f88187389..41fb82151c 100644 --- a/src/libcalamares/PythonJobApi.cpp +++ b/src/libcalamares/PythonJobApi.cpp @@ -1,23 +1,10 @@ -/* === This file is part of Calamares - === - * +/* === This file is part of Calamares - === + * * SPDX-FileCopyrightText: 2014-2016 Teo Mrnjavac * SPDX-FileCopyrightText: 2017-2020 Adriaan de Groot - * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . - * * SPDX-License-Identifier: GPL-3.0-or-later - * License-Filename: LICENSE + * + * Calamares is Free Software: see the License-Identifier above. * */ diff --git a/src/libcalamares/PythonJobApi.h b/src/libcalamares/PythonJobApi.h index 6fd1629128..3c7977c4f5 100644 --- a/src/libcalamares/PythonJobApi.h +++ b/src/libcalamares/PythonJobApi.h @@ -1,23 +1,10 @@ -/* === This file is part of Calamares - === - * +/* === This file is part of Calamares - === + * * SPDX-FileCopyrightText: 2014-2016 Teo Mrnjavac * SPDX-FileCopyrightText: 2017-2020 Adriaan de Groot - * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . - * * SPDX-License-Identifier: GPL-3.0-or-later - * License-Filename: LICENSE + * + * Calamares is Free Software: see the License-Identifier above. * */ diff --git a/src/libcalamares/Settings.cpp b/src/libcalamares/Settings.cpp index 592ffd02d0..dcb5c70b0f 100644 --- a/src/libcalamares/Settings.cpp +++ b/src/libcalamares/Settings.cpp @@ -1,4 +1,4 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac * SPDX-FileCopyrightText: 2019 Gabriel Craciunescu @@ -6,18 +6,8 @@ * SPDX-FileCopyrightText: 2017-2018 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . * */ diff --git a/src/libcalamares/Settings.h b/src/libcalamares/Settings.h index 1cff4b34ac..0abf3b8669 100644 --- a/src/libcalamares/Settings.h +++ b/src/libcalamares/Settings.h @@ -1,4 +1,4 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac * SPDX-FileCopyrightText: 2019 Gabriel Craciunescu @@ -6,18 +6,8 @@ * SPDX-FileCopyrightText: 2017-2018 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . * */ diff --git a/src/libcalamares/Tests.cpp b/src/libcalamares/Tests.cpp index 68e1112c65..c7f1d60281 100644 --- a/src/libcalamares/Tests.cpp +++ b/src/libcalamares/Tests.cpp @@ -1,21 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2018-2020 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . * */ diff --git a/src/libcalamares/geoip/GeoIPFixed.cpp b/src/libcalamares/geoip/GeoIPFixed.cpp index 69d5d3a4e9..7e5efbd6c5 100644 --- a/src/libcalamares/geoip/GeoIPFixed.cpp +++ b/src/libcalamares/geoip/GeoIPFixed.cpp @@ -1,22 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2020 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . + * Calamares is Free Software: see the License-Identifier above. * - * SPDX-License-Identifier: GPL-3.0-or-later - * License-Filename: LICENSE */ #include "GeoIPFixed.h" diff --git a/src/libcalamares/geoip/GeoIPFixed.h b/src/libcalamares/geoip/GeoIPFixed.h index 5d6fca266f..d6e9b0e419 100644 --- a/src/libcalamares/geoip/GeoIPFixed.h +++ b/src/libcalamares/geoip/GeoIPFixed.h @@ -1,22 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2020 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . + * Calamares is Free Software: see the License-Identifier above. * - * SPDX-License-Identifier: GPL-3.0-or-later - * License-Filename: LICENSE */ #ifndef GEOIP_GEOIPFIXED_H diff --git a/src/libcalamares/geoip/GeoIPJSON.cpp b/src/libcalamares/geoip/GeoIPJSON.cpp index 6522ca085b..9869d7a25e 100644 --- a/src/libcalamares/geoip/GeoIPJSON.cpp +++ b/src/libcalamares/geoip/GeoIPJSON.cpp @@ -1,23 +1,10 @@ -/* === This file is part of Calamares - === - * +/* === This file is part of Calamares - === + * * SPDX-FileCopyrightText: 2014-2016 Teo Mrnjavac * SPDX-FileCopyrightText: 2018 Adriaan de Groot - * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . - * * SPDX-License-Identifier: GPL-3.0-or-later - * License-Filename: LICENSE + * + * Calamares is Free Software: see the License-Identifier above. * */ diff --git a/src/libcalamares/geoip/GeoIPJSON.h b/src/libcalamares/geoip/GeoIPJSON.h index 246556c740..e9be141021 100644 --- a/src/libcalamares/geoip/GeoIPJSON.h +++ b/src/libcalamares/geoip/GeoIPJSON.h @@ -1,22 +1,9 @@ -/* === This file is part of Calamares - === - * - * SPDX-FileCopyrightText: 2018-2019 Adriaan de Groot - * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . +/* === This file is part of Calamares - === * + * SPDX-FileCopyrightText: 2018-2019 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later - * License-Filename: LICENSE + * + * Calamares is Free Software: see the License-Identifier above. * */ diff --git a/src/libcalamares/geoip/GeoIPTests.cpp b/src/libcalamares/geoip/GeoIPTests.cpp index 9650cfe2d9..6af857b361 100644 --- a/src/libcalamares/geoip/GeoIPTests.cpp +++ b/src/libcalamares/geoip/GeoIPTests.cpp @@ -1,22 +1,9 @@ -/* === This file is part of Calamares - === - * - * SPDX-FileCopyrightText: 2018 Adriaan de Groot - * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . +/* === This file is part of Calamares - === * + * SPDX-FileCopyrightText: 2018 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later - * License-Filename: LICENSE + * + * Calamares is Free Software: see the License-Identifier above. * */ diff --git a/src/libcalamares/geoip/GeoIPTests.h b/src/libcalamares/geoip/GeoIPTests.h index 746a83eca1..4d36edbb0a 100644 --- a/src/libcalamares/geoip/GeoIPTests.h +++ b/src/libcalamares/geoip/GeoIPTests.h @@ -1,22 +1,9 @@ -/* === This file is part of Calamares - === - * - * SPDX-FileCopyrightText: 2018 Adriaan de Groot - * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . +/* === This file is part of Calamares - === * + * SPDX-FileCopyrightText: 2018 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later - * License-Filename: LICENSE + * + * Calamares is Free Software: see the License-Identifier above. * */ diff --git a/src/libcalamares/geoip/GeoIPXML.cpp b/src/libcalamares/geoip/GeoIPXML.cpp index 125614032b..7f2c30090f 100644 --- a/src/libcalamares/geoip/GeoIPXML.cpp +++ b/src/libcalamares/geoip/GeoIPXML.cpp @@ -1,22 +1,9 @@ -/* === This file is part of Calamares - === - * - * SPDX-FileCopyrightText: 2018 Adriaan de Groot - * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . +/* === This file is part of Calamares - === * + * SPDX-FileCopyrightText: 2018 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later - * License-Filename: LICENSE + * + * Calamares is Free Software: see the License-Identifier above. * */ diff --git a/src/libcalamares/geoip/GeoIPXML.h b/src/libcalamares/geoip/GeoIPXML.h index d686928dbb..fb3167b24b 100644 --- a/src/libcalamares/geoip/GeoIPXML.h +++ b/src/libcalamares/geoip/GeoIPXML.h @@ -1,22 +1,9 @@ -/* === This file is part of Calamares - === - * - * SPDX-FileCopyrightText: 2018-2019 Adriaan de Groot - * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . +/* === This file is part of Calamares - === * + * SPDX-FileCopyrightText: 2018-2019 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later - * License-Filename: LICENSE + * + * Calamares is Free Software: see the License-Identifier above. * */ diff --git a/src/libcalamares/geoip/Handler.cpp b/src/libcalamares/geoip/Handler.cpp index c76b864924..6825fa5feb 100644 --- a/src/libcalamares/geoip/Handler.cpp +++ b/src/libcalamares/geoip/Handler.cpp @@ -1,22 +1,9 @@ -/* === This file is part of Calamares - === - * - * SPDX-FileCopyrightText: 2019 Adriaan de Groot - * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . +/* === This file is part of Calamares - === * + * SPDX-FileCopyrightText: 2019 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later - * License-Filename: LICENSE + * + * Calamares is Free Software: see the License-Identifier above. * */ diff --git a/src/libcalamares/geoip/Handler.h b/src/libcalamares/geoip/Handler.h index a441625760..03133978c6 100644 --- a/src/libcalamares/geoip/Handler.h +++ b/src/libcalamares/geoip/Handler.h @@ -1,22 +1,9 @@ -/* === This file is part of Calamares - === - * - * SPDX-FileCopyrightText: 2019 Adriaan de Groot - * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . +/* === This file is part of Calamares - === * + * SPDX-FileCopyrightText: 2019 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later - * License-Filename: LICENSE + * + * Calamares is Free Software: see the License-Identifier above. * */ diff --git a/src/libcalamares/geoip/Interface.cpp b/src/libcalamares/geoip/Interface.cpp index 47c826e1a3..8ebe652088 100644 --- a/src/libcalamares/geoip/Interface.cpp +++ b/src/libcalamares/geoip/Interface.cpp @@ -1,22 +1,9 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2018 Adriaan de Groot - * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . - * * SPDX-License-Identifier: GPL-3.0-or-later - * License-Filename: LICENSE + * + * Calamares is Free Software: see the License-Identifier above. * */ diff --git a/src/libcalamares/geoip/Interface.h b/src/libcalamares/geoip/Interface.h index 1afcc911ba..2edf62155f 100644 --- a/src/libcalamares/geoip/Interface.h +++ b/src/libcalamares/geoip/Interface.h @@ -1,22 +1,9 @@ -/* === This file is part of Calamares - === - * - * SPDX-FileCopyrightText: 2018-2019 Adriaan de Groot - * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . +/* === This file is part of Calamares - === * + * SPDX-FileCopyrightText: 2018-2019 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later - * License-Filename: LICENSE + * + * Calamares is Free Software: see the License-Identifier above. * */ diff --git a/src/libcalamares/geoip/test_geoip.cpp b/src/libcalamares/geoip/test_geoip.cpp index a2aff929ed..0c475b9c00 100644 --- a/src/libcalamares/geoip/test_geoip.cpp +++ b/src/libcalamares/geoip/test_geoip.cpp @@ -1,22 +1,9 @@ -/* === This file is part of Calamares - === - * - * SPDX-FileCopyrightText: 2018 Adriaan de Groot - * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . +/* === This file is part of Calamares - === * + * SPDX-FileCopyrightText: 2018 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later - * License-Filename: LICENSE + * + * Calamares is Free Software: see the License-Identifier above. * */ diff --git a/src/libcalamares/locale/CountryData_p.cpp b/src/libcalamares/locale/CountryData_p.cpp index 61b9b05a7e..932a1996d5 100644 --- a/src/libcalamares/locale/CountryData_p.cpp +++ b/src/libcalamares/locale/CountryData_p.cpp @@ -1,6 +1,6 @@ /* GENERATED FILE DO NOT EDIT * -* === This file is part of Calamares - === +* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 1991-2019 Unicode, Inc. * SPDX-FileCopyrightText: 2019 Adriaan de Groot diff --git a/src/libcalamares/locale/Label.cpp b/src/libcalamares/locale/Label.cpp index 9b16bc7573..b4ec8180ca 100644 --- a/src/libcalamares/locale/Label.cpp +++ b/src/libcalamares/locale/Label.cpp @@ -1,21 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac * SPDX-FileCopyrightText: 2017-2019 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . * */ diff --git a/src/libcalamares/locale/Label.h b/src/libcalamares/locale/Label.h index f52e401e3e..58b2a3773a 100644 --- a/src/libcalamares/locale/Label.h +++ b/src/libcalamares/locale/Label.h @@ -1,21 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac * SPDX-FileCopyrightText: 2017-2019 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . * */ diff --git a/src/libcalamares/locale/LabelModel.cpp b/src/libcalamares/locale/LabelModel.cpp index 26adacfb82..9a9be99058 100644 --- a/src/libcalamares/locale/LabelModel.cpp +++ b/src/libcalamares/locale/LabelModel.cpp @@ -1,21 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2019 Camilo Higuita * SPDX-FileCopyrightText: 2019-2020 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . * */ diff --git a/src/libcalamares/locale/LabelModel.h b/src/libcalamares/locale/LabelModel.h index 36596c6c4a..8648dc71cb 100644 --- a/src/libcalamares/locale/LabelModel.h +++ b/src/libcalamares/locale/LabelModel.h @@ -1,21 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2019 Camilo Higuita * SPDX-FileCopyrightText: 2019-2020 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . * */ diff --git a/src/libcalamares/locale/Lookup.cpp b/src/libcalamares/locale/Lookup.cpp index b4ebe8f67b..f792f08ed8 100644 --- a/src/libcalamares/locale/Lookup.cpp +++ b/src/libcalamares/locale/Lookup.cpp @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2019 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . * */ diff --git a/src/libcalamares/locale/Lookup.h b/src/libcalamares/locale/Lookup.h index 4eae7c6b66..4095fd097e 100644 --- a/src/libcalamares/locale/Lookup.h +++ b/src/libcalamares/locale/Lookup.h @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2019 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . * */ diff --git a/src/libcalamares/locale/Tests.cpp b/src/libcalamares/locale/Tests.cpp index 6414e2ebf0..6e0140e795 100644 --- a/src/libcalamares/locale/Tests.cpp +++ b/src/libcalamares/locale/Tests.cpp @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2019 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . * */ diff --git a/src/libcalamares/locale/TimeZone.cpp b/src/libcalamares/locale/TimeZone.cpp index 7535bbc5c0..c337056828 100644 --- a/src/libcalamares/locale/TimeZone.cpp +++ b/src/libcalamares/locale/TimeZone.cpp @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2019 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . * */ diff --git a/src/libcalamares/locale/TimeZone.h b/src/libcalamares/locale/TimeZone.h index e14f33e36e..8c16517c75 100644 --- a/src/libcalamares/locale/TimeZone.h +++ b/src/libcalamares/locale/TimeZone.h @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2019 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . * */ diff --git a/src/libcalamares/locale/TranslatableConfiguration.cpp b/src/libcalamares/locale/TranslatableConfiguration.cpp index 618ecfa4f1..1f0811c9d6 100644 --- a/src/libcalamares/locale/TranslatableConfiguration.cpp +++ b/src/libcalamares/locale/TranslatableConfiguration.cpp @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2019 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . * */ diff --git a/src/libcalamares/locale/TranslatableConfiguration.h b/src/libcalamares/locale/TranslatableConfiguration.h index a47f70eeee..c45c8f5232 100644 --- a/src/libcalamares/locale/TranslatableConfiguration.h +++ b/src/libcalamares/locale/TranslatableConfiguration.h @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2019 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . * */ diff --git a/src/libcalamares/locale/TranslatableString.cpp b/src/libcalamares/locale/TranslatableString.cpp index 9200c8d654..8f42a4e41a 100644 --- a/src/libcalamares/locale/TranslatableString.cpp +++ b/src/libcalamares/locale/TranslatableString.cpp @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2019 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . * */ #include "TranslatableString.h" diff --git a/src/libcalamares/locale/TranslatableString.h b/src/libcalamares/locale/TranslatableString.h index 8347488f1a..663f6a2c23 100644 --- a/src/libcalamares/locale/TranslatableString.h +++ b/src/libcalamares/locale/TranslatableString.h @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2019 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . * */ #ifndef LOCALE_TRANSLATABLESTRING_H diff --git a/src/libcalamares/locale/cldr-extractor.py b/src/libcalamares/locale/cldr-extractor.py index 0291abf7d2..7aff85be10 100644 --- a/src/libcalamares/locale/cldr-extractor.py +++ b/src/libcalamares/locale/cldr-extractor.py @@ -1,6 +1,6 @@ #! /usr/bin/env python3 # -# === This file is part of Calamares - === +# === This file is part of Calamares - === # # SPDX-FileCopyrightText: 2019 Adriaan de Groot # SPDX-License-Identifier: BSD-2-Clause @@ -186,7 +186,7 @@ def read_subtags_file(): cpp_header_comment = """/* GENERATED FILE DO NOT EDIT * -* === This file is part of Calamares - === +* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 1991-2019 Unicode, Inc. * SPDX-FileCopyrightText: 2019 Adriaan de Groot diff --git a/src/libcalamares/locale/zone-extractor.py b/src/libcalamares/locale/zone-extractor.py index aa8063522c..b3d9e196dd 100644 --- a/src/libcalamares/locale/zone-extractor.py +++ b/src/libcalamares/locale/zone-extractor.py @@ -1,6 +1,6 @@ #! /usr/bin/env python3 # -# === This file is part of Calamares - === +# === This file is part of Calamares - === # # SPDX-FileCopyrightText: 2019 Adriaan de Groot # SPDX-License-Identifier: BSD-2-Clause @@ -44,7 +44,7 @@ def write_set(file, label, set): cpp_header_comment = """/* GENERATED FILE DO NOT EDIT * -* === This file is part of Calamares - === +* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2009 Arthur David Olson * SPDX-FileCopyrightText: 2019 Adriaan de Groot diff --git a/src/libcalamares/modulesystem/Actions.h b/src/libcalamares/modulesystem/Actions.h index 4376733a14..f4bbe7e09f 100644 --- a/src/libcalamares/modulesystem/Actions.h +++ b/src/libcalamares/modulesystem/Actions.h @@ -1,21 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014 Teo Mrnjavac * SPDX-FileCopyrightText: 2019 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . * */ diff --git a/src/libcalamares/modulesystem/Descriptor.cpp b/src/libcalamares/modulesystem/Descriptor.cpp index 9b3e48b6e9..71b50d8677 100644 --- a/src/libcalamares/modulesystem/Descriptor.cpp +++ b/src/libcalamares/modulesystem/Descriptor.cpp @@ -1,4 +1,4 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2020 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/libcalamares/modulesystem/Descriptor.h b/src/libcalamares/modulesystem/Descriptor.h index a94c0574d0..614d5f15a4 100644 --- a/src/libcalamares/modulesystem/Descriptor.h +++ b/src/libcalamares/modulesystem/Descriptor.h @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2020 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . * */ diff --git a/src/libcalamares/modulesystem/InstanceKey.cpp b/src/libcalamares/modulesystem/InstanceKey.cpp index 982b5f5326..948716f691 100644 --- a/src/libcalamares/modulesystem/InstanceKey.cpp +++ b/src/libcalamares/modulesystem/InstanceKey.cpp @@ -1,21 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac * SPDX-FileCopyrightText: 2018-2019 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . * */ #include "InstanceKey.h" diff --git a/src/libcalamares/modulesystem/InstanceKey.h b/src/libcalamares/modulesystem/InstanceKey.h index 074743bf30..e85aa18a4a 100644 --- a/src/libcalamares/modulesystem/InstanceKey.h +++ b/src/libcalamares/modulesystem/InstanceKey.h @@ -1,21 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac * SPDX-FileCopyrightText: 2018-2019 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . * */ #ifndef MODULESYSTEM_INSTANCEKEY_H diff --git a/src/libcalamares/modulesystem/Module.cpp b/src/libcalamares/modulesystem/Module.cpp index 18c33bde84..ff0b20f783 100644 --- a/src/libcalamares/modulesystem/Module.cpp +++ b/src/libcalamares/modulesystem/Module.cpp @@ -1,21 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac * SPDX-FileCopyrightText: 2017-2018 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . * */ diff --git a/src/libcalamares/modulesystem/Module.h b/src/libcalamares/modulesystem/Module.h index e9719d7569..88632cbf50 100644 --- a/src/libcalamares/modulesystem/Module.h +++ b/src/libcalamares/modulesystem/Module.h @@ -1,21 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac * SPDX-FileCopyrightText: 2017 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . * */ diff --git a/src/libcalamares/modulesystem/Requirement.h b/src/libcalamares/modulesystem/Requirement.h index 02e0a009a3..dc9fe1d77c 100644 --- a/src/libcalamares/modulesystem/Requirement.h +++ b/src/libcalamares/modulesystem/Requirement.h @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2017 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . * */ #ifndef CALAMARES_REQUIREMENT_H diff --git a/src/libcalamares/modulesystem/RequirementsChecker.cpp b/src/libcalamares/modulesystem/RequirementsChecker.cpp index 3256c460df..a12a4f681b 100644 --- a/src/libcalamares/modulesystem/RequirementsChecker.cpp +++ b/src/libcalamares/modulesystem/RequirementsChecker.cpp @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2019 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . * */ diff --git a/src/libcalamares/modulesystem/RequirementsChecker.h b/src/libcalamares/modulesystem/RequirementsChecker.h index 523bc2bc79..3577b53973 100644 --- a/src/libcalamares/modulesystem/RequirementsChecker.h +++ b/src/libcalamares/modulesystem/RequirementsChecker.h @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2019 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . * */ #ifndef CALAMARES_REQUIREMENTSCHECKER_H diff --git a/src/libcalamares/modulesystem/RequirementsModel.cpp b/src/libcalamares/modulesystem/RequirementsModel.cpp index 2ff184f3b1..5fd8868643 100644 --- a/src/libcalamares/modulesystem/RequirementsModel.cpp +++ b/src/libcalamares/modulesystem/RequirementsModel.cpp @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2019-2020 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . * */ diff --git a/src/libcalamares/modulesystem/RequirementsModel.h b/src/libcalamares/modulesystem/RequirementsModel.h index 904e0b84ec..5f3e13cbb4 100644 --- a/src/libcalamares/modulesystem/RequirementsModel.h +++ b/src/libcalamares/modulesystem/RequirementsModel.h @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2019-2020 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . * */ diff --git a/src/libcalamares/modulesystem/Tests.cpp b/src/libcalamares/modulesystem/Tests.cpp index 2fcd5353da..78d3b50776 100644 --- a/src/libcalamares/modulesystem/Tests.cpp +++ b/src/libcalamares/modulesystem/Tests.cpp @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2019 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . * */ diff --git a/src/libcalamares/network/Manager.cpp b/src/libcalamares/network/Manager.cpp index 9d7534e99b..ce7f595719 100644 --- a/src/libcalamares/network/Manager.cpp +++ b/src/libcalamares/network/Manager.cpp @@ -1,22 +1,9 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2019 Adriaan de Groot - * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . - * * SPDX-License-Identifier: GPL-3.0-or-later - * License-Filename: LICENSE + * + * Calamares is Free Software: see the License-Identifier above. * */ diff --git a/src/libcalamares/network/Manager.h b/src/libcalamares/network/Manager.h index 8673d340be..b3a1e23e76 100644 --- a/src/libcalamares/network/Manager.h +++ b/src/libcalamares/network/Manager.h @@ -1,22 +1,9 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2019 Adriaan de Groot - * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . - * * SPDX-License-Identifier: GPL-3.0-or-later - * License-Filename: LICENSE + * + * Calamares is Free Software: see the License-Identifier above. * */ diff --git a/src/libcalamares/network/Tests.cpp b/src/libcalamares/network/Tests.cpp index 6841a30611..d42a741156 100644 --- a/src/libcalamares/network/Tests.cpp +++ b/src/libcalamares/network/Tests.cpp @@ -1,22 +1,9 @@ -/* === This file is part of Calamares - === - * - * SPDX-FileCopyrightText: 2019 Adriaan de Groot - * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . +/* === This file is part of Calamares - === * + * SPDX-FileCopyrightText: 2019 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later - * License-Filename: LICENSE + * + * Calamares is Free Software: see the License-Identifier above. * */ diff --git a/src/libcalamares/network/Tests.h b/src/libcalamares/network/Tests.h index 2d785672e4..6000e227ac 100644 --- a/src/libcalamares/network/Tests.h +++ b/src/libcalamares/network/Tests.h @@ -1,22 +1,9 @@ -/* === This file is part of Calamares - === - * - * SPDX-FileCopyrightText: 2019 Adriaan de Groot - * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . +/* === This file is part of Calamares - === * + * SPDX-FileCopyrightText: 2019 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later - * License-Filename: LICENSE + * + * Calamares is Free Software: see the License-Identifier above. * */ diff --git a/src/libcalamares/partition/FileSystem.cpp b/src/libcalamares/partition/FileSystem.cpp index ee4a9f5b13..ad4df31edf 100644 --- a/src/libcalamares/partition/FileSystem.cpp +++ b/src/libcalamares/partition/FileSystem.cpp @@ -1,22 +1,12 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014 Aurélien Gâteau * SPDX-FileCopyrightText: 2015-2016 Teo Mrnjavac * SPDX-FileCopyrightText: 2018-2019 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . * */ diff --git a/src/libcalamares/partition/FileSystem.h b/src/libcalamares/partition/FileSystem.h index 03f6ff3bc0..6696f0df99 100644 --- a/src/libcalamares/partition/FileSystem.h +++ b/src/libcalamares/partition/FileSystem.h @@ -1,22 +1,12 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014 Aurélien Gâteau * SPDX-FileCopyrightText: 2015-2016 Teo Mrnjavac * SPDX-FileCopyrightText: 2019 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . * */ diff --git a/src/libcalamares/partition/KPMManager.cpp b/src/libcalamares/partition/KPMManager.cpp index 1f3c5b5fc0..6c49f81020 100644 --- a/src/libcalamares/partition/KPMManager.cpp +++ b/src/libcalamares/partition/KPMManager.cpp @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2019 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . * */ diff --git a/src/libcalamares/partition/KPMManager.h b/src/libcalamares/partition/KPMManager.h index 2c73bfed3d..871deb8663 100644 --- a/src/libcalamares/partition/KPMManager.h +++ b/src/libcalamares/partition/KPMManager.h @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2019 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . * */ diff --git a/src/libcalamares/partition/KPMTests.cpp b/src/libcalamares/partition/KPMTests.cpp index d702c8a013..3834b79132 100644 --- a/src/libcalamares/partition/KPMTests.cpp +++ b/src/libcalamares/partition/KPMTests.cpp @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2019 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . * */ diff --git a/src/libcalamares/partition/Mount.cpp b/src/libcalamares/partition/Mount.cpp index a110f28828..0fd204df4d 100644 --- a/src/libcalamares/partition/Mount.cpp +++ b/src/libcalamares/partition/Mount.cpp @@ -1,21 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014 Teo Mrnjavac * SPDX-FileCopyrightText: 2017-2019 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . * */ diff --git a/src/libcalamares/partition/Mount.h b/src/libcalamares/partition/Mount.h index a1a0dea65d..6a2ef9f8b2 100644 --- a/src/libcalamares/partition/Mount.h +++ b/src/libcalamares/partition/Mount.h @@ -1,21 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014 Teo Mrnjavac * SPDX-FileCopyrightText: 2017-2019 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . * */ diff --git a/src/libcalamares/partition/PartitionIterator.cpp b/src/libcalamares/partition/PartitionIterator.cpp index 6e030346d2..7c68e6170a 100644 --- a/src/libcalamares/partition/PartitionIterator.cpp +++ b/src/libcalamares/partition/PartitionIterator.cpp @@ -1,22 +1,12 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014 Aurélien Gâteau * SPDX-FileCopyrightText: 2015 Teo Mrnjavac * SPDX-FileCopyrightText: 2017-2019 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . * */ diff --git a/src/libcalamares/partition/PartitionIterator.h b/src/libcalamares/partition/PartitionIterator.h index 4e3d4362dd..b6207f9434 100644 --- a/src/libcalamares/partition/PartitionIterator.h +++ b/src/libcalamares/partition/PartitionIterator.h @@ -1,22 +1,12 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014 Aurélien Gâteau * SPDX-FileCopyrightText: 2015 Teo Mrnjavac * SPDX-FileCopyrightText: 2019 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . * */ diff --git a/src/libcalamares/partition/PartitionQuery.cpp b/src/libcalamares/partition/PartitionQuery.cpp index 8a2039b61c..beba6b9bca 100644 --- a/src/libcalamares/partition/PartitionQuery.cpp +++ b/src/libcalamares/partition/PartitionQuery.cpp @@ -1,22 +1,12 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014 Aurélien Gâteau * SPDX-FileCopyrightText: 2015-2016 Teo Mrnjavac * SPDX-FileCopyrightText: 2018-2019 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . * */ diff --git a/src/libcalamares/partition/PartitionQuery.h b/src/libcalamares/partition/PartitionQuery.h index ac241a259f..817966d350 100644 --- a/src/libcalamares/partition/PartitionQuery.h +++ b/src/libcalamares/partition/PartitionQuery.h @@ -1,22 +1,12 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014 Aurélien Gâteau * SPDX-FileCopyrightText: 2015-2016 Teo Mrnjavac * SPDX-FileCopyrightText: 2019 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . * */ diff --git a/src/libcalamares/partition/PartitionSize.cpp b/src/libcalamares/partition/PartitionSize.cpp index 38e0366c0d..d09cc6064c 100644 --- a/src/libcalamares/partition/PartitionSize.cpp +++ b/src/libcalamares/partition/PartitionSize.cpp @@ -1,21 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2019 Collabora Ltd * SPDX-FileCopyrightText: 2019 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . * */ diff --git a/src/libcalamares/partition/PartitionSize.h b/src/libcalamares/partition/PartitionSize.h index 35c6cdb8db..b4808e36e0 100644 --- a/src/libcalamares/partition/PartitionSize.h +++ b/src/libcalamares/partition/PartitionSize.h @@ -1,21 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2019 Collabora Ltd * SPDX-FileCopyrightText: 2019 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . * */ diff --git a/src/libcalamares/partition/Sync.cpp b/src/libcalamares/partition/Sync.cpp index fb7b317887..bcdf0cd7fd 100644 --- a/src/libcalamares/partition/Sync.cpp +++ b/src/libcalamares/partition/Sync.cpp @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2019-2020 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . * */ diff --git a/src/libcalamares/partition/Sync.h b/src/libcalamares/partition/Sync.h index bb1938c8b1..8bb516214d 100644 --- a/src/libcalamares/partition/Sync.h +++ b/src/libcalamares/partition/Sync.h @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2019 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . * */ diff --git a/src/libcalamares/partition/Tests.cpp b/src/libcalamares/partition/Tests.cpp index d69e80fc1b..cd2922ee2d 100644 --- a/src/libcalamares/partition/Tests.cpp +++ b/src/libcalamares/partition/Tests.cpp @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2019 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . * */ diff --git a/src/libcalamares/partition/Tests.h b/src/libcalamares/partition/Tests.h index 31983c2f6b..0d6f77a764 100644 --- a/src/libcalamares/partition/Tests.h +++ b/src/libcalamares/partition/Tests.h @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2019 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . * */ diff --git a/src/libcalamares/utils/BoostPython.h b/src/libcalamares/utils/BoostPython.h index 055ad590f4..f39abe7cf0 100644 --- a/src/libcalamares/utils/BoostPython.h +++ b/src/libcalamares/utils/BoostPython.h @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2019-2020 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . * */ diff --git a/src/libcalamares/utils/CalamaresUtilsSystem.cpp b/src/libcalamares/utils/CalamaresUtilsSystem.cpp index 324f2cba19..ff5590506a 100644 --- a/src/libcalamares/utils/CalamaresUtilsSystem.cpp +++ b/src/libcalamares/utils/CalamaresUtilsSystem.cpp @@ -1,21 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014 Teo Mrnjavac * SPDX-FileCopyrightText: 2017-2020 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . * */ diff --git a/src/libcalamares/utils/CalamaresUtilsSystem.h b/src/libcalamares/utils/CalamaresUtilsSystem.h index 63cacca968..61aebc58d9 100644 --- a/src/libcalamares/utils/CalamaresUtilsSystem.h +++ b/src/libcalamares/utils/CalamaresUtilsSystem.h @@ -1,21 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014 Teo Mrnjavac * SPDX-FileCopyrightText: 2017-2020 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . * */ #ifndef UTILS_CALAMARESUTILSSYSTEM_H diff --git a/src/libcalamares/utils/CommandList.cpp b/src/libcalamares/utils/CommandList.cpp index 2a23d51b05..4652dcc5ad 100644 --- a/src/libcalamares/utils/CommandList.cpp +++ b/src/libcalamares/utils/CommandList.cpp @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2018 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . * */ diff --git a/src/libcalamares/utils/CommandList.h b/src/libcalamares/utils/CommandList.h index 8eb4dfdabf..432020a96c 100644 --- a/src/libcalamares/utils/CommandList.h +++ b/src/libcalamares/utils/CommandList.h @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2018 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . * */ diff --git a/src/libcalamares/utils/Dirs.cpp b/src/libcalamares/utils/Dirs.cpp index 2e0eec4d58..f333d6e645 100644 --- a/src/libcalamares/utils/Dirs.cpp +++ b/src/libcalamares/utils/Dirs.cpp @@ -1,4 +1,4 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2013-2016 Teo Mrnjavac * SPDX-FileCopyrightText: 2018 Adriaan de Groot @@ -9,18 +9,8 @@ * SPDX-FileCopyrightText: 2010-2011 Leo Franchi * SPDX-FileCopyrightText: 2010-2012 Jeff Mitchell * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . * */ diff --git a/src/libcalamares/utils/Dirs.h b/src/libcalamares/utils/Dirs.h index 8a321e4dcf..445cbe1f15 100644 --- a/src/libcalamares/utils/Dirs.h +++ b/src/libcalamares/utils/Dirs.h @@ -1,4 +1,4 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2013-2016 Teo Mrnjavac * SPDX-FileCopyrightText: 2018 Adriaan de Groot @@ -9,18 +9,8 @@ * SPDX-FileCopyrightText: 2010-2011 Leo Franchi * SPDX-FileCopyrightText: 2010-2012 Jeff Mitchell * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . * */ diff --git a/src/libcalamares/utils/Entropy.cpp b/src/libcalamares/utils/Entropy.cpp index d574da70aa..d28230a85b 100644 --- a/src/libcalamares/utils/Entropy.cpp +++ b/src/libcalamares/utils/Entropy.cpp @@ -1,21 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2019-2020 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . * */ diff --git a/src/libcalamares/utils/Entropy.h b/src/libcalamares/utils/Entropy.h index 38d1dae8a7..1ca40a68f7 100644 --- a/src/libcalamares/utils/Entropy.h +++ b/src/libcalamares/utils/Entropy.h @@ -1,21 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2019-2020 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . * */ diff --git a/src/libcalamares/utils/Logger.cpp b/src/libcalamares/utils/Logger.cpp index d132a2e3ed..0a7dcefd0c 100644 --- a/src/libcalamares/utils/Logger.cpp +++ b/src/libcalamares/utils/Logger.cpp @@ -1,4 +1,4 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2010-2011 Christian Muehlhaeuser * SPDX-FileCopyrightText: 2014 Teo Mrnjavac @@ -6,18 +6,8 @@ * SPDX-License-Identifier: GPL-3.0-or-later * * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . * */ diff --git a/src/libcalamares/utils/Logger.h b/src/libcalamares/utils/Logger.h index 990f35606c..58603c82d2 100644 --- a/src/libcalamares/utils/Logger.h +++ b/src/libcalamares/utils/Logger.h @@ -1,22 +1,12 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2010-2011 Christian Muehlhaeuser * SPDX-FileCopyrightText: 2014 Teo Mrnjavac * SPDX-FileCopyrightText: 2017-2019 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . * */ diff --git a/src/libcalamares/utils/NamedEnum.h b/src/libcalamares/utils/NamedEnum.h index d962b3c765..cf56a26f23 100644 --- a/src/libcalamares/utils/NamedEnum.h +++ b/src/libcalamares/utils/NamedEnum.h @@ -1,21 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2019 Collabora Ltd * SPDX-FileCopyrightText: 2019 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . * */ diff --git a/src/libcalamares/utils/NamedSuffix.h b/src/libcalamares/utils/NamedSuffix.h index b717e04719..84094e90c2 100644 --- a/src/libcalamares/utils/NamedSuffix.h +++ b/src/libcalamares/utils/NamedSuffix.h @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2019 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . * */ diff --git a/src/libcalamares/utils/Permissions.cpp b/src/libcalamares/utils/Permissions.cpp index a73ffe77d6..777b3c463e 100644 --- a/src/libcalamares/utils/Permissions.cpp +++ b/src/libcalamares/utils/Permissions.cpp @@ -1,4 +1,4 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2018 Scott Harvey * SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/libcalamares/utils/Permissions.h b/src/libcalamares/utils/Permissions.h index 9e0357b57f..11d1d4bab8 100644 --- a/src/libcalamares/utils/Permissions.h +++ b/src/libcalamares/utils/Permissions.h @@ -1,4 +1,4 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2018 Scott Harvey * SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/libcalamares/utils/PluginFactory.cpp b/src/libcalamares/utils/PluginFactory.cpp index 74c94a878e..9f26a8a1c9 100644 --- a/src/libcalamares/utils/PluginFactory.cpp +++ b/src/libcalamares/utils/PluginFactory.cpp @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2019 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . * */ diff --git a/src/libcalamares/utils/PluginFactory.h b/src/libcalamares/utils/PluginFactory.h index 594363fd91..891e3c1cde 100644 --- a/src/libcalamares/utils/PluginFactory.h +++ b/src/libcalamares/utils/PluginFactory.h @@ -1,4 +1,4 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2015 Teo Mrnjavac * SPDX-FileCopyrightText: 2017-2018 Adriaan de Groot @@ -8,18 +8,8 @@ * SPDX-FileCopyrightText: 2007 Matthias Kretz * SPDX-FileCopyrightText: 2007 Bernhard Loos * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . * */ diff --git a/src/libcalamares/utils/RAII.h b/src/libcalamares/utils/RAII.h index 0f1f3f96eb..d6f8fe94d7 100644 --- a/src/libcalamares/utils/RAII.h +++ b/src/libcalamares/utils/RAII.h @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2020 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . * */ diff --git a/src/libcalamares/utils/Retranslator.cpp b/src/libcalamares/utils/Retranslator.cpp index 149626804d..a03ae9a3bc 100644 --- a/src/libcalamares/utils/Retranslator.cpp +++ b/src/libcalamares/utils/Retranslator.cpp @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014 Teo Mrnjavac * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . * */ diff --git a/src/libcalamares/utils/Retranslator.h b/src/libcalamares/utils/Retranslator.h index c88aad7777..476c0b184c 100644 --- a/src/libcalamares/utils/Retranslator.h +++ b/src/libcalamares/utils/Retranslator.h @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . * */ diff --git a/src/libcalamares/utils/String.cpp b/src/libcalamares/utils/String.cpp index 870c8ba49d..34a7038e3f 100644 --- a/src/libcalamares/utils/String.cpp +++ b/src/libcalamares/utils/String.cpp @@ -1,4 +1,4 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2013-2016 Teo Mrnjavac * SPDX-FileCopyrightText: 2018 Adriaan de Groot @@ -9,18 +9,8 @@ * SPDX-FileCopyrightText: 2010-2011 Leo Franchi * SPDX-FileCopyrightText: 2010-2012 Jeff Mitchell * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . * */ diff --git a/src/libcalamares/utils/String.h b/src/libcalamares/utils/String.h index ea585188b7..48bb17aac4 100644 --- a/src/libcalamares/utils/String.h +++ b/src/libcalamares/utils/String.h @@ -1,4 +1,4 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2013-2016 Teo Mrnjavac * SPDX-FileCopyrightText: 2018 Adriaan de Groot @@ -9,18 +9,8 @@ * SPDX-FileCopyrightText: 2010-2011 Leo Franchi * SPDX-FileCopyrightText: 2010-2012 Jeff Mitchell * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . * */ diff --git a/src/libcalamares/utils/TestPaths.cpp b/src/libcalamares/utils/TestPaths.cpp index 0a5fb9302c..f00349c8fc 100644 --- a/src/libcalamares/utils/TestPaths.cpp +++ b/src/libcalamares/utils/TestPaths.cpp @@ -1,21 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2018-2020 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . * */ diff --git a/src/libcalamares/utils/Tests.cpp b/src/libcalamares/utils/Tests.cpp index 706844f703..644e03cf21 100644 --- a/src/libcalamares/utils/Tests.cpp +++ b/src/libcalamares/utils/Tests.cpp @@ -1,21 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2018 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . * */ diff --git a/src/libcalamares/utils/Traits.h b/src/libcalamares/utils/Traits.h index d957633d58..1970aa833b 100644 --- a/src/libcalamares/utils/Traits.h +++ b/src/libcalamares/utils/Traits.h @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2020 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . * */ diff --git a/src/libcalamares/utils/UMask.cpp b/src/libcalamares/utils/UMask.cpp index 861c635e96..3dd7e84f09 100644 --- a/src/libcalamares/utils/UMask.cpp +++ b/src/libcalamares/utils/UMask.cpp @@ -1,21 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2019 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . * */ diff --git a/src/libcalamares/utils/UMask.h b/src/libcalamares/utils/UMask.h index 451ee23b2b..aea79fbc3d 100644 --- a/src/libcalamares/utils/UMask.h +++ b/src/libcalamares/utils/UMask.h @@ -1,21 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2019 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . * */ #ifndef UTILS_UMASK_H diff --git a/src/libcalamares/utils/Units.h b/src/libcalamares/utils/Units.h index 49a3ff7958..abccacb0da 100644 --- a/src/libcalamares/utils/Units.h +++ b/src/libcalamares/utils/Units.h @@ -1,22 +1,12 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2017 Adriaan de Groot * SPDX-FileCopyrightText: 2019 Collabora Ltd * SPDX-License-Identifier: GPL-3.0-or-later * * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . * */ diff --git a/src/libcalamares/utils/Variant.cpp b/src/libcalamares/utils/Variant.cpp index a6aad74ce8..a484ac8f71 100644 --- a/src/libcalamares/utils/Variant.cpp +++ b/src/libcalamares/utils/Variant.cpp @@ -1,4 +1,4 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2013-2016 Teo Mrnjavac * SPDX-FileCopyrightText: 2018 Adriaan de Groot @@ -9,18 +9,8 @@ * SPDX-FileCopyrightText: 2010-2011 Leo Franchi * SPDX-FileCopyrightText: 2010-2012 Jeff Mitchell * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . * */ diff --git a/src/libcalamares/utils/Variant.h b/src/libcalamares/utils/Variant.h index ebf3ff8b65..60ff1ff017 100644 --- a/src/libcalamares/utils/Variant.h +++ b/src/libcalamares/utils/Variant.h @@ -1,22 +1,12 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2013-2016 Teo Mrnjavac * SPDX-FileCopyrightText: 2018 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . * */ diff --git a/src/libcalamares/utils/Yaml.cpp b/src/libcalamares/utils/Yaml.cpp index af73e28252..b787589c6e 100644 --- a/src/libcalamares/utils/Yaml.cpp +++ b/src/libcalamares/utils/Yaml.cpp @@ -1,22 +1,12 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014 Teo Mrnjavac * SPDX-FileCopyrightText: 2017-2018 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . * * */ diff --git a/src/libcalamares/utils/Yaml.h b/src/libcalamares/utils/Yaml.h index 0f9631fa2a..3922484ce3 100644 --- a/src/libcalamares/utils/Yaml.h +++ b/src/libcalamares/utils/Yaml.h @@ -1,22 +1,12 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014 Teo Mrnjavac * SPDX-FileCopyrightText: 2017-2018 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . * * */ diff --git a/src/libcalamares/utils/moc-warnings.h b/src/libcalamares/utils/moc-warnings.h index fed12a6046..2f44438c1d 100644 --- a/src/libcalamares/utils/moc-warnings.h +++ b/src/libcalamares/utils/moc-warnings.h @@ -1,21 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2020 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . * */ diff --git a/src/libcalamaresui/Branding.cpp b/src/libcalamaresui/Branding.cpp index c14f33b85a..8145ad57c1 100644 --- a/src/libcalamaresui/Branding.cpp +++ b/src/libcalamaresui/Branding.cpp @@ -1,4 +1,4 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac * SPDX-FileCopyrightText: 2017-2019 Adriaan de Groot @@ -6,18 +6,8 @@ * SPDX-FileCopyrightText: 2019 Camilo Higuita * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "Branding.h" diff --git a/src/libcalamaresui/Branding.h b/src/libcalamaresui/Branding.h index 65b7d96429..b03df3acd0 100644 --- a/src/libcalamaresui/Branding.h +++ b/src/libcalamaresui/Branding.h @@ -1,4 +1,4 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac * SPDX-FileCopyrightText: 2017-2018 Adriaan de Groot @@ -6,18 +6,8 @@ * SPDX-FileCopyrightText: 2019 Camilo Higuita * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef BRANDING_H diff --git a/src/libcalamaresui/CMakeLists.txt b/src/libcalamaresui/CMakeLists.txt index 52fb838e5b..f48008c2d9 100644 --- a/src/libcalamaresui/CMakeLists.txt +++ b/src/libcalamaresui/CMakeLists.txt @@ -1,4 +1,4 @@ -# === This file is part of Calamares - === +# === This file is part of Calamares - === # # SPDX-FileCopyrightText: 2020 Adriaan de Groot # SPDX-License-Identifier: BSD-2-Clause diff --git a/src/libcalamaresui/ViewManager.cpp b/src/libcalamaresui/ViewManager.cpp index e0a206caed..efa455dea9 100644 --- a/src/libcalamaresui/ViewManager.cpp +++ b/src/libcalamaresui/ViewManager.cpp @@ -1,4 +1,4 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac * SPDX-FileCopyrightText: 2017-2018 Adriaan de Groot @@ -6,18 +6,8 @@ * SPDX-FileCopyrightText: 2019 Gabriel Craciunescu * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "ViewManager.h" diff --git a/src/libcalamaresui/ViewManager.h b/src/libcalamaresui/ViewManager.h index 208f744a4c..947503eaa8 100644 --- a/src/libcalamaresui/ViewManager.h +++ b/src/libcalamaresui/ViewManager.h @@ -1,21 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac * SPDX-FileCopyrightText: 2017-2018 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef VIEWMANAGER_H diff --git a/src/libcalamaresui/modulesystem/CppJobModule.cpp b/src/libcalamaresui/modulesystem/CppJobModule.cpp index 453764b138..c2110061c5 100644 --- a/src/libcalamaresui/modulesystem/CppJobModule.cpp +++ b/src/libcalamaresui/modulesystem/CppJobModule.cpp @@ -1,21 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014 Teo Mrnjavac * SPDX-FileCopyrightText: 2016 Kevin Kofler * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "CppJobModule.h" diff --git a/src/libcalamaresui/modulesystem/CppJobModule.h b/src/libcalamaresui/modulesystem/CppJobModule.h index 9c6e7b8230..288f674f47 100644 --- a/src/libcalamaresui/modulesystem/CppJobModule.h +++ b/src/libcalamaresui/modulesystem/CppJobModule.h @@ -1,22 +1,12 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014 Teo Mrnjavac * SPDX-FileCopyrightText: 2016 Kevin Kofler * SPDX-FileCopyrightText: 2017 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef CALAMARES_CPPJOBMODULE_H diff --git a/src/libcalamaresui/modulesystem/ModuleFactory.cpp b/src/libcalamaresui/modulesystem/ModuleFactory.cpp index 93ffb745b8..7d4dd1960d 100644 --- a/src/libcalamaresui/modulesystem/ModuleFactory.cpp +++ b/src/libcalamaresui/modulesystem/ModuleFactory.cpp @@ -1,21 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac * SPDX-FileCopyrightText: 2017-2018 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "ModuleFactory.h" diff --git a/src/libcalamaresui/modulesystem/ModuleFactory.h b/src/libcalamaresui/modulesystem/ModuleFactory.h index 6d8f12a193..170e27e8eb 100644 --- a/src/libcalamaresui/modulesystem/ModuleFactory.h +++ b/src/libcalamaresui/modulesystem/ModuleFactory.h @@ -1,21 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac * SPDX-FileCopyrightText: 2017 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef CALAMARES_MODULEFACTORY_H diff --git a/src/libcalamaresui/modulesystem/ModuleManager.cpp b/src/libcalamaresui/modulesystem/ModuleManager.cpp index 283ea8b5f8..9e84cf6465 100644 --- a/src/libcalamaresui/modulesystem/ModuleManager.cpp +++ b/src/libcalamaresui/modulesystem/ModuleManager.cpp @@ -1,21 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac * SPDX-FileCopyrightText: 2018 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "ModuleManager.h" diff --git a/src/libcalamaresui/modulesystem/ModuleManager.h b/src/libcalamaresui/modulesystem/ModuleManager.h index abe0dce008..d2beedf2e6 100644 --- a/src/libcalamaresui/modulesystem/ModuleManager.h +++ b/src/libcalamaresui/modulesystem/ModuleManager.h @@ -1,21 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac * SPDX-FileCopyrightText: 2018 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef MODULELOADER_H diff --git a/src/libcalamaresui/modulesystem/ProcessJobModule.cpp b/src/libcalamaresui/modulesystem/ProcessJobModule.cpp index f3a6d6e985..0414048ca7 100644 --- a/src/libcalamaresui/modulesystem/ProcessJobModule.cpp +++ b/src/libcalamaresui/modulesystem/ProcessJobModule.cpp @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014 Teo Mrnjavac * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "ProcessJobModule.h" diff --git a/src/libcalamaresui/modulesystem/ProcessJobModule.h b/src/libcalamaresui/modulesystem/ProcessJobModule.h index e3780ed0e1..0e00f55450 100644 --- a/src/libcalamaresui/modulesystem/ProcessJobModule.h +++ b/src/libcalamaresui/modulesystem/ProcessJobModule.h @@ -1,21 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014 Teo Mrnjavac * SPDX-FileCopyrightText: 2017 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef CALAMARES_PROCESSJOBMODULE_H diff --git a/src/libcalamaresui/modulesystem/PythonJobModule.cpp b/src/libcalamaresui/modulesystem/PythonJobModule.cpp index d3c47fffb6..67223b6552 100644 --- a/src/libcalamaresui/modulesystem/PythonJobModule.cpp +++ b/src/libcalamaresui/modulesystem/PythonJobModule.cpp @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014 Teo Mrnjavac * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "PythonJobModule.h" diff --git a/src/libcalamaresui/modulesystem/PythonJobModule.h b/src/libcalamaresui/modulesystem/PythonJobModule.h index 68963802c4..37634d6bea 100644 --- a/src/libcalamaresui/modulesystem/PythonJobModule.h +++ b/src/libcalamaresui/modulesystem/PythonJobModule.h @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014 Teo Mrnjavac * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef CALAMARES_PYTHONJOBMODULE_H diff --git a/src/libcalamaresui/modulesystem/PythonQtViewModule.cpp b/src/libcalamaresui/modulesystem/PythonQtViewModule.cpp index 3e1f2cce34..638fdfc79f 100644 --- a/src/libcalamaresui/modulesystem/PythonQtViewModule.cpp +++ b/src/libcalamaresui/modulesystem/PythonQtViewModule.cpp @@ -1,22 +1,12 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2016 Teo Mrnjavac * SPDX-FileCopyrightText: 2018 Adriaan de Groot * SPDX-FileCopyrightText: 2018 Raul Rodrigo Segura * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "PythonQtViewModule.h" diff --git a/src/libcalamaresui/modulesystem/PythonQtViewModule.h b/src/libcalamaresui/modulesystem/PythonQtViewModule.h index ad8e0989af..8267dd2cba 100644 --- a/src/libcalamaresui/modulesystem/PythonQtViewModule.h +++ b/src/libcalamaresui/modulesystem/PythonQtViewModule.h @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2016 Teo Mrnjavac * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef CALAMARES_PYTHONQTVIEWMODULE_H diff --git a/src/libcalamaresui/modulesystem/ViewModule.cpp b/src/libcalamaresui/modulesystem/ViewModule.cpp index 1674d9fab1..32c05bdba1 100644 --- a/src/libcalamaresui/modulesystem/ViewModule.cpp +++ b/src/libcalamaresui/modulesystem/ViewModule.cpp @@ -1,21 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014 Teo Mrnjavac * SPDX-FileCopyrightText: 2017-2018 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "ViewModule.h" diff --git a/src/libcalamaresui/modulesystem/ViewModule.h b/src/libcalamaresui/modulesystem/ViewModule.h index 370987b158..8e5eb44b49 100644 --- a/src/libcalamaresui/modulesystem/ViewModule.h +++ b/src/libcalamaresui/modulesystem/ViewModule.h @@ -1,21 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014 Teo Mrnjavac * SPDX-FileCopyrightText: 2017 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef CALAMARES_VIEWMODULE_H diff --git a/src/libcalamaresui/utils/CalamaresUtilsGui.cpp b/src/libcalamaresui/utils/CalamaresUtilsGui.cpp index 57f04cd954..e16763a701 100644 --- a/src/libcalamaresui/utils/CalamaresUtilsGui.cpp +++ b/src/libcalamaresui/utils/CalamaresUtilsGui.cpp @@ -1,21 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac * SPDX-FileCopyrightText: 2017-2018 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "CalamaresUtilsGui.h" diff --git a/src/libcalamaresui/utils/CalamaresUtilsGui.h b/src/libcalamaresui/utils/CalamaresUtilsGui.h index a98579cd67..aa7aff79b7 100644 --- a/src/libcalamaresui/utils/CalamaresUtilsGui.h +++ b/src/libcalamaresui/utils/CalamaresUtilsGui.h @@ -1,21 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac * SPDX-FileCopyrightText: 2017-2018 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef CALAMARESUTILSGUI_H diff --git a/src/libcalamaresui/utils/ImageRegistry.cpp b/src/libcalamaresui/utils/ImageRegistry.cpp index 627cf6a8ef..3fdeccceff 100644 --- a/src/libcalamaresui/utils/ImageRegistry.cpp +++ b/src/libcalamaresui/utils/ImageRegistry.cpp @@ -1,4 +1,4 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2012 Christian Muehlhaeuser * SPDX-FileCopyrightText: 2019, Adriaan de Groot diff --git a/src/libcalamaresui/utils/ImageRegistry.h b/src/libcalamaresui/utils/ImageRegistry.h index 706306c23a..80bc25ff61 100644 --- a/src/libcalamaresui/utils/ImageRegistry.h +++ b/src/libcalamaresui/utils/ImageRegistry.h @@ -1,4 +1,4 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2012 Christian Muehlhaeuser * SPDX-FileCopyrightText: 2019 Adriaan de Groot diff --git a/src/libcalamaresui/utils/Paste.cpp b/src/libcalamaresui/utils/Paste.cpp index 16ec7a74fe..8099d90249 100644 --- a/src/libcalamaresui/utils/Paste.cpp +++ b/src/libcalamaresui/utils/Paste.cpp @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2019 Bill Auger * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "Paste.h" diff --git a/src/libcalamaresui/utils/Paste.h b/src/libcalamaresui/utils/Paste.h index 0886a9a7fb..f802dfe2e7 100644 --- a/src/libcalamaresui/utils/Paste.h +++ b/src/libcalamaresui/utils/Paste.h @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2019 Bill Auger * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef UTILS_PASTE_H diff --git a/src/libcalamaresui/utils/PythonQtUtils.cpp b/src/libcalamaresui/utils/PythonQtUtils.cpp index 6528ee4a8b..bc4e034f02 100644 --- a/src/libcalamaresui/utils/PythonQtUtils.cpp +++ b/src/libcalamaresui/utils/PythonQtUtils.cpp @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2016 Teo Mrnjavac * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "PythonQtUtils.h" diff --git a/src/libcalamaresui/utils/PythonQtUtils.h b/src/libcalamaresui/utils/PythonQtUtils.h index f06a6d4e44..49f3bb1c4a 100644 --- a/src/libcalamaresui/utils/PythonQtUtils.h +++ b/src/libcalamaresui/utils/PythonQtUtils.h @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2016 Teo Mrnjavac * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef PYTHONQTUTILS_H diff --git a/src/libcalamaresui/utils/Qml.cpp b/src/libcalamaresui/utils/Qml.cpp index 602e113269..2cb13c8038 100644 --- a/src/libcalamaresui/utils/Qml.cpp +++ b/src/libcalamaresui/utils/Qml.cpp @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2020 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "Qml.h" diff --git a/src/libcalamaresui/utils/Qml.h b/src/libcalamaresui/utils/Qml.h index ea5d0aa8fe..2d6655e9e9 100644 --- a/src/libcalamaresui/utils/Qml.h +++ b/src/libcalamaresui/utils/Qml.h @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2020 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef UTILS_QML_H diff --git a/src/libcalamaresui/viewpages/BlankViewStep.cpp b/src/libcalamaresui/viewpages/BlankViewStep.cpp index 16925a4a11..1fbeaeef01 100644 --- a/src/libcalamaresui/viewpages/BlankViewStep.cpp +++ b/src/libcalamaresui/viewpages/BlankViewStep.cpp @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2018 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "BlankViewStep.h" diff --git a/src/libcalamaresui/viewpages/BlankViewStep.h b/src/libcalamaresui/viewpages/BlankViewStep.h index e10cce8723..7932416471 100644 --- a/src/libcalamaresui/viewpages/BlankViewStep.h +++ b/src/libcalamaresui/viewpages/BlankViewStep.h @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2018 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef BLANKVIEWSTEP_H diff --git a/src/libcalamaresui/viewpages/ExecutionViewStep.cpp b/src/libcalamaresui/viewpages/ExecutionViewStep.cpp index de6f12a21f..fe90e1ec34 100644 --- a/src/libcalamaresui/viewpages/ExecutionViewStep.cpp +++ b/src/libcalamaresui/viewpages/ExecutionViewStep.cpp @@ -1,22 +1,12 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014 Aurélien Gâteau * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac * SPDX-FileCopyrightText: 2018 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "ExecutionViewStep.h" diff --git a/src/libcalamaresui/viewpages/ExecutionViewStep.h b/src/libcalamaresui/viewpages/ExecutionViewStep.h index f2fea641b6..26618c77fd 100644 --- a/src/libcalamaresui/viewpages/ExecutionViewStep.h +++ b/src/libcalamaresui/viewpages/ExecutionViewStep.h @@ -1,21 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014 Aurélien Gâteau * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef EXECUTIONVIEWSTEP_H diff --git a/src/libcalamaresui/viewpages/PythonQtGlobalStorageWrapper.cpp b/src/libcalamaresui/viewpages/PythonQtGlobalStorageWrapper.cpp index 835e35361d..0d667a0970 100644 --- a/src/libcalamaresui/viewpages/PythonQtGlobalStorageWrapper.cpp +++ b/src/libcalamaresui/viewpages/PythonQtGlobalStorageWrapper.cpp @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2016 Teo Mrnjavac * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "PythonQtGlobalStorageWrapper.h" diff --git a/src/libcalamaresui/viewpages/PythonQtGlobalStorageWrapper.h b/src/libcalamaresui/viewpages/PythonQtGlobalStorageWrapper.h index b18fe8fd3e..2a8f6af996 100644 --- a/src/libcalamaresui/viewpages/PythonQtGlobalStorageWrapper.h +++ b/src/libcalamaresui/viewpages/PythonQtGlobalStorageWrapper.h @@ -1,21 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2016 Teo Mrnjavac * SPDX-FileCopyrightText: 2018 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef PYTHONQTGLOBALSTORAGEWRAPPER_H diff --git a/src/libcalamaresui/viewpages/PythonQtJob.cpp b/src/libcalamaresui/viewpages/PythonQtJob.cpp index 112e11cc5a..d41c70f1f1 100644 --- a/src/libcalamaresui/viewpages/PythonQtJob.cpp +++ b/src/libcalamaresui/viewpages/PythonQtJob.cpp @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2016 Teo Mrnjavac * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "PythonQtJob.h" diff --git a/src/libcalamaresui/viewpages/PythonQtJob.h b/src/libcalamaresui/viewpages/PythonQtJob.h index 847dcd44cf..5d591c74e0 100644 --- a/src/libcalamaresui/viewpages/PythonQtJob.h +++ b/src/libcalamaresui/viewpages/PythonQtJob.h @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2016 Teo Mrnjavac * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef PYTHONQTJOB_H diff --git a/src/libcalamaresui/viewpages/PythonQtUtilsWrapper.cpp b/src/libcalamaresui/viewpages/PythonQtUtilsWrapper.cpp index a55e0db052..4cd72f8c04 100644 --- a/src/libcalamaresui/viewpages/PythonQtUtilsWrapper.cpp +++ b/src/libcalamaresui/viewpages/PythonQtUtilsWrapper.cpp @@ -1,21 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2016 Teo Mrnjavac * SPDX-FileCopyrightText: 2019 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "PythonQtUtilsWrapper.h" diff --git a/src/libcalamaresui/viewpages/PythonQtUtilsWrapper.h b/src/libcalamaresui/viewpages/PythonQtUtilsWrapper.h index 96243f7078..e7c8c06604 100644 --- a/src/libcalamaresui/viewpages/PythonQtUtilsWrapper.h +++ b/src/libcalamaresui/viewpages/PythonQtUtilsWrapper.h @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2016 Teo Mrnjavac * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef PYTHONQTUTILSWRAPPER_H diff --git a/src/libcalamaresui/viewpages/PythonQtViewStep.cpp b/src/libcalamaresui/viewpages/PythonQtViewStep.cpp index cc849e0ea0..29c65472f8 100644 --- a/src/libcalamaresui/viewpages/PythonQtViewStep.cpp +++ b/src/libcalamaresui/viewpages/PythonQtViewStep.cpp @@ -1,21 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2016 Teo Mrnjavac * SPDX-FileCopyrightText: 2018 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "PythonQtViewStep.h" diff --git a/src/libcalamaresui/viewpages/PythonQtViewStep.h b/src/libcalamaresui/viewpages/PythonQtViewStep.h index c19494013b..b23a540b9a 100644 --- a/src/libcalamaresui/viewpages/PythonQtViewStep.h +++ b/src/libcalamaresui/viewpages/PythonQtViewStep.h @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2016 Teo Mrnjavac * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef PYTHONQTVIEWSTEP_H diff --git a/src/libcalamaresui/viewpages/QmlViewStep.cpp b/src/libcalamaresui/viewpages/QmlViewStep.cpp index 650a746e22..4ea20ba321 100644 --- a/src/libcalamaresui/viewpages/QmlViewStep.cpp +++ b/src/libcalamaresui/viewpages/QmlViewStep.cpp @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2020 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "QmlViewStep.h" diff --git a/src/libcalamaresui/viewpages/QmlViewStep.h b/src/libcalamaresui/viewpages/QmlViewStep.h index c81f905672..7f04bea81a 100644 --- a/src/libcalamaresui/viewpages/QmlViewStep.h +++ b/src/libcalamaresui/viewpages/QmlViewStep.h @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2020 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef QMLVIEWSTEP_H diff --git a/src/libcalamaresui/viewpages/Slideshow.cpp b/src/libcalamaresui/viewpages/Slideshow.cpp index ddd8aedb67..13f0a3e514 100644 --- a/src/libcalamaresui/viewpages/Slideshow.cpp +++ b/src/libcalamaresui/viewpages/Slideshow.cpp @@ -1,22 +1,12 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014 Aurélien Gâteau * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac * SPDX-FileCopyrightText: 2018 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "Slideshow.h" diff --git a/src/libcalamaresui/viewpages/Slideshow.h b/src/libcalamaresui/viewpages/Slideshow.h index e3b09a6d18..7327347555 100644 --- a/src/libcalamaresui/viewpages/Slideshow.h +++ b/src/libcalamaresui/viewpages/Slideshow.h @@ -1,22 +1,12 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014 Aurélien Gâteau * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac * SPDX-FileCopyrightText: 2018 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef LIBCALAMARESUI_SLIDESHOW_H diff --git a/src/libcalamaresui/viewpages/ViewStep.cpp b/src/libcalamaresui/viewpages/ViewStep.cpp index 1d9fcf1fb3..e76dc915bf 100644 --- a/src/libcalamaresui/viewpages/ViewStep.cpp +++ b/src/libcalamaresui/viewpages/ViewStep.cpp @@ -1,21 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014 Teo Mrnjavac * SPDX-FileCopyrightText: 2017 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "ViewStep.h" diff --git a/src/libcalamaresui/viewpages/ViewStep.h b/src/libcalamaresui/viewpages/ViewStep.h index 6d6b9b2c5e..156975fc5f 100644 --- a/src/libcalamaresui/viewpages/ViewStep.h +++ b/src/libcalamaresui/viewpages/ViewStep.h @@ -1,21 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac * SPDX-FileCopyrightText: 2017 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef VIEWSTEP_H diff --git a/src/libcalamaresui/widgets/ClickableLabel.cpp b/src/libcalamaresui/widgets/ClickableLabel.cpp index ec5c18a296..4d28858136 100644 --- a/src/libcalamaresui/widgets/ClickableLabel.cpp +++ b/src/libcalamaresui/widgets/ClickableLabel.cpp @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014 Teo Mrnjavac * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "ClickableLabel.h" diff --git a/src/libcalamaresui/widgets/ClickableLabel.h b/src/libcalamaresui/widgets/ClickableLabel.h index 43da492766..83ddb3d862 100644 --- a/src/libcalamaresui/widgets/ClickableLabel.h +++ b/src/libcalamaresui/widgets/ClickableLabel.h @@ -1,21 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014 Teo Mrnjavac * SPDX-FileCopyrightText: 2017 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef LIBCALAMARESUI_CLICKABLELABEL_H diff --git a/src/libcalamaresui/widgets/FixedAspectRatioLabel.cpp b/src/libcalamaresui/widgets/FixedAspectRatioLabel.cpp index 6e9a64d108..1d496c27f0 100644 --- a/src/libcalamaresui/widgets/FixedAspectRatioLabel.cpp +++ b/src/libcalamaresui/widgets/FixedAspectRatioLabel.cpp @@ -1,21 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2015 Teo Mrnjavac * SPDX-FileCopyrightText: 2017 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "FixedAspectRatioLabel.h" diff --git a/src/libcalamaresui/widgets/FixedAspectRatioLabel.h b/src/libcalamaresui/widgets/FixedAspectRatioLabel.h index dd85f98ef2..ded7ba602d 100644 --- a/src/libcalamaresui/widgets/FixedAspectRatioLabel.h +++ b/src/libcalamaresui/widgets/FixedAspectRatioLabel.h @@ -1,21 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2015 Teo Mrnjavac * SPDX-FileCopyrightText: 2017 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef FIXEDASPECTRATIOLABEL_H diff --git a/src/libcalamaresui/widgets/PrettyRadioButton.cpp b/src/libcalamaresui/widgets/PrettyRadioButton.cpp index 091be266b8..b79f93a255 100644 --- a/src/libcalamaresui/widgets/PrettyRadioButton.cpp +++ b/src/libcalamaresui/widgets/PrettyRadioButton.cpp @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014 Teo Mrnjavac * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "PrettyRadioButton.h" diff --git a/src/libcalamaresui/widgets/PrettyRadioButton.h b/src/libcalamaresui/widgets/PrettyRadioButton.h index 8b0a3da7d0..67ef49ae60 100644 --- a/src/libcalamaresui/widgets/PrettyRadioButton.h +++ b/src/libcalamaresui/widgets/PrettyRadioButton.h @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014 Teo Mrnjavac * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef LIBCALAMARESUI_PRETTYRADIOBUTTON_H diff --git a/src/libcalamaresui/widgets/WaitingWidget.cpp b/src/libcalamaresui/widgets/WaitingWidget.cpp index 11b1a10f7d..aef5aecf5a 100644 --- a/src/libcalamaresui/widgets/WaitingWidget.cpp +++ b/src/libcalamaresui/widgets/WaitingWidget.cpp @@ -1,21 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014 Teo Mrnjavac * SPDX-FileCopyrightText: 2017 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "WaitingWidget.h" diff --git a/src/libcalamaresui/widgets/WaitingWidget.h b/src/libcalamaresui/widgets/WaitingWidget.h index be375c453f..850b81ca93 100644 --- a/src/libcalamaresui/widgets/WaitingWidget.h +++ b/src/libcalamaresui/widgets/WaitingWidget.h @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014 Teo Mrnjavac * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef WAITINGWIDGET_H diff --git a/src/modules/CMakeLists.txt b/src/modules/CMakeLists.txt index da9e1c5744..8836c74ea6 100644 --- a/src/modules/CMakeLists.txt +++ b/src/modules/CMakeLists.txt @@ -1,4 +1,4 @@ -# === This file is part of Calamares - === +# === This file is part of Calamares - === # # SPDX-FileCopyrightText: 2020 Adriaan de Groot # SPDX-License-Identifier: BSD-2-Clause diff --git a/src/modules/bootloader/main.py b/src/modules/bootloader/main.py index bfb6959093..ec9a6f2e6b 100644 --- a/src/modules/bootloader/main.py +++ b/src/modules/bootloader/main.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 # -*- coding: utf-8 -*- # -# === This file is part of Calamares - === +# === This file is part of Calamares - === # # SPDX-FileCopyrightText: 2014 Aurélien Gâteau # SPDX-FileCopyrightText: 2014 Anke Boersma @@ -16,18 +16,8 @@ # SPDX-FileCopyrightText: 2017 Ben Green # SPDX-License-Identifier: GPL-3.0-or-later # -# Calamares is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. +# Calamares is Free Software: see the License-Identifier above. # -# Calamares is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Calamares. If not, see . import os import shutil diff --git a/src/modules/contextualprocess/Binding.h b/src/modules/contextualprocess/Binding.h index 5b6f09087a..fc9f65557f 100644 --- a/src/modules/contextualprocess/Binding.h +++ b/src/modules/contextualprocess/Binding.h @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2017-2020 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ /* This file isn't public API, but is used to express the API that diff --git a/src/modules/contextualprocess/CMakeLists.txt b/src/modules/contextualprocess/CMakeLists.txt index 705f494b58..113b504dbe 100644 --- a/src/modules/contextualprocess/CMakeLists.txt +++ b/src/modules/contextualprocess/CMakeLists.txt @@ -1,4 +1,4 @@ -# === This file is part of Calamares - === +# === This file is part of Calamares - === # # SPDX-FileCopyrightText: 2020 Adriaan de Groot # SPDX-License-Identifier: BSD-2-Clause diff --git a/src/modules/contextualprocess/ContextualProcessJob.cpp b/src/modules/contextualprocess/ContextualProcessJob.cpp index f970740ca5..8bc0111271 100644 --- a/src/modules/contextualprocess/ContextualProcessJob.cpp +++ b/src/modules/contextualprocess/ContextualProcessJob.cpp @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2017-2020 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "ContextualProcessJob.h" diff --git a/src/modules/contextualprocess/ContextualProcessJob.h b/src/modules/contextualprocess/ContextualProcessJob.h index e926f699de..f84afb5f1b 100644 --- a/src/modules/contextualprocess/ContextualProcessJob.h +++ b/src/modules/contextualprocess/ContextualProcessJob.h @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2017-2018 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef CONTEXTUALPROCESSJOB_H diff --git a/src/modules/contextualprocess/Tests.cpp b/src/modules/contextualprocess/Tests.cpp index 97277dfce7..aa51e11920 100644 --- a/src/modules/contextualprocess/Tests.cpp +++ b/src/modules/contextualprocess/Tests.cpp @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2017-2018 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "Tests.h" diff --git a/src/modules/contextualprocess/Tests.h b/src/modules/contextualprocess/Tests.h index 5b27d497d3..0aed1f4a53 100644 --- a/src/modules/contextualprocess/Tests.h +++ b/src/modules/contextualprocess/Tests.h @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2018 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef TESTS_H diff --git a/src/modules/displaymanager/main.py b/src/modules/displaymanager/main.py index 509257bb1b..a803e0d7a7 100644 --- a/src/modules/displaymanager/main.py +++ b/src/modules/displaymanager/main.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 # -*- coding: utf-8 -*- # -# === This file is part of Calamares - === +# === This file is part of Calamares - === # # SPDX-FileCopyrightText: 2014-2018 Philip Müller # SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac @@ -12,18 +12,8 @@ # SPDX-FileCopyrightText: 2019 Dominic Hayes # SPDX-License-Identifier: GPL-3.0-or-later # -# Calamares is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. +# Calamares is Free Software: see the License-Identifier above. # -# Calamares is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Calamares. If not, see . import abc import os diff --git a/src/modules/dracut/main.py b/src/modules/dracut/main.py index 2a5ba91d76..392dd8a519 100644 --- a/src/modules/dracut/main.py +++ b/src/modules/dracut/main.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 # -*- coding: utf-8 -*- # -# === This file is part of Calamares - === +# === This file is part of Calamares - === # # SPDX-FileCopyrightText: 2014-2015 Philip Müller # SPDX-FileCopyrightText: 2014 Teo Mrnjavac @@ -9,18 +9,8 @@ # SPDX-FileCopyrightText: 2019 Adriaan de Groot # SPDX-License-Identifier: GPL-3.0-or-later # -# Calamares is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. +# Calamares is Free Software: see the License-Identifier above. # -# Calamares is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Calamares. If not, see . import libcalamares from libcalamares.utils import target_env_call diff --git a/src/modules/dracutlukscfg/CMakeLists.txt b/src/modules/dracutlukscfg/CMakeLists.txt index 3620bb92c9..dd9faf9d45 100644 --- a/src/modules/dracutlukscfg/CMakeLists.txt +++ b/src/modules/dracutlukscfg/CMakeLists.txt @@ -1,4 +1,4 @@ -# === This file is part of Calamares - === +# === This file is part of Calamares - === # # SPDX-FileCopyrightText: 2020 Adriaan de Groot # SPDX-License-Identifier: BSD-2-Clause diff --git a/src/modules/dracutlukscfg/DracutLuksCfgJob.cpp b/src/modules/dracutlukscfg/DracutLuksCfgJob.cpp index 18bbcae884..edd9b29488 100644 --- a/src/modules/dracutlukscfg/DracutLuksCfgJob.cpp +++ b/src/modules/dracutlukscfg/DracutLuksCfgJob.cpp @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2016 Kevin Kofler * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "DracutLuksCfgJob.h" diff --git a/src/modules/dracutlukscfg/DracutLuksCfgJob.h b/src/modules/dracutlukscfg/DracutLuksCfgJob.h index b10a8647e4..eb517b21d0 100644 --- a/src/modules/dracutlukscfg/DracutLuksCfgJob.h +++ b/src/modules/dracutlukscfg/DracutLuksCfgJob.h @@ -1,21 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2016 Kevin Kofler * SPDX-FileCopyrightText: 2017 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef DRACUTLUKSCFGJOB_H diff --git a/src/modules/dummycpp/CMakeLists.txt b/src/modules/dummycpp/CMakeLists.txt index 7b219744c9..e199d50272 100644 --- a/src/modules/dummycpp/CMakeLists.txt +++ b/src/modules/dummycpp/CMakeLists.txt @@ -1,4 +1,4 @@ -# === This file is part of Calamares - === +# === This file is part of Calamares - === # # SPDX-FileCopyrightText: 2020 Adriaan de Groot # SPDX-License-Identifier: BSD-2-Clause diff --git a/src/modules/dummycpp/DummyCppJob.cpp b/src/modules/dummycpp/DummyCppJob.cpp index b9765ac011..5b2deffd10 100644 --- a/src/modules/dummycpp/DummyCppJob.cpp +++ b/src/modules/dummycpp/DummyCppJob.cpp @@ -1,22 +1,12 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014 Teo Mrnjavac (original dummypython code) * SPDX-FileCopyrightText: 2016 Kevin Kofler * SPDX-FileCopyrightText: 2018 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "DummyCppJob.h" diff --git a/src/modules/dummycpp/DummyCppJob.h b/src/modules/dummycpp/DummyCppJob.h index 1b6f0eeb5b..2f267d5118 100644 --- a/src/modules/dummycpp/DummyCppJob.h +++ b/src/modules/dummycpp/DummyCppJob.h @@ -1,21 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2016 Kevin Kofler * SPDX-FileCopyrightText: 2017 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef DUMMYCPPJOB_H diff --git a/src/modules/dummypython/main.py b/src/modules/dummypython/main.py index 2f21e9b77a..aa748006d5 100644 --- a/src/modules/dummypython/main.py +++ b/src/modules/dummypython/main.py @@ -1,25 +1,15 @@ #!/usr/bin/env python3 # -*- coding: utf-8 -*- # -# === This file is part of Calamares - === +# === This file is part of Calamares - === # # SPDX-FileCopyrightText: 2014 Teo Mrnjavac # SPDX-FileCopyrightText: 2017 Alf Gaida # SPDX-FileCopyrightText: 2017 Adriaan de Groot # SPDX-License-Identifier: GPL-3.0-or-later # -# Calamares is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. +# Calamares is Free Software: see the License-Identifier above. # -# Calamares is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Calamares. If not, see . """ === Example Python jobmodule. diff --git a/src/modules/dummypythonqt/main.py b/src/modules/dummypythonqt/main.py index c08b79fbb7..e33c20e6fb 100644 --- a/src/modules/dummypythonqt/main.py +++ b/src/modules/dummypythonqt/main.py @@ -1,24 +1,14 @@ #!/usr/bin/env python3 # -*- coding: utf-8 -*- # -# === This file is part of Calamares - === +# === This file is part of Calamares - === # # SPDX-FileCopyrightText: 2016-2017 Teo Mrnjavac # SPDX-FileCopyrightText: 2017 Alf Gaida # SPDX-License-Identifier: GPL-3.0-or-later # -# Calamares is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. +# Calamares is Free Software: see the License-Identifier above. # -# Calamares is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Calamares. If not, see . import platform diff --git a/src/modules/finished/CMakeLists.txt b/src/modules/finished/CMakeLists.txt index 746683533c..21eb1ad187 100644 --- a/src/modules/finished/CMakeLists.txt +++ b/src/modules/finished/CMakeLists.txt @@ -1,4 +1,4 @@ -# === This file is part of Calamares - === +# === This file is part of Calamares - === # # SPDX-FileCopyrightText: 2020 Adriaan de Groot # SPDX-License-Identifier: BSD-2-Clause diff --git a/src/modules/finished/FinishedPage.cpp b/src/modules/finished/FinishedPage.cpp index bdcbb9a851..23f09df99c 100644 --- a/src/modules/finished/FinishedPage.cpp +++ b/src/modules/finished/FinishedPage.cpp @@ -1,22 +1,12 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac * SPDX-FileCopyrightText: 2017-2018 Adriaan de Groot * SPDX-FileCopyrightText: 2019 Collabora Ltd * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "FinishedPage.h" diff --git a/src/modules/finished/FinishedPage.h b/src/modules/finished/FinishedPage.h index 90ce9383a2..1df022f582 100644 --- a/src/modules/finished/FinishedPage.h +++ b/src/modules/finished/FinishedPage.h @@ -1,21 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac * SPDX-FileCopyrightText: 2017 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef FINISHEDPAGE_H diff --git a/src/modules/finished/FinishedViewStep.cpp b/src/modules/finished/FinishedViewStep.cpp index 0ea2bbe4c7..525108dc73 100644 --- a/src/modules/finished/FinishedViewStep.cpp +++ b/src/modules/finished/FinishedViewStep.cpp @@ -1,22 +1,12 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac * SPDX-FileCopyrightText: 2017 2019, Adriaan de Groot * SPDX-FileCopyrightText: 2019 Collabora Ltd * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "FinishedViewStep.h" diff --git a/src/modules/finished/FinishedViewStep.h b/src/modules/finished/FinishedViewStep.h index f19304935e..97d38b2670 100644 --- a/src/modules/finished/FinishedViewStep.h +++ b/src/modules/finished/FinishedViewStep.h @@ -1,21 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac * SPDX-FileCopyrightText: 2019 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef FINISHEDVIEWSTEP_H diff --git a/src/modules/fsresizer/CMakeLists.txt b/src/modules/fsresizer/CMakeLists.txt index 8b23f90b22..7fdea1ff20 100644 --- a/src/modules/fsresizer/CMakeLists.txt +++ b/src/modules/fsresizer/CMakeLists.txt @@ -1,4 +1,4 @@ -# === This file is part of Calamares - === +# === This file is part of Calamares - === # # SPDX-FileCopyrightText: 2020 Adriaan de Groot # SPDX-License-Identifier: BSD-2-Clause diff --git a/src/modules/fsresizer/ResizeFSJob.cpp b/src/modules/fsresizer/ResizeFSJob.cpp index d7003c76d0..9f2b440b83 100644 --- a/src/modules/fsresizer/ResizeFSJob.cpp +++ b/src/modules/fsresizer/ResizeFSJob.cpp @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2018 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "ResizeFSJob.h" diff --git a/src/modules/fsresizer/ResizeFSJob.h b/src/modules/fsresizer/ResizeFSJob.h index 5bc810370e..5c9c961a5e 100644 --- a/src/modules/fsresizer/ResizeFSJob.h +++ b/src/modules/fsresizer/ResizeFSJob.h @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2018 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef RESIZEFSJOB_H diff --git a/src/modules/fsresizer/Tests.cpp b/src/modules/fsresizer/Tests.cpp index a7be5dab8a..7cd60ee9ef 100644 --- a/src/modules/fsresizer/Tests.cpp +++ b/src/modules/fsresizer/Tests.cpp @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2017-2018 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "Tests.h" diff --git a/src/modules/fsresizer/Tests.h b/src/modules/fsresizer/Tests.h index 24ac0bc8a3..f3d2308ec9 100644 --- a/src/modules/fsresizer/Tests.h +++ b/src/modules/fsresizer/Tests.h @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2018 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef TESTS_H diff --git a/src/modules/fstab/main.py b/src/modules/fstab/main.py index 19af12b9eb..26c3579459 100644 --- a/src/modules/fstab/main.py +++ b/src/modules/fstab/main.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 # -*- coding: utf-8 -*- # -# === This file is part of Calamares - === +# === This file is part of Calamares - === # # SPDX-FileCopyrightText: 2014 Aurélien Gâteau # SPDX-FileCopyrightText: 2016 Teo Mrnjavac @@ -9,18 +9,8 @@ # SPDX-FileCopyrightText: 2019 Adriaan de Groot # SPDX-License-Identifier: GPL-3.0-or-later # -# Calamares is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. +# Calamares is Free Software: see the License-Identifier above. # -# Calamares is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Calamares. If not, see . import os import re diff --git a/src/modules/grubcfg/main.py b/src/modules/grubcfg/main.py index be97524022..22ef181300 100644 --- a/src/modules/grubcfg/main.py +++ b/src/modules/grubcfg/main.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 # -*- coding: utf-8 -*- # -# === This file is part of Calamares - === +# === This file is part of Calamares - === # # SPDX-FileCopyrightText: 2014-2015 Philip Müller # SPDX-FileCopyrightText: 2015-2017 Teo Mrnjavac @@ -10,18 +10,8 @@ # SPDX-FileCopyrightText: 2017-2018 Gabriel Craciunescu # SPDX-License-Identifier: GPL-3.0-or-later # -# Calamares is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. +# Calamares is Free Software: see the License-Identifier above. # -# Calamares is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Calamares. If not, see . import libcalamares import os diff --git a/src/modules/hostinfo/CMakeLists.txt b/src/modules/hostinfo/CMakeLists.txt index 401f501686..cdf5857e6d 100644 --- a/src/modules/hostinfo/CMakeLists.txt +++ b/src/modules/hostinfo/CMakeLists.txt @@ -1,4 +1,4 @@ -# === This file is part of Calamares - === +# === This file is part of Calamares - === # # SPDX-FileCopyrightText: 2020 Adriaan de Groot # SPDX-License-Identifier: BSD-2-Clause diff --git a/src/modules/hostinfo/HostInfoJob.cpp b/src/modules/hostinfo/HostInfoJob.cpp index 02320c7ac9..0be4199780 100644 --- a/src/modules/hostinfo/HostInfoJob.cpp +++ b/src/modules/hostinfo/HostInfoJob.cpp @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2019 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "HostInfoJob.h" diff --git a/src/modules/hostinfo/HostInfoJob.h b/src/modules/hostinfo/HostInfoJob.h index bf519e953e..d9b450ac47 100644 --- a/src/modules/hostinfo/HostInfoJob.h +++ b/src/modules/hostinfo/HostInfoJob.h @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2019 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef HOSTINFOJOB_H diff --git a/src/modules/hostinfo/Tests.cpp b/src/modules/hostinfo/Tests.cpp index 883bddf283..724340269b 100644 --- a/src/modules/hostinfo/Tests.cpp +++ b/src/modules/hostinfo/Tests.cpp @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2019 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "HostInfoJob.h" diff --git a/src/modules/hwclock/main.py b/src/modules/hwclock/main.py index 7cf5790f92..be9fabf5f0 100644 --- a/src/modules/hwclock/main.py +++ b/src/modules/hwclock/main.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 # -*- coding: utf-8 -*- # -# === This file is part of Calamares - === +# === This file is part of Calamares - === # # SPDX-FileCopyrightText: 2014-2015 Philip Müller # SPDX-FileCopyrightText: 2014 Teo Mrnjavac @@ -10,18 +10,8 @@ # SPDX-FileCopyrightText: 2019 Adriaan de Groot # SPDX-License-Identifier: GPL-3.0-or-later # -# Calamares is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. +# Calamares is Free Software: see the License-Identifier above. # -# Calamares is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Calamares. If not, see . import libcalamares diff --git a/src/modules/initcpio/CMakeLists.txt b/src/modules/initcpio/CMakeLists.txt index d51884edc4..e8d90e7fae 100644 --- a/src/modules/initcpio/CMakeLists.txt +++ b/src/modules/initcpio/CMakeLists.txt @@ -1,4 +1,4 @@ -# === This file is part of Calamares - === +# === This file is part of Calamares - === # # SPDX-FileCopyrightText: 2020 Adriaan de Groot # SPDX-License-Identifier: BSD-2-Clause diff --git a/src/modules/initcpio/InitcpioJob.cpp b/src/modules/initcpio/InitcpioJob.cpp index ae910995ca..b96f3b3168 100644 --- a/src/modules/initcpio/InitcpioJob.cpp +++ b/src/modules/initcpio/InitcpioJob.cpp @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2019 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "InitcpioJob.h" diff --git a/src/modules/initcpio/InitcpioJob.h b/src/modules/initcpio/InitcpioJob.h index ae8ff47c34..45421ea056 100644 --- a/src/modules/initcpio/InitcpioJob.h +++ b/src/modules/initcpio/InitcpioJob.h @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2019 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef INITCPIOJOB_H diff --git a/src/modules/initcpio/Tests.cpp b/src/modules/initcpio/Tests.cpp index 83b10388db..bff163b5f8 100644 --- a/src/modules/initcpio/Tests.cpp +++ b/src/modules/initcpio/Tests.cpp @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2019 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "Tests.h" diff --git a/src/modules/initcpio/Tests.h b/src/modules/initcpio/Tests.h index bebab408a6..aac48d0c4c 100644 --- a/src/modules/initcpio/Tests.h +++ b/src/modules/initcpio/Tests.h @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2019 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef TESTS_H diff --git a/src/modules/initcpiocfg/main.py b/src/modules/initcpiocfg/main.py index 119fa5cf21..aef980e250 100644 --- a/src/modules/initcpiocfg/main.py +++ b/src/modules/initcpiocfg/main.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 # -*- coding: utf-8 -*- # -# === This file is part of Calamares - === +# === This file is part of Calamares - === # # SPDX-FileCopyrightText: 2014 Rohan Garg # SPDX-FileCopyrightText: 2015 2019-2020, Philip Müller @@ -9,18 +9,8 @@ # SPDX-FileCopyrightText: 2019 Adriaan de Groot # SPDX-License-Identifier: GPL-3.0-or-later # -# Calamares is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. +# Calamares is Free Software: see the License-Identifier above. # -# Calamares is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Calamares. If not, see . import libcalamares from libcalamares.utils import debug, target_env_call diff --git a/src/modules/initramfs/CMakeLists.txt b/src/modules/initramfs/CMakeLists.txt index 2d64cbc75d..b8bcc9681b 100644 --- a/src/modules/initramfs/CMakeLists.txt +++ b/src/modules/initramfs/CMakeLists.txt @@ -1,4 +1,4 @@ -# === This file is part of Calamares - === +# === This file is part of Calamares - === # # SPDX-FileCopyrightText: 2020 Adriaan de Groot # SPDX-License-Identifier: BSD-2-Clause diff --git a/src/modules/initramfs/InitramfsJob.cpp b/src/modules/initramfs/InitramfsJob.cpp index 05ee4bde8a..1b10a1a05a 100644 --- a/src/modules/initramfs/InitramfsJob.cpp +++ b/src/modules/initramfs/InitramfsJob.cpp @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2019 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "InitramfsJob.h" diff --git a/src/modules/initramfs/InitramfsJob.h b/src/modules/initramfs/InitramfsJob.h index b1b3fb3977..7b3a039118 100644 --- a/src/modules/initramfs/InitramfsJob.h +++ b/src/modules/initramfs/InitramfsJob.h @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2019 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef INITRAMFSJOB_H diff --git a/src/modules/initramfs/Tests.cpp b/src/modules/initramfs/Tests.cpp index 955d9b8bf5..f1c9b5e248 100644 --- a/src/modules/initramfs/Tests.cpp +++ b/src/modules/initramfs/Tests.cpp @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2019 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "Tests.h" diff --git a/src/modules/initramfs/Tests.h b/src/modules/initramfs/Tests.h index 11d0fd1d03..3774245899 100644 --- a/src/modules/initramfs/Tests.h +++ b/src/modules/initramfs/Tests.h @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2019 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef TESTS_H diff --git a/src/modules/initramfscfg/main.py b/src/modules/initramfscfg/main.py index e3b6d04391..974e2634dc 100644 --- a/src/modules/initramfscfg/main.py +++ b/src/modules/initramfscfg/main.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 # -*- coding: utf-8 -*- # -# === This file is part of Calamares - === +# === This file is part of Calamares - === # # SPDX-FileCopyrightText: 2014 Rohan Garg # SPDX-FileCopyrightText: 2015 Philip Müller @@ -11,18 +11,8 @@ # SPDX-FileCopyrightText: 2017 2019, Adriaan de Groot # SPDX-License-Identifier: GPL-3.0-or-later # -# Calamares is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. +# Calamares is Free Software: see the License-Identifier above. # -# Calamares is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Calamares. If not, see . import libcalamares diff --git a/src/modules/interactiveterminal/CMakeLists.txt b/src/modules/interactiveterminal/CMakeLists.txt index 05e3388e3f..fea99a5dd4 100644 --- a/src/modules/interactiveterminal/CMakeLists.txt +++ b/src/modules/interactiveterminal/CMakeLists.txt @@ -1,4 +1,4 @@ -# === This file is part of Calamares - === +# === This file is part of Calamares - === # # SPDX-FileCopyrightText: 2020 Adriaan de Groot # SPDX-License-Identifier: BSD-2-Clause diff --git a/src/modules/interactiveterminal/InteractiveTerminalPage.cpp b/src/modules/interactiveterminal/InteractiveTerminalPage.cpp index 9d5f76724c..ea4e3b42ef 100644 --- a/src/modules/interactiveterminal/InteractiveTerminalPage.cpp +++ b/src/modules/interactiveterminal/InteractiveTerminalPage.cpp @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "InteractiveTerminalPage.h" diff --git a/src/modules/interactiveterminal/InteractiveTerminalPage.h b/src/modules/interactiveterminal/InteractiveTerminalPage.h index 20ab0d651a..86ba075adb 100644 --- a/src/modules/interactiveterminal/InteractiveTerminalPage.h +++ b/src/modules/interactiveterminal/InteractiveTerminalPage.h @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef INTERACTIVETERMINALPAGE_H diff --git a/src/modules/interactiveterminal/InteractiveTerminalViewStep.cpp b/src/modules/interactiveterminal/InteractiveTerminalViewStep.cpp index 45019cf4a0..b01321c183 100644 --- a/src/modules/interactiveterminal/InteractiveTerminalViewStep.cpp +++ b/src/modules/interactiveterminal/InteractiveTerminalViewStep.cpp @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "InteractiveTerminalViewStep.h" diff --git a/src/modules/interactiveterminal/InteractiveTerminalViewStep.h b/src/modules/interactiveterminal/InteractiveTerminalViewStep.h index d91fc07cc4..f01a19ee6b 100644 --- a/src/modules/interactiveterminal/InteractiveTerminalViewStep.h +++ b/src/modules/interactiveterminal/InteractiveTerminalViewStep.h @@ -1,21 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac * SPDX-FileCopyrightText: 2017 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef INTERACTIVETERMINALPAGEPLUGIN_H diff --git a/src/modules/keyboard/CMakeLists.txt b/src/modules/keyboard/CMakeLists.txt index 9dca5f2b07..4ee83ec146 100644 --- a/src/modules/keyboard/CMakeLists.txt +++ b/src/modules/keyboard/CMakeLists.txt @@ -1,4 +1,4 @@ -# === This file is part of Calamares - === +# === This file is part of Calamares - === # # SPDX-FileCopyrightText: 2020 Adriaan de Groot # SPDX-License-Identifier: BSD-2-Clause diff --git a/src/modules/keyboard/Config.cpp b/src/modules/keyboard/Config.cpp index bd2c417805..11a20bbb74 100644 --- a/src/modules/keyboard/Config.cpp +++ b/src/modules/keyboard/Config.cpp @@ -1,21 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2019-2020 Adriaan de Groot * SPDX-FileCopyrightText: 2020 Camilo Higuita * * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "Config.h" diff --git a/src/modules/keyboard/Config.h b/src/modules/keyboard/Config.h index a7e9c621bc..44a893faa2 100644 --- a/src/modules/keyboard/Config.h +++ b/src/modules/keyboard/Config.h @@ -1,21 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2019-2020 Adriaan de Groot * SPDX-FileCopyrightText: 2020 Camilo Higuita * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef KEYBOARD_CONFIG_H diff --git a/src/modules/keyboard/KeyboardLayoutModel.cpp b/src/modules/keyboard/KeyboardLayoutModel.cpp index 9077ea60e7..5b92678f60 100644 --- a/src/modules/keyboard/KeyboardLayoutModel.cpp +++ b/src/modules/keyboard/KeyboardLayoutModel.cpp @@ -1,21 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2016 Teo Mrnjavac * SPDX-FileCopyrightText: 2017 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "KeyboardLayoutModel.h" diff --git a/src/modules/keyboard/KeyboardLayoutModel.h b/src/modules/keyboard/KeyboardLayoutModel.h index eeb0666fa3..f4699c9f88 100644 --- a/src/modules/keyboard/KeyboardLayoutModel.h +++ b/src/modules/keyboard/KeyboardLayoutModel.h @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2016 Teo Mrnjavac * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef KEYBOARDLAYOUTMODEL_H diff --git a/src/modules/keyboard/KeyboardPage.cpp b/src/modules/keyboard/KeyboardPage.cpp index 6ab472446c..66f4c75701 100644 --- a/src/modules/keyboard/KeyboardPage.cpp +++ b/src/modules/keyboard/KeyboardPage.cpp @@ -1,4 +1,4 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2007 Free Software Foundation, Inc. * SPDX-FileCopyrightText: 2014-2016 Teo Mrnjavac @@ -9,18 +9,8 @@ * by Roland Singer * Copyright (C) 2007 Free Software Foundation, Inc. * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "KeyboardPage.h" diff --git a/src/modules/keyboard/KeyboardPage.h b/src/modules/keyboard/KeyboardPage.h index 73896923aa..485e27ed61 100644 --- a/src/modules/keyboard/KeyboardPage.h +++ b/src/modules/keyboard/KeyboardPage.h @@ -1,4 +1,4 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2007 Free Software Foundation, Inc. * SPDX-FileCopyrightText: 2014-2016 Teo Mrnjavac @@ -9,18 +9,8 @@ * by Roland Singer * Copyright (C) 2007 Free Software Foundation, Inc. * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef KEYBOARDPAGE_H diff --git a/src/modules/keyboard/KeyboardViewStep.cpp b/src/modules/keyboard/KeyboardViewStep.cpp index b424653f77..55402fd14c 100644 --- a/src/modules/keyboard/KeyboardViewStep.cpp +++ b/src/modules/keyboard/KeyboardViewStep.cpp @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "KeyboardViewStep.h" diff --git a/src/modules/keyboard/KeyboardViewStep.h b/src/modules/keyboard/KeyboardViewStep.h index 8de05d0af6..5d4882acae 100644 --- a/src/modules/keyboard/KeyboardViewStep.h +++ b/src/modules/keyboard/KeyboardViewStep.h @@ -1,21 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac * SPDX-FileCopyrightText: 2017 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef KEYBOARDVIEWSTEP_H diff --git a/src/modules/keyboard/SetKeyboardLayoutJob.cpp b/src/modules/keyboard/SetKeyboardLayoutJob.cpp index e9c20e0aa3..d0ad8fcbf6 100644 --- a/src/modules/keyboard/SetKeyboardLayoutJob.cpp +++ b/src/modules/keyboard/SetKeyboardLayoutJob.cpp @@ -1,4 +1,4 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2011 Lennart Poettering * SPDX-FileCopyrightText: Kay Sievers @@ -11,18 +11,8 @@ * Copyright 2013 Kay Sievers * (originally under LGPLv2.1+, used under the LGPL to GPL conversion clause) * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "SetKeyboardLayoutJob.h" diff --git a/src/modules/keyboard/SetKeyboardLayoutJob.h b/src/modules/keyboard/SetKeyboardLayoutJob.h index ee0cd0a99b..f1eabe1952 100644 --- a/src/modules/keyboard/SetKeyboardLayoutJob.h +++ b/src/modules/keyboard/SetKeyboardLayoutJob.h @@ -1,21 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2016 Teo Mrnjavac * SPDX-FileCopyrightText: 2014 Kevin Kofler * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef SETKEYBOARDLAYOUTJOB_H diff --git a/src/modules/keyboard/keyboardwidget/keyboardglobal.cpp b/src/modules/keyboard/keyboardwidget/keyboardglobal.cpp index d5f6984d47..329913d798 100644 --- a/src/modules/keyboard/keyboardwidget/keyboardglobal.cpp +++ b/src/modules/keyboard/keyboardwidget/keyboardglobal.cpp @@ -1,4 +1,4 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2007 Free Software Foundation, Inc. * SPDX-FileCopyrightText: 2014 Teo Mrnjavac @@ -11,18 +11,8 @@ * * Source by Georg Grabler * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "keyboardglobal.h" diff --git a/src/modules/keyboard/keyboardwidget/keyboardglobal.h b/src/modules/keyboard/keyboardwidget/keyboardglobal.h index 9e03c05e5a..07c6e5ea2e 100644 --- a/src/modules/keyboard/keyboardwidget/keyboardglobal.h +++ b/src/modules/keyboard/keyboardwidget/keyboardglobal.h @@ -1,4 +1,4 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2007 Free Software Foundation, Inc. * SPDX-FileCopyrightText: 2014 Teo Mrnjavac @@ -9,18 +9,8 @@ * by Roland Singer * Copyright (C) 2007 Free Software Foundation, Inc. * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef KEYBOARDGLOBAL_H diff --git a/src/modules/keyboard/keyboardwidget/keyboardpreview.cpp b/src/modules/keyboard/keyboardwidget/keyboardpreview.cpp index 6cc306526b..572965de53 100644 --- a/src/modules/keyboard/keyboardwidget/keyboardpreview.cpp +++ b/src/modules/keyboard/keyboardwidget/keyboardpreview.cpp @@ -1,4 +1,4 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2007 Free Software Foundation, Inc. * SPDX-FileCopyrightText: 2014 Teo Mrnjavac @@ -9,18 +9,8 @@ * by Roland Singer * Copyright (C) 2007 Free Software Foundation, Inc. * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "keyboardpreview.h" diff --git a/src/modules/keyboard/keyboardwidget/keyboardpreview.h b/src/modules/keyboard/keyboardwidget/keyboardpreview.h index f09f9b5f52..1a01fe1a2a 100644 --- a/src/modules/keyboard/keyboardwidget/keyboardpreview.h +++ b/src/modules/keyboard/keyboardwidget/keyboardpreview.h @@ -1,4 +1,4 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2007 Free Software Foundation, Inc. * SPDX-FileCopyrightText: 2014 Teo Mrnjavac @@ -8,18 +8,8 @@ * by Roland Singer * Copyright (C) 2007 Free Software Foundation, Inc. * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef KEYBOARDPREVIEW_H diff --git a/src/modules/keyboardq/CMakeLists.txt b/src/modules/keyboardq/CMakeLists.txt index 173275cef4..cc1e7e2c3a 100644 --- a/src/modules/keyboardq/CMakeLists.txt +++ b/src/modules/keyboardq/CMakeLists.txt @@ -1,4 +1,4 @@ -# === This file is part of Calamares - === +# === This file is part of Calamares - === # # SPDX-FileCopyrightText: 2020 Adriaan de Groot # SPDX-License-Identifier: BSD-2-Clause diff --git a/src/modules/keyboardq/KeyboardQmlViewStep.cpp b/src/modules/keyboardq/KeyboardQmlViewStep.cpp index a5c1f94352..d42ab52690 100644 --- a/src/modules/keyboardq/KeyboardQmlViewStep.cpp +++ b/src/modules/keyboardq/KeyboardQmlViewStep.cpp @@ -1,21 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac * SPDX-FileCopyrightText: 2020 Camilo Higuita * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "KeyboardQmlViewStep.h" diff --git a/src/modules/keyboardq/KeyboardQmlViewStep.h b/src/modules/keyboardq/KeyboardQmlViewStep.h index b1e7e15e75..4571a9a60b 100644 --- a/src/modules/keyboardq/KeyboardQmlViewStep.h +++ b/src/modules/keyboardq/KeyboardQmlViewStep.h @@ -1,21 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac * SPDX-FileCopyrightText: 2017 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef KEYBOARDQMLVIEWSTEP_H diff --git a/src/modules/license/CMakeLists.txt b/src/modules/license/CMakeLists.txt index b52875da65..baaf34b435 100644 --- a/src/modules/license/CMakeLists.txt +++ b/src/modules/license/CMakeLists.txt @@ -1,4 +1,4 @@ -# === This file is part of Calamares - === +# === This file is part of Calamares - === # # SPDX-FileCopyrightText: 2020 Adriaan de Groot # SPDX-License-Identifier: BSD-2-Clause diff --git a/src/modules/license/LicensePage.cpp b/src/modules/license/LicensePage.cpp index 411032404d..1a92e9ac1c 100644 --- a/src/modules/license/LicensePage.cpp +++ b/src/modules/license/LicensePage.cpp @@ -1,4 +1,4 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2015 Anke Boersma * SPDX-FileCopyrightText: 2015 Alexandre Arnt @@ -6,18 +6,8 @@ * SPDX-FileCopyrightText: 2018 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "LicensePage.h" diff --git a/src/modules/license/LicensePage.h b/src/modules/license/LicensePage.h index 8493825b54..73a62defae 100644 --- a/src/modules/license/LicensePage.h +++ b/src/modules/license/LicensePage.h @@ -1,4 +1,4 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2015 Anke Boersma * SPDX-FileCopyrightText: 2015 Alexandre Arnt @@ -6,18 +6,8 @@ * SPDX-FileCopyrightText: 2018 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef LICENSEPAGE_H diff --git a/src/modules/license/LicenseViewStep.cpp b/src/modules/license/LicenseViewStep.cpp index 24ae5652a8..aca04a1b30 100644 --- a/src/modules/license/LicenseViewStep.cpp +++ b/src/modules/license/LicenseViewStep.cpp @@ -1,21 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2015 Anke Boersma * SPDX-FileCopyrightText: 2015 Teo Mrnjavac * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "LicenseViewStep.h" diff --git a/src/modules/license/LicenseViewStep.h b/src/modules/license/LicenseViewStep.h index 3aef1f7f3e..15e3452217 100644 --- a/src/modules/license/LicenseViewStep.h +++ b/src/modules/license/LicenseViewStep.h @@ -1,21 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2015 Anke Boersma * SPDX-FileCopyrightText: 2015 Teo Mrnjavac * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef LICENSEPAGEPLUGIN_H diff --git a/src/modules/license/LicenseWidget.cpp b/src/modules/license/LicenseWidget.cpp index a5f6d688a5..b2e66515df 100644 --- a/src/modules/license/LicenseWidget.cpp +++ b/src/modules/license/LicenseWidget.cpp @@ -1,4 +1,4 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2015 Anke Boersma * SPDX-FileCopyrightText: 2015 Alexandre Arnt @@ -6,18 +6,8 @@ * SPDX-FileCopyrightText: 2018 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "LicenseWidget.h" diff --git a/src/modules/license/LicenseWidget.h b/src/modules/license/LicenseWidget.h index 08aa031c5b..2d810e80a7 100644 --- a/src/modules/license/LicenseWidget.h +++ b/src/modules/license/LicenseWidget.h @@ -1,4 +1,4 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2015 Anke Boersma * SPDX-FileCopyrightText: 2015 Alexandre Arnt @@ -6,18 +6,8 @@ * SPDX-FileCopyrightText: 2018 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef LICENSE_LICENSEWIDGET_H diff --git a/src/modules/locale/CMakeLists.txt b/src/modules/locale/CMakeLists.txt index 1e0531c6be..3802f92b25 100644 --- a/src/modules/locale/CMakeLists.txt +++ b/src/modules/locale/CMakeLists.txt @@ -1,4 +1,4 @@ -# === This file is part of Calamares - === +# === This file is part of Calamares - === # # SPDX-FileCopyrightText: 2020 Adriaan de Groot # SPDX-License-Identifier: BSD-2-Clause diff --git a/src/modules/locale/Config.cpp b/src/modules/locale/Config.cpp index ae4f772ad8..37857cc71f 100644 --- a/src/modules/locale/Config.cpp +++ b/src/modules/locale/Config.cpp @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2020 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "Config.h" diff --git a/src/modules/locale/Config.h b/src/modules/locale/Config.h index cbebf98442..a7ae0ccafe 100644 --- a/src/modules/locale/Config.h +++ b/src/modules/locale/Config.h @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2020 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef LOCALE_CONFIG_H diff --git a/src/modules/locale/LCLocaleDialog.cpp b/src/modules/locale/LCLocaleDialog.cpp index a3b0a4d2c2..efa85c5360 100644 --- a/src/modules/locale/LCLocaleDialog.cpp +++ b/src/modules/locale/LCLocaleDialog.cpp @@ -1,21 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014 Teo Mrnjavac * SPDX-FileCopyrightText: 2017 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "LCLocaleDialog.h" diff --git a/src/modules/locale/LCLocaleDialog.h b/src/modules/locale/LCLocaleDialog.h index 389c98ba66..2d1869a622 100644 --- a/src/modules/locale/LCLocaleDialog.h +++ b/src/modules/locale/LCLocaleDialog.h @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014 Teo Mrnjavac * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef LCLOCALEDIALOG_H diff --git a/src/modules/locale/LocaleConfiguration.cpp b/src/modules/locale/LocaleConfiguration.cpp index 41f315f0b4..c208dc02d6 100644 --- a/src/modules/locale/LocaleConfiguration.cpp +++ b/src/modules/locale/LocaleConfiguration.cpp @@ -1,21 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2016 Teo Mrnjavac * SPDX-FileCopyrightText: 2017-2019 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "LocaleConfiguration.h" diff --git a/src/modules/locale/LocaleConfiguration.h b/src/modules/locale/LocaleConfiguration.h index de3da1d742..acd80953cf 100644 --- a/src/modules/locale/LocaleConfiguration.h +++ b/src/modules/locale/LocaleConfiguration.h @@ -1,21 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2016 Teo Mrnjavac * SPDX-FileCopyrightText: 2017-2019 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef LOCALECONFIGURATION_H diff --git a/src/modules/locale/LocalePage.cpp b/src/modules/locale/LocalePage.cpp index d4ad6854e9..7a6ed8b15d 100644 --- a/src/modules/locale/LocalePage.cpp +++ b/src/modules/locale/LocalePage.cpp @@ -1,21 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2016 Teo Mrnjavac * SPDX-FileCopyrightText: 2017-2019 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "LocalePage.h" diff --git a/src/modules/locale/LocalePage.h b/src/modules/locale/LocalePage.h index 57dbfe5404..c8b80e9065 100644 --- a/src/modules/locale/LocalePage.h +++ b/src/modules/locale/LocalePage.h @@ -1,21 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014 Teo Mrnjavac * SPDX-FileCopyrightText: 2019 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef LOCALEPAGE_H diff --git a/src/modules/locale/LocaleViewStep.cpp b/src/modules/locale/LocaleViewStep.cpp index 34f4d783b6..2145ad201f 100644 --- a/src/modules/locale/LocaleViewStep.cpp +++ b/src/modules/locale/LocaleViewStep.cpp @@ -1,21 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2016 Teo Mrnjavac * SPDX-FileCopyrightText: 2018 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "LocaleViewStep.h" diff --git a/src/modules/locale/LocaleViewStep.h b/src/modules/locale/LocaleViewStep.h index 735e5d2ce2..fd9c007965 100644 --- a/src/modules/locale/LocaleViewStep.h +++ b/src/modules/locale/LocaleViewStep.h @@ -1,21 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2016 Teo Mrnjavac * SPDX-FileCopyrightText: 2018 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef LOCALEVIEWSTEP_H diff --git a/src/modules/locale/SetTimezoneJob.cpp b/src/modules/locale/SetTimezoneJob.cpp index 2d90a66090..675cca8af3 100644 --- a/src/modules/locale/SetTimezoneJob.cpp +++ b/src/modules/locale/SetTimezoneJob.cpp @@ -1,21 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014 Teo Mrnjavac * SPDX-FileCopyrightText: 2015 Rohan Garg * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "SetTimezoneJob.h" diff --git a/src/modules/locale/SetTimezoneJob.h b/src/modules/locale/SetTimezoneJob.h index b4e04edf2c..d51171256d 100644 --- a/src/modules/locale/SetTimezoneJob.h +++ b/src/modules/locale/SetTimezoneJob.h @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014 Teo Mrnjavac * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef SETTIMEZONEJOB_H diff --git a/src/modules/locale/Tests.cpp b/src/modules/locale/Tests.cpp index 021140b60e..6fe9d5662a 100644 --- a/src/modules/locale/Tests.cpp +++ b/src/modules/locale/Tests.cpp @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2019-2020 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "Config.h" diff --git a/src/modules/locale/timezonewidget/TimeZoneImage.cpp b/src/modules/locale/timezonewidget/TimeZoneImage.cpp index 1d1c1f8065..54aa1afd5b 100644 --- a/src/modules/locale/timezonewidget/TimeZoneImage.cpp +++ b/src/modules/locale/timezonewidget/TimeZoneImage.cpp @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2020 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "TimeZoneImage.h" diff --git a/src/modules/locale/timezonewidget/TimeZoneImage.h b/src/modules/locale/timezonewidget/TimeZoneImage.h index 6c77303a59..c36f4e2f7a 100644 --- a/src/modules/locale/timezonewidget/TimeZoneImage.h +++ b/src/modules/locale/timezonewidget/TimeZoneImage.h @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2020 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef TIMEZONEIMAGE_H diff --git a/src/modules/locale/timezonewidget/timezonewidget.cpp b/src/modules/locale/timezonewidget/timezonewidget.cpp index b2c0efc5b9..9ad9f2d3f5 100644 --- a/src/modules/locale/timezonewidget/timezonewidget.cpp +++ b/src/modules/locale/timezonewidget/timezonewidget.cpp @@ -1,4 +1,4 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2007 Free Software Foundation, Inc. * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac @@ -9,18 +9,8 @@ * by Roland Singer * Copyright (C) 2007 Free Software Foundation, Inc. * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "locale/TimeZone.h" diff --git a/src/modules/locale/timezonewidget/timezonewidget.h b/src/modules/locale/timezonewidget/timezonewidget.h index dc95429de6..3a2911597e 100644 --- a/src/modules/locale/timezonewidget/timezonewidget.h +++ b/src/modules/locale/timezonewidget/timezonewidget.h @@ -1,4 +1,4 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2007 Free Software Foundation, Inc. * SPDX-FileCopyrightText: 2014 Teo Mrnjavac @@ -9,18 +9,8 @@ * by Roland Singer * Copyright (C) 2007 Free Software Foundation, Inc. * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef TIMEZONEWIDGET_H diff --git a/src/modules/localecfg/main.py b/src/modules/localecfg/main.py index 021f4a4540..8f0edcd174 100644 --- a/src/modules/localecfg/main.py +++ b/src/modules/localecfg/main.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 # -*- coding: utf-8 -*- # -# === This file is part of Calamares - === +# === This file is part of Calamares - === # # SPDX-FileCopyrightText: 2014 Anke Boersma # SPDX-FileCopyrightText: 2015 Philip Müller @@ -10,18 +10,8 @@ # SPDX-FileCopyrightText: 2018-2019 Adriaan de Groot # SPDX-License-Identifier: GPL-3.0-or-later # -# Calamares is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. +# Calamares is Free Software: see the License-Identifier above. # -# Calamares is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Calamares. If not, see . import os import re diff --git a/src/modules/localeq/CMakeLists.txt b/src/modules/localeq/CMakeLists.txt index 28ba76e0ec..55c16091ca 100644 --- a/src/modules/localeq/CMakeLists.txt +++ b/src/modules/localeq/CMakeLists.txt @@ -1,4 +1,4 @@ -# === This file is part of Calamares - === +# === This file is part of Calamares - === # # SPDX-FileCopyrightText: 2020 Adriaan de Groot # SPDX-License-Identifier: BSD-2-Clause diff --git a/src/modules/localeq/LocaleQmlViewStep.cpp b/src/modules/localeq/LocaleQmlViewStep.cpp index 6531e59a2a..6139d3a450 100644 --- a/src/modules/localeq/LocaleQmlViewStep.cpp +++ b/src/modules/localeq/LocaleQmlViewStep.cpp @@ -1,21 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac * SPDX-FileCopyrightText: 20182020 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "LocaleQmlViewStep.h" diff --git a/src/modules/localeq/LocaleQmlViewStep.h b/src/modules/localeq/LocaleQmlViewStep.h index 261c1cfc27..ca70ca5d95 100644 --- a/src/modules/localeq/LocaleQmlViewStep.h +++ b/src/modules/localeq/LocaleQmlViewStep.h @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2019-2020 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef LOCALE_QMLVIEWSTEP_H diff --git a/src/modules/localeq/Map.qml b/src/modules/localeq/Map.qml index 3a2041bc06..845f16ea36 100644 --- a/src/modules/localeq/Map.qml +++ b/src/modules/localeq/Map.qml @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2020 Anke Boersma * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ import QtQuick 2.10 diff --git a/src/modules/localeq/Offline.qml b/src/modules/localeq/Offline.qml index 72170711d5..8823a388a1 100644 --- a/src/modules/localeq/Offline.qml +++ b/src/modules/localeq/Offline.qml @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2020 Anke Boersma * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ import QtQuick 2.10 diff --git a/src/modules/localeq/i18n.qml b/src/modules/localeq/i18n.qml index 06f871b28c..63cad8bf53 100644 --- a/src/modules/localeq/i18n.qml +++ b/src/modules/localeq/i18n.qml @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2020 Anke Boersma * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ import io.calamares.ui 1.0 diff --git a/src/modules/localeq/localeq.qml b/src/modules/localeq/localeq.qml index f862e2d08e..dbaa090343 100644 --- a/src/modules/localeq/localeq.qml +++ b/src/modules/localeq/localeq.qml @@ -1,21 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2020 Adriaan de Groot * SPDX-FileCopyrightText: 2020 Anke Boersma * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ import io.calamares.core 1.0 diff --git a/src/modules/luksbootkeyfile/CMakeLists.txt b/src/modules/luksbootkeyfile/CMakeLists.txt index 620caee7ed..1782e7e0ed 100644 --- a/src/modules/luksbootkeyfile/CMakeLists.txt +++ b/src/modules/luksbootkeyfile/CMakeLists.txt @@ -1,4 +1,4 @@ -# === This file is part of Calamares - === +# === This file is part of Calamares - === # # SPDX-FileCopyrightText: 2020 Adriaan de Groot # SPDX-License-Identifier: BSD-2-Clause diff --git a/src/modules/luksbootkeyfile/LuksBootKeyFileJob.cpp b/src/modules/luksbootkeyfile/LuksBootKeyFileJob.cpp index 63b5d753de..9bd2f66dad 100644 --- a/src/modules/luksbootkeyfile/LuksBootKeyFileJob.cpp +++ b/src/modules/luksbootkeyfile/LuksBootKeyFileJob.cpp @@ -1,4 +1,4 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2019 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/modules/luksbootkeyfile/LuksBootKeyFileJob.h b/src/modules/luksbootkeyfile/LuksBootKeyFileJob.h index 780f908830..d78a7ecdc3 100644 --- a/src/modules/luksbootkeyfile/LuksBootKeyFileJob.h +++ b/src/modules/luksbootkeyfile/LuksBootKeyFileJob.h @@ -1,4 +1,4 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2019 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/modules/luksopenswaphookcfg/main.py b/src/modules/luksopenswaphookcfg/main.py index 96dfea83be..ec09a631be 100644 --- a/src/modules/luksopenswaphookcfg/main.py +++ b/src/modules/luksopenswaphookcfg/main.py @@ -1,25 +1,15 @@ #!/usr/bin/env python3 # -*- coding: utf-8 -*- # -# === This file is part of Calamares - === +# === This file is part of Calamares - === # # SPDX-FileCopyrightText: 2016 Teo Mrnjavac # SPDX-FileCopyrightText: 2017 Alf Gaida # SPDX-FileCopyrightText: 2019 Adriaan de Groot # SPDX-License-Identifier: GPL-3.0-or-later # -# Calamares is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. +# Calamares is Free Software: see the License-Identifier above. # -# Calamares is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Calamares. If not, see . import libcalamares import os.path diff --git a/src/modules/machineid/CMakeLists.txt b/src/modules/machineid/CMakeLists.txt index eb2551d511..360c0cc8aa 100644 --- a/src/modules/machineid/CMakeLists.txt +++ b/src/modules/machineid/CMakeLists.txt @@ -1,4 +1,4 @@ -# === This file is part of Calamares - === +# === This file is part of Calamares - === # # SPDX-FileCopyrightText: 2020 Adriaan de Groot # SPDX-License-Identifier: BSD-2-Clause diff --git a/src/modules/machineid/MachineIdJob.cpp b/src/modules/machineid/MachineIdJob.cpp index d70b0fed43..302e8c308d 100644 --- a/src/modules/machineid/MachineIdJob.cpp +++ b/src/modules/machineid/MachineIdJob.cpp @@ -1,4 +1,4 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014 Kevin Kofler * SPDX-FileCopyrightText: 2016 Philip Müller @@ -6,18 +6,8 @@ * SPDX-FileCopyrightText: 2019-2020 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "MachineIdJob.h" diff --git a/src/modules/machineid/MachineIdJob.h b/src/modules/machineid/MachineIdJob.h index 91d091b169..b58d2f4dde 100644 --- a/src/modules/machineid/MachineIdJob.h +++ b/src/modules/machineid/MachineIdJob.h @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2019 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef MACHINEIDJOB_H diff --git a/src/modules/machineid/Tests.cpp b/src/modules/machineid/Tests.cpp index af2dcee3f6..45f0e69544 100644 --- a/src/modules/machineid/Tests.cpp +++ b/src/modules/machineid/Tests.cpp @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2019 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "MachineIdJob.h" diff --git a/src/modules/machineid/Workers.cpp b/src/modules/machineid/Workers.cpp index 67910ce9a3..79d075c867 100644 --- a/src/modules/machineid/Workers.cpp +++ b/src/modules/machineid/Workers.cpp @@ -1,4 +1,4 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014 Kevin Kofler * SPDX-FileCopyrightText: 2016 Philip Müller @@ -6,18 +6,8 @@ * SPDX-FileCopyrightText: 2019-2020 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "Workers.h" diff --git a/src/modules/machineid/Workers.h b/src/modules/machineid/Workers.h index 8e69267608..51c9d526de 100644 --- a/src/modules/machineid/Workers.h +++ b/src/modules/machineid/Workers.h @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2019 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef WORKERS_H diff --git a/src/modules/mkinitfs/main.py b/src/modules/mkinitfs/main.py index cc9d80a377..e3e6e176ab 100644 --- a/src/modules/mkinitfs/main.py +++ b/src/modules/mkinitfs/main.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 # -*- coding: utf-8 -*- # -# === This file is part of Calamares - === +# === This file is part of Calamares - === # # SPDX-FileCopyrightText: 2014-2015 Philip Müller # SPDX-FileCopyrightText: 2014 Teo Mrnjavac @@ -9,18 +9,8 @@ # SPDX-FileCopyrightText: 2019 Adriaan de Groot # SPDX-License-Identifier: GPL-3.0-or-later # -# Calamares is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. +# Calamares is Free Software: see the License-Identifier above. # -# Calamares is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Calamares. If not, see . import libcalamares from libcalamares.utils import target_env_call diff --git a/src/modules/mount/main.py b/src/modules/mount/main.py index caa5ea8282..01c0650bfb 100644 --- a/src/modules/mount/main.py +++ b/src/modules/mount/main.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 # -*- coding: utf-8 -*- # -# === This file is part of Calamares - === +# === This file is part of Calamares - === # # SPDX-FileCopyrightText: 2014 Aurélien Gâteau # SPDX-FileCopyrightText: 2017 Alf Gaida @@ -9,18 +9,8 @@ # SPDX-FileCopyrightText: 2019 Kevin Kofler # SPDX-License-Identifier: GPL-3.0-or-later # -# Calamares is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. +# Calamares is Free Software: see the License-Identifier above. # -# Calamares is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Calamares. If not, see . import tempfile import subprocess diff --git a/src/modules/netinstall/CMakeLists.txt b/src/modules/netinstall/CMakeLists.txt index 588ca1f826..4500a314f8 100644 --- a/src/modules/netinstall/CMakeLists.txt +++ b/src/modules/netinstall/CMakeLists.txt @@ -1,4 +1,4 @@ -# === This file is part of Calamares - === +# === This file is part of Calamares - === # # SPDX-FileCopyrightText: 2020 Adriaan de Groot # SPDX-License-Identifier: BSD-2-Clause diff --git a/src/modules/netinstall/Config.cpp b/src/modules/netinstall/Config.cpp index 8383b51af6..ddbb36fcc6 100644 --- a/src/modules/netinstall/Config.cpp +++ b/src/modules/netinstall/Config.cpp @@ -6,18 +6,8 @@ * SPDX-FileCopyrightText: 2017 Gabriel Craciunescu * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "Config.h" diff --git a/src/modules/netinstall/Config.h b/src/modules/netinstall/Config.h index a7e9798278..56cbd784b1 100644 --- a/src/modules/netinstall/Config.h +++ b/src/modules/netinstall/Config.h @@ -5,18 +5,8 @@ * SPDX-FileCopyrightText: 2017-2018 2020, Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef NETINSTALL_CONFIG_H diff --git a/src/modules/netinstall/NetInstallPage.cpp b/src/modules/netinstall/NetInstallPage.cpp index 309adc490c..75175a9412 100644 --- a/src/modules/netinstall/NetInstallPage.cpp +++ b/src/modules/netinstall/NetInstallPage.cpp @@ -6,18 +6,8 @@ * SPDX-FileCopyrightText: 2017 Gabriel Craciunescu * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "NetInstallPage.h" diff --git a/src/modules/netinstall/NetInstallPage.h b/src/modules/netinstall/NetInstallPage.h index c680360d4c..167f9807f4 100644 --- a/src/modules/netinstall/NetInstallPage.h +++ b/src/modules/netinstall/NetInstallPage.h @@ -5,18 +5,8 @@ * SPDX-FileCopyrightText: 2017-2018 2020, Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef NETINSTALLPAGE_H diff --git a/src/modules/netinstall/NetInstallViewStep.cpp b/src/modules/netinstall/NetInstallViewStep.cpp index 3b82ff5e0d..beb295c32a 100644 --- a/src/modules/netinstall/NetInstallViewStep.cpp +++ b/src/modules/netinstall/NetInstallViewStep.cpp @@ -5,18 +5,8 @@ * SPDX-FileCopyrightText: 2017-2018 2020, Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "NetInstallViewStep.h" diff --git a/src/modules/netinstall/NetInstallViewStep.h b/src/modules/netinstall/NetInstallViewStep.h index 44299632c8..cd79e7a4ad 100644 --- a/src/modules/netinstall/NetInstallViewStep.h +++ b/src/modules/netinstall/NetInstallViewStep.h @@ -4,18 +4,8 @@ * SPDX-FileCopyrightText: 2017 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef NETINSTALLVIEWSTEP_H diff --git a/src/modules/netinstall/PackageModel.cpp b/src/modules/netinstall/PackageModel.cpp index b5e6103c83..beb094d2df 100644 --- a/src/modules/netinstall/PackageModel.cpp +++ b/src/modules/netinstall/PackageModel.cpp @@ -1,21 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2017 Kyle Robbertze * SPDX-FileCopyrightText: 2017-2018 2020, Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "PackageModel.h" diff --git a/src/modules/netinstall/PackageModel.h b/src/modules/netinstall/PackageModel.h index 35bc113543..998f42c38c 100644 --- a/src/modules/netinstall/PackageModel.h +++ b/src/modules/netinstall/PackageModel.h @@ -1,22 +1,12 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2017 Kyle Robbertze * SPDX-FileCopyrightText: 2017 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef PACKAGEMODEL_H diff --git a/src/modules/netinstall/PackageTreeItem.cpp b/src/modules/netinstall/PackageTreeItem.cpp index 32fcf4296d..b30cdf9151 100644 --- a/src/modules/netinstall/PackageTreeItem.cpp +++ b/src/modules/netinstall/PackageTreeItem.cpp @@ -1,21 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2017 Kyle Robbertze * SPDX-FileCopyrightText: 2017 2020, Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "PackageTreeItem.h" diff --git a/src/modules/netinstall/PackageTreeItem.h b/src/modules/netinstall/PackageTreeItem.h index 5df703a29c..c04b9a21d3 100644 --- a/src/modules/netinstall/PackageTreeItem.h +++ b/src/modules/netinstall/PackageTreeItem.h @@ -1,21 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2017 Kyle Robbertze * SPDX-FileCopyrightText: 2017 2020, Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef PACKAGETREEITEM_H diff --git a/src/modules/netinstall/Tests.cpp b/src/modules/netinstall/Tests.cpp index 1ffc72f3f1..569d47d15a 100644 --- a/src/modules/netinstall/Tests.cpp +++ b/src/modules/netinstall/Tests.cpp @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2020 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "PackageModel.h" diff --git a/src/modules/networkcfg/main.py b/src/modules/networkcfg/main.py index 2db819945e..608cfd2889 100644 --- a/src/modules/networkcfg/main.py +++ b/src/modules/networkcfg/main.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 # -*- coding: utf-8 -*- # -# === This file is part of Calamares - === +# === This file is part of Calamares - === # # SPDX-FileCopyrightText: 2014 Philip Müller # SPDX-FileCopyrightText: 2014 Teo Mrnjavac @@ -9,18 +9,8 @@ # SPDX-FileCopyrightText: 2019 Adriaan de Groot # SPDX-License-Identifier: GPL-3.0-or-later # -# Calamares is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. +# Calamares is Free Software: see the License-Identifier above. # -# Calamares is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Calamares. If not, see . import os import shutil diff --git a/src/modules/notesqml/CMakeLists.txt b/src/modules/notesqml/CMakeLists.txt index c656bebf69..a5edc7d048 100644 --- a/src/modules/notesqml/CMakeLists.txt +++ b/src/modules/notesqml/CMakeLists.txt @@ -1,4 +1,4 @@ -# === This file is part of Calamares - === +# === This file is part of Calamares - === # # SPDX-FileCopyrightText: 2020 Adriaan de Groot # SPDX-License-Identifier: BSD-2-Clause diff --git a/src/modules/notesqml/NotesQmlViewStep.cpp b/src/modules/notesqml/NotesQmlViewStep.cpp index 4d0430e952..9f57eb6150 100644 --- a/src/modules/notesqml/NotesQmlViewStep.cpp +++ b/src/modules/notesqml/NotesQmlViewStep.cpp @@ -1,4 +1,4 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2020 Adriaan de Groot * SPDX-FileCopyrightText: 2020 Anke Boersma diff --git a/src/modules/notesqml/NotesQmlViewStep.h b/src/modules/notesqml/NotesQmlViewStep.h index 8545b47b9f..10f249a883 100644 --- a/src/modules/notesqml/NotesQmlViewStep.h +++ b/src/modules/notesqml/NotesQmlViewStep.h @@ -1,4 +1,4 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2020 Adriaan de Groot * SPDX-FileCopyrightText: 2020 Anke Boersma diff --git a/src/modules/notesqml/examples/notesqml.qml.example b/src/modules/notesqml/examples/notesqml.qml.example index b3094f447b..782ae404ea 100644 --- a/src/modules/notesqml/examples/notesqml.qml.example +++ b/src/modules/notesqml/examples/notesqml.qml.example @@ -1,4 +1,4 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2020 Anke Boersma * SPDX-FileCopyrightText: 2020 Adriaan de Groot diff --git a/src/modules/notesqml/notesqml.qml b/src/modules/notesqml/notesqml.qml index 7be5cffa90..7805f27fab 100644 --- a/src/modules/notesqml/notesqml.qml +++ b/src/modules/notesqml/notesqml.qml @@ -1,4 +1,4 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * Copyright 2020, Anke Boersma * Copyright 2020, Adriaan de Groot diff --git a/src/modules/oemid/CMakeLists.txt b/src/modules/oemid/CMakeLists.txt index 7db23bc30c..68a1b653e3 100644 --- a/src/modules/oemid/CMakeLists.txt +++ b/src/modules/oemid/CMakeLists.txt @@ -1,4 +1,4 @@ -# === This file is part of Calamares - === +# === This file is part of Calamares - === # # SPDX-FileCopyrightText: 2020 Adriaan de Groot # SPDX-License-Identifier: BSD-2-Clause diff --git a/src/modules/oemid/IDJob.cpp b/src/modules/oemid/IDJob.cpp index 19ad85cc9a..ccda86057a 100644 --- a/src/modules/oemid/IDJob.cpp +++ b/src/modules/oemid/IDJob.cpp @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2019 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "IDJob.h" diff --git a/src/modules/oemid/IDJob.h b/src/modules/oemid/IDJob.h index dd8bd5e24e..17d97b4ee4 100644 --- a/src/modules/oemid/IDJob.h +++ b/src/modules/oemid/IDJob.h @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2019 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef IDJOB_H diff --git a/src/modules/oemid/OEMViewStep.cpp b/src/modules/oemid/OEMViewStep.cpp index 85de722dc2..7405c6e3a2 100644 --- a/src/modules/oemid/OEMViewStep.cpp +++ b/src/modules/oemid/OEMViewStep.cpp @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2019 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "OEMViewStep.h" diff --git a/src/modules/oemid/OEMViewStep.h b/src/modules/oemid/OEMViewStep.h index 342c62d60b..c07cb79718 100644 --- a/src/modules/oemid/OEMViewStep.h +++ b/src/modules/oemid/OEMViewStep.h @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2019 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef OEMVIEWSTEP_H diff --git a/src/modules/openrcdmcryptcfg/main.py b/src/modules/openrcdmcryptcfg/main.py index 83b3a4c40a..8eb169867a 100644 --- a/src/modules/openrcdmcryptcfg/main.py +++ b/src/modules/openrcdmcryptcfg/main.py @@ -1,24 +1,14 @@ #!/usr/bin/env python3 # -*- coding: utf-8 -*- # -# === This file is part of Calamares - === +# === This file is part of Calamares - === # # SPDX-FileCopyrightText: 2017 Ghiunhan Mamut # SPDX-FileCopyrightText: 2019 Adriaan de Groot # SPDX-License-Identifier: GPL-3.0-or-later # -# Calamares is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. +# Calamares is Free Software: see the License-Identifier above. # -# Calamares is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Calamares. If not, see . import os.path diff --git a/src/modules/packagechooser/CMakeLists.txt b/src/modules/packagechooser/CMakeLists.txt index 539db4f730..ad9cc85274 100644 --- a/src/modules/packagechooser/CMakeLists.txt +++ b/src/modules/packagechooser/CMakeLists.txt @@ -1,4 +1,4 @@ -# === This file is part of Calamares - === +# === This file is part of Calamares - === # # SPDX-FileCopyrightText: 2020 Adriaan de Groot # SPDX-License-Identifier: BSD-2-Clause diff --git a/src/modules/packagechooser/ItemAppData.cpp b/src/modules/packagechooser/ItemAppData.cpp index 4adebb5c3f..dd1eb1fb76 100644 --- a/src/modules/packagechooser/ItemAppData.cpp +++ b/src/modules/packagechooser/ItemAppData.cpp @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2019 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ /** @brief Loading items from AppData XML files. diff --git a/src/modules/packagechooser/ItemAppData.h b/src/modules/packagechooser/ItemAppData.h index c811ae4d51..92d81220d2 100644 --- a/src/modules/packagechooser/ItemAppData.h +++ b/src/modules/packagechooser/ItemAppData.h @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2019 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef ITEMAPPDATA_H diff --git a/src/modules/packagechooser/ItemAppStream.cpp b/src/modules/packagechooser/ItemAppStream.cpp index e397f8a155..787db0b3f4 100644 --- a/src/modules/packagechooser/ItemAppStream.cpp +++ b/src/modules/packagechooser/ItemAppStream.cpp @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2019 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ /** @brief Loading items from AppData XML files. diff --git a/src/modules/packagechooser/ItemAppStream.h b/src/modules/packagechooser/ItemAppStream.h index cbfccdc904..9fa3608c3a 100644 --- a/src/modules/packagechooser/ItemAppStream.h +++ b/src/modules/packagechooser/ItemAppStream.h @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2019 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef ITEMAPPSTREAM_H diff --git a/src/modules/packagechooser/PackageChooserPage.cpp b/src/modules/packagechooser/PackageChooserPage.cpp index ac59f929c1..0d5df81777 100644 --- a/src/modules/packagechooser/PackageChooserPage.cpp +++ b/src/modules/packagechooser/PackageChooserPage.cpp @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2019 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "PackageChooserPage.h" diff --git a/src/modules/packagechooser/PackageChooserPage.h b/src/modules/packagechooser/PackageChooserPage.h index a5ce6d2e54..4f485c890d 100644 --- a/src/modules/packagechooser/PackageChooserPage.h +++ b/src/modules/packagechooser/PackageChooserPage.h @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2019 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef PACKAGECHOOSERPAGE_H diff --git a/src/modules/packagechooser/PackageChooserViewStep.cpp b/src/modules/packagechooser/PackageChooserViewStep.cpp index fb64727f77..f162c074b7 100644 --- a/src/modules/packagechooser/PackageChooserViewStep.cpp +++ b/src/modules/packagechooser/PackageChooserViewStep.cpp @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2019 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "PackageChooserViewStep.h" diff --git a/src/modules/packagechooser/PackageChooserViewStep.h b/src/modules/packagechooser/PackageChooserViewStep.h index f74abe376f..2a10ce270b 100644 --- a/src/modules/packagechooser/PackageChooserViewStep.h +++ b/src/modules/packagechooser/PackageChooserViewStep.h @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2019 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef PACKAGECHOOSERVIEWSTEP_H diff --git a/src/modules/packagechooser/PackageModel.cpp b/src/modules/packagechooser/PackageModel.cpp index dd8903fc93..1072b8b3ba 100644 --- a/src/modules/packagechooser/PackageModel.cpp +++ b/src/modules/packagechooser/PackageModel.cpp @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2019 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "PackageModel.h" diff --git a/src/modules/packagechooser/PackageModel.h b/src/modules/packagechooser/PackageModel.h index 2dff3834aa..b8fc9a4cef 100644 --- a/src/modules/packagechooser/PackageModel.h +++ b/src/modules/packagechooser/PackageModel.h @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2019 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef PACKAGEMODEL_H diff --git a/src/modules/packagechooser/Tests.cpp b/src/modules/packagechooser/Tests.cpp index 0e99688146..c303f04884 100644 --- a/src/modules/packagechooser/Tests.cpp +++ b/src/modules/packagechooser/Tests.cpp @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2019 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "Tests.h" diff --git a/src/modules/packagechooser/Tests.h b/src/modules/packagechooser/Tests.h index 716f930e3c..34ac2f682c 100644 --- a/src/modules/packagechooser/Tests.h +++ b/src/modules/packagechooser/Tests.h @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2019 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef PACKAGECHOOSERTESTS_H diff --git a/src/modules/packages/main.py b/src/modules/packages/main.py index 42cf3a4bd0..9d912da726 100644 --- a/src/modules/packages/main.py +++ b/src/modules/packages/main.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 # -*- coding: utf-8 -*- # -# === This file is part of Calamares - === +# === This file is part of Calamares - === # # SPDX-FileCopyrightText: 2014 Pier Luigi Fiorini # SPDX-FileCopyrightText: 2015-2017 Teo Mrnjavac @@ -11,18 +11,8 @@ # SPDX-FileCopyrightText: 2018 Philip Müller # SPDX-License-Identifier: GPL-3.0-or-later # -# Calamares is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. +# Calamares is Free Software: see the License-Identifier above. # -# Calamares is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Calamares. If not, see . import abc from string import Template diff --git a/src/modules/partition/CMakeLists.txt b/src/modules/partition/CMakeLists.txt index 5c5d6a6cbe..f3ffcb9c74 100644 --- a/src/modules/partition/CMakeLists.txt +++ b/src/modules/partition/CMakeLists.txt @@ -1,4 +1,4 @@ -# === This file is part of Calamares - === +# === This file is part of Calamares - === # # SPDX-FileCopyrightText: 2020 Adriaan de Groot # SPDX-License-Identifier: BSD-2-Clause diff --git a/src/modules/partition/core/BootLoaderModel.cpp b/src/modules/partition/core/BootLoaderModel.cpp index 13ce2a379c..f9743291f5 100644 --- a/src/modules/partition/core/BootLoaderModel.cpp +++ b/src/modules/partition/core/BootLoaderModel.cpp @@ -1,22 +1,12 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014 Aurélien Gâteau * SPDX-FileCopyrightText: 2015 Teo Mrnjavac * SPDX-FileCopyrightText: 2019 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "core/BootLoaderModel.h" diff --git a/src/modules/partition/core/BootLoaderModel.h b/src/modules/partition/core/BootLoaderModel.h index 1157879ef6..47e6ccb957 100644 --- a/src/modules/partition/core/BootLoaderModel.h +++ b/src/modules/partition/core/BootLoaderModel.h @@ -1,22 +1,12 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014 Aurélien Gâteau * SPDX-FileCopyrightText: 2015 Teo Mrnjavac * SPDX-FileCopyrightText: 2019 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef BOOTLOADERMODEL_H #define BOOTLOADERMODEL_H diff --git a/src/modules/partition/core/ColorUtils.cpp b/src/modules/partition/core/ColorUtils.cpp index 9b86cdb464..fb613e2406 100644 --- a/src/modules/partition/core/ColorUtils.cpp +++ b/src/modules/partition/core/ColorUtils.cpp @@ -1,21 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014 Aurélien Gâteau * SPDX-FileCopyrightText: 2015-2016 Teo Mrnjavac * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "core/ColorUtils.h" diff --git a/src/modules/partition/core/ColorUtils.h b/src/modules/partition/core/ColorUtils.h index ab4e864811..9ebce580b3 100644 --- a/src/modules/partition/core/ColorUtils.h +++ b/src/modules/partition/core/ColorUtils.h @@ -1,21 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014 Aurélien Gâteau * SPDX-FileCopyrightText: 2016 Teo Mrnjavac * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef COLORUTILS_H #define COLORUTILS_H diff --git a/src/modules/partition/core/Config.cpp b/src/modules/partition/core/Config.cpp index 00b8967241..6dcad2d660 100644 --- a/src/modules/partition/core/Config.cpp +++ b/src/modules/partition/core/Config.cpp @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2020 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "Config.h" diff --git a/src/modules/partition/core/Config.h b/src/modules/partition/core/Config.h index fb2f8116cb..f2ba9cf586 100644 --- a/src/modules/partition/core/Config.h +++ b/src/modules/partition/core/Config.h @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2020 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef PARTITION_CONFIG_H diff --git a/src/modules/partition/core/DeviceList.cpp b/src/modules/partition/core/DeviceList.cpp index dfba17523c..2fce62e9d9 100644 --- a/src/modules/partition/core/DeviceList.cpp +++ b/src/modules/partition/core/DeviceList.cpp @@ -1,21 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2015-2016 Teo Mrnjavac * SPDX-FileCopyrightText: 2018-2019 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "DeviceList.h" diff --git a/src/modules/partition/core/DeviceList.h b/src/modules/partition/core/DeviceList.h index 986c6b05ff..b76a31a6bc 100644 --- a/src/modules/partition/core/DeviceList.h +++ b/src/modules/partition/core/DeviceList.h @@ -1,21 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2017 Teo Mrnjavac * SPDX-FileCopyrightText: 2017 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef DEVICELIST_H diff --git a/src/modules/partition/core/DeviceModel.cpp b/src/modules/partition/core/DeviceModel.cpp index 3e42ab0291..bf55417567 100644 --- a/src/modules/partition/core/DeviceModel.cpp +++ b/src/modules/partition/core/DeviceModel.cpp @@ -1,22 +1,12 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014 Aurélien Gâteau * SPDX-FileCopyrightText: 2014 Teo Mrnjavac * SPDX-FileCopyrightText: 2019 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "core/DeviceModel.h" diff --git a/src/modules/partition/core/DeviceModel.h b/src/modules/partition/core/DeviceModel.h index a03405cb60..71918f64dd 100644 --- a/src/modules/partition/core/DeviceModel.h +++ b/src/modules/partition/core/DeviceModel.h @@ -1,21 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014 Aurélien Gâteau * SPDX-FileCopyrightText: 2017 2019, Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef DEVICEMODEL_H #define DEVICEMODEL_H diff --git a/src/modules/partition/core/KPMHelpers.cpp b/src/modules/partition/core/KPMHelpers.cpp index ba82385319..e9e69456d1 100644 --- a/src/modules/partition/core/KPMHelpers.cpp +++ b/src/modules/partition/core/KPMHelpers.cpp @@ -1,22 +1,12 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014 Aurélien Gâteau * SPDX-FileCopyrightText: 2015-2016 Teo Mrnjavac * Copyright 2018-2019 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "core/KPMHelpers.h" diff --git a/src/modules/partition/core/KPMHelpers.h b/src/modules/partition/core/KPMHelpers.h index 743dcc790f..ad25689f38 100644 --- a/src/modules/partition/core/KPMHelpers.h +++ b/src/modules/partition/core/KPMHelpers.h @@ -1,22 +1,12 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014 Aurélien Gâteau * SPDX-FileCopyrightText: 2015-2016 Teo Mrnjavac * SPDX-FileCopyrightText: 2019 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef KPMHELPERS_H #define KPMHELPERS_H diff --git a/src/modules/partition/core/OsproberEntry.h b/src/modules/partition/core/OsproberEntry.h index 9313a6bb50..a358e4285d 100644 --- a/src/modules/partition/core/OsproberEntry.h +++ b/src/modules/partition/core/OsproberEntry.h @@ -1,21 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2016 Teo Mrnjavac * SPDX-FileCopyrightText: 2018 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef OSPROBERENTRY_H diff --git a/src/modules/partition/core/PartUtils.cpp b/src/modules/partition/core/PartUtils.cpp index 1d54846712..099cdf2991 100644 --- a/src/modules/partition/core/PartUtils.cpp +++ b/src/modules/partition/core/PartUtils.cpp @@ -1,22 +1,12 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2015-2016 Teo Mrnjavac * Copyright 2018-2019 Adriaan de Groot * SPDX-FileCopyrightText: 2019 Collabora Ltd * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "PartUtils.h" diff --git a/src/modules/partition/core/PartUtils.h b/src/modules/partition/core/PartUtils.h index a56cb8a607..f5ca0ddaa6 100644 --- a/src/modules/partition/core/PartUtils.h +++ b/src/modules/partition/core/PartUtils.h @@ -1,22 +1,12 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2015-2016 Teo Mrnjavac * SPDX-FileCopyrightText: 2018-2019 Adriaan de Groot * SPDX-FileCopyrightText: 2019 Collabora Ltd * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef PARTUTILS_H diff --git a/src/modules/partition/core/PartitionActions.cpp b/src/modules/partition/core/PartitionActions.cpp index dba02318ee..748df2d957 100644 --- a/src/modules/partition/core/PartitionActions.cpp +++ b/src/modules/partition/core/PartitionActions.cpp @@ -1,22 +1,12 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2017 Teo Mrnjavac * SPDX-FileCopyrightText: 2017-2019 Adriaan de Groot * SPDX-FileCopyrightText: 2019 Collabora Ltd * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "PartitionActions.h" diff --git a/src/modules/partition/core/PartitionActions.h b/src/modules/partition/core/PartitionActions.h index 63dfccb112..d86e510483 100644 --- a/src/modules/partition/core/PartitionActions.h +++ b/src/modules/partition/core/PartitionActions.h @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2016 Teo Mrnjavac * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef PARTITIONACTIONS_H diff --git a/src/modules/partition/core/PartitionCoreModule.cpp b/src/modules/partition/core/PartitionCoreModule.cpp index 370caebfb6..d78ef70c78 100644 --- a/src/modules/partition/core/PartitionCoreModule.cpp +++ b/src/modules/partition/core/PartitionCoreModule.cpp @@ -1,4 +1,4 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014 Aurélien Gâteau * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac @@ -7,18 +7,8 @@ * SPDX-FileCopyrightText: 2019 Collabora Ltd * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "core/PartitionCoreModule.h" diff --git a/src/modules/partition/core/PartitionCoreModule.h b/src/modules/partition/core/PartitionCoreModule.h index b75f67d758..f84bee291a 100644 --- a/src/modules/partition/core/PartitionCoreModule.h +++ b/src/modules/partition/core/PartitionCoreModule.h @@ -1,22 +1,12 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014 Aurélien Gâteau * SPDX-FileCopyrightText: 2014-2016 Teo Mrnjavac * SPDX-FileCopyrightText: 2019 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef PARTITIONCOREMODULE_H diff --git a/src/modules/partition/core/PartitionInfo.cpp b/src/modules/partition/core/PartitionInfo.cpp index 415fdc5c16..87aa03b66b 100644 --- a/src/modules/partition/core/PartitionInfo.cpp +++ b/src/modules/partition/core/PartitionInfo.cpp @@ -1,21 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014 Aurélien Gâteau * SPDX-FileCopyrightText: 2018 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "core/PartitionInfo.h" diff --git a/src/modules/partition/core/PartitionInfo.h b/src/modules/partition/core/PartitionInfo.h index 3ddbe192b1..19b66180ad 100644 --- a/src/modules/partition/core/PartitionInfo.h +++ b/src/modules/partition/core/PartitionInfo.h @@ -1,21 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014 Aurélien Gâteau * SPDX-FileCopyrightText: 2018 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef PARTITIONINFO_H #define PARTITIONINFO_H diff --git a/src/modules/partition/core/PartitionLayout.cpp b/src/modules/partition/core/PartitionLayout.cpp index 3df9b21c25..aceda2d721 100644 --- a/src/modules/partition/core/PartitionLayout.cpp +++ b/src/modules/partition/core/PartitionLayout.cpp @@ -1,22 +1,12 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2017 Teo Mrnjavac * SPDX-FileCopyrightText: 2017-2018 Adriaan de Groot * SPDX-FileCopyrightText: 2018-2019 Collabora Ltd * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "GlobalStorage.h" diff --git a/src/modules/partition/core/PartitionLayout.h b/src/modules/partition/core/PartitionLayout.h index 52bd96e428..79dff16978 100644 --- a/src/modules/partition/core/PartitionLayout.h +++ b/src/modules/partition/core/PartitionLayout.h @@ -1,21 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2018-2019 Collabora Ltd * SPDX-FileCopyrightText: 2019 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef PARTITIONLAYOUT_H diff --git a/src/modules/partition/core/PartitionModel.cpp b/src/modules/partition/core/PartitionModel.cpp index 662e26032e..9a8f4d96c5 100644 --- a/src/modules/partition/core/PartitionModel.cpp +++ b/src/modules/partition/core/PartitionModel.cpp @@ -1,21 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014 Aurélien Gâteau * SPDX-FileCopyrightText: 2018-2019 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "core/PartitionModel.h" diff --git a/src/modules/partition/core/PartitionModel.h b/src/modules/partition/core/PartitionModel.h index 9d1e40f204..f91479adc8 100644 --- a/src/modules/partition/core/PartitionModel.h +++ b/src/modules/partition/core/PartitionModel.h @@ -1,21 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014 Aurélien Gâteau * SPDX-FileCopyrightText: 2017 2019, Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef PARTITIONMODEL_H #define PARTITIONMODEL_H diff --git a/src/modules/partition/gui/BootInfoWidget.cpp b/src/modules/partition/gui/BootInfoWidget.cpp index d1df9ae334..5d9dcf8b58 100644 --- a/src/modules/partition/gui/BootInfoWidget.cpp +++ b/src/modules/partition/gui/BootInfoWidget.cpp @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2015-2016 Teo Mrnjavac * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ diff --git a/src/modules/partition/gui/BootInfoWidget.h b/src/modules/partition/gui/BootInfoWidget.h index 5865a3b9c1..6be3f6e7b1 100644 --- a/src/modules/partition/gui/BootInfoWidget.h +++ b/src/modules/partition/gui/BootInfoWidget.h @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2015-2016 Teo Mrnjavac * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ diff --git a/src/modules/partition/gui/ChoicePage.cpp b/src/modules/partition/gui/ChoicePage.cpp index b032065cf7..6b4b8b659a 100644 --- a/src/modules/partition/gui/ChoicePage.cpp +++ b/src/modules/partition/gui/ChoicePage.cpp @@ -1,22 +1,12 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2017 Teo Mrnjavac * SPDX-FileCopyrightText: 2017-2019 Adriaan de Groot * SPDX-FileCopyrightText: 2019 Collabora Ltd * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "ChoicePage.h" diff --git a/src/modules/partition/gui/ChoicePage.h b/src/modules/partition/gui/ChoicePage.h index 9aa8befedd..7c364cc1f3 100644 --- a/src/modules/partition/gui/ChoicePage.h +++ b/src/modules/partition/gui/ChoicePage.h @@ -1,22 +1,12 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2016 Teo Mrnjavac * SPDX-FileCopyrightText: 2018-2019 Adriaan de Groot * SPDX-FileCopyrightText: 2019 Collabora Ltd * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef CHOICEPAGE_H diff --git a/src/modules/partition/gui/CreatePartitionDialog.cpp b/src/modules/partition/gui/CreatePartitionDialog.cpp index ae500c5001..3b51010b88 100644 --- a/src/modules/partition/gui/CreatePartitionDialog.cpp +++ b/src/modules/partition/gui/CreatePartitionDialog.cpp @@ -1,4 +1,4 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014 Aurélien Gâteau * SPDX-FileCopyrightText: 2016 Teo Mrnjavac @@ -7,18 +7,8 @@ * SPDX-FileCopyrightText: 2018 Caio Carvalho * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "CreatePartitionDialog.h" diff --git a/src/modules/partition/gui/CreatePartitionDialog.h b/src/modules/partition/gui/CreatePartitionDialog.h index 6991d1fa5a..dc756d352d 100644 --- a/src/modules/partition/gui/CreatePartitionDialog.h +++ b/src/modules/partition/gui/CreatePartitionDialog.h @@ -1,22 +1,12 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014 Aurélien Gâteau * SPDX-FileCopyrightText: 2016 Teo Mrnjavac * SPDX-FileCopyrightText: 2018 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef CREATEPARTITIONDIALOG_H diff --git a/src/modules/partition/gui/CreateVolumeGroupDialog.cpp b/src/modules/partition/gui/CreateVolumeGroupDialog.cpp index 2f5984301c..d0eacb725e 100644 --- a/src/modules/partition/gui/CreateVolumeGroupDialog.cpp +++ b/src/modules/partition/gui/CreateVolumeGroupDialog.cpp @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2018 Caio Jordão Carvalho * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "CreateVolumeGroupDialog.h" diff --git a/src/modules/partition/gui/CreateVolumeGroupDialog.h b/src/modules/partition/gui/CreateVolumeGroupDialog.h index 3c3d5cc1be..4712a9106a 100644 --- a/src/modules/partition/gui/CreateVolumeGroupDialog.h +++ b/src/modules/partition/gui/CreateVolumeGroupDialog.h @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2018 Caio Jordão Carvalho * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef CREATEVOLUMEGROUPDIALOG_H diff --git a/src/modules/partition/gui/DeviceInfoWidget.cpp b/src/modules/partition/gui/DeviceInfoWidget.cpp index d7059c71e3..80eacd05bf 100644 --- a/src/modules/partition/gui/DeviceInfoWidget.cpp +++ b/src/modules/partition/gui/DeviceInfoWidget.cpp @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2015-2016 Teo Mrnjavac * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ diff --git a/src/modules/partition/gui/DeviceInfoWidget.h b/src/modules/partition/gui/DeviceInfoWidget.h index 38a0309f38..a69251be1a 100644 --- a/src/modules/partition/gui/DeviceInfoWidget.h +++ b/src/modules/partition/gui/DeviceInfoWidget.h @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2015-2016 Teo Mrnjavac * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ diff --git a/src/modules/partition/gui/EditExistingPartitionDialog.cpp b/src/modules/partition/gui/EditExistingPartitionDialog.cpp index 633418ec39..1e66c539c8 100644 --- a/src/modules/partition/gui/EditExistingPartitionDialog.cpp +++ b/src/modules/partition/gui/EditExistingPartitionDialog.cpp @@ -1,4 +1,4 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2008-2009 Volker Lanz * SPDX-FileCopyrightText: 2014 Aurélien Gâteau @@ -9,18 +9,8 @@ * * Flags handling originally from KDE Partition Manager. * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "EditExistingPartitionDialog.h" diff --git a/src/modules/partition/gui/EditExistingPartitionDialog.h b/src/modules/partition/gui/EditExistingPartitionDialog.h index 7788305fc3..96cc2c4c4a 100644 --- a/src/modules/partition/gui/EditExistingPartitionDialog.h +++ b/src/modules/partition/gui/EditExistingPartitionDialog.h @@ -1,21 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014 Aurélien Gâteau * SPDX-FileCopyrightText: 2018 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef EDITEXISTINGPARTITIONDIALOG_H diff --git a/src/modules/partition/gui/EncryptWidget.cpp b/src/modules/partition/gui/EncryptWidget.cpp index cf9a0c922f..3ac56575bc 100644 --- a/src/modules/partition/gui/EncryptWidget.cpp +++ b/src/modules/partition/gui/EncryptWidget.cpp @@ -1,21 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2016 Teo Mrnjavac * SPDX-FileCopyrightText: 2020 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ diff --git a/src/modules/partition/gui/EncryptWidget.h b/src/modules/partition/gui/EncryptWidget.h index c3f7928fe9..5c24d68e62 100644 --- a/src/modules/partition/gui/EncryptWidget.h +++ b/src/modules/partition/gui/EncryptWidget.h @@ -1,21 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2016 Teo Mrnjavac * SPDX-FileCopyrightText: 2020 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ diff --git a/src/modules/partition/gui/ListPhysicalVolumeWidgetItem.cpp b/src/modules/partition/gui/ListPhysicalVolumeWidgetItem.cpp index f9f1b9c6bf..1e8a9e5737 100644 --- a/src/modules/partition/gui/ListPhysicalVolumeWidgetItem.cpp +++ b/src/modules/partition/gui/ListPhysicalVolumeWidgetItem.cpp @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2018 Caio Jordão Carvalho * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "ListPhysicalVolumeWidgetItem.h" diff --git a/src/modules/partition/gui/ListPhysicalVolumeWidgetItem.h b/src/modules/partition/gui/ListPhysicalVolumeWidgetItem.h index 7d8e8faf00..6e0b1c85ad 100644 --- a/src/modules/partition/gui/ListPhysicalVolumeWidgetItem.h +++ b/src/modules/partition/gui/ListPhysicalVolumeWidgetItem.h @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2018 Caio Jordão Carvalho * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef LISTPHYSICALVOLUMEWIDGETITEM_H diff --git a/src/modules/partition/gui/PartitionBarsView.cpp b/src/modules/partition/gui/PartitionBarsView.cpp index 6799b26f00..81f518acc6 100644 --- a/src/modules/partition/gui/PartitionBarsView.cpp +++ b/src/modules/partition/gui/PartitionBarsView.cpp @@ -1,21 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014 Aurélien Gâteau * SPDX-FileCopyrightText: 2015-2016 Teo Mrnjavac * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "gui/PartitionBarsView.h" diff --git a/src/modules/partition/gui/PartitionBarsView.h b/src/modules/partition/gui/PartitionBarsView.h index 1f0100ffa6..4dacaaae5a 100644 --- a/src/modules/partition/gui/PartitionBarsView.h +++ b/src/modules/partition/gui/PartitionBarsView.h @@ -1,22 +1,12 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014 Aurélien Gâteau * SPDX-FileCopyrightText: 2015-2016 Teo Mrnjavac * SPDX-FileCopyrightText: 2017 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef PARTITIONPREVIEW_H #define PARTITIONPREVIEW_H diff --git a/src/modules/partition/gui/PartitionDialogHelpers.cpp b/src/modules/partition/gui/PartitionDialogHelpers.cpp index 8ab1f38d7d..c5c35279d4 100644 --- a/src/modules/partition/gui/PartitionDialogHelpers.cpp +++ b/src/modules/partition/gui/PartitionDialogHelpers.cpp @@ -1,22 +1,12 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014 Aurélien Gâteau * SPDX-FileCopyrightText: 2016 Teo Mrnjavac * SPDX-FileCopyrightText: 2018-2019 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "PartitionDialogHelpers.h" diff --git a/src/modules/partition/gui/PartitionDialogHelpers.h b/src/modules/partition/gui/PartitionDialogHelpers.h index fd485a6906..7761004b53 100644 --- a/src/modules/partition/gui/PartitionDialogHelpers.h +++ b/src/modules/partition/gui/PartitionDialogHelpers.h @@ -1,22 +1,12 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014 Aurélien Gâteau * SPDX-FileCopyrightText: 2016 Teo Mrnjavac * SPDX-FileCopyrightText: 2018 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef PARTITION_GUI_PARTITIONDIALOGHELPERS diff --git a/src/modules/partition/gui/PartitionLabelsView.cpp b/src/modules/partition/gui/PartitionLabelsView.cpp index e42e9de890..7e861d9944 100644 --- a/src/modules/partition/gui/PartitionLabelsView.cpp +++ b/src/modules/partition/gui/PartitionLabelsView.cpp @@ -1,21 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014 Aurélien Gâteau * SPDX-FileCopyrightText: 2015-2016 Teo Mrnjavac * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "PartitionLabelsView.h" diff --git a/src/modules/partition/gui/PartitionLabelsView.h b/src/modules/partition/gui/PartitionLabelsView.h index 45b2b3407c..ac7a272ad5 100644 --- a/src/modules/partition/gui/PartitionLabelsView.h +++ b/src/modules/partition/gui/PartitionLabelsView.h @@ -1,22 +1,12 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014 Aurélien Gâteau * SPDX-FileCopyrightText: 2015-2016 Teo Mrnjavac * SPDX-FileCopyrightText: 2017 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef PARTITIONLABELSVIEW_H diff --git a/src/modules/partition/gui/PartitionPage.cpp b/src/modules/partition/gui/PartitionPage.cpp index 3b73f061ee..b9930504f2 100644 --- a/src/modules/partition/gui/PartitionPage.cpp +++ b/src/modules/partition/gui/PartitionPage.cpp @@ -1,4 +1,4 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014 Aurélien Gâteau * SPDX-FileCopyrightText: 2015-2016 Teo Mrnjavac @@ -8,18 +8,8 @@ * SPDX-FileCopyrightText: 2019 Collabora Ltd * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "PartitionPage.h" diff --git a/src/modules/partition/gui/PartitionPage.h b/src/modules/partition/gui/PartitionPage.h index d23879e15c..26c7dbccf4 100644 --- a/src/modules/partition/gui/PartitionPage.h +++ b/src/modules/partition/gui/PartitionPage.h @@ -1,22 +1,12 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014 Aurélien Gâteau * SPDX-FileCopyrightText: 2018-2019 Adriaan de Groot * SPDX-FileCopyrightText: 2019 Collabora Ltd * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef PARTITIONPAGE_H diff --git a/src/modules/partition/gui/PartitionSizeController.cpp b/src/modules/partition/gui/PartitionSizeController.cpp index aefc13992e..b7757c32d9 100644 --- a/src/modules/partition/gui/PartitionSizeController.cpp +++ b/src/modules/partition/gui/PartitionSizeController.cpp @@ -1,21 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014 Aurélien Gâteau * SPDX-FileCopyrightText: 2016 Teo Mrnjavac * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "gui/PartitionSizeController.h" diff --git a/src/modules/partition/gui/PartitionSizeController.h b/src/modules/partition/gui/PartitionSizeController.h index 1353404c52..69cf2ef216 100644 --- a/src/modules/partition/gui/PartitionSizeController.h +++ b/src/modules/partition/gui/PartitionSizeController.h @@ -1,21 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014 Aurélien Gâteau * SPDX-FileCopyrightText: 2016 Teo Mrnjavac * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef PARTITIONSIZECONTROLLER_H diff --git a/src/modules/partition/gui/PartitionSplitterWidget.cpp b/src/modules/partition/gui/PartitionSplitterWidget.cpp index 08543756ca..93c77bb694 100644 --- a/src/modules/partition/gui/PartitionSplitterWidget.cpp +++ b/src/modules/partition/gui/PartitionSplitterWidget.cpp @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2016 Teo Mrnjavac * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "PartitionSplitterWidget.h" diff --git a/src/modules/partition/gui/PartitionSplitterWidget.h b/src/modules/partition/gui/PartitionSplitterWidget.h index 36bd965597..474ea313e5 100644 --- a/src/modules/partition/gui/PartitionSplitterWidget.h +++ b/src/modules/partition/gui/PartitionSplitterWidget.h @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2016 Teo Mrnjavac * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef PARTITIONSPLITTERWIDGET_H diff --git a/src/modules/partition/gui/PartitionViewSelectionFilter.h b/src/modules/partition/gui/PartitionViewSelectionFilter.h index 078999f318..fc2f5bcb30 100644 --- a/src/modules/partition/gui/PartitionViewSelectionFilter.h +++ b/src/modules/partition/gui/PartitionViewSelectionFilter.h @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2016 Teo Mrnjavac * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef PARTITIONVIEWSELECTIONFILTER_H diff --git a/src/modules/partition/gui/PartitionViewStep.cpp b/src/modules/partition/gui/PartitionViewStep.cpp index 59f117b260..1b70124dd4 100644 --- a/src/modules/partition/gui/PartitionViewStep.cpp +++ b/src/modules/partition/gui/PartitionViewStep.cpp @@ -1,4 +1,4 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014 Aurélien Gâteau * SPDX-FileCopyrightText: 2014-2017 Teo Mrnjavac @@ -7,18 +7,8 @@ * SPDX-FileCopyrightText: 2020 Anke Boersma . */ #include "gui/PartitionViewStep.h" diff --git a/src/modules/partition/gui/PartitionViewStep.h b/src/modules/partition/gui/PartitionViewStep.h index da1ec52557..6ece9a2b1a 100644 --- a/src/modules/partition/gui/PartitionViewStep.h +++ b/src/modules/partition/gui/PartitionViewStep.h @@ -1,22 +1,12 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014 Aurélien Gâteau * SPDX-FileCopyrightText: 2014-2016 Teo Mrnjavac * SPDX-FileCopyrightText: 2017 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef PARTITIONVIEWSTEP_H diff --git a/src/modules/partition/gui/ReplaceWidget.cpp b/src/modules/partition/gui/ReplaceWidget.cpp index 6c4d800dd2..7e4fb48d66 100644 --- a/src/modules/partition/gui/ReplaceWidget.cpp +++ b/src/modules/partition/gui/ReplaceWidget.cpp @@ -1,22 +1,12 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac * SPDX-FileCopyrightText: 2014 Aurélien Gâteau * SPDX-FileCopyrightText: 2019-2020 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "ReplaceWidget.h" diff --git a/src/modules/partition/gui/ReplaceWidget.h b/src/modules/partition/gui/ReplaceWidget.h index e30b57bb35..5277e56266 100644 --- a/src/modules/partition/gui/ReplaceWidget.h +++ b/src/modules/partition/gui/ReplaceWidget.h @@ -1,22 +1,12 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac * SPDX-FileCopyrightText: 2014 Aurélien Gâteau * SPDX-FileCopyrightText: 2018 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef REPLACEWIDGET_H diff --git a/src/modules/partition/gui/ResizeVolumeGroupDialog.cpp b/src/modules/partition/gui/ResizeVolumeGroupDialog.cpp index 1aae5f49bc..d0103954dd 100644 --- a/src/modules/partition/gui/ResizeVolumeGroupDialog.cpp +++ b/src/modules/partition/gui/ResizeVolumeGroupDialog.cpp @@ -1,21 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2018 Caio Jordão Carvalho * SPDX-FileCopyrightText: 2019 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "ResizeVolumeGroupDialog.h" diff --git a/src/modules/partition/gui/ResizeVolumeGroupDialog.h b/src/modules/partition/gui/ResizeVolumeGroupDialog.h index af5a29ae63..7b8ecf6d6b 100644 --- a/src/modules/partition/gui/ResizeVolumeGroupDialog.h +++ b/src/modules/partition/gui/ResizeVolumeGroupDialog.h @@ -1,21 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2018 Caio Jordão Carvalho * SPDX-FileCopyrightText: 2019 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef RESIZEVOLUMEGROUPDIALOG_H diff --git a/src/modules/partition/gui/ScanningDialog.cpp b/src/modules/partition/gui/ScanningDialog.cpp index 5099484d9b..cd22bb8616 100644 --- a/src/modules/partition/gui/ScanningDialog.cpp +++ b/src/modules/partition/gui/ScanningDialog.cpp @@ -1,21 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2015 Teo Mrnjavac * SPDX-FileCopyrightText: 2017 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "ScanningDialog.h" diff --git a/src/modules/partition/gui/ScanningDialog.h b/src/modules/partition/gui/ScanningDialog.h index 25cd362279..757b94eb63 100644 --- a/src/modules/partition/gui/ScanningDialog.h +++ b/src/modules/partition/gui/ScanningDialog.h @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2015 Teo Mrnjavac * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef SCANNINGDIALOG_H diff --git a/src/modules/partition/gui/VolumeGroupBaseDialog.cpp b/src/modules/partition/gui/VolumeGroupBaseDialog.cpp index 95aa75ac23..6277c30e59 100644 --- a/src/modules/partition/gui/VolumeGroupBaseDialog.cpp +++ b/src/modules/partition/gui/VolumeGroupBaseDialog.cpp @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2018 Caio Jordão Carvalho * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "VolumeGroupBaseDialog.h" diff --git a/src/modules/partition/gui/VolumeGroupBaseDialog.h b/src/modules/partition/gui/VolumeGroupBaseDialog.h index 7c7b43e485..253160d97b 100644 --- a/src/modules/partition/gui/VolumeGroupBaseDialog.h +++ b/src/modules/partition/gui/VolumeGroupBaseDialog.h @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2018 Caio Jordão Carvalho * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef VOLUMEGROUPBASEDIALOG_H diff --git a/src/modules/partition/jobs/ClearMountsJob.cpp b/src/modules/partition/jobs/ClearMountsJob.cpp index c51a784c16..825c82ec14 100644 --- a/src/modules/partition/jobs/ClearMountsJob.cpp +++ b/src/modules/partition/jobs/ClearMountsJob.cpp @@ -1,22 +1,12 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac * SPDX-FileCopyrightText: 2018 Adriaan de Groot * SPDX-FileCopyrightText: 2019 Kevin Kofler * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "ClearMountsJob.h" diff --git a/src/modules/partition/jobs/ClearMountsJob.h b/src/modules/partition/jobs/ClearMountsJob.h index 7d9df270ae..99a7b48448 100644 --- a/src/modules/partition/jobs/ClearMountsJob.h +++ b/src/modules/partition/jobs/ClearMountsJob.h @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef CLEARMOUNTSJOB_H diff --git a/src/modules/partition/jobs/ClearTempMountsJob.cpp b/src/modules/partition/jobs/ClearTempMountsJob.cpp index 36b83f56cd..2f90278fe9 100644 --- a/src/modules/partition/jobs/ClearTempMountsJob.cpp +++ b/src/modules/partition/jobs/ClearTempMountsJob.cpp @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "ClearTempMountsJob.h" diff --git a/src/modules/partition/jobs/ClearTempMountsJob.h b/src/modules/partition/jobs/ClearTempMountsJob.h index 6f29f197ce..0726975c77 100644 --- a/src/modules/partition/jobs/ClearTempMountsJob.h +++ b/src/modules/partition/jobs/ClearTempMountsJob.h @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef CLEARTEMPMOUNTSJOB_H diff --git a/src/modules/partition/jobs/CreatePartitionJob.cpp b/src/modules/partition/jobs/CreatePartitionJob.cpp index ac61518f8e..a4fa195ee5 100644 --- a/src/modules/partition/jobs/CreatePartitionJob.cpp +++ b/src/modules/partition/jobs/CreatePartitionJob.cpp @@ -1,22 +1,12 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014 Aurélien Gâteau * SPDX-FileCopyrightText: 2015 Teo Mrnjavac * SPDX-FileCopyrightText: 2017 2020, Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "CreatePartitionJob.h" diff --git a/src/modules/partition/jobs/CreatePartitionJob.h b/src/modules/partition/jobs/CreatePartitionJob.h index b11874fad0..3d6199804a 100644 --- a/src/modules/partition/jobs/CreatePartitionJob.h +++ b/src/modules/partition/jobs/CreatePartitionJob.h @@ -1,21 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014 Aurélien Gâteau * SPDX-FileCopyrightText: 2015 Teo Mrnjavac * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef CREATEPARTITIONJOB_H diff --git a/src/modules/partition/jobs/CreatePartitionTableJob.cpp b/src/modules/partition/jobs/CreatePartitionTableJob.cpp index a585c094ac..0913a1cfc4 100644 --- a/src/modules/partition/jobs/CreatePartitionTableJob.cpp +++ b/src/modules/partition/jobs/CreatePartitionTableJob.cpp @@ -1,22 +1,12 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014 Aurélien Gâteau * SPDX-FileCopyrightText: 2015 Teo Mrnjavac * SPDX-FileCopyrightText: 2017 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "CreatePartitionTableJob.h" diff --git a/src/modules/partition/jobs/CreatePartitionTableJob.h b/src/modules/partition/jobs/CreatePartitionTableJob.h index 02f23d1693..ee1ba0a38d 100644 --- a/src/modules/partition/jobs/CreatePartitionTableJob.h +++ b/src/modules/partition/jobs/CreatePartitionTableJob.h @@ -1,21 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014 Aurélien Gâteau * SPDX-FileCopyrightText: 2015 Teo Mrnjavac * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef CREATEPARTITIONTABLEJOB_H diff --git a/src/modules/partition/jobs/CreateVolumeGroupJob.cpp b/src/modules/partition/jobs/CreateVolumeGroupJob.cpp index 6d9c9d6e04..af9997df66 100644 --- a/src/modules/partition/jobs/CreateVolumeGroupJob.cpp +++ b/src/modules/partition/jobs/CreateVolumeGroupJob.cpp @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2018 Caio Jordão Carvalho * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "CreateVolumeGroupJob.h" diff --git a/src/modules/partition/jobs/CreateVolumeGroupJob.h b/src/modules/partition/jobs/CreateVolumeGroupJob.h index 0e73c52fab..e9682043c4 100644 --- a/src/modules/partition/jobs/CreateVolumeGroupJob.h +++ b/src/modules/partition/jobs/CreateVolumeGroupJob.h @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2018 Caio Jordão Carvalho * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef CREATEVOLUMEGROUPJOB_H diff --git a/src/modules/partition/jobs/DeactivateVolumeGroupJob.cpp b/src/modules/partition/jobs/DeactivateVolumeGroupJob.cpp index 3adce640c7..92086015de 100644 --- a/src/modules/partition/jobs/DeactivateVolumeGroupJob.cpp +++ b/src/modules/partition/jobs/DeactivateVolumeGroupJob.cpp @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2018 Caio Jordão Carvalho * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "DeactivateVolumeGroupJob.h" diff --git a/src/modules/partition/jobs/DeactivateVolumeGroupJob.h b/src/modules/partition/jobs/DeactivateVolumeGroupJob.h index 13b60069ee..a6bdd4ddba 100644 --- a/src/modules/partition/jobs/DeactivateVolumeGroupJob.h +++ b/src/modules/partition/jobs/DeactivateVolumeGroupJob.h @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2018 Caio Jordão Carvalho * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef DEACTIVATEVOLUMEGROUPJOB_H diff --git a/src/modules/partition/jobs/DeletePartitionJob.cpp b/src/modules/partition/jobs/DeletePartitionJob.cpp index 8a9fedce26..913fd8cd6c 100644 --- a/src/modules/partition/jobs/DeletePartitionJob.cpp +++ b/src/modules/partition/jobs/DeletePartitionJob.cpp @@ -1,22 +1,12 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014 Aurélien Gâteau * SPDX-FileCopyrightText: 2015 Teo Mrnjavac * SPDX-FileCopyrightText: 2017 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "DeletePartitionJob.h" diff --git a/src/modules/partition/jobs/DeletePartitionJob.h b/src/modules/partition/jobs/DeletePartitionJob.h index 5a0332bf46..6d5ff1377e 100644 --- a/src/modules/partition/jobs/DeletePartitionJob.h +++ b/src/modules/partition/jobs/DeletePartitionJob.h @@ -1,21 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014 Aurélien Gâteau * SPDX-FileCopyrightText: 2015 Teo Mrnjavac * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef DELETEPARTITIONJOB_H diff --git a/src/modules/partition/jobs/FillGlobalStorageJob.cpp b/src/modules/partition/jobs/FillGlobalStorageJob.cpp index a0b229d45f..f26b70a97a 100644 --- a/src/modules/partition/jobs/FillGlobalStorageJob.cpp +++ b/src/modules/partition/jobs/FillGlobalStorageJob.cpp @@ -1,22 +1,12 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014 Aurélien Gâteau * SPDX-FileCopyrightText: 2015-2016 Teo Mrnjavac * SPDX-FileCopyrightText: 2017 2019-2020, Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "FillGlobalStorageJob.h" diff --git a/src/modules/partition/jobs/FillGlobalStorageJob.h b/src/modules/partition/jobs/FillGlobalStorageJob.h index 823f64f2f2..c1256de125 100644 --- a/src/modules/partition/jobs/FillGlobalStorageJob.h +++ b/src/modules/partition/jobs/FillGlobalStorageJob.h @@ -1,21 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014 Aurélien Gâteau * SPDX-FileCopyrightText: 2015 Teo Mrnjavac * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef FILLGLOBALSTORAGEJOB_H diff --git a/src/modules/partition/jobs/FormatPartitionJob.cpp b/src/modules/partition/jobs/FormatPartitionJob.cpp index d12c890229..4dadacf9c5 100644 --- a/src/modules/partition/jobs/FormatPartitionJob.cpp +++ b/src/modules/partition/jobs/FormatPartitionJob.cpp @@ -1,22 +1,12 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014 Aurélien Gâteau * SPDX-FileCopyrightText: 2015-2016 Teo Mrnjavac * SPDX-FileCopyrightText: 2020 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "FormatPartitionJob.h" diff --git a/src/modules/partition/jobs/FormatPartitionJob.h b/src/modules/partition/jobs/FormatPartitionJob.h index f3a721187a..38b2ee1a95 100644 --- a/src/modules/partition/jobs/FormatPartitionJob.h +++ b/src/modules/partition/jobs/FormatPartitionJob.h @@ -1,21 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014 Aurélien Gâteau * SPDX-FileCopyrightText: 2015 Teo Mrnjavac * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef FORMATPARTITIONJOB_H diff --git a/src/modules/partition/jobs/PartitionJob.cpp b/src/modules/partition/jobs/PartitionJob.cpp index de96ef9502..3bdb05ebdc 100644 --- a/src/modules/partition/jobs/PartitionJob.cpp +++ b/src/modules/partition/jobs/PartitionJob.cpp @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014 Aurélien Gâteau * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "PartitionJob.h" diff --git a/src/modules/partition/jobs/PartitionJob.h b/src/modules/partition/jobs/PartitionJob.h index 66b9704a1c..5222cf4d35 100644 --- a/src/modules/partition/jobs/PartitionJob.h +++ b/src/modules/partition/jobs/PartitionJob.h @@ -1,21 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014 Aurélien Gâteau * SPDX-FileCopyrightText: 2019 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef PARTITIONJOB_H diff --git a/src/modules/partition/jobs/RemoveVolumeGroupJob.cpp b/src/modules/partition/jobs/RemoveVolumeGroupJob.cpp index 7c4b2ea316..a3b5b8d732 100644 --- a/src/modules/partition/jobs/RemoveVolumeGroupJob.cpp +++ b/src/modules/partition/jobs/RemoveVolumeGroupJob.cpp @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2018 Caio Jordão Carvalho * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "RemoveVolumeGroupJob.h" diff --git a/src/modules/partition/jobs/RemoveVolumeGroupJob.h b/src/modules/partition/jobs/RemoveVolumeGroupJob.h index 06ed2ab2ae..03f52135b2 100644 --- a/src/modules/partition/jobs/RemoveVolumeGroupJob.h +++ b/src/modules/partition/jobs/RemoveVolumeGroupJob.h @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2018 Caio Jordão Carvalho * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef REMOVEVOLUMEGROUPJOB_H diff --git a/src/modules/partition/jobs/ResizePartitionJob.cpp b/src/modules/partition/jobs/ResizePartitionJob.cpp index c71078dc1a..87b87c1c0a 100644 --- a/src/modules/partition/jobs/ResizePartitionJob.cpp +++ b/src/modules/partition/jobs/ResizePartitionJob.cpp @@ -1,22 +1,12 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014 Aurélien Gâteau * SPDX-FileCopyrightText: 2015 Teo Mrnjavac * SPDX-FileCopyrightText: 2017 Andrius Štikonas * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "ResizePartitionJob.h" diff --git a/src/modules/partition/jobs/ResizePartitionJob.h b/src/modules/partition/jobs/ResizePartitionJob.h index f86b792fc7..9e24b2d04f 100644 --- a/src/modules/partition/jobs/ResizePartitionJob.h +++ b/src/modules/partition/jobs/ResizePartitionJob.h @@ -1,21 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014 Aurélien Gâteau * SPDX-FileCopyrightText: 2015 Teo Mrnjavac * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef RESIZEPARTITIONJOB_H diff --git a/src/modules/partition/jobs/ResizeVolumeGroupJob.cpp b/src/modules/partition/jobs/ResizeVolumeGroupJob.cpp index b9828ccb4c..0c017877ef 100644 --- a/src/modules/partition/jobs/ResizeVolumeGroupJob.cpp +++ b/src/modules/partition/jobs/ResizeVolumeGroupJob.cpp @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2018 Caio Jordão Carvalho * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "ResizeVolumeGroupJob.h" diff --git a/src/modules/partition/jobs/ResizeVolumeGroupJob.h b/src/modules/partition/jobs/ResizeVolumeGroupJob.h index e77098184c..9e3f038c28 100644 --- a/src/modules/partition/jobs/ResizeVolumeGroupJob.h +++ b/src/modules/partition/jobs/ResizeVolumeGroupJob.h @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2018 Caio Jordão Carvalho * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef RESIZEVOLUMEGROUPJOB_H diff --git a/src/modules/partition/jobs/SetPartitionFlagsJob.cpp b/src/modules/partition/jobs/SetPartitionFlagsJob.cpp index cf8aabd35c..7b61012414 100644 --- a/src/modules/partition/jobs/SetPartitionFlagsJob.cpp +++ b/src/modules/partition/jobs/SetPartitionFlagsJob.cpp @@ -1,4 +1,4 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2008 2010, Volker Lanz * SPDX-FileCopyrightText: 2016 Teo Mrnjavac @@ -7,18 +7,8 @@ * * Based on the SetPartFlagsJob class from KDE Partition Manager * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "SetPartitionFlagsJob.h" diff --git a/src/modules/partition/jobs/SetPartitionFlagsJob.h b/src/modules/partition/jobs/SetPartitionFlagsJob.h index 957c6893f0..eb6d9586c5 100644 --- a/src/modules/partition/jobs/SetPartitionFlagsJob.h +++ b/src/modules/partition/jobs/SetPartitionFlagsJob.h @@ -1,4 +1,4 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2016 Teo Mrnjavac * SPDX-License-Identifier: GPL-3.0-or-later @@ -6,18 +6,8 @@ * Based on the SetPartFlagsJob class from KDE Partition Manager, * SPDX-FileCopyrightText: 2008 2010, Volker Lanz * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef SETPARTITIONFLAGSJOB_H diff --git a/src/modules/partition/tests/CMakeLists.txt b/src/modules/partition/tests/CMakeLists.txt index a2b99660c3..dd4e410688 100644 --- a/src/modules/partition/tests/CMakeLists.txt +++ b/src/modules/partition/tests/CMakeLists.txt @@ -1,4 +1,4 @@ -# === This file is part of Calamares - === +# === This file is part of Calamares - === # # SPDX-FileCopyrightText: 2020 Adriaan de Groot # SPDX-License-Identifier: BSD-2-Clause diff --git a/src/modules/partition/tests/ClearMountsJobTests.cpp b/src/modules/partition/tests/ClearMountsJobTests.cpp index 69d34c8481..e05af48974 100644 --- a/src/modules/partition/tests/ClearMountsJobTests.cpp +++ b/src/modules/partition/tests/ClearMountsJobTests.cpp @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2019 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "ClearMountsJobTests.h" diff --git a/src/modules/partition/tests/ClearMountsJobTests.h b/src/modules/partition/tests/ClearMountsJobTests.h index 27dfca8b94..4b13fdc3d1 100644 --- a/src/modules/partition/tests/ClearMountsJobTests.h +++ b/src/modules/partition/tests/ClearMountsJobTests.h @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2019 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef CLEARMOUNTSJOBTESTS_H diff --git a/src/modules/partition/tests/PartitionJobTests.cpp b/src/modules/partition/tests/PartitionJobTests.cpp index 9aa58ff583..60e72e0064 100644 --- a/src/modules/partition/tests/PartitionJobTests.cpp +++ b/src/modules/partition/tests/PartitionJobTests.cpp @@ -1,21 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014 Aurélien Gâteau * SPDX-FileCopyrightText: 2017, 2019 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "PartitionJobTests.h" diff --git a/src/modules/partition/tests/PartitionJobTests.h b/src/modules/partition/tests/PartitionJobTests.h index d2f0eb16cb..364213f54b 100644 --- a/src/modules/partition/tests/PartitionJobTests.h +++ b/src/modules/partition/tests/PartitionJobTests.h @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014 Aurélien Gâteau * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef PARTITIONJOBTESTS_H diff --git a/src/modules/plasmalnf/CMakeLists.txt b/src/modules/plasmalnf/CMakeLists.txt index 8c1ca8c3c5..15c836b5b6 100644 --- a/src/modules/plasmalnf/CMakeLists.txt +++ b/src/modules/plasmalnf/CMakeLists.txt @@ -1,4 +1,4 @@ -# === This file is part of Calamares - === +# === This file is part of Calamares - === # # SPDX-FileCopyrightText: 2020 Adriaan de Groot # SPDX-License-Identifier: BSD-2-Clause diff --git a/src/modules/plasmalnf/PlasmaLnfJob.cpp b/src/modules/plasmalnf/PlasmaLnfJob.cpp index b4ffadcd85..0721bcd881 100644 --- a/src/modules/plasmalnf/PlasmaLnfJob.cpp +++ b/src/modules/plasmalnf/PlasmaLnfJob.cpp @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2017 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "PlasmaLnfJob.h" diff --git a/src/modules/plasmalnf/PlasmaLnfJob.h b/src/modules/plasmalnf/PlasmaLnfJob.h index 9462f66ac7..314070c0cf 100644 --- a/src/modules/plasmalnf/PlasmaLnfJob.h +++ b/src/modules/plasmalnf/PlasmaLnfJob.h @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2017 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef PLASMALNFJOB_H diff --git a/src/modules/plasmalnf/PlasmaLnfPage.cpp b/src/modules/plasmalnf/PlasmaLnfPage.cpp index f3bcc09c89..a446200749 100644 --- a/src/modules/plasmalnf/PlasmaLnfPage.cpp +++ b/src/modules/plasmalnf/PlasmaLnfPage.cpp @@ -1,21 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2017-2018 Adriaan de Groot * SPDX-FileCopyrightText: 2019 Collabora Ltd * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "PlasmaLnfPage.h" diff --git a/src/modules/plasmalnf/PlasmaLnfPage.h b/src/modules/plasmalnf/PlasmaLnfPage.h index 286a10418e..287da8b29e 100644 --- a/src/modules/plasmalnf/PlasmaLnfPage.h +++ b/src/modules/plasmalnf/PlasmaLnfPage.h @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2017-2018 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef PLASMALNFPAGE_H diff --git a/src/modules/plasmalnf/PlasmaLnfViewStep.cpp b/src/modules/plasmalnf/PlasmaLnfViewStep.cpp index e9d1c3f61d..9bda0164b1 100644 --- a/src/modules/plasmalnf/PlasmaLnfViewStep.cpp +++ b/src/modules/plasmalnf/PlasmaLnfViewStep.cpp @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2017-2018 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "PlasmaLnfViewStep.h" diff --git a/src/modules/plasmalnf/PlasmaLnfViewStep.h b/src/modules/plasmalnf/PlasmaLnfViewStep.h index c2ecf9ddd5..a98ec4bf56 100644 --- a/src/modules/plasmalnf/PlasmaLnfViewStep.h +++ b/src/modules/plasmalnf/PlasmaLnfViewStep.h @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2017-2018 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef PLASMALNFVIEWSTEP_H diff --git a/src/modules/plasmalnf/ThemeInfo.h b/src/modules/plasmalnf/ThemeInfo.h index 432738e178..6848fb8c39 100644 --- a/src/modules/plasmalnf/ThemeInfo.h +++ b/src/modules/plasmalnf/ThemeInfo.h @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2017 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef PLASMALNF_THEMEINFO_H diff --git a/src/modules/plasmalnf/ThemeWidget.cpp b/src/modules/plasmalnf/ThemeWidget.cpp index 896b28772b..8314544eb6 100644 --- a/src/modules/plasmalnf/ThemeWidget.cpp +++ b/src/modules/plasmalnf/ThemeWidget.cpp @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2017-2018 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "ThemeWidget.h" diff --git a/src/modules/plasmalnf/ThemeWidget.h b/src/modules/plasmalnf/ThemeWidget.h index e3574dface..133dfc2a03 100644 --- a/src/modules/plasmalnf/ThemeWidget.h +++ b/src/modules/plasmalnf/ThemeWidget.h @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2017 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef PLASMALNF_THEMEWIDGET_H diff --git a/src/modules/plymouthcfg/main.py b/src/modules/plymouthcfg/main.py index 404a4651cd..c51314e7f3 100644 --- a/src/modules/plymouthcfg/main.py +++ b/src/modules/plymouthcfg/main.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 # -*- coding: utf-8 -*- # -# === This file is part of Calamares - === +# === This file is part of Calamares - === # # SPDX-FileCopyrightText: 2016 Artoo # SPDX-FileCopyrightText: 2017 Alf Gaida @@ -9,18 +9,8 @@ # SPDX-FileCopyrightText: 2019 Adriaan de Groot # SPDX-License-Identifier: GPL-3.0-or-later # -# Calamares is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. +# Calamares is Free Software: see the License-Identifier above. # -# Calamares is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Calamares. If not, see . import libcalamares diff --git a/src/modules/preservefiles/CMakeLists.txt b/src/modules/preservefiles/CMakeLists.txt index afff84050f..d19645089d 100644 --- a/src/modules/preservefiles/CMakeLists.txt +++ b/src/modules/preservefiles/CMakeLists.txt @@ -1,4 +1,4 @@ -# === This file is part of Calamares - === +# === This file is part of Calamares - === # # SPDX-FileCopyrightText: 2020 Adriaan de Groot # SPDX-License-Identifier: BSD-2-Clause diff --git a/src/modules/preservefiles/PreserveFiles.cpp b/src/modules/preservefiles/PreserveFiles.cpp index 7262630e03..7fe9a97ae0 100644 --- a/src/modules/preservefiles/PreserveFiles.cpp +++ b/src/modules/preservefiles/PreserveFiles.cpp @@ -1,8 +1,7 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2018 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later - * License-Filename: LICENSE * */ diff --git a/src/modules/preservefiles/PreserveFiles.h b/src/modules/preservefiles/PreserveFiles.h index fdba933fa2..d2b7373e22 100644 --- a/src/modules/preservefiles/PreserveFiles.h +++ b/src/modules/preservefiles/PreserveFiles.h @@ -1,8 +1,7 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2018 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later - * License-Filename: LICENSE * */ diff --git a/src/modules/rawfs/main.py b/src/modules/rawfs/main.py index cdce1d784d..a72ffe19d2 100644 --- a/src/modules/rawfs/main.py +++ b/src/modules/rawfs/main.py @@ -1,23 +1,13 @@ #!/usr/bin/env python3 # -*- coding: utf-8 -*- # -# === This file is part of Calamares - === +# === This file is part of Calamares - === # # SPDX-FileCopyrightText: 2019 Collabora Ltd # SPDX-License-Identifier: GPL-3.0-or-later # -# Calamares is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. +# Calamares is Free Software: see the License-Identifier above. # -# Calamares is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Calamares. If not, see . import libcalamares import os diff --git a/src/modules/removeuser/CMakeLists.txt b/src/modules/removeuser/CMakeLists.txt index 7818926c5b..cf4243e7d4 100644 --- a/src/modules/removeuser/CMakeLists.txt +++ b/src/modules/removeuser/CMakeLists.txt @@ -1,4 +1,4 @@ -# === This file is part of Calamares - === +# === This file is part of Calamares - === # # SPDX-FileCopyrightText: 2020 Adriaan de Groot # SPDX-License-Identifier: BSD-2-Clause diff --git a/src/modules/removeuser/RemoveUserJob.cpp b/src/modules/removeuser/RemoveUserJob.cpp index 221f4f5ecb..9475b9beae 100644 --- a/src/modules/removeuser/RemoveUserJob.cpp +++ b/src/modules/removeuser/RemoveUserJob.cpp @@ -1,22 +1,12 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2015 Teo Mrnjavac * SPDX-FileCopyrightText: 2017 Alf Gaida * SPDX-FileCopyrightText: 2019-2020 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "RemoveUserJob.h" diff --git a/src/modules/removeuser/RemoveUserJob.h b/src/modules/removeuser/RemoveUserJob.h index 25c5c8e735..8f7de35e0c 100644 --- a/src/modules/removeuser/RemoveUserJob.h +++ b/src/modules/removeuser/RemoveUserJob.h @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2020 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef REMOVEUSERJOB_H diff --git a/src/modules/services-openrc/main.py b/src/modules/services-openrc/main.py index f89369a7f1..cb1ae80202 100644 --- a/src/modules/services-openrc/main.py +++ b/src/modules/services-openrc/main.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 # -*- coding: utf-8 -*- # -# === This file is part of Calamares - === +# === This file is part of Calamares - === # # SPDX-FileCopyrightText: 2016 Artoo # SPDX-FileCopyrightText: 2017 Philip Müller @@ -9,18 +9,8 @@ # SPDX-FileCopyrightText: 2018-2019 Adriaan de Groot # SPDX-License-Identifier: GPL-3.0-or-later # -# Calamares is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. +# Calamares is Free Software: see the License-Identifier above. # -# Calamares is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Calamares. If not, see . import libcalamares diff --git a/src/modules/services-systemd/main.py b/src/modules/services-systemd/main.py index 8932bc7e59..e3d3e20a57 100644 --- a/src/modules/services-systemd/main.py +++ b/src/modules/services-systemd/main.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 # -*- coding: utf-8 -*- # -# === This file is part of Calamares - === +# === This file is part of Calamares - === # # SPDX-FileCopyrightText: 2014 Philip Müller # SPDX-FileCopyrightText: 2014 Teo Mrnjavac @@ -9,18 +9,8 @@ # SPDX-FileCopyrightText: 2018-2019 Adriaan de Groot # SPDX-License-Identifier: GPL-3.0-or-later # -# Calamares is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. +# Calamares is Free Software: see the License-Identifier above. # -# Calamares is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Calamares. If not, see . import libcalamares diff --git a/src/modules/shellprocess/CMakeLists.txt b/src/modules/shellprocess/CMakeLists.txt index 5804f5e35b..448be06256 100644 --- a/src/modules/shellprocess/CMakeLists.txt +++ b/src/modules/shellprocess/CMakeLists.txt @@ -1,4 +1,4 @@ -# === This file is part of Calamares - === +# === This file is part of Calamares - === # # SPDX-FileCopyrightText: 2020 Adriaan de Groot # SPDX-License-Identifier: BSD-2-Clause diff --git a/src/modules/shellprocess/ShellProcessJob.cpp b/src/modules/shellprocess/ShellProcessJob.cpp index bbc79934c9..ab00a0bddc 100644 --- a/src/modules/shellprocess/ShellProcessJob.cpp +++ b/src/modules/shellprocess/ShellProcessJob.cpp @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2018 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "ShellProcessJob.h" diff --git a/src/modules/shellprocess/ShellProcessJob.h b/src/modules/shellprocess/ShellProcessJob.h index 956f7b0c87..c63a7b91f4 100644 --- a/src/modules/shellprocess/ShellProcessJob.h +++ b/src/modules/shellprocess/ShellProcessJob.h @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2018 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef SHELLPROCESSJOB_H diff --git a/src/modules/shellprocess/Tests.cpp b/src/modules/shellprocess/Tests.cpp index 434520ccab..77368db481 100644 --- a/src/modules/shellprocess/Tests.cpp +++ b/src/modules/shellprocess/Tests.cpp @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2017-2018 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "Tests.h" diff --git a/src/modules/shellprocess/Tests.h b/src/modules/shellprocess/Tests.h index 76b05563b5..cabeaada2e 100644 --- a/src/modules/shellprocess/Tests.h +++ b/src/modules/shellprocess/Tests.h @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2018 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef TESTS_H diff --git a/src/modules/summary/CMakeLists.txt b/src/modules/summary/CMakeLists.txt index 9aad8b8ac3..57dc731cb1 100644 --- a/src/modules/summary/CMakeLists.txt +++ b/src/modules/summary/CMakeLists.txt @@ -1,4 +1,4 @@ -# === This file is part of Calamares - === +# === This file is part of Calamares - === # # SPDX-FileCopyrightText: 2020 Adriaan de Groot # SPDX-License-Identifier: BSD-2-Clause diff --git a/src/modules/summary/SummaryPage.cpp b/src/modules/summary/SummaryPage.cpp index ebcde6a2cf..d6917d962e 100644 --- a/src/modules/summary/SummaryPage.cpp +++ b/src/modules/summary/SummaryPage.cpp @@ -1,22 +1,12 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac * SPDX-FileCopyrightText: 2017 2019, Adriaan de Groot * SPDX-FileCopyrightText: 2019 Collabora Ltd * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "SummaryPage.h" diff --git a/src/modules/summary/SummaryPage.h b/src/modules/summary/SummaryPage.h index 6d01487603..1adb670170 100644 --- a/src/modules/summary/SummaryPage.h +++ b/src/modules/summary/SummaryPage.h @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef SUMMARYPAGE_H diff --git a/src/modules/summary/SummaryViewStep.cpp b/src/modules/summary/SummaryViewStep.cpp index da0e10e1eb..c5b6841edd 100644 --- a/src/modules/summary/SummaryViewStep.cpp +++ b/src/modules/summary/SummaryViewStep.cpp @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "SummaryViewStep.h" diff --git a/src/modules/summary/SummaryViewStep.h b/src/modules/summary/SummaryViewStep.h index 3e23199cac..0a2933d8b7 100644 --- a/src/modules/summary/SummaryViewStep.h +++ b/src/modules/summary/SummaryViewStep.h @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef SUMMARYPAGEPLUGIN_H diff --git a/src/modules/tracking/CMakeLists.txt b/src/modules/tracking/CMakeLists.txt index 25df2b7acc..fe0b315e35 100644 --- a/src/modules/tracking/CMakeLists.txt +++ b/src/modules/tracking/CMakeLists.txt @@ -1,4 +1,4 @@ -# === This file is part of Calamares - === +# === This file is part of Calamares - === # # SPDX-FileCopyrightText: 2020 Adriaan de Groot # SPDX-License-Identifier: BSD-2-Clause diff --git a/src/modules/tracking/Config.cpp b/src/modules/tracking/Config.cpp index c840d541c9..f1f61edfdc 100644 --- a/src/modules/tracking/Config.cpp +++ b/src/modules/tracking/Config.cpp @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2020 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "Config.h" diff --git a/src/modules/tracking/Config.h b/src/modules/tracking/Config.h index 787a92dc51..655a71410d 100644 --- a/src/modules/tracking/Config.h +++ b/src/modules/tracking/Config.h @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2020 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef TRACKING_CONFIG_H diff --git a/src/modules/tracking/Tests.cpp b/src/modules/tracking/Tests.cpp index 0fed06947b..661d832730 100644 --- a/src/modules/tracking/Tests.cpp +++ b/src/modules/tracking/Tests.cpp @@ -1,4 +1,4 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2020 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/modules/tracking/TrackingJobs.cpp b/src/modules/tracking/TrackingJobs.cpp index f4ee504e23..dba6000e12 100644 --- a/src/modules/tracking/TrackingJobs.cpp +++ b/src/modules/tracking/TrackingJobs.cpp @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2017-2018 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "TrackingJobs.h" diff --git a/src/modules/tracking/TrackingJobs.h b/src/modules/tracking/TrackingJobs.h index d87deb412e..b58880f00a 100644 --- a/src/modules/tracking/TrackingJobs.h +++ b/src/modules/tracking/TrackingJobs.h @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2017-2018 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef TRACKING_TRACKINGJOBS_H diff --git a/src/modules/tracking/TrackingPage.cpp b/src/modules/tracking/TrackingPage.cpp index 2644b0cd0b..ffdb8be663 100644 --- a/src/modules/tracking/TrackingPage.cpp +++ b/src/modules/tracking/TrackingPage.cpp @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2017-2018 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "TrackingPage.h" diff --git a/src/modules/tracking/TrackingPage.h b/src/modules/tracking/TrackingPage.h index 7600019bd8..eb843b755e 100644 --- a/src/modules/tracking/TrackingPage.h +++ b/src/modules/tracking/TrackingPage.h @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2017 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef TRACKINGPAGE_H diff --git a/src/modules/tracking/TrackingType.h b/src/modules/tracking/TrackingType.h index 15c9cc792b..81af346887 100644 --- a/src/modules/tracking/TrackingType.h +++ b/src/modules/tracking/TrackingType.h @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2017 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef TRACKINGTYPE_H diff --git a/src/modules/tracking/TrackingViewStep.cpp b/src/modules/tracking/TrackingViewStep.cpp index ce32bb2e63..7955846c31 100644 --- a/src/modules/tracking/TrackingViewStep.cpp +++ b/src/modules/tracking/TrackingViewStep.cpp @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2017 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "TrackingViewStep.h" diff --git a/src/modules/tracking/TrackingViewStep.h b/src/modules/tracking/TrackingViewStep.h index 335fc77d0f..7b27dbec62 100644 --- a/src/modules/tracking/TrackingViewStep.h +++ b/src/modules/tracking/TrackingViewStep.h @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2017 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef TRACKINGVIEWSTEP_H diff --git a/src/modules/umount/main.py b/src/modules/umount/main.py index ea09764533..86ab1599a6 100644 --- a/src/modules/umount/main.py +++ b/src/modules/umount/main.py @@ -1,25 +1,15 @@ #!/usr/bin/env python3 # -*- coding: utf-8 -*- # -# === This file is part of Calamares - === +# === This file is part of Calamares - === # # SPDX-FileCopyrightText: 2014 Aurélien Gâteau # SPDX-FileCopyrightText: 2016 Anke Boersma # SPDX-FileCopyrightText: 2018 Adriaan de Groot # SPDX-License-Identifier: GPL-3.0-or-later # -# Calamares is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. +# Calamares is Free Software: see the License-Identifier above. # -# Calamares is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Calamares. If not, see . import os import subprocess diff --git a/src/modules/unpackfs/main.py b/src/modules/unpackfs/main.py index bd69125a12..d89607465e 100644 --- a/src/modules/unpackfs/main.py +++ b/src/modules/unpackfs/main.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 # -*- coding: utf-8 -*- # -# === This file is part of Calamares - === +# === This file is part of Calamares - === # # SPDX-FileCopyrightText: 2014 Teo Mrnjavac # SPDX-FileCopyrightText: 2014 Daniel Hillenbrand @@ -12,18 +12,8 @@ # SPDX-FileCopyrightText: 2020 Gabriel Craciunescu # SPDX-License-Identifier: GPL-3.0-or-later # -# Calamares is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. +# Calamares is Free Software: see the License-Identifier above. # -# Calamares is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Calamares. If not, see . import os import re diff --git a/src/modules/users/CMakeLists.txt b/src/modules/users/CMakeLists.txt index 8f54248273..5752ae67ae 100644 --- a/src/modules/users/CMakeLists.txt +++ b/src/modules/users/CMakeLists.txt @@ -1,4 +1,4 @@ -# === This file is part of Calamares - === +# === This file is part of Calamares - === # # SPDX-FileCopyrightText: 2020 Adriaan de Groot # SPDX-License-Identifier: BSD-2-Clause diff --git a/src/modules/users/CheckPWQuality.cpp b/src/modules/users/CheckPWQuality.cpp index 7bce0c09ff..9332c60805 100644 --- a/src/modules/users/CheckPWQuality.cpp +++ b/src/modules/users/CheckPWQuality.cpp @@ -1,4 +1,4 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2018 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later @@ -7,18 +7,8 @@ * GPL-3.0-or-later (libpwquality is BSD-3-clause or GPL-2.0-or-later, * so we pick GPL-3.0-or-later). * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "CheckPWQuality.h" diff --git a/src/modules/users/CheckPWQuality.h b/src/modules/users/CheckPWQuality.h index 80dc809fe9..6d7fb56df5 100644 --- a/src/modules/users/CheckPWQuality.h +++ b/src/modules/users/CheckPWQuality.h @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2018 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef CHECKPWQUALITY_H diff --git a/src/modules/users/Config.cpp b/src/modules/users/Config.cpp index 322884c0e4..5ce8c8ed19 100644 --- a/src/modules/users/Config.cpp +++ b/src/modules/users/Config.cpp @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2020 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "Config.h" diff --git a/src/modules/users/Config.h b/src/modules/users/Config.h index 1e2a4c6391..33e82cd891 100644 --- a/src/modules/users/Config.h +++ b/src/modules/users/Config.h @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2020 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef USERS_CONFIG_H diff --git a/src/modules/users/CreateUserJob.cpp b/src/modules/users/CreateUserJob.cpp index 0f08b1700e..24b0f36d1e 100644 --- a/src/modules/users/CreateUserJob.cpp +++ b/src/modules/users/CreateUserJob.cpp @@ -1,4 +1,4 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2016 Teo Mrnjavac * SPDX-FileCopyrightText: 2018 Adriaan de Groot diff --git a/src/modules/users/CreateUserJob.h b/src/modules/users/CreateUserJob.h index b5d3e94900..0a46198b92 100644 --- a/src/modules/users/CreateUserJob.h +++ b/src/modules/users/CreateUserJob.h @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef CREATEUSERJOB_H diff --git a/src/modules/users/SetHostNameJob.cpp b/src/modules/users/SetHostNameJob.cpp index ff69c64a9f..be86ad6ab8 100644 --- a/src/modules/users/SetHostNameJob.cpp +++ b/src/modules/users/SetHostNameJob.cpp @@ -1,22 +1,12 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014 Rohan Garg * SPDX-FileCopyrightText: 2015 Teo Mrnjavac * SPDX-FileCopyrightText: 2018 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "SetHostNameJob.h" diff --git a/src/modules/users/SetHostNameJob.h b/src/modules/users/SetHostNameJob.h index 4cc29c9ac6..9d44579cbd 100644 --- a/src/modules/users/SetHostNameJob.h +++ b/src/modules/users/SetHostNameJob.h @@ -1,22 +1,12 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014 Rohan Garg * SPDX-FileCopyrightText: 2015 Teo Mrnjavac * SPDX-FileCopyrightText: 2020 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef SETHOSTNAMEJOB_CPP_H diff --git a/src/modules/users/SetPasswordJob.cpp b/src/modules/users/SetPasswordJob.cpp index 78efd3efc7..dd2fdc2440 100644 --- a/src/modules/users/SetPasswordJob.cpp +++ b/src/modules/users/SetPasswordJob.cpp @@ -1,21 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2017 Teo Mrnjavac * SPDX-FileCopyrightText: 2017 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "SetPasswordJob.h" diff --git a/src/modules/users/SetPasswordJob.h b/src/modules/users/SetPasswordJob.h index aa1af04170..aa75a86e11 100644 --- a/src/modules/users/SetPasswordJob.h +++ b/src/modules/users/SetPasswordJob.h @@ -1,21 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac * SPDX-FileCopyrightText: 2017 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef SETPASSWORDJOB_H diff --git a/src/modules/users/TestCreateUserJob.cpp b/src/modules/users/TestCreateUserJob.cpp index 93dc8967e6..a801baf45d 100644 --- a/src/modules/users/TestCreateUserJob.cpp +++ b/src/modules/users/TestCreateUserJob.cpp @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2020 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "CreateUserJob.h" diff --git a/src/modules/users/TestPasswordJob.cpp b/src/modules/users/TestPasswordJob.cpp index 8677f88c2a..1409e37b69 100644 --- a/src/modules/users/TestPasswordJob.cpp +++ b/src/modules/users/TestPasswordJob.cpp @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2017 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "SetPasswordJob.h" diff --git a/src/modules/users/TestSetHostNameJob.cpp b/src/modules/users/TestSetHostNameJob.cpp index 0e887a5f11..17061037fa 100644 --- a/src/modules/users/TestSetHostNameJob.cpp +++ b/src/modules/users/TestSetHostNameJob.cpp @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2020 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "SetHostNameJob.h" diff --git a/src/modules/users/Tests.cpp b/src/modules/users/Tests.cpp index f0fc911652..c92391d21a 100644 --- a/src/modules/users/Tests.cpp +++ b/src/modules/users/Tests.cpp @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2020 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "Config.h" diff --git a/src/modules/users/UsersPage.cpp b/src/modules/users/UsersPage.cpp index 3e04ff7a7a..2418b319e3 100644 --- a/src/modules/users/UsersPage.cpp +++ b/src/modules/users/UsersPage.cpp @@ -1,4 +1,4 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2017 Teo Mrnjavac * SPDX-FileCopyrightText: 2017-2018 Adriaan de Groot @@ -10,18 +10,8 @@ * by Roland Singer * Copyright (C) 2007 Free Software Foundation, Inc. * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "UsersPage.h" diff --git a/src/modules/users/UsersPage.h b/src/modules/users/UsersPage.h index 9c3998feb3..f4d2c47d47 100644 --- a/src/modules/users/UsersPage.h +++ b/src/modules/users/UsersPage.h @@ -1,4 +1,4 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2007 Free Software Foundation, Inc. * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac @@ -9,18 +9,8 @@ * by Roland Singer * Copyright (C) 2007 Free Software Foundation, Inc. * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef USERSPAGE_H diff --git a/src/modules/users/UsersViewStep.cpp b/src/modules/users/UsersViewStep.cpp index 3b2b7152f6..df823df067 100644 --- a/src/modules/users/UsersViewStep.cpp +++ b/src/modules/users/UsersViewStep.cpp @@ -1,22 +1,12 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac * SPDX-FileCopyrightText: 2017-2018 Adriaan de Groot * SPDX-FileCopyrightText: 2017 Gabriel Craciunescu * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "UsersViewStep.h" diff --git a/src/modules/users/UsersViewStep.h b/src/modules/users/UsersViewStep.h index 6f6baf58b1..a03948adfd 100644 --- a/src/modules/users/UsersViewStep.h +++ b/src/modules/users/UsersViewStep.h @@ -1,21 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac * SPDX-FileCopyrightText: 2017 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef USERSPAGEPLUGIN_H diff --git a/src/modules/usersq/CMakeLists.txt b/src/modules/usersq/CMakeLists.txt index 8fb0a282c4..26c270bfbc 100644 --- a/src/modules/usersq/CMakeLists.txt +++ b/src/modules/usersq/CMakeLists.txt @@ -1,4 +1,4 @@ -# === This file is part of Calamares - === +# === This file is part of Calamares - === # # SPDX-FileCopyrightText: 2020 Adriaan de Groot # SPDX-License-Identifier: BSD-2-Clause diff --git a/src/modules/usersq/UsersQmlViewStep.cpp b/src/modules/usersq/UsersQmlViewStep.cpp index 1c011e9b6b..15c542e38f 100644 --- a/src/modules/usersq/UsersQmlViewStep.cpp +++ b/src/modules/usersq/UsersQmlViewStep.cpp @@ -1,4 +1,4 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac * SPDX-FileCopyrightText: 2017-2018 Adriaan de Groot @@ -6,18 +6,8 @@ * SPDX-FileCopyrightText: 2020 Camilo Higuita * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "UsersQmlViewStep.h" diff --git a/src/modules/usersq/UsersQmlViewStep.h b/src/modules/usersq/UsersQmlViewStep.h index 2a3c1a6c51..b3d474e651 100644 --- a/src/modules/usersq/UsersQmlViewStep.h +++ b/src/modules/usersq/UsersQmlViewStep.h @@ -1,22 +1,12 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac * SPDX-FileCopyrightText: 2017 Adriaan de Groot * SPDX-FileCopyrightText: 2020 Camilo Higuita * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef USERSQMLVIEWSTEP_H diff --git a/src/modules/usersq/usersq.qml b/src/modules/usersq/usersq.qml index 64cbea85e5..dcc4aa76aa 100644 --- a/src/modules/usersq/usersq.qml +++ b/src/modules/usersq/usersq.qml @@ -1,21 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2020 Anke Boersma * SPDX-License-Identifier: GPL-3.0-or-later - * License-Filename: LICENSE * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ import io.calamares.core 1.0 @@ -32,7 +21,7 @@ Kirigami.ScrollablePage { width: parent.width height: parent.height - + Kirigami.Theme.backgroundColor: "#EFF0F1" Kirigami.Theme.textColor: "#1F1F1F" @@ -219,7 +208,7 @@ Kirigami.ScrollablePage { color: "#6D6D6D" } } - + CheckBox { visible: config.allowWeakPasswords @@ -256,7 +245,7 @@ Kirigami.ScrollablePage { //checked: false onToggled: config.reuseUserPasswordForRoot = !config.reuseUserPasswordForRoot } - + Label { visible: root.checked diff --git a/src/modules/webview/CMakeLists.txt b/src/modules/webview/CMakeLists.txt index 3a08f32370..8de5e690cc 100644 --- a/src/modules/webview/CMakeLists.txt +++ b/src/modules/webview/CMakeLists.txt @@ -1,4 +1,4 @@ -# === This file is part of Calamares - === +# === This file is part of Calamares - === # # SPDX-FileCopyrightText: 2020 Adriaan de Groot # SPDX-License-Identifier: BSD-2-Clause diff --git a/src/modules/webview/WebViewStep.cpp b/src/modules/webview/WebViewStep.cpp index 6711567371..db84397754 100644 --- a/src/modules/webview/WebViewStep.cpp +++ b/src/modules/webview/WebViewStep.cpp @@ -1,21 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2015 Rohan Garg * SPDX-FileCopyrightText: 2016 Teo Mrnjavac * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "WebViewConfig.h" diff --git a/src/modules/webview/WebViewStep.h b/src/modules/webview/WebViewStep.h index 9f6658cdc4..caeed07ebf 100644 --- a/src/modules/webview/WebViewStep.h +++ b/src/modules/webview/WebViewStep.h @@ -1,22 +1,12 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2015 Rohan Garg * SPDX-FileCopyrightText: 2016 Teo Mrnjavac * SPDX-FileCopyrightText: 2017 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef WEBVIEWPLUGIN_H diff --git a/src/modules/welcome/CMakeLists.txt b/src/modules/welcome/CMakeLists.txt index 0620627a22..a468af102a 100644 --- a/src/modules/welcome/CMakeLists.txt +++ b/src/modules/welcome/CMakeLists.txt @@ -1,4 +1,4 @@ -# === This file is part of Calamares - === +# === This file is part of Calamares - === # # SPDX-FileCopyrightText: 2020 Adriaan de Groot # SPDX-License-Identifier: BSD-2-Clause diff --git a/src/modules/welcome/Config.cpp b/src/modules/welcome/Config.cpp index d9f4ca19c4..d4641562ac 100644 --- a/src/modules/welcome/Config.cpp +++ b/src/modules/welcome/Config.cpp @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2019-2020 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "Config.h" diff --git a/src/modules/welcome/Config.h b/src/modules/welcome/Config.h index b248f81c87..a3f1276a6d 100644 --- a/src/modules/welcome/Config.h +++ b/src/modules/welcome/Config.h @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2019-2020 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef WELCOME_CONFIG_H diff --git a/src/modules/welcome/WelcomePage.cpp b/src/modules/welcome/WelcomePage.cpp index 0f22631d34..ddceec4a32 100644 --- a/src/modules/welcome/WelcomePage.cpp +++ b/src/modules/welcome/WelcomePage.cpp @@ -1,22 +1,12 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac * SPDX-FileCopyrightText: 2015 Anke Boersma * SPDX-FileCopyrightText: 2017-2019 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "WelcomePage.h" diff --git a/src/modules/welcome/WelcomePage.h b/src/modules/welcome/WelcomePage.h index 07bea6d76d..04c17d25fe 100644 --- a/src/modules/welcome/WelcomePage.h +++ b/src/modules/welcome/WelcomePage.h @@ -1,21 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014 Teo Mrnjavac * SPDX-FileCopyrightText: 2019 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef WELCOMEPAGE_H diff --git a/src/modules/welcome/WelcomeViewStep.cpp b/src/modules/welcome/WelcomeViewStep.cpp index 7cf5e744a6..2a0d57bc45 100644 --- a/src/modules/welcome/WelcomeViewStep.cpp +++ b/src/modules/welcome/WelcomeViewStep.cpp @@ -1,21 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac * SPDX-FileCopyrightText: 2018 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "WelcomeViewStep.h" diff --git a/src/modules/welcome/WelcomeViewStep.h b/src/modules/welcome/WelcomeViewStep.h index c28dc335ea..16eec6d296 100644 --- a/src/modules/welcome/WelcomeViewStep.h +++ b/src/modules/welcome/WelcomeViewStep.h @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef WELCOMEVIEWSTEP_H diff --git a/src/modules/welcome/checker/CheckerContainer.cpp b/src/modules/welcome/checker/CheckerContainer.cpp index 58c9396fa0..0dcd820a3e 100644 --- a/src/modules/welcome/checker/CheckerContainer.cpp +++ b/src/modules/welcome/checker/CheckerContainer.cpp @@ -1,22 +1,12 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2017 Teo Mrnjavac * SPDX-FileCopyrightText: 2017 Adriaan de Groot * SPDX-FileCopyrightText: 2017 Gabriel Craciunescu * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ /* Based on code extracted from RequirementsChecker.cpp */ diff --git a/src/modules/welcome/checker/CheckerContainer.h b/src/modules/welcome/checker/CheckerContainer.h index 58358519f7..c721f2b36d 100644 --- a/src/modules/welcome/checker/CheckerContainer.h +++ b/src/modules/welcome/checker/CheckerContainer.h @@ -1,22 +1,12 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2017 Teo Mrnjavac * SPDX-FileCopyrightText: 2017 Adriaan de Groot * SPDX-FileCopyrightText: 2017 Gabriel Craciunescu * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ /* Based on code extracted from RequirementsChecker.cpp */ diff --git a/src/modules/welcome/checker/GeneralRequirements.cpp b/src/modules/welcome/checker/GeneralRequirements.cpp index 32d971b6de..66a9f5ed70 100644 --- a/src/modules/welcome/checker/GeneralRequirements.cpp +++ b/src/modules/welcome/checker/GeneralRequirements.cpp @@ -1,4 +1,4 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2017 Teo Mrnjavac * SPDX-FileCopyrightText: 2017-2018 2020, Adriaan de Groot @@ -6,18 +6,8 @@ * SPDX-FileCopyrightText: 2019 Collabora Ltd * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "GeneralRequirements.h" diff --git a/src/modules/welcome/checker/GeneralRequirements.h b/src/modules/welcome/checker/GeneralRequirements.h index a0a302054b..b6646da116 100644 --- a/src/modules/welcome/checker/GeneralRequirements.h +++ b/src/modules/welcome/checker/GeneralRequirements.h @@ -1,21 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2017 Teo Mrnjavac * SPDX-FileCopyrightText: 2017 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef GENERALREQUIREMENTS_H diff --git a/src/modules/welcome/checker/ResultWidget.cpp b/src/modules/welcome/checker/ResultWidget.cpp index b86cd23b05..ef3a7fdc18 100644 --- a/src/modules/welcome/checker/ResultWidget.cpp +++ b/src/modules/welcome/checker/ResultWidget.cpp @@ -1,21 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac * SPDX-FileCopyrightText: 2017 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "ResultWidget.h" diff --git a/src/modules/welcome/checker/ResultWidget.h b/src/modules/welcome/checker/ResultWidget.h index a56ed66e88..d77c0d9bb7 100644 --- a/src/modules/welcome/checker/ResultWidget.h +++ b/src/modules/welcome/checker/ResultWidget.h @@ -1,21 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac * SPDX-FileCopyrightText: 2017 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef CHECKER_RESULTWIDGET_H diff --git a/src/modules/welcome/checker/ResultsListWidget.cpp b/src/modules/welcome/checker/ResultsListWidget.cpp index 7286dd256c..1ad2c1b29a 100644 --- a/src/modules/welcome/checker/ResultsListWidget.cpp +++ b/src/modules/welcome/checker/ResultsListWidget.cpp @@ -1,21 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac * SPDX-FileCopyrightText: 2017 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "ResultsListWidget.h" diff --git a/src/modules/welcome/checker/ResultsListWidget.h b/src/modules/welcome/checker/ResultsListWidget.h index a93cc23716..aa6c622584 100644 --- a/src/modules/welcome/checker/ResultsListWidget.h +++ b/src/modules/welcome/checker/ResultsListWidget.h @@ -1,21 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac * SPDX-FileCopyrightText: 2019-2020 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef CHECKER_RESULTSLISTWIDGET_H diff --git a/src/modules/welcome/checker/partman_devices.c b/src/modules/welcome/checker/partman_devices.c index 040c584bac..7cde7a86d6 100644 --- a/src/modules/welcome/checker/partman_devices.c +++ b/src/modules/welcome/checker/partman_devices.c @@ -1,4 +1,4 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac * SPDX-License-Identifier: GPL-3.0-or-later @@ -6,18 +6,8 @@ * Based on parted_devices.c, from partman-base. * * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ /* This is third-party ancient C code. Don't format it. */ diff --git a/src/modules/welcome/checker/partman_devices.h b/src/modules/welcome/checker/partman_devices.h index 9c14cda784..14d1edc75d 100644 --- a/src/modules/welcome/checker/partman_devices.h +++ b/src/modules/welcome/checker/partman_devices.h @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014 Teo Mrnjavac * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef PARTMAN_DEVICES_H diff --git a/src/modules/welcomeq/CMakeLists.txt b/src/modules/welcomeq/CMakeLists.txt index 8e36cd5f1f..c9cafe7a8c 100644 --- a/src/modules/welcomeq/CMakeLists.txt +++ b/src/modules/welcomeq/CMakeLists.txt @@ -1,4 +1,4 @@ -# === This file is part of Calamares - === +# === This file is part of Calamares - === # # SPDX-FileCopyrightText: 2020 Adriaan de Groot # SPDX-License-Identifier: BSD-2-Clause diff --git a/src/modules/welcomeq/Recommended.qml b/src/modules/welcomeq/Recommended.qml index cc44c44a9f..1afc60950c 100644 --- a/src/modules/welcomeq/Recommended.qml +++ b/src/modules/welcomeq/Recommended.qml @@ -1,21 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2020 Anke Boersma * SPDX-FileCopyrightText: 2020 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ /* THIS COMPONENT IS UNUSED -- from the default welcomeq.qml at least */ diff --git a/src/modules/welcomeq/Requirements.qml b/src/modules/welcomeq/Requirements.qml index 415b828d89..159d884469 100644 --- a/src/modules/welcomeq/Requirements.qml +++ b/src/modules/welcomeq/Requirements.qml @@ -1,21 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2020 Anke Boersma * SPDX-FileCopyrightText: 2020 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ import io.calamares.core 1.0 diff --git a/src/modules/welcomeq/WelcomeQmlViewStep.cpp b/src/modules/welcomeq/WelcomeQmlViewStep.cpp index e76ab3e009..bf30d99157 100644 --- a/src/modules/welcomeq/WelcomeQmlViewStep.cpp +++ b/src/modules/welcomeq/WelcomeQmlViewStep.cpp @@ -1,21 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac * SPDX-FileCopyrightText: 2018 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "WelcomeQmlViewStep.h" diff --git a/src/modules/welcomeq/WelcomeQmlViewStep.h b/src/modules/welcomeq/WelcomeQmlViewStep.h index 6dc06eef4c..4c68ea2aed 100644 --- a/src/modules/welcomeq/WelcomeQmlViewStep.h +++ b/src/modules/welcomeq/WelcomeQmlViewStep.h @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2019-2020 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef WELCOME_QMLVIEWSTEP_H diff --git a/src/modules/welcomeq/about.qml b/src/modules/welcomeq/about.qml index db8a801352..21050c4ea2 100644 --- a/src/modules/welcomeq/about.qml +++ b/src/modules/welcomeq/about.qml @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2020 Anke Boersma * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ import io.calamares.ui 1.0 diff --git a/src/modules/welcomeq/release_notes.qml b/src/modules/welcomeq/release_notes.qml index cd2ef257dc..6da5bc7c97 100644 --- a/src/modules/welcomeq/release_notes.qml +++ b/src/modules/welcomeq/release_notes.qml @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2020 Anke Boersma * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ import io.calamares.ui 1.0 diff --git a/src/modules/welcomeq/welcomeq.qml b/src/modules/welcomeq/welcomeq.qml index e749a621c8..02b5424c7c 100644 --- a/src/modules/welcomeq/welcomeq.qml +++ b/src/modules/welcomeq/welcomeq.qml @@ -1,21 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2020 Adriaan de Groot * SPDX-FileCopyrightText: 2020 Anke Boersma * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ import io.calamares.core 1.0 import io.calamares.ui 1.0 diff --git a/src/qml/calamares/CMakeLists.txt b/src/qml/calamares/CMakeLists.txt index b6c2b00486..d74e79ea0c 100644 --- a/src/qml/calamares/CMakeLists.txt +++ b/src/qml/calamares/CMakeLists.txt @@ -1,4 +1,4 @@ -# === This file is part of Calamares - === +# === This file is part of Calamares - === # # SPDX-FileCopyrightText: 2020 Adriaan de Groot # SPDX-License-Identifier: BSD-2-Clause diff --git a/src/qml/calamares/slideshow/BackButton.qml b/src/qml/calamares/slideshow/BackButton.qml index 4a51f467e1..4e420e064a 100644 --- a/src/qml/calamares/slideshow/BackButton.qml +++ b/src/qml/calamares/slideshow/BackButton.qml @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2018 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ NavButton { diff --git a/src/qml/calamares/slideshow/ForwardButton.qml b/src/qml/calamares/slideshow/ForwardButton.qml index 023f0e56b3..7838fab3b6 100644 --- a/src/qml/calamares/slideshow/ForwardButton.qml +++ b/src/qml/calamares/slideshow/ForwardButton.qml @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2018 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ NavButton { diff --git a/src/qml/calamares/slideshow/NavButton.qml b/src/qml/calamares/slideshow/NavButton.qml index 01537d343b..bdb2f402e4 100644 --- a/src/qml/calamares/slideshow/NavButton.qml +++ b/src/qml/calamares/slideshow/NavButton.qml @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2018 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ /* This is a navigation (arrow) button that fades in on hover, and diff --git a/src/qml/calamares/slideshow/Presentation.qml b/src/qml/calamares/slideshow/Presentation.qml index dcfb009490..1eed2e8422 100644 --- a/src/qml/calamares/slideshow/Presentation.qml +++ b/src/qml/calamares/slideshow/Presentation.qml @@ -1,4 +1,4 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2017 Adriaan de Groot * SPDX-FileCopyrightText: 2016 The Qt Company Ltd. diff --git a/src/qml/calamares/slideshow/Slide.qml b/src/qml/calamares/slideshow/Slide.qml index 0783cc5288..9cb9e7381c 100644 --- a/src/qml/calamares/slideshow/Slide.qml +++ b/src/qml/calamares/slideshow/Slide.qml @@ -1,4 +1,4 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2012 Digia Plc and/or its subsidiary(-ies). * SPDX-License-Identifier: LGPL-2.1-only diff --git a/src/qml/calamares/slideshow/SlideCounter.qml b/src/qml/calamares/slideshow/SlideCounter.qml index 7904713317..d5b2de7be6 100644 --- a/src/qml/calamares/slideshow/SlideCounter.qml +++ b/src/qml/calamares/slideshow/SlideCounter.qml @@ -1,20 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2018 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ /* This control just shows a (non-translated) count of the slides From a2180936efcb8bd79eb734582bb745eafc50ec47 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Tue, 25 Aug 2020 23:44:08 +0200 Subject: [PATCH 122/157] CI: apply coding style across the entire codebase again --- lang/txload.cpp | 112 +++++++++++------- src/calamares/CalamaresApplication.cpp | 3 +- src/calamares/CalamaresWindow.h | 2 +- src/calamares/DebugWindow.cpp | 3 +- src/calamares/test_conf.cpp | 25 ++-- src/calamares/testmain.cpp | 5 +- src/libcalamares/geoip/Handler.cpp | 3 +- src/libcalamares/geoip/Handler.h | 6 +- src/libcalamares/locale/TimeZone.cpp | 7 +- src/libcalamares/modulesystem/Module.cpp | 3 +- .../modulesystem/RequirementsModel.cpp | 5 +- src/libcalamares/partition/KPMManager.cpp | 3 +- .../utils/CalamaresUtilsSystem.cpp | 8 +- src/libcalamares/utils/Tests.cpp | 3 +- src/libcalamares/utils/Traits.h | 35 ++++-- src/libcalamares/utils/Variant.h | 7 +- src/libcalamaresui/ViewManager.cpp | 2 +- .../modulesystem/ModuleFactory.cpp | 15 ++- .../modulesystem/ModuleManager.cpp | 18 ++- .../modulesystem/ProcessJobModule.cpp | 2 +- .../modulesystem/PythonJobModule.cpp | 2 +- .../modulesystem/PythonQtViewModule.cpp | 2 +- src/libcalamaresui/utils/ImageRegistry.cpp | 2 +- .../viewpages/BlankViewStep.cpp | 2 +- .../viewpages/PythonQtGlobalStorageWrapper.h | 2 +- src/libcalamaresui/viewpages/PythonQtJob.h | 2 +- .../viewpages/PythonQtUtilsWrapper.h | 2 +- src/libcalamaresui/viewpages/QmlViewStep.cpp | 2 +- src/libcalamaresui/viewpages/ViewStep.cpp | 2 +- src/libcalamaresui/widgets/ClickableLabel.cpp | 2 +- .../widgets/FixedAspectRatioLabel.cpp | 2 +- .../widgets/PrettyRadioButton.h | 2 +- src/modules/preservefiles/PreserveFiles.cpp | 3 +- src/modules/tracking/Tests.cpp | 12 +- src/modules/users/SetHostNameJob.cpp | 4 +- src/modules/users/Tests.cpp | 37 +++--- src/modules/users/UsersPage.cpp | 3 +- src/modules/usersq/UsersQmlViewStep.cpp | 6 +- src/modules/usersq/UsersQmlViewStep.h | 9 +- src/modules/webview/WebViewStep.cpp | 2 +- src/modules/welcome/WelcomePage.cpp | 2 +- .../welcome/checker/GeneralRequirements.cpp | 12 +- src/modules/welcome/checker/partman_devices.h | 7 +- src/modules/welcomeq/WelcomeQmlViewStep.cpp | 6 +- 44 files changed, 230 insertions(+), 164 deletions(-) diff --git a/lang/txload.cpp b/lang/txload.cpp index 62dc13e7d8..b7d14c8bf9 100644 --- a/lang/txload.cpp +++ b/lang/txload.cpp @@ -26,29 +26,31 @@ #include static const char usage[] = "Usage: txload [ ...]\n" - "\n" - "Reads a .ts source file and zero or more .ts \n" - "files, and does a comparison between the translations. Source (English)\n" - "strings that are untranslated are flagged in each of the translation\n" - "files, while differences in the translations are themselves also shown.\n" - "\n" - "Outputs to stdout a human-readable list of differences between the\n" - "translations.\n"; - -bool load_file(const char* filename, QDomDocument& doc) + "\n" + "Reads a .ts source file and zero or more .ts \n" + "files, and does a comparison between the translations. Source (English)\n" + "strings that are untranslated are flagged in each of the translation\n" + "files, while differences in the translations are themselves also shown.\n" + "\n" + "Outputs to stdout a human-readable list of differences between the\n" + "translations.\n"; + +bool +load_file( const char* filename, QDomDocument& doc ) { - QFile file(filename); + QFile file( filename ); QString err; int err_line, err_column; - if (!file.open(QIODevice::ReadOnly)) + if ( !file.open( QIODevice::ReadOnly ) ) { qDebug() << "Could not open" << filename; return false; } - QByteArray ba( file.read(1024 * 1024) ); + QByteArray ba( file.read( 1024 * 1024 ) ); qDebug() << "Read" << ba.length() << "bytes from" << filename; - if (!doc.setContent(ba, &err, &err_line, &err_column)) { + if ( !doc.setContent( ba, &err, &err_line, &err_column ) ) + { qDebug() << "Could not read" << filename << ':' << err_line << ':' << err_column << ' ' << err; file.close(); return false; @@ -58,15 +60,20 @@ bool load_file(const char* filename, QDomDocument& doc) return true; } -QDomElement find_context(QDomDocument& doc, const QString& name) +QDomElement +find_context( QDomDocument& doc, const QString& name ) { QDomElement top = doc.documentElement(); QDomNode n = top.firstChild(); - while (!n.isNull()) { - if (n.isElement()) { + while ( !n.isNull() ) + { + if ( n.isElement() ) + { QDomElement e = n.toElement(); if ( ( e.tagName() == "context" ) && ( e.firstChildElement( "name" ).text() == name ) ) + { return e; + } } n = n.nextSibling(); } @@ -74,17 +81,22 @@ QDomElement find_context(QDomDocument& doc, const QString& name) return QDomElement(); } -QDomElement find_message(QDomElement& context, const QString& source) +QDomElement +find_message( QDomElement& context, const QString& source ) { QDomNode n = context.firstChild(); - while (!n.isNull()) { - if (n.isElement()) { + while ( !n.isNull() ) + { + if ( n.isElement() ) + { QDomElement e = n.toElement(); if ( e.tagName() == "message" ) { QString msource = e.firstChildElement( "source" ).text(); if ( msource == source ) + { return e; + } } } n = n.nextSibling(); @@ -92,11 +104,14 @@ QDomElement find_message(QDomElement& context, const QString& source) return QDomElement(); } -bool merge_into(QDomElement& origin, QDomElement& alternate) +bool +merge_into( QDomElement& origin, QDomElement& alternate ) { QDomNode n = alternate.firstChild(); - while (!n.isNull()) { - if (n.isElement()) { + while ( !n.isNull() ) + { + if ( n.isElement() ) + { QDomElement alternateMessage = n.toElement(); if ( alternateMessage.tagName() == "message" ) { @@ -119,7 +134,8 @@ bool merge_into(QDomElement& origin, QDomElement& alternate) } if ( !alternateTranslationText.isEmpty() && ( alternateTranslationText != originTranslationText ) ) { - qDebug() << "\n\n\nSource:" << alternateSourceText << "\nTL1:" << originTranslationText << "\nTL2:" << alternateTranslationText; + qDebug() << "\n\n\nSource:" << alternateSourceText << "\nTL1:" << originTranslationText + << "\nTL2:" << alternateTranslationText; } } } @@ -130,12 +146,14 @@ bool merge_into(QDomElement& origin, QDomElement& alternate) } - -bool merge_into(QDomDocument& originDocument, QDomElement& context) +bool +merge_into( QDomDocument& originDocument, QDomElement& context ) { QDomElement name = context.firstChildElement( "name" ); if ( name.isNull() ) + { return false; + } QString contextname = name.text(); QDomElement originContext = find_context( originDocument, contextname ); @@ -148,16 +166,21 @@ bool merge_into(QDomDocument& originDocument, QDomElement& context) return merge_into( originContext, context ); } -bool merge_into(QDomDocument& originDocument, QDomDocument& alternateDocument) +bool +merge_into( QDomDocument& originDocument, QDomDocument& alternateDocument ) { QDomElement top = alternateDocument.documentElement(); QDomNode n = top.firstChild(); - while (!n.isNull()) { - if (n.isElement()) { + while ( !n.isNull() ) + { + if ( n.isElement() ) + { QDomElement e = n.toElement(); if ( e.tagName() == "context" ) if ( !merge_into( originDocument, e ) ) + { return false; + } } n = n.nextSibling(); } @@ -165,39 +188,46 @@ bool merge_into(QDomDocument& originDocument, QDomDocument& alternateDocument) return true; } -int main(int argc, char** argv) +int +main( int argc, char** argv ) { - QCoreApplication a(argc, argv); + QCoreApplication a( argc, argv ); - if (argc < 2) + if ( argc < 2 ) { qWarning() << usage; return 1; } - QDomDocument originDocument("origin"); - if ( !load_file(argv[1], originDocument) ) + QDomDocument originDocument( "origin" ); + if ( !load_file( argv[ 1 ], originDocument ) ) + { return 1; + } - for (int i = 2; i < argc; ++i) + for ( int i = 2; i < argc; ++i ) { - QDomDocument alternateDocument("alternate"); - if ( !load_file(argv[i], alternateDocument) ) + QDomDocument alternateDocument( "alternate" ); + if ( !load_file( argv[ i ], alternateDocument ) ) + { return 1; + } if ( !merge_into( originDocument, alternateDocument ) ) + { return 1; + } } - QString outfilename( argv[1] ); + QString outfilename( argv[ 1 ] ); outfilename.append( ".new" ); - QFile outfile(outfilename); - if (!outfile.open(QIODevice::WriteOnly)) + QFile outfile( outfilename ); + if ( !outfile.open( QIODevice::WriteOnly ) ) { qDebug() << "Could not open" << outfilename; return 1; } - outfile.write( originDocument.toString(4).toUtf8() ); + outfile.write( originDocument.toString( 4 ).toUtf8() ); outfile.close(); return 0; diff --git a/src/calamares/CalamaresApplication.cpp b/src/calamares/CalamaresApplication.cpp index 3f4bf808cf..164b3ed5c7 100644 --- a/src/calamares/CalamaresApplication.cpp +++ b/src/calamares/CalamaresApplication.cpp @@ -67,7 +67,8 @@ CalamaresApplication::init() { Logger::setupLogfile(); cDebug() << "Calamares version:" << CALAMARES_VERSION; - cDebug() << Logger::SubEntry << " languages:" << QString( CALAMARES_TRANSLATION_LANGUAGES ).replace( ";", ", " ); + cDebug() << Logger::SubEntry + << " languages:" << QString( CALAMARES_TRANSLATION_LANGUAGES ).replace( ";", ", " ); if ( !Calamares::Settings::instance() ) { diff --git a/src/calamares/CalamaresWindow.h b/src/calamares/CalamaresWindow.h index 8eed50ca5a..b6e63aa6b2 100644 --- a/src/calamares/CalamaresWindow.h +++ b/src/calamares/CalamaresWindow.h @@ -28,7 +28,7 @@ class CalamaresWindow : public QWidget Q_OBJECT public: CalamaresWindow( QWidget* parent = nullptr ); - virtual ~CalamaresWindow() override { } + virtual ~CalamaresWindow() override {} public slots: /** diff --git a/src/calamares/DebugWindow.cpp b/src/calamares/DebugWindow.cpp index fecf71ea16..18395400ad 100644 --- a/src/calamares/DebugWindow.cpp +++ b/src/calamares/DebugWindow.cpp @@ -184,7 +184,8 @@ DebugWindow::DebugWindow() #endif ] { QString moduleName = m_ui->modulesListView->currentIndex().data().toString(); - Module* module = ModuleManager::instance()->moduleInstance( ModuleSystem::InstanceKey::fromString( moduleName ) ); + Module* module + = ModuleManager::instance()->moduleInstance( ModuleSystem::InstanceKey::fromString( moduleName ) ); if ( module ) { m_module = module->configurationMap(); diff --git a/src/calamares/test_conf.cpp b/src/calamares/test_conf.cpp index a1b6634685..73b19aa261 100644 --- a/src/calamares/test_conf.cpp +++ b/src/calamares/test_conf.cpp @@ -14,26 +14,29 @@ #include "utils/Yaml.h" -#include #include +#include #include -#include #include +#include using std::cerr; static const char usage[] = "Usage: test_conf [-v] [-b] ...\n"; -int main(int argc, char** argv) +int +main( int argc, char** argv ) { bool verbose = false; bool bytes = false; int opt; - while ((opt = getopt(argc, argv, "vb")) != -1) { - switch (opt) { + while ( ( opt = getopt( argc, argv, "vb" ) ) != -1 ) + { + switch ( opt ) + { case 'v': verbose = true; break; @@ -52,7 +55,7 @@ int main(int argc, char** argv) return 1; } - const char* filename = argv[optind]; + const char* filename = argv[ optind ]; try { YAML::Node doc; @@ -60,10 +63,14 @@ int main(int argc, char** argv) { QFile f( filename ); if ( f.open( QFile::ReadOnly | QFile::Text ) ) + { doc = YAML::Load( f.readAll().constData() ); + } } else + { doc = YAML::LoadFile( filename ); + } if ( doc.IsNull() ) { @@ -86,12 +93,14 @@ int main(int argc, char** argv) { cerr << "Keys:\n"; for ( auto i = doc.begin(); i != doc.end(); ++i ) - cerr << i->first.as() << '\n'; + { + cerr << i->first.as< std::string >() << '\n'; + } } } catch ( YAML::Exception& e ) { - cerr << "WARNING:" << filename << '\n'; + cerr << "WARNING:" << filename << '\n'; cerr << "WARNING: YAML parser error " << e.what() << '\n'; return 1; } diff --git a/src/calamares/testmain.cpp b/src/calamares/testmain.cpp index 7a7967f436..c9d6f7195f 100644 --- a/src/calamares/testmain.cpp +++ b/src/calamares/testmain.cpp @@ -192,7 +192,7 @@ ExecViewModule::ExecViewModule() // We don't have one, so build one -- this gives us "x@x". QVariantMap m; m.insert( "name", "x" ); - Calamares::Module::initFrom( Calamares::ModuleSystem::Descriptor::fromDescriptorData(m), "x" ); + Calamares::Module::initFrom( Calamares::ModuleSystem::Descriptor::fromDescriptorData( m ), "x" ); } ExecViewModule::~ExecViewModule() {} @@ -323,7 +323,8 @@ load_module( const ModuleConfig& moduleConfig ) cDebug() << "Module" << moduleName << "job-configuration:" << configFile; - Calamares::Module* module = Calamares::moduleFromDescriptor( Calamares::ModuleSystem::Descriptor::fromDescriptorData( descriptor ), name, configFile, moduleDirectory ); + Calamares::Module* module = Calamares::moduleFromDescriptor( + Calamares::ModuleSystem::Descriptor::fromDescriptorData( descriptor ), name, configFile, moduleDirectory ); return module; } diff --git a/src/libcalamares/geoip/Handler.cpp b/src/libcalamares/geoip/Handler.cpp index 6825fa5feb..d954b8fc09 100644 --- a/src/libcalamares/geoip/Handler.cpp +++ b/src/libcalamares/geoip/Handler.cpp @@ -67,7 +67,8 @@ Handler::Handler( const QString& implementation, const QString& url, const QStri { cWarning() << "GeoIP style *none* does not do anything."; } - else if ( m_type == Type::Fixed && Calamares::Settings::instance() && !Calamares::Settings::instance()->debugMode() ) + else if ( m_type == Type::Fixed && Calamares::Settings::instance() + && !Calamares::Settings::instance()->debugMode() ) { cWarning() << "GeoIP style *fixed* is not recommended for production."; } diff --git a/src/libcalamares/geoip/Handler.h b/src/libcalamares/geoip/Handler.h index 03133978c6..e13198b949 100644 --- a/src/libcalamares/geoip/Handler.h +++ b/src/libcalamares/geoip/Handler.h @@ -34,10 +34,10 @@ class DLLEXPORT Handler public: enum class Type { - None, // No lookup, returns empty string - JSON, // JSON-formatted data, returns extracted field + None, // No lookup, returns empty string + JSON, // JSON-formatted data, returns extracted field XML, // XML-formatted data, returns extracted field - Fixed // Returns selector string verbatim + Fixed // Returns selector string verbatim }; /** @brief An unconfigured handler; this always returns errors. */ diff --git a/src/libcalamares/locale/TimeZone.cpp b/src/libcalamares/locale/TimeZone.cpp index c337056828..b9dbac5eea 100644 --- a/src/libcalamares/locale/TimeZone.cpp +++ b/src/libcalamares/locale/TimeZone.cpp @@ -358,7 +358,9 @@ ZonesModel::find( const QString& region, const QString& zone ) const } STATICTEST const TimeZoneData* -find( double startingDistance, const ZoneVector& zones, const std::function< double( const TimeZoneData* ) >& distanceFunc ) +find( double startingDistance, + const ZoneVector& zones, + const std::function< double( const TimeZoneData* ) >& distanceFunc ) { double smallestDistance = startingDistance; const TimeZoneData* closest = nullptr; @@ -379,7 +381,8 @@ const TimeZoneData* ZonesModel::find( const std::function< double( const TimeZoneData* ) >& distanceFunc ) const { const auto* officialZone = CalamaresUtils::Locale::find( 1000000.0, m_private->m_zones, distanceFunc ); - const auto* altZone = CalamaresUtils::Locale::find( distanceFunc( officialZone ), m_private->m_altZones, distanceFunc ); + const auto* altZone + = CalamaresUtils::Locale::find( distanceFunc( officialZone ), m_private->m_altZones, distanceFunc ); // If nothing was closer than the official zone already was, altZone is // nullptr; but if there is a spot-patch, then we need to re-find diff --git a/src/libcalamares/modulesystem/Module.cpp b/src/libcalamares/modulesystem/Module.cpp index ff0b20f783..94888f2409 100644 --- a/src/libcalamares/modulesystem/Module.cpp +++ b/src/libcalamares/modulesystem/Module.cpp @@ -86,8 +86,7 @@ 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(), name(), configFileName ); diff --git a/src/libcalamares/modulesystem/RequirementsModel.cpp b/src/libcalamares/modulesystem/RequirementsModel.cpp index 5fd8868643..9dfab0c8f4 100644 --- a/src/libcalamares/modulesystem/RequirementsModel.cpp +++ b/src/libcalamares/modulesystem/RequirementsModel.cpp @@ -89,9 +89,8 @@ RequirementsModel::describe() const int count = 0; for ( const auto& r : m_requirements ) { - cDebug() << Logger::SubEntry << "requirement" << count << r.name - << "satisfied?" << r.satisfied - << "mandatory?" << r.mandatory; + cDebug() << Logger::SubEntry << "requirement" << count << r.name << "satisfied?" << r.satisfied << "mandatory?" + << r.mandatory; if ( r.mandatory && !r.satisfied ) { acceptable = false; diff --git a/src/libcalamares/partition/KPMManager.cpp b/src/libcalamares/partition/KPMManager.cpp index 6c49f81020..60a1299517 100644 --- a/src/libcalamares/partition/KPMManager.cpp +++ b/src/libcalamares/partition/KPMManager.cpp @@ -62,7 +62,8 @@ InternalManager::InternalManager() else { auto* backend_p = CoreBackendManager::self()->backend(); - cDebug() << Logger::SubEntry << "Backend" << Logger::Pointer(backend_p) << backend_p->id() << backend_p->version(); + cDebug() << Logger::SubEntry << "Backend" << Logger::Pointer( backend_p ) << backend_p->id() + << backend_p->version(); s_kpm_loaded = true; } } diff --git a/src/libcalamares/utils/CalamaresUtilsSystem.cpp b/src/libcalamares/utils/CalamaresUtilsSystem.cpp index ff5590506a..8be7a16f9e 100644 --- a/src/libcalamares/utils/CalamaresUtilsSystem.cpp +++ b/src/libcalamares/utils/CalamaresUtilsSystem.cpp @@ -187,7 +187,8 @@ System::runCommand( System::RunLocation location, ? ( static_cast< int >( std::chrono::milliseconds( timeoutSec ).count() ) ) : -1 ) ) { - cWarning() << "Process" << args.first() << "timed out after" << timeoutSec.count() << "s. Output so far:\n" << Logger::NoQuote{} << process.readAllStandardOutput(); + cWarning() << "Process" << args.first() << "timed out after" << timeoutSec.count() << "s. Output so far:\n" + << Logger::NoQuote {} << process.readAllStandardOutput(); return ProcessResult::Code::TimedOut; } @@ -195,7 +196,7 @@ System::runCommand( System::RunLocation location, if ( process.exitStatus() == QProcess::CrashExit ) { - cWarning() << "Process" << args.first() << "crashed. Output so far:\n" << Logger::NoQuote{} << output; + cWarning() << "Process" << args.first() << "crashed. Output so far:\n" << Logger::NoQuote {} << output; return ProcessResult::Code::Crashed; } @@ -204,7 +205,8 @@ System::runCommand( System::RunLocation location, bool showDebug = ( !Calamares::Settings::instance() ) || ( Calamares::Settings::instance()->debugMode() ); if ( ( r != 0 ) || showDebug ) { - cDebug() << Logger::SubEntry << "Target cmd:" << RedactedList( args ) << "output:\n" << Logger::NoQuote{} << output; + cDebug() << Logger::SubEntry << "Target cmd:" << RedactedList( args ) << "output:\n" + << Logger::NoQuote {} << output; } return ProcessResult( r, output ); } diff --git a/src/libcalamares/utils/Tests.cpp b/src/libcalamares/utils/Tests.cpp index 644e03cf21..0d9892d769 100644 --- a/src/libcalamares/utils/Tests.cpp +++ b/src/libcalamares/utils/Tests.cpp @@ -412,7 +412,8 @@ LibCalamaresTests::testVariantStringListCode() m.insert( key, 17 ); QCOMPARE( getStringList( m, key ), QStringList {} ); m.insert( key, QString( "more strings" ) ); - QCOMPARE( getStringList( m, key ), QStringList { "more strings" } ); // A single string **can** be considered a stringlist! + QCOMPARE( getStringList( m, key ), + QStringList { "more strings" } ); // A single string **can** be considered a stringlist! m.insert( key, QVariant {} ); QCOMPARE( getStringList( m, key ), QStringList {} ); } diff --git a/src/libcalamares/utils/Traits.h b/src/libcalamares/utils/Traits.h index 1970aa833b..8d7eda4a9b 100644 --- a/src/libcalamares/utils/Traits.h +++ b/src/libcalamares/utils/Traits.h @@ -49,17 +49,30 @@ namespace CalamaresUtils */ namespace Traits { -template< class > struct sfinae_true : std::true_type{}; -} -} +template < class > +struct sfinae_true : std::true_type +{ +}; +} // namespace Traits +} // namespace CalamaresUtils -#define DECLARE_HAS_METHOD(m) \ - namespace CalamaresUtils { namespace Traits { \ - struct has_ ## m { \ - template< class T > static auto f(int) -> sfinae_true; \ - template< class T > static auto f(long) -> std::false_type; \ - template< class T > using t = decltype( f (0) ); \ - }; } } \ - template< class T > using has_ ## m = CalamaresUtils::Traits:: has_ ## m ::t; +#define DECLARE_HAS_METHOD( m ) \ + namespace CalamaresUtils \ + { \ + namespace Traits \ + { \ + struct has_##m \ + { \ + template < class T > \ + static auto f( int ) -> sfinae_true< decltype( &T::m ) >; \ + template < class T > \ + static auto f( long ) -> std::false_type; \ + template < class T > \ + using t = decltype( f< T >( 0 ) ); \ + }; \ + } \ + } \ + template < class T > \ + using has_##m = CalamaresUtils::Traits::has_##m ::t< T >; #endif diff --git a/src/libcalamares/utils/Variant.h b/src/libcalamares/utils/Variant.h index 60ff1ff017..e1261f8773 100644 --- a/src/libcalamares/utils/Variant.h +++ b/src/libcalamares/utils/Variant.h @@ -38,7 +38,7 @@ DLLEXPORT QStringList getStringList( const QVariantMap& map, const QString& key, /** * Get an integer value from a mapping with a given key; returns @p d if no value. */ -DLLEXPORT qint64 getInteger( const QVariantMap& map, const QString& key, qint64 d = 0); +DLLEXPORT qint64 getInteger( const QVariantMap& map, const QString& key, qint64 d = 0 ); /** * Get an unsigned integer value from a mapping with a given key; returns @p d if no value. @@ -58,7 +58,10 @@ DLLEXPORT double getDouble( const QVariantMap& map, const QString& key, double d * Returns @p d if there is no such key or it is not a map-value. * (e.g. if @p success is false). */ -DLLEXPORT QVariantMap getSubMap( const QVariantMap& map, const QString& key, bool& success, const QVariantMap& d = QVariantMap() ); +DLLEXPORT QVariantMap getSubMap( const QVariantMap& map, + const QString& key, + bool& success, + const QVariantMap& d = QVariantMap() ); } // namespace CalamaresUtils #endif diff --git a/src/libcalamaresui/ViewManager.cpp b/src/libcalamaresui/ViewManager.cpp index efa455dea9..8094e52235 100644 --- a/src/libcalamaresui/ViewManager.cpp +++ b/src/libcalamaresui/ViewManager.cpp @@ -180,7 +180,7 @@ ViewManager::onInstallationFailed( const QString& message, const QString& detail msgBox->show(); cDebug() << "Calamares will quit when the dialog closes."; - connect( msgBox, &QMessageBox::buttonClicked, [ msgBox ]( QAbstractButton* button ) { + connect( msgBox, &QMessageBox::buttonClicked, [msgBox]( QAbstractButton* button ) { if ( msgBox->buttonRole( button ) == QMessageBox::ButtonRole::YesRole ) { // TODO: host and port should be configurable diff --git a/src/libcalamaresui/modulesystem/ModuleFactory.cpp b/src/libcalamaresui/modulesystem/ModuleFactory.cpp index 7d4dd1960d..a7193d3f50 100644 --- a/src/libcalamaresui/modulesystem/ModuleFactory.cpp +++ b/src/libcalamaresui/modulesystem/ModuleFactory.cpp @@ -48,7 +48,8 @@ moduleFromDescriptor( const Calamares::ModuleSystem::Descriptor& moduleDescripto std::unique_ptr< Module > m; - if ( !moduleDescriptor.isValid() ) { + if ( !moduleDescriptor.isValid() ) + { cError() << "Bad module descriptor format" << instanceId; return nullptr; } @@ -68,7 +69,9 @@ moduleFromDescriptor( const Calamares::ModuleSystem::Descriptor& moduleDescripto } else { - cError() << "Bad interface" << Calamares::ModuleSystem::interfaceNames().find( moduleDescriptor.interface() ) << "for module type" << Calamares::ModuleSystem::typeNames().find( moduleDescriptor.type() ); + cError() << "Bad interface" + << Calamares::ModuleSystem::interfaceNames().find( moduleDescriptor.interface() ) + << "for module type" << Calamares::ModuleSystem::typeNames().find( moduleDescriptor.type() ); } } else if ( moduleDescriptor.type() == Type::Job ) @@ -91,7 +94,9 @@ moduleFromDescriptor( const Calamares::ModuleSystem::Descriptor& moduleDescripto } else { - cError() << "Bad interface" << Calamares::ModuleSystem::interfaceNames().find( moduleDescriptor.interface() ) << "for module type" << Calamares::ModuleSystem::typeNames().find( moduleDescriptor.type() ); + cError() << "Bad interface" + << Calamares::ModuleSystem::interfaceNames().find( moduleDescriptor.interface() ) + << "for module type" << Calamares::ModuleSystem::typeNames().find( moduleDescriptor.type() ); } } else @@ -101,7 +106,9 @@ moduleFromDescriptor( const Calamares::ModuleSystem::Descriptor& moduleDescripto if ( !m ) { - cError() << "Bad module type (" << Calamares::ModuleSystem::typeNames().find( moduleDescriptor.type() ) << ") or interface string (" << Calamares::ModuleSystem::interfaceNames().find( moduleDescriptor.interface() ) << ") for module " + cError() << "Bad module type (" << Calamares::ModuleSystem::typeNames().find( moduleDescriptor.type() ) + << ") or interface string (" + << Calamares::ModuleSystem::interfaceNames().find( moduleDescriptor.interface() ) << ") for module " << instanceId; return nullptr; } diff --git a/src/libcalamaresui/modulesystem/ModuleManager.cpp b/src/libcalamaresui/modulesystem/ModuleManager.cpp index 9e84cf6465..8c0f21f58b 100644 --- a/src/libcalamaresui/modulesystem/ModuleManager.cpp +++ b/src/libcalamaresui/modulesystem/ModuleManager.cpp @@ -104,8 +104,9 @@ ModuleManager::doInit() if ( ok && !moduleName.isEmpty() && ( moduleName == currentDir.dirName() ) && !m_availableDescriptorsByModuleName.contains( moduleName ) ) { - auto descriptor = Calamares::ModuleSystem::Descriptor::fromDescriptorData( moduleDescriptorMap ); - descriptor.setDirectory(descriptorFileInfo.absoluteDir().absolutePath() ); + auto descriptor + = Calamares::ModuleSystem::Descriptor::fromDescriptorData( moduleDescriptorMap ); + descriptor.setDirectory( descriptorFileInfo.absoluteDir().absolutePath() ); m_availableDescriptorsByModuleName.insert( moduleName, descriptor ); } } @@ -243,11 +244,8 @@ ModuleManager::loadModules() } else { - thisModule - = Calamares::moduleFromDescriptor( descriptor, - instanceKey.id(), - configFileName, - descriptor.directory() ); + thisModule = Calamares::moduleFromDescriptor( + descriptor, instanceKey.id(), configFileName, descriptor.directory() ); if ( !thisModule ) { cError() << "Module" << instanceKey.toString() << "cannot be created from descriptor" @@ -375,8 +373,7 @@ ModuleManager::checkDependencies() for ( auto it = m_availableDescriptorsByModuleName.begin(); it != m_availableDescriptorsByModuleName.end(); ++it ) { - QStringList unmet = missingRequiredModules( it->requiredModules(), - m_availableDescriptorsByModuleName ); + QStringList unmet = missingRequiredModules( it->requiredModules(), m_availableDescriptorsByModuleName ); if ( unmet.count() > 0 ) { @@ -403,8 +400,7 @@ ModuleManager::checkModuleDependencies( const Module& m ) } bool allRequirementsFound = true; - QStringList requiredModules - = m_availableDescriptorsByModuleName[ m.name() ].requiredModules(); + QStringList requiredModules = m_availableDescriptorsByModuleName[ m.name() ].requiredModules(); for ( const QString& required : requiredModules ) { diff --git a/src/libcalamaresui/modulesystem/ProcessJobModule.cpp b/src/libcalamaresui/modulesystem/ProcessJobModule.cpp index 0414048ca7..2671d08992 100644 --- a/src/libcalamaresui/modulesystem/ProcessJobModule.cpp +++ b/src/libcalamaresui/modulesystem/ProcessJobModule.cpp @@ -71,7 +71,7 @@ ProcessJobModule::ProcessJobModule() } -ProcessJobModule::~ProcessJobModule() { } +ProcessJobModule::~ProcessJobModule() {} } // namespace Calamares diff --git a/src/libcalamaresui/modulesystem/PythonJobModule.cpp b/src/libcalamaresui/modulesystem/PythonJobModule.cpp index 67223b6552..20f8215d2d 100644 --- a/src/libcalamaresui/modulesystem/PythonJobModule.cpp +++ b/src/libcalamaresui/modulesystem/PythonJobModule.cpp @@ -67,7 +67,7 @@ PythonJobModule::PythonJobModule() } -PythonJobModule::~PythonJobModule() { } +PythonJobModule::~PythonJobModule() {} } // namespace Calamares diff --git a/src/libcalamaresui/modulesystem/PythonQtViewModule.cpp b/src/libcalamaresui/modulesystem/PythonQtViewModule.cpp index 638fdfc79f..ae2b2915fe 100644 --- a/src/libcalamaresui/modulesystem/PythonQtViewModule.cpp +++ b/src/libcalamaresui/modulesystem/PythonQtViewModule.cpp @@ -179,6 +179,6 @@ PythonQtViewModule::PythonQtViewModule() { } -PythonQtViewModule::~PythonQtViewModule() { } +PythonQtViewModule::~PythonQtViewModule() {} } // namespace Calamares diff --git a/src/libcalamaresui/utils/ImageRegistry.cpp b/src/libcalamaresui/utils/ImageRegistry.cpp index 3fdeccceff..ffc65300e0 100644 --- a/src/libcalamaresui/utils/ImageRegistry.cpp +++ b/src/libcalamaresui/utils/ImageRegistry.cpp @@ -23,7 +23,7 @@ ImageRegistry::instance() } -ImageRegistry::ImageRegistry() { } +ImageRegistry::ImageRegistry() {} QIcon diff --git a/src/libcalamaresui/viewpages/BlankViewStep.cpp b/src/libcalamaresui/viewpages/BlankViewStep.cpp index 1fbeaeef01..ea51e3f029 100644 --- a/src/libcalamaresui/viewpages/BlankViewStep.cpp +++ b/src/libcalamaresui/viewpages/BlankViewStep.cpp @@ -53,7 +53,7 @@ BlankViewStep::BlankViewStep( const QString& title, m_widget->setLayout( layout ); } -BlankViewStep::~BlankViewStep() { } +BlankViewStep::~BlankViewStep() {} QString BlankViewStep::prettyName() const diff --git a/src/libcalamaresui/viewpages/PythonQtGlobalStorageWrapper.h b/src/libcalamaresui/viewpages/PythonQtGlobalStorageWrapper.h index 2a8f6af996..5d1282d0f0 100644 --- a/src/libcalamaresui/viewpages/PythonQtGlobalStorageWrapper.h +++ b/src/libcalamaresui/viewpages/PythonQtGlobalStorageWrapper.h @@ -31,7 +31,7 @@ class GlobalStorage : public QObject Q_OBJECT public: explicit GlobalStorage( Calamares::GlobalStorage* gs ); - virtual ~GlobalStorage() { } + virtual ~GlobalStorage() {} public slots: bool contains( const QString& key ) const; diff --git a/src/libcalamaresui/viewpages/PythonQtJob.h b/src/libcalamaresui/viewpages/PythonQtJob.h index 5d591c74e0..4d48921e1a 100644 --- a/src/libcalamaresui/viewpages/PythonQtJob.h +++ b/src/libcalamaresui/viewpages/PythonQtJob.h @@ -35,7 +35,7 @@ class PythonQtJob : public Calamares::Job { Q_OBJECT public: - virtual ~PythonQtJob() { } + virtual ~PythonQtJob() {} QString prettyName() const override; QString prettyDescription() const override; diff --git a/src/libcalamaresui/viewpages/PythonQtUtilsWrapper.h b/src/libcalamaresui/viewpages/PythonQtUtilsWrapper.h index e7c8c06604..e392491851 100644 --- a/src/libcalamaresui/viewpages/PythonQtUtilsWrapper.h +++ b/src/libcalamaresui/viewpages/PythonQtUtilsWrapper.h @@ -24,7 +24,7 @@ class Utils : public QObject Q_OBJECT public: explicit Utils( QObject* parent = nullptr ); - virtual ~Utils() { } + virtual ~Utils() {} public slots: void debug( const QString& s ) const; diff --git a/src/libcalamaresui/viewpages/QmlViewStep.cpp b/src/libcalamaresui/viewpages/QmlViewStep.cpp index 4ea20ba321..17a1ea79c9 100644 --- a/src/libcalamaresui/viewpages/QmlViewStep.cpp +++ b/src/libcalamaresui/viewpages/QmlViewStep.cpp @@ -79,7 +79,7 @@ QmlViewStep::QmlViewStep( QObject* parent ) // QML Loading starts when the configuration for the module is set. } -QmlViewStep::~QmlViewStep() { } +QmlViewStep::~QmlViewStep() {} QString QmlViewStep::prettyName() const diff --git a/src/libcalamaresui/viewpages/ViewStep.cpp b/src/libcalamaresui/viewpages/ViewStep.cpp index e76dc915bf..26c7ee7789 100644 --- a/src/libcalamaresui/viewpages/ViewStep.cpp +++ b/src/libcalamaresui/viewpages/ViewStep.cpp @@ -22,7 +22,7 @@ ViewStep::ViewStep( QObject* parent ) } -ViewStep::~ViewStep() { } +ViewStep::~ViewStep() {} QString diff --git a/src/libcalamaresui/widgets/ClickableLabel.cpp b/src/libcalamaresui/widgets/ClickableLabel.cpp index 4d28858136..be7b142f1b 100644 --- a/src/libcalamaresui/widgets/ClickableLabel.cpp +++ b/src/libcalamaresui/widgets/ClickableLabel.cpp @@ -27,7 +27,7 @@ ClickableLabel::ClickableLabel( const QString& text, QWidget* parent ) } -ClickableLabel::~ClickableLabel() { } +ClickableLabel::~ClickableLabel() {} void diff --git a/src/libcalamaresui/widgets/FixedAspectRatioLabel.cpp b/src/libcalamaresui/widgets/FixedAspectRatioLabel.cpp index 1d496c27f0..195aad67e1 100644 --- a/src/libcalamaresui/widgets/FixedAspectRatioLabel.cpp +++ b/src/libcalamaresui/widgets/FixedAspectRatioLabel.cpp @@ -17,7 +17,7 @@ FixedAspectRatioLabel::FixedAspectRatioLabel( QWidget* parent ) } -FixedAspectRatioLabel::~FixedAspectRatioLabel() { } +FixedAspectRatioLabel::~FixedAspectRatioLabel() {} void diff --git a/src/libcalamaresui/widgets/PrettyRadioButton.h b/src/libcalamaresui/widgets/PrettyRadioButton.h index 67ef49ae60..6b158f3538 100644 --- a/src/libcalamaresui/widgets/PrettyRadioButton.h +++ b/src/libcalamaresui/widgets/PrettyRadioButton.h @@ -38,7 +38,7 @@ class UIDLLEXPORT PrettyRadioButton : public QWidget Q_OBJECT public: explicit PrettyRadioButton( QWidget* parent = nullptr ); - virtual ~PrettyRadioButton() { } + virtual ~PrettyRadioButton() {} /// @brief Passes @p text on to the ClickableLabel void setText( const QString& text ); diff --git a/src/modules/preservefiles/PreserveFiles.cpp b/src/modules/preservefiles/PreserveFiles.cpp index 7fe9a97ae0..8194b3221f 100644 --- a/src/modules/preservefiles/PreserveFiles.cpp +++ b/src/modules/preservefiles/PreserveFiles.cpp @@ -202,7 +202,8 @@ PreserveFiles::setConfigurationMap( const QVariantMap& configurationMap ) { QString filename = li.toString(); if ( !filename.isEmpty() ) - m_items.append( Item { filename, filename, CalamaresUtils::Permissions( defaultPermissions ), ItemType::Path } ); + m_items.append( + Item { filename, filename, CalamaresUtils::Permissions( defaultPermissions ), ItemType::Path } ); else { cDebug() << "Empty filename for preservefiles, item" << c; diff --git a/src/modules/tracking/Tests.cpp b/src/modules/tracking/Tests.cpp index 661d832730..c3fe90ad16 100644 --- a/src/modules/tracking/Tests.cpp +++ b/src/modules/tracking/Tests.cpp @@ -8,8 +8,8 @@ #include "utils/Logger.h" -#include #include +#include class TrackingTests : public QObject { @@ -28,17 +28,17 @@ TrackingTests::TrackingTests() { } -TrackingTests::~TrackingTests() -{ -} +TrackingTests::~TrackingTests() {} -void TrackingTests::initTestCase() +void +TrackingTests::initTestCase() { Logger::setupLogLevel( Logger::LOGDEBUG ); cDebug() << "Tracking test started."; } -void TrackingTests::testEmptyConfig() +void +TrackingTests::testEmptyConfig() { Logger::setupLogLevel( Logger::LOGDEBUG ); diff --git a/src/modules/users/SetHostNameJob.cpp b/src/modules/users/SetHostNameJob.cpp index be86ad6ab8..9f81ddfb59 100644 --- a/src/modules/users/SetHostNameJob.cpp +++ b/src/modules/users/SetHostNameJob.cpp @@ -16,11 +16,11 @@ #include "utils/CalamaresUtilsSystem.h" #include "utils/Logger.h" -#include -#include #include #include #include +#include +#include using WriteMode = CalamaresUtils::System::WriteMode; diff --git a/src/modules/users/Tests.cpp b/src/modules/users/Tests.cpp index c92391d21a..78fa74780e 100644 --- a/src/modules/users/Tests.cpp +++ b/src/modules/users/Tests.cpp @@ -106,15 +106,16 @@ UserTests::testDefaultGroups() } } -void UserTests::testDefaultGroupsYAML_data() +void +UserTests::testDefaultGroupsYAML_data() { QTest::addColumn< QString >( "filename" ); - QTest::addColumn< int >("count"); - QTest::addColumn("group"); + QTest::addColumn< int >( "count" ); + QTest::addColumn< QString >( "group" ); - QTest::newRow("users.conf") << "users.conf" << 7 << "video"; - QTest::newRow("dashed list") << "tests/4-audio.conf" << 4 << "audio"; - QTest::newRow("blocked list") << "tests/3-wing.conf" << 3 << "wing"; + QTest::newRow( "users.conf" ) << "users.conf" << 7 << "video"; + QTest::newRow( "dashed list" ) << "tests/4-audio.conf" << 4 << "audio"; + QTest::newRow( "blocked list" ) << "tests/3-wing.conf" << 3 << "wing"; } void @@ -125,23 +126,23 @@ UserTests::testDefaultGroupsYAML() (void)new Calamares::JobQueue(); } - QFETCH(QString, filename); - QFETCH(int, count); - QFETCH(QString, group); + QFETCH( QString, filename ); + QFETCH( int, count ); + QFETCH( QString, group ); - QFile fi( QString("%1/%2").arg(BUILD_AS_TEST, filename) ); - QVERIFY(fi.exists()); + QFile fi( QString( "%1/%2" ).arg( BUILD_AS_TEST, filename ) ); + QVERIFY( fi.exists() ); bool ok = false; - const auto map = CalamaresUtils::loadYaml(fi, &ok); - QVERIFY(ok); - QVERIFY(map.count() > 0); + const auto map = CalamaresUtils::loadYaml( fi, &ok ); + QVERIFY( ok ); + QVERIFY( map.count() > 0 ); - Config c; - c.setConfigurationMap(map); + Config c; + c.setConfigurationMap( map ); - QCOMPARE( c.defaultGroups().count(), count); - QVERIFY( c.defaultGroups().contains( group ) ); + QCOMPARE( c.defaultGroups().count(), count ); + QVERIFY( c.defaultGroups().contains( group ) ); } diff --git a/src/modules/users/UsersPage.cpp b/src/modules/users/UsersPage.cpp index 2418b319e3..8059b02e15 100644 --- a/src/modules/users/UsersPage.cpp +++ b/src/modules/users/UsersPage.cpp @@ -45,7 +45,8 @@ static inline void labelOk( QLabel* pix, QLabel* label ) { label->clear(); - pix->setPixmap( CalamaresUtils::defaultPixmap( CalamaresUtils::StatusOk, CalamaresUtils::Original, label->size() ) ); + pix->setPixmap( + CalamaresUtils::defaultPixmap( CalamaresUtils::StatusOk, CalamaresUtils::Original, label->size() ) ); } /** @brief Sets error or ok on a label depending on @p status and @p value diff --git a/src/modules/usersq/UsersQmlViewStep.cpp b/src/modules/usersq/UsersQmlViewStep.cpp index 15c542e38f..b83c66f45d 100644 --- a/src/modules/usersq/UsersQmlViewStep.cpp +++ b/src/modules/usersq/UsersQmlViewStep.cpp @@ -25,8 +25,8 @@ CALAMARES_PLUGIN_FACTORY_DEFINITION( UsersQmlViewStepFactory, registerPlugin< UsersQmlViewStep >(); ) UsersQmlViewStep::UsersQmlViewStep( QObject* parent ) -: Calamares::QmlViewStep( parent ) -, m_config( new Config(this) ) + : Calamares::QmlViewStep( parent ) + , m_config( new Config( this ) ) { connect( m_config, &Config::readyChanged, this, &UsersQmlViewStep::nextStatusChanged ); @@ -96,6 +96,6 @@ UsersQmlViewStep::setConfigurationMap( const QVariantMap& configurationMap ) { m_config->setConfigurationMap( configurationMap ); - Calamares::QmlViewStep::setConfigurationMap( configurationMap ); // call parent implementation last + Calamares::QmlViewStep::setConfigurationMap( configurationMap ); // call parent implementation last setContextProperty( "Users", m_config ); } diff --git a/src/modules/usersq/UsersQmlViewStep.h b/src/modules/usersq/UsersQmlViewStep.h index b3d474e651..33a1f5754b 100644 --- a/src/modules/usersq/UsersQmlViewStep.h +++ b/src/modules/usersq/UsersQmlViewStep.h @@ -19,8 +19,8 @@ #include -#include #include "Config.h" +#include class PLUGINDLLEXPORT UsersQmlViewStep : public Calamares::QmlViewStep { @@ -44,13 +44,10 @@ class PLUGINDLLEXPORT UsersQmlViewStep : public Calamares::QmlViewStep void setConfigurationMap( const QVariantMap& configurationMap ) override; - QObject * getConfig() override - { - return m_config; - } + QObject* getConfig() override { return m_config; } private: - Config *m_config; + Config* m_config; Calamares::JobList m_jobs; }; diff --git a/src/modules/webview/WebViewStep.cpp b/src/modules/webview/WebViewStep.cpp index db84397754..3e3e99c215 100644 --- a/src/modules/webview/WebViewStep.cpp +++ b/src/modules/webview/WebViewStep.cpp @@ -8,8 +8,8 @@ * */ -#include "WebViewConfig.h" #include "WebViewStep.h" +#include "WebViewConfig.h" #include diff --git a/src/modules/welcome/WelcomePage.cpp b/src/modules/welcome/WelcomePage.cpp index ddceec4a32..aa9e9d7bba 100644 --- a/src/modules/welcome/WelcomePage.cpp +++ b/src/modules/welcome/WelcomePage.cpp @@ -39,7 +39,7 @@ WelcomePage::WelcomePage( Config* conf, QWidget* parent ) : QWidget( parent ) , ui( new Ui::WelcomePage ) - , m_checkingWidget( new CheckerContainer( *(conf->requirementsModel()), this ) ) + , m_checkingWidget( new CheckerContainer( *( conf->requirementsModel() ), this ) ) , m_languages( nullptr ) , m_conf( conf ) { diff --git a/src/modules/welcome/checker/GeneralRequirements.cpp b/src/modules/welcome/checker/GeneralRequirements.cpp index 66a9f5ed70..a10585af93 100644 --- a/src/modules/welcome/checker/GeneralRequirements.cpp +++ b/src/modules/welcome/checker/GeneralRequirements.cpp @@ -146,10 +146,8 @@ GeneralRequirements::checkRequirements() { checkEntries.append( { entry, - [ req = m_requiredStorageGiB ] { - return tr( "has at least %1 GiB available drive space" ).arg( req ); - }, - [ req = m_requiredStorageGiB ] { + [req = m_requiredStorageGiB] { return tr( "has at least %1 GiB available drive space" ).arg( req ); }, + [req = m_requiredStorageGiB] { return tr( "There is not enough drive space. At least %1 GiB is required." ).arg( req ); }, enoughStorage, @@ -159,8 +157,8 @@ GeneralRequirements::checkRequirements() { checkEntries.append( { entry, - [ req = m_requiredRamGiB ] { return tr( "has at least %1 GiB working memory" ).arg( req ); }, - [ req = m_requiredRamGiB ] { + [req = m_requiredRamGiB] { return tr( "has at least %1 GiB working memory" ).arg( req ); }, + [req = m_requiredRamGiB] { return tr( "The system does not have enough working memory. At least %1 GiB is required." ) .arg( req ); }, @@ -349,7 +347,7 @@ GeneralRequirements::checkEnoughRam( qint64 requiredRam ) // Ignore the guesstimate-factor; we get an under-estimate // which is probably the usable RAM for programs. quint64 availableRam = CalamaresUtils::System::instance()->getTotalMemoryB().first; - return double(availableRam) >= double(requiredRam) * 0.95; // cast to silence 64-bit-int conversion to double + return double( availableRam ) >= double( requiredRam ) * 0.95; // cast to silence 64-bit-int conversion to double } diff --git a/src/modules/welcome/checker/partman_devices.h b/src/modules/welcome/checker/partman_devices.h index 14d1edc75d..c894f6534c 100644 --- a/src/modules/welcome/checker/partman_devices.h +++ b/src/modules/welcome/checker/partman_devices.h @@ -11,13 +11,14 @@ #define PARTMAN_DEVICES_H #ifdef __cplusplus -extern "C" { +extern "C" +{ #endif -int check_big_enough(long long required_space); + int check_big_enough( long long required_space ); #ifdef __cplusplus } // extern "C" #endif -#endif // PARTMAN_DEVICES_H +#endif // PARTMAN_DEVICES_H diff --git a/src/modules/welcomeq/WelcomeQmlViewStep.cpp b/src/modules/welcomeq/WelcomeQmlViewStep.cpp index bf30d99157..af32f2992b 100644 --- a/src/modules/welcomeq/WelcomeQmlViewStep.cpp +++ b/src/modules/welcomeq/WelcomeQmlViewStep.cpp @@ -29,9 +29,9 @@ WelcomeQmlViewStep::WelcomeQmlViewStep( QObject* parent ) , m_requirementsChecker( new GeneralRequirements( this ) ) { connect( Calamares::ModuleManager::instance(), - &Calamares::ModuleManager::requirementsComplete, - this, - &WelcomeQmlViewStep::nextStatusChanged ); + &Calamares::ModuleManager::requirementsComplete, + this, + &WelcomeQmlViewStep::nextStatusChanged ); } From 7c08f9a03316ea10f44b8fb08f3ab431da2997c5 Mon Sep 17 00:00:00 2001 From: demmm Date: Wed, 26 Aug 2020 13:32:56 +0200 Subject: [PATCH 123/157] [keyboardq] rewrite keyboard.qml no longer use extra qml files better highlighting, updated text, fewer buttons --- src/modules/keyboardq/ListItemDelegate.qml | 63 --- src/modules/keyboardq/ListViewTemplate.qml | 22 -- src/modules/keyboardq/ResponsiveBase.qml | 83 ---- src/modules/keyboardq/keyboardq.qml | 422 +++++++++++++++------ src/modules/keyboardq/keyboardq.qrc | 3 - 5 files changed, 315 insertions(+), 278 deletions(-) delete mode 100644 src/modules/keyboardq/ListItemDelegate.qml delete mode 100644 src/modules/keyboardq/ListViewTemplate.qml delete mode 100644 src/modules/keyboardq/ResponsiveBase.qml diff --git a/src/modules/keyboardq/ListItemDelegate.qml b/src/modules/keyboardq/ListItemDelegate.qml deleted file mode 100644 index 2ad10144c8..0000000000 --- a/src/modules/keyboardq/ListItemDelegate.qml +++ /dev/null @@ -1,63 +0,0 @@ -import io.calamares.ui 1.0 - -import QtQuick 2.10 -import QtQuick.Controls 2.10 -import QtQuick.Layouts 1.3 -import org.kde.kirigami 2.7 as Kirigami - -ItemDelegate { - - id: control - - - property alias label1 : _label1 - property alias label2 : _label2 - - hoverEnabled: true - - property bool isCurrentItem: ListView.isCurrentItem - background: Rectangle { - - color: isCurrentItem || hovered ? Kirigami.Theme.highlightColor : Kirigami.Theme.backgroundColor - opacity: isCurrentItem || hovered ? 0.8 : 0.5 - } - - width: 490 //parent.width - height: 36 - - contentItem: RowLayout { - - anchors.fill: parent - anchors.margins: Kirigami.Units.smallSpacing - - Label { - - id: _label1 - Layout.fillHeight: true - Layout.fillWidth: true - horizontalAlignment: Qt.AlignLeft - color: isCurrentItem ? Kirigami.Theme.highlightedTextColor : Kirigami.Theme.textColor - } - - Label { - - id: _label2 - visible: text.length - Layout.fillHeight: true - Layout.maximumWidth: parent.width * 0.4 - horizontalAlignment: Qt.AlignRight - color: isCurrentItem ? Kirigami.Theme.highlightedTextColor : Kirigami.Theme.textColor - opacity: isCurrentItem ? 1 : 0.7 - font.weight: Font.Light - } - - Kirigami.Icon { - - source: "checkmark" - Layout.preferredWidth: 22 - Layout.preferredHeight: 22 - color: Kirigami.Theme.highlightedTextColor - visible: isCurrentItem - } - } -} diff --git a/src/modules/keyboardq/ListViewTemplate.qml b/src/modules/keyboardq/ListViewTemplate.qml deleted file mode 100644 index 4564b887b4..0000000000 --- a/src/modules/keyboardq/ListViewTemplate.qml +++ /dev/null @@ -1,22 +0,0 @@ -import QtQuick 2.10 -import QtQuick.Controls 2.10 -import QtQuick.Layouts 1.3 -import org.kde.kirigami 2.7 as Kirigami - -ListView { - - id: control - - spacing: Kirigami.Units.smallSpacing - clip: true - boundsBehavior: Flickable.StopAtBounds - - Rectangle { - - z: parent.z - 1 - anchors.fill: parent - color: "#BDC3C7" - radius: 5 - opacity: 0.7 - } -} diff --git a/src/modules/keyboardq/ResponsiveBase.qml b/src/modules/keyboardq/ResponsiveBase.qml deleted file mode 100644 index 38fa15d1b4..0000000000 --- a/src/modules/keyboardq/ResponsiveBase.qml +++ /dev/null @@ -1,83 +0,0 @@ -import QtQuick 2.10 -import QtQuick.Controls 2.10 -import QtQuick.Layouts 1.3 -import org.kde.kirigami 2.7 as Kirigami -import QtGraphicalEffects 1.0 - -import io.calamares.ui 1.0 -import io.calamares.core 1.0 - -Page { - - id: control - width: 800 //parent.width - height: 550 //parent.height - - Kirigami.Theme.backgroundColor: "#FAFAFA" - Kirigami.Theme.textColor: "#1F1F1F" - - property string subtitle - property string message - - default property alias content : _content.data - property alias stackView: _stackView - - ColumnLayout { - - id: _content - - anchors.fill: parent - spacing: Kirigami.Units.smallSpacing * 5 - anchors.margins: Kirigami.Units.smallSpacing * 5 - anchors.bottomMargin: 20 - - Label { - - Layout.fillWidth: true - Layout.preferredHeight: Math.min(implicitHeight, 200) - horizontalAlignment: Qt.AlignHCenter - wrapMode: Text.NoWrap - elide: Text.ElideMiddle - text: control.title - color: Kirigami.Theme.textColor - font.bold: true - font.weight: Font.Bold - font.pointSize: 24 - } - - Label { - - Layout.fillWidth: true - Layout.preferredHeight: Math.min(implicitHeight, 200) - horizontalAlignment: Qt.AlignHCenter - wrapMode: Text.Wrap - elide: Text.ElideMiddle - text: control.subtitle - color: Kirigami.Theme.textColor - font.weight: Font.Light - font.pointSize: 12 - } - - Label { - - Layout.fillWidth: true - Layout.preferredHeight: Math.min(implicitHeight, 200) - horizontalAlignment: Qt.AlignHCenter - wrapMode: Text.Wrap - elide: Text.ElideMiddle - text: control.message - color: Kirigami.Theme.textColor - font.weight: Font.Light - font.pointSize: 10 - } - - StackView { - - id: _stackView - Layout.fillHeight: true - Layout.preferredWidth: parent.width - clip: true - } - - } -} diff --git a/src/modules/keyboardq/keyboardq.qml b/src/modules/keyboardq/keyboardq.qml index 613223a1c2..8f8bf05d1f 100644 --- a/src/modules/keyboardq/keyboardq.qml +++ b/src/modules/keyboardq/keyboardq.qml @@ -1,195 +1,403 @@ +/* === This file is part of Calamares - === + * + * SPDX-FileCopyrightText: 2020 Anke Boersma + * SPDX-License-Identifier: GPL-3.0-or-later + * + * Calamares is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Calamares is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Calamares. If not, see . + */ + +import io.calamares.core 1.0 import io.calamares.ui 1.0 import QtQuick 2.10 import QtQuick.Controls 2.10 +import QtQuick.Window 2.14 import QtQuick.Layouts 1.3 + import org.kde.kirigami 2.7 as Kirigami -ResponsiveBase { +Page { + width: 800 //parent.width + height: 500 - id: control + StackView { + id: stack + anchors.fill: parent + clip: true - title: stackView.currentItem.title - subtitle: stackView.currentItem.subtitle + initialItem: Item { + Label { - stackView.initialItem: Item { + id: header + anchors.horizontalCenter: parent.horizontalCenter + text: qsTr("Keyboard Model") + color: Kirigami.Theme.textColor + font.bold: true + font.weight: Font.Bold + font.pointSize: 24 + } - id: _keyboardModelsComponet + Label { - property string title: qsTr("Keyboard Model") - property string subtitle: qsTr("Pick your preferred keyboard model or use the default one based on the detected hardware") + anchors.horizontalCenter: parent.horizontalCenter + anchors.top: header.bottom + color: Kirigami.Theme.textColor + horizontalAlignment: Text.AlignHCenter + width: parent.width / 1.5 + wrapMode: Text.WordWrap + text: qsTr("Click your preferred keyboard model to select layout and variant, or use the default one based on the detected hardware.") + } - ListViewTemplate { + ListView { - id: _keyboardModelListView + id: list1 - anchors.centerIn: parent - implicitWidth: Math.min(parent.width, 500) - implicitHeight: Math.min(contentHeight, 300) - currentIndex: model.currentIndex + ScrollBar.vertical: ScrollBar { - model: config.keyboardModelsModel + active: true + } - delegate: ListItemDelegate { + width: parent.width / 2 + height: 250 + anchors.centerIn: parent + anchors.verticalCenterOffset: -30 + focus: true + clip: true + boundsBehavior: Flickable.StopAtBounds + spacing: 2 - id: _delegate - label1.text: model.label - onClicked: { + Rectangle { - _keyboardModelListView.model.currentIndex = index - control.stackView.push(_keyboardLayoutsComponent) + z: parent.z - 1 + anchors.fill: parent + color: "#BDC3C7" + radius: 5 + opacity: 0.7 } - } - } - ColumnLayout{ + model: config.keyboardModelsModel + //model: ["Africa", "America", "Antarctica", "Arctic", "Asia", "Atlantic", "Australia", "Europe", "Indian", "Pacific"] - spacing: 2 - anchors.verticalCenter: parent.verticalCenter + currentIndex: model.currentIndex + delegate: ItemDelegate { - Button { + hoverEnabled: true + width: parent.width + highlighted: ListView.isCurrentItem - icon.name: "view-refresh" - width: parent.width - onClicked: control.stackView.pop() - text: qsTr("Refresh") - } + RowLayout { + anchors.fill: parent - Button { + Label { - Layout.fillWidth: true - text: qsTr("Layouts") - icon.name: "go-next" - onClicked: control.stackView.push(_keyboardLayoutsComponent) + text: model.label // modelData + Layout.fillHeight: true + Layout.fillWidth: true + width: parent.width + height: 32 + color: highlighted ? Kirigami.Theme.highlightedTextColor : Kirigami.Theme.textColor + + background: Rectangle { + + color: highlighted || hovered ? Kirigami.Theme.highlightColor : "white" //Kirigami.Theme.backgroundColor + opacity: highlighted || hovered ? 0.5 : 0.3 + } + } + + Kirigami.Icon { + + source: "checkmark" + Layout.preferredWidth: 22 + Layout.preferredHeight: 22 + color: Kirigami.Theme.highlightedTextColor + visible: highlighted + } + } + + onClicked: { + + list1.model.currentIndex = index + stack.push(layoutsList) + list1.positionViewAtIndex(index, ListView.Center) + } + } } } - } - Component { + Component { + id: layoutsList - id: _keyboardLayoutsComponent + Item { - Item { - - property string title: qsTr("Keyboard Layout") - property string subtitle: config.prettyStatus + Label { - ListViewTemplate { + id: header + anchors.horizontalCenter: parent.horizontalCenter + text: qsTr("Keyboard Layout") + color: Kirigami.Theme.textColor + font.bold: true + font.weight: Font.Bold + font.pointSize: 24 + } - id: _layoutsListView + Label { - anchors.centerIn: parent + anchors.horizontalCenter: parent.horizontalCenter + anchors.top: header.bottom + color: Kirigami.Theme.textColor + horizontalAlignment: Text.AlignHCenter + width: parent.width / 1.5 + wrapMode: Text.WordWrap + text: config.prettyStatus + //text: qsTr("Set keyboard model or use the default one based on the detected hardware.") + } - implicitWidth: Math.min(parent.width, 500) - implicitHeight: Math.min(contentHeight, 300) + ListView { - currentIndex: model.currentIndex + id: list2 - model: config.keyboardLayoutsModel + ScrollBar.vertical: ScrollBar { - delegate: ListItemDelegate { + active: true + } - id: _delegate - label1.text: model.label - onClicked: { + width: parent.width / 2 + height: 250 + anchors.centerIn: parent + anchors.verticalCenterOffset: -30 + focus: true + clip: true + boundsBehavior: Flickable.StopAtBounds + spacing: 2 + + Rectangle { + + z: parent.z - 1 + anchors.fill: parent + color: "#BDC3C7" + radius: 5 + opacity: 0.7 + } + + model: config.keyboardLayoutsModel + //model: ["Brussels", "London", "Madrid", "New York", "Melbourne", "London", "Madrid", "New York", "Brussels", "London", "Madrid", "New York", "Brussels", "London", "Madrid", "New York"] + + currentIndex: model.currentIndex + delegate: ItemDelegate { + + hoverEnabled: true + width: parent.width + highlighted: ListView.isCurrentItem + + RowLayout { + anchors.fill: parent + + Label { + + text: model.label // modelData + Layout.fillHeight: true + Layout.fillWidth: true + width: parent.width + height: 30 + color: highlighted ? Kirigami.Theme.highlightedTextColor : Kirigami.Theme.textColor + + background: Rectangle { + + color: highlighted || hovered ? Kirigami.Theme.highlightColor : "white" //Kirigami.Theme.backgroundColor + opacity: highlighted || hovered ? 0.5 : 0.3 + } + } + + Kirigami.Icon { - _layoutsListView.model.currentIndex = index - _layoutsListView.positionViewAtIndex(index, ListView.Center) - control.stackView.push(_keyboardVariantsComponent) + source: "checkmark" + Layout.preferredWidth: 22 + Layout.preferredHeight: 22 + color: Kirigami.Theme.highlightedTextColor + visible: highlighted + } + } + + onClicked: { + + list2.model.currentIndex = index + stack.push(variantsList) + list2.positionViewAtIndex(index, ListView.Center) + } } } - } - ColumnLayout{ + ColumnLayout { - spacing: 2 - anchors.verticalCenter: parent.verticalCenter + spacing: 2 + anchors.verticalCenter: parent.verticalCenter + anchors.verticalCenterOffset: -30 + anchors.left: parent.left + anchors.leftMargin: parent.width / 15 - Button { + Button { - Layout.fillWidth: true - icon.name: "go-previous" - text: qsTr("Models") - onClicked: control.stackView.pop() - } + icon.name: "go-previous" + text: qsTr("Models") + onClicked: stack.pop() + } - Button { + Button { - Layout.fillWidth: true - icon.name: "go-next" - text: qsTr("Variants") - onClicked: control.stackView.push(_keyboardVariantsComponent) + icon.name: "go-next" + text: qsTr("Variants") + onClicked: stack.push(variantsList) + } } } } - } - Component { + Component { + id: variantsList - id: _keyboardVariantsComponent + Item { - Item { + Label { - property string title: qsTr("Keyboard Layout") - property string subtitle: config.prettyStatus + id: header + anchors.horizontalCenter: parent.horizontalCenter + text: qsTr("Keyboard Variant") + color: Kirigami.Theme.textColor + font.bold: true + font.weight: Font.Bold + font.pointSize: 24 + } - ListViewTemplate { + Label { - id: _variantsListView + anchors.horizontalCenter: parent.horizontalCenter + anchors.top: header.bottom + color: Kirigami.Theme.textColor + horizontalAlignment: Text.AlignHCenter + width: parent.width / 1.5 + wrapMode: Text.WordWrap + text: config.prettyStatus + //text: qsTr("Variant keyboard model or use the default one based on the detected hardware.") + } - anchors.centerIn: parent + ListView { - implicitWidth: Math.min(parent.width, 500) - implicitHeight: Math.min(contentHeight, 300) + id: list3 - currentIndex: model.currentIndex + ScrollBar.vertical: ScrollBar { + + active: true + } - model: config.keyboardVariantsModel + width: parent.width / 2 + height: 250 + anchors.centerIn: parent + anchors.verticalCenterOffset: -30 + focus: true + clip: true + boundsBehavior: Flickable.StopAtBounds + spacing: 2 + + Rectangle { + + z: parent.z - 1 + anchors.fill: parent + color: "#BDC3C7" + radius: 5 + opacity: 0.7 + } - delegate: ListItemDelegate { + model: config.keyboardVariantsModel + //model: ["Brussels", "London", "Madrid", "New York", "Melbourne", "London", "Madrid", "New York", "Brussels", "London", "Madrid", "New York", "Brussels", "London", "Madrid", "New York"] - id: _delegate - label1.text: model.label - onClicked: { + currentIndex: model.currentIndex + delegate: ItemDelegate { - _variantsListView.model.currentIndex = index - _variantsListView.positionViewAtIndex(index, ListView.Center) - } - } - } + hoverEnabled: true + width: parent.width + highlighted: ListView.isCurrentItem + + RowLayout { + anchors.fill: parent + + Label { + + text: model.label //modelData + Layout.fillHeight: true + Layout.fillWidth: true + width: parent.width + height: 30 + color: highlighted ? Kirigami.Theme.highlightedTextColor : Kirigami.Theme.textColor - ColumnLayout{ + background: Rectangle { - anchors.verticalCenter: parent.verticalCenter - + color: highlighted || hovered ? Kirigami.Theme.highlightColor : "white" //Kirigami.Theme.backgroundColor + opacity: highlighted || hovered ? 0.5 : 0.3 + } + } + + Kirigami.Icon { + + source: "checkmark" + Layout.preferredWidth: 22 + Layout.preferredHeight: 22 + color: Kirigami.Theme.highlightedTextColor + visible: highlighted + } + } + + onClicked: { + + list3.model.currentIndex = index + list3.positionViewAtIndex(index, ListView.Center) + } + } + } + Button { Layout.fillWidth: true - text: qsTr("Layouts") + anchors.verticalCenter: parent.verticalCenter + anchors.verticalCenterOffset: -30 + anchors.left: parent.left + anchors.leftMargin: parent.width / 15 icon.name: "go-previous" - onClicked: control.stackView.pop() + text: qsTr("Layouts") + onClicked: stack.pop() } } } - } TextField { placeholderText: qsTr("Test your keyboard") - Layout.preferredHeight: 48 - Layout.maximumWidth: 500 - Layout.fillWidth: true - Layout.alignment: Qt.AlignCenter - color: control.Kirigami.Theme.textColor + height: 48 + width: parent.width / 1.5 + horizontalAlignment: TextInput.AlignHCenter + anchors.horizontalCenter: parent.horizontalCenter + anchors.bottom: parent.bottom + anchors.bottomMargin: parent.height / 10 + color: "#1F1F1F" background:Rectangle { z: parent.z - 1 anchors.fill: parent color: "#BDC3C7" - radius: 5 + radius: 2 opacity: 0.3 } } diff --git a/src/modules/keyboardq/keyboardq.qrc b/src/modules/keyboardq/keyboardq.qrc index b2ee36ee57..492f6e2130 100644 --- a/src/modules/keyboardq/keyboardq.qrc +++ b/src/modules/keyboardq/keyboardq.qrc @@ -3,8 +3,5 @@ ../keyboard/kbd-model-map ../keyboard/images/restore.png keyboardq.qml - ListItemDelegate.qml - ListViewTemplate.qml - ResponsiveBase.qml From 0572e9cafc0fe6f6692f14f6d0e275d64f7498e2 Mon Sep 17 00:00:00 2001 From: Calamares CI Date: Wed, 26 Aug 2020 13:54:11 +0200 Subject: [PATCH 124/157] i18n: [calamares] Automatic merge of Transifex translations --- lang/calamares_de.ts | 27 +- lang/calamares_pt_BR.ts | 2 +- lang/calamares_te.ts | 3922 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 3938 insertions(+), 13 deletions(-) create mode 100644 lang/calamares_te.ts diff --git a/lang/calamares_de.ts b/lang/calamares_de.ts index a70360e823..bf2c4f6359 100644 --- a/lang/calamares_de.ts +++ b/lang/calamares_de.ts @@ -717,7 +717,7 @@ Dies wird das Installationsprogramm beenden und alle Änderungen gehen verloren. Set timezone to %1/%2. - + Setze Zeitzone auf %1%2. @@ -802,7 +802,7 @@ Dies wird das Installationsprogramm beenden und alle Änderungen gehen verloren. '%1' is not allowed as username. - + '%1' ist als Benutzername nicht erlaubt. @@ -827,7 +827,7 @@ Dies wird das Installationsprogramm beenden und alle Änderungen gehen verloren. '%1' is not allowed as hostname. - + '%1' ist als Computername nicht erlaubt. @@ -2860,7 +2860,8 @@ Ausgabe: <p>This computer does not satisfy some of the recommended requirements for setting up %1.<br/> Setup can continue, but some features might be disabled.</p> - + <p>Dieser Computer erfüllt einige empfohlene Bedingungen nicht für die Installation von %1.<br/> + Die Installation kann fortgesetzt werden, aber einige Funktionen könnten deaktiviert sein.</p> @@ -2971,13 +2972,15 @@ Ausgabe: <p>This computer does not satisfy the minimum requirements for installing %1.<br/> Installation cannot continue.</p> - + <p>Dieser Computer erfüllt die minimalen Bedingungen nicht für die Installation von %1.<br/> + Die Installation kan nicht fortgesetzt werden.</p> <p>This computer does not satisfy some of the recommended requirements for setting up %1.<br/> Setup can continue, but some features might be disabled.</p> - + <p>Dieser Computer erfüllt einige empfohlene Bedingungen nicht für die Installation von %1.<br/> + Die Installation kann fortgesetzt werden, aber einige Funktionen könnten deaktiviert sein.</p> @@ -3443,28 +3446,28 @@ Ausgabe: KDE user feedback - + KDE Benutzer-Feedback Configuring KDE user feedback. - + Konfiguriere KDE Benutzer-Feedback. Error in KDE user feedback configuration. - + Fehler bei der Konfiguration des KDE Benutzer-Feedbacks. Could not configure KDE user feedback correctly, script error %1. - + Konnte KDE Benutzer-Feedback nicht korrekt konfigurieren, Skriptfehler %1. Could not configure KDE user feedback correctly, Calamares error %1. - + Konnte KDE Benutzer-Feedback nicht korrekt konfigurieren, Calamares-Fehler %1. @@ -3511,7 +3514,7 @@ Ausgabe: <html><head/><body><p>Click here to send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> - + <html><head/><body><p>Hier klicken, um <span style=" font-weight:600;">keinerlei Informationen </span> über Ihre Installation zu senden.</p></body></html> diff --git a/lang/calamares_pt_BR.ts b/lang/calamares_pt_BR.ts index 9611c6005b..7c7b659592 100644 --- a/lang/calamares_pt_BR.ts +++ b/lang/calamares_pt_BR.ts @@ -2323,7 +2323,7 @@ O instalador será fechado e todas as alterações serão perdidas. Choose a password to keep your account safe. - Escolha uma senha para mantar a sua conta segura. + Escolha uma senha para manter a sua conta segura. diff --git a/lang/calamares_te.ts b/lang/calamares_te.ts new file mode 100644 index 0000000000..5ffd229998 --- /dev/null +++ b/lang/calamares_te.ts @@ -0,0 +1,3922 @@ + + + + + BootInfoWidget + + + The <strong>boot environment</strong> of this system.<br><br>Older x86 systems only support <strong>BIOS</strong>.<br>Modern systems usually use <strong>EFI</strong>, but may also show up as BIOS if started in compatibility mode. + + + + + This system was started with an <strong>EFI</strong> boot environment.<br><br>To configure startup from an EFI environment, this installer must deploy a boot loader application, like <strong>GRUB</strong> or <strong>systemd-boot</strong> on an <strong>EFI System Partition</strong>. This is automatic, unless you choose manual partitioning, in which case you must choose it or create it on your own. + + + + + This system was started with a <strong>BIOS</strong> boot environment.<br><br>To configure startup from a BIOS environment, this installer must install a boot loader, like <strong>GRUB</strong>, either at the beginning of a partition or on the <strong>Master Boot Record</strong> near the beginning of the partition table (preferred). This is automatic, unless you choose manual partitioning, in which case you must set it up on your own. + + + + + BootLoaderModel + + + Master Boot Record of %1 + + + + + Boot Partition + + + + + System Partition + + + + + Do not install a boot loader + + + + + %1 (%2) + + + + + Calamares::BlankViewStep + + + Blank Page + + + + + Calamares::DebugWindow + + + Form + + + + + GlobalStorage + + + + + JobQueue + + + + + Modules + + + + + Type: + + + + + + none + + + + + Interface: + + + + + Tools + + + + + Reload Stylesheet + + + + + Widget Tree + + + + + Debug information + + + + + Calamares::ExecutionViewStep + + + Set up + + + + + Install + + + + + Calamares::FailJob + + + Job failed (%1) + + + + + Programmed job failure was explicitly requested. + + + + + Calamares::JobThread + + + Done + ముగించు + + + + Calamares::NamedJob + + + Example job (%1) + + + + + Calamares::ProcessJob + + + Run command '%1' in target system. + + + + + Run command '%1'. + + + + + Running command %1 %2 + + + + + Calamares::PythonJob + + + Running %1 operation. + + + + + Bad working directory path + + + + + Working directory %1 for python job %2 is not readable. + + + + + Bad main script file + + + + + Main script file %1 for python job %2 is not readable. + + + + + Boost.Python error in job "%1". + + + + + Calamares::QmlViewStep + + + Loading ... + + + + + QML Step <i>%1</i>. + + + + + Loading failed. + + + + + Calamares::RequirementsChecker + + + Requirements checking for module <i>%1</i> is complete. + + + + + Waiting for %n module(s). + + + + + + + + (%n second(s)) + + + + + + + + System-requirements checking is complete. + + + + + Calamares::ViewManager + + + Setup Failed + + + + + Installation Failed + + + + + Would you like to paste the install log to the web? + + + + + Error + లోపం + + + + + &Yes + + + + + + &No + + + + + &Close + + + + + Install Log Paste URL + + + + + The upload was unsuccessful. No web-paste was done. + + + + + Calamares Initialization Failed + + + + + %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. + + + + + <br/>The following modules could not be loaded: + + + + + Continue with setup? + + + + + Continue with installation? + + + + + The %1 setup program is about to make changes to your disk in order to set up %2.<br/><strong>You will not be able to undo these changes.</strong> + + + + + The %1 installer is about to make changes to your disk in order to install %2.<br/><strong>You will not be able to undo these changes.</strong> + + + + + &Set up now + + + + + &Install now + + + + + Go &back + + + + + &Set up + + + + + &Install + + + + + Setup is complete. Close the setup program. + + + + + The installation is complete. Close the installer. + + + + + Cancel setup without changing the system. + + + + + Cancel installation without changing the system. + + + + + &Next + + + + + &Back + + + + + &Done + + + + + &Cancel + + + + + Cancel setup? + + + + + Cancel installation? + + + + + Do you really want to cancel the current setup process? +The setup program will quit and all changes will be lost. + + + + + Do you really want to cancel the current install process? +The installer will quit and all changes will be lost. + + + + + CalamaresPython::Helper + + + Unknown exception type + + + + + unparseable Python error + + + + + unparseable Python traceback + + + + + Unfetchable Python error. + + + + + CalamaresUtils + + + Install log posted to: +%1 + + + + + CalamaresWindow + + + Show debug information + + + + + &Back + + + + + &Next + + + + + &Cancel + + + + + %1 Setup Program + + + + + %1 Installer + + + + + CheckerContainer + + + Gathering system information... + + + + + ChoicePage + + + Form + + + + + Select storage de&vice: + + + + + + + + Current: + + + + + After: + + + + + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. + + + + + Reuse %1 as home partition for %2. + + + + + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> + + + + + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. + + + + + Boot loader location: + + + + + <strong>Select a partition to install on</strong> + + + + + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. + + + + + The EFI system partition at %1 will be used for starting %2. + + + + + EFI system partition: + + + + + This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. + + + + + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. + + + + + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. + + + + + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. + + + + + This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. + + + + + This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. + + + + + This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. + + + + + No Swap + + + + + Reuse Swap + + + + + Swap (no Hibernate) + + + + + Swap (with Hibernate) + + + + + Swap to file + + + + + ClearMountsJob + + + Clear mounts for partitioning operations on %1 + + + + + Clearing mounts for partitioning operations on %1. + + + + + Cleared all mounts for %1 + + + + + ClearTempMountsJob + + + Clear all temporary mounts. + + + + + Clearing all temporary mounts. + + + + + Cannot get list of temporary mounts. + + + + + Cleared all temporary mounts. + + + + + CommandList + + + + Could not run command. + + + + + The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. + + + + + The command needs to know the user's name, but no username is defined. + + + + + Config + + + Set keyboard model to %1.<br/> + + + + + Set keyboard layout to %1/%2. + + + + + Set timezone to %1/%2. + + + + + The system language will be set to %1. + + + + + The numbers and dates locale will be set to %1. + + + + + Network Installation. (Disabled: Incorrect configuration) + + + + + Network Installation. (Disabled: Received invalid groups data) + + + + + Network Installation. (Disabled: internal error) + + + + + Network Installation. (Disabled: Unable to fetch package lists, check your network connection) + + + + + This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> + + + + + This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> + + + + + This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. + + + + + This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. + + + + + This program will ask you some questions and set up %2 on your computer. + + + + + <h1>Welcome to the Calamares setup program for %1</h1> + + + + + <h1>Welcome to %1 setup</h1> + + + + + <h1>Welcome to the Calamares installer for %1</h1> + + + + + <h1>Welcome to the %1 installer</h1> + + + + + Your username is too long. + + + + + '%1' is not allowed as username. + + + + + Your username must start with a lowercase letter or underscore. + + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + + + + + Your hostname is too short. + + + + + Your hostname is too long. + + + + + '%1' is not allowed as hostname. + + + + + Only letters, numbers, underscore and hyphen are allowed. + + + + + ContextualProcessJob + + + Contextual Processes Job + + + + + CreatePartitionDialog + + + Create a Partition + + + + + Si&ze: + + + + + MiB + + + + + Partition &Type: + + + + + &Primary + + + + + E&xtended + + + + + Fi&le System: + + + + + LVM LV name + + + + + &Mount Point: + + + + + Flags: + + + + + En&crypt + + + + + Logical + + + + + Primary + + + + + GPT + + + + + Mountpoint already in use. Please select another one. + + + + + CreatePartitionJob + + + Create new %2MiB partition on %4 (%3) with file system %1. + + + + + Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. + + + + + Creating new %1 partition on %2. + + + + + The installer failed to create partition on disk '%1'. + + + + + CreatePartitionTableDialog + + + Create Partition Table + + + + + Creating a new partition table will delete all existing data on the disk. + + + + + What kind of partition table do you want to create? + + + + + Master Boot Record (MBR) + + + + + GUID Partition Table (GPT) + + + + + CreatePartitionTableJob + + + Create new %1 partition table on %2. + + + + + Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). + + + + + Creating new %1 partition table on %2. + + + + + The installer failed to create a partition table on %1. + + + + + CreateUserJob + + + Create user %1 + + + + + Create user <strong>%1</strong>. + + + + + Creating user %1. + + + + + Cannot create sudoers file for writing. + + + + + Cannot chmod sudoers file. + + + + + CreateVolumeGroupDialog + + + Create Volume Group + + + + + CreateVolumeGroupJob + + + Create new volume group named %1. + + + + + Create new volume group named <strong>%1</strong>. + + + + + Creating new volume group named %1. + + + + + The installer failed to create a volume group named '%1'. + + + + + DeactivateVolumeGroupJob + + + + Deactivate volume group named %1. + + + + + Deactivate volume group named <strong>%1</strong>. + + + + + The installer failed to deactivate a volume group named %1. + + + + + DeletePartitionJob + + + Delete partition %1. + + + + + Delete partition <strong>%1</strong>. + + + + + Deleting partition %1. + + + + + The installer failed to delete partition %1. + + + + + DeviceInfoWidget + + + This device has a <strong>%1</strong> partition table. + + + + + This is a <strong>loop</strong> device.<br><br>It is a pseudo-device with no partition table that makes a file accessible as a block device. This kind of setup usually only contains a single filesystem. + + + + + This installer <strong>cannot detect a partition table</strong> on the selected storage device.<br><br>The device either has no partition table, or the partition table is corrupted or of an unknown type.<br>This installer can create a new partition table for you, either automatically, or through the manual partitioning page. + + + + + <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. + + + + + <br><br>This partition table type is only advisable on older systems which start from a <strong>BIOS</strong> boot environment. GPT is recommended in most other cases.<br><br><strong>Warning:</strong> the MBR partition table is an obsolete MS-DOS era standard.<br>Only 4 <em>primary</em> partitions may be created, and of those 4, one can be an <em>extended</em> partition, which may in turn contain many <em>logical</em> partitions. + + + + + The type of <strong>partition table</strong> on the selected storage device.<br><br>The only way to change the partition table type is to erase and recreate the partition table from scratch, which destroys all data on the storage device.<br>This installer will keep the current partition table unless you explicitly choose otherwise.<br>If unsure, on modern systems GPT is preferred. + + + + + DeviceModel + + + %1 - %2 (%3) + device[name] - size[number] (device-node[name]) + + + + + %1 - (%2) + device[name] - (device-node[name]) + + + + + DracutLuksCfgJob + + + Write LUKS configuration for Dracut to %1 + + + + + Skip writing LUKS configuration for Dracut: "/" partition is not encrypted + + + + + Failed to open %1 + + + + + DummyCppJob + + + Dummy C++ Job + + + + + EditExistingPartitionDialog + + + Edit Existing Partition + + + + + Content: + + + + + &Keep + + + + + Format + తుడిచివేయు + + + + Warning: Formatting the partition will erase all existing data. + హెచ్చరిక : తుడిచివేయటం వలన ఈ విభజనలోని సమాచారం మొత్తం పోతుంది + + + + &Mount Point: + + + + + Si&ze: + + + + + MiB + + + + + Fi&le System: + + + + + Flags: + + + + + Mountpoint already in use. Please select another one. + + + + + EncryptWidget + + + Form + + + + + En&crypt system + + + + + Passphrase + + + + + Confirm passphrase + + + + + + Please enter the same passphrase in both boxes. + + + + + FillGlobalStorageJob + + + Set partition information + విభజన సమాచారం ఏర్పాటు + + + + Install %1 on <strong>new</strong> %2 system partition. + + + + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>. + + + + + Install %2 on %3 system partition <strong>%1</strong>. + + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>. + + + + + Install boot loader on <strong>%1</strong>. + + + + + Setting up mount points. + + + + + FinishedPage + + + Form + + + + + &Restart now + + + + + <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. + + + + + <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the setup program.</p></body></html> + + + + + <h1>All done.</h1><br/>%1 has been installed on your computer.<br/>You may now restart into your new system, or continue using the %2 Live environment. + + + + + <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the installer.</p></body></html> + + + + + <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. + + + + + <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. + + + + + FinishedViewStep + + + Finish + + + + + Setup Complete + + + + + Installation Complete + + + + + The setup of %1 is complete. + + + + + The installation of %1 is complete. + + + + + FormatPartitionJob + + + Format partition %1 (file system: %2, size: %3 MiB) on %4. + + + + + Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. + + + + + Formatting partition %1 with file system %2. + + + + + The installer failed to format partition %1 on disk '%2'. + + + + + GeneralRequirements + + + has at least %1 GiB available drive space + + + + + There is not enough drive space. At least %1 GiB is required. + + + + + has at least %1 GiB working memory + + + + + The system does not have enough working memory. At least %1 GiB is required. + + + + + is plugged in to a power source + + + + + The system is not plugged in to a power source. + + + + + is connected to the Internet + + + + + The system is not connected to the Internet. + + + + + is running the installer as an administrator (root) + + + + + The setup program is not running with administrator rights. + + + + + The installer is not running with administrator rights. + + + + + has a screen large enough to show the whole installer + + + + + The screen is too small to display the setup program. + + + + + The screen is too small to display the installer. + + + + + HostInfoJob + + + Collecting information about your machine. + + + + + IDJob + + + + + + OEM Batch Identifier + + + + + Could not create directories <code>%1</code>. + + + + + Could not open file <code>%1</code>. + + + + + Could not write to file <code>%1</code>. + + + + + InitcpioJob + + + Creating initramfs with mkinitcpio. + + + + + InitramfsJob + + + Creating initramfs. + + + + + InteractiveTerminalPage + + + Konsole not installed + + + + + Please install KDE Konsole and try again! + + + + + Executing script: &nbsp;<code>%1</code> + + + + + InteractiveTerminalViewStep + + + Script + + + + + KeyboardPage + + + Set keyboard model to %1.<br/> + + + + + Set keyboard layout to %1/%2. + + + + + KeyboardQmlViewStep + + + Keyboard + + + + + KeyboardViewStep + + + Keyboard + + + + + LCLocaleDialog + + + System locale setting + + + + + The system locale setting affects the language and character set for some command line user interface elements.<br/>The current setting is <strong>%1</strong>. + + + + + &Cancel + + + + + &OK + + + + + LicensePage + + + Form + + + + + <h1>License Agreement</h1> + + + + + I accept the terms and conditions above. + + + + + Please review the End User License Agreements (EULAs). + + + + + This setup procedure will install proprietary software that is subject to licensing terms. + + + + + If you do not agree with the terms, the setup procedure cannot continue. + + + + + This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. + + + + + If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. + + + + + LicenseViewStep + + + License + + + + + LicenseWidget + + + URL: %1 + + + + + <strong>%1 driver</strong><br/>by %2 + %1 is an untranslatable product name, example: Creative Audigy driver + + + + + <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> + %1 is usually a vendor name, example: Nvidia graphics driver + + + + + <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> + + + + + <strong>%1 codec</strong><br/><font color="Grey">by %2</font> + + + + + <strong>%1 package</strong><br/><font color="Grey">by %2</font> + + + + + <strong>%1</strong><br/><font color="Grey">by %2</font> + + + + + File: %1 + + + + + Hide license text + + + + + Show the license text + + + + + Open license agreement in browser. + + + + + LocalePage + + + Region: + + + + + Zone: + + + + + + &Change... + + + + + LocaleQmlViewStep + + + Location + + + + + LocaleViewStep + + + Location + + + + + LuksBootKeyFileJob + + + Configuring LUKS key file. + + + + + + No partitions are defined. + + + + + + + Encrypted rootfs setup error + + + + + Root partition %1 is LUKS but no passphrase has been set. + + + + + Could not create LUKS key file for root partition %1. + + + + + Could not configure LUKS key file on partition %1. + + + + + MachineIdJob + + + Generate machine-id. + + + + + Configuration Error + + + + + No root mount point is set for MachineId. + + + + + Map + + + Timezone: %1 + + + + + Please select your preferred location on the map so the installer can suggest the locale + and timezone settings for you. You can fine-tune the suggested settings below. Search the map by dragging + to move and using the +/- buttons to zoom in/out or use mouse scrolling for zooming. + + + + + NetInstallViewStep + + + + Package selection + + + + + Office software + + + + + Office package + + + + + Browser software + + + + + Browser package + + + + + Web browser + + + + + Kernel + + + + + Services + + + + + Login + + + + + Desktop + + + + + Applications + + + + + Communication + + + + + Development + + + + + Office + + + + + Multimedia + + + + + Internet + + + + + Theming + + + + + Gaming + + + + + Utilities + + + + + NotesQmlViewStep + + + Notes + + + + + OEMPage + + + Ba&tch: + + + + + <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> + + + + + <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> + + + + + OEMViewStep + + + OEM Configuration + + + + + Set the OEM Batch Identifier to <code>%1</code>. + + + + + Offline + + + Timezone: %1 + + + + + To be able to select a timezone, make sure you are connected to the internet. Restart the installer after connecting. You can fine-tune Language and Locale settings below. + + + + + PWQ + + + Password is too short + + + + + Password is too long + + + + + Password is too weak + + + + + Memory allocation error when setting '%1' + + + + + Memory allocation error + + + + + The password is the same as the old one + + + + + The password is a palindrome + + + + + The password differs with case changes only + + + + + The password is too similar to the old one + + + + + The password contains the user name in some form + + + + + The password contains words from the real name of the user in some form + + + + + The password contains forbidden words in some form + + + + + The password contains less than %1 digits + + + + + The password contains too few digits + + + + + The password contains less than %1 uppercase letters + + + + + The password contains too few uppercase letters + + + + + The password contains less than %1 lowercase letters + + + + + The password contains too few lowercase letters + + + + + The password contains less than %1 non-alphanumeric characters + + + + + The password contains too few non-alphanumeric characters + + + + + The password is shorter than %1 characters + + + + + The password is too short + + + + + The password is just rotated old one + + + + + The password contains less than %1 character classes + + + + + The password does not contain enough character classes + + + + + The password contains more than %1 same characters consecutively + + + + + The password contains too many same characters consecutively + + + + + The password contains more than %1 characters of the same class consecutively + + + + + The password contains too many characters of the same class consecutively + + + + + The password contains monotonic sequence longer than %1 characters + + + + + The password contains too long of a monotonic character sequence + + + + + No password supplied + + + + + Cannot obtain random numbers from the RNG device + + + + + Password generation failed - required entropy too low for settings + + + + + The password fails the dictionary check - %1 + + + + + The password fails the dictionary check + + + + + Unknown setting - %1 + + + + + Unknown setting + + + + + Bad integer value of setting - %1 + + + + + Bad integer value + + + + + Setting %1 is not of integer type + + + + + Setting is not of integer type + + + + + Setting %1 is not of string type + + + + + Setting is not of string type + + + + + Opening the configuration file failed + + + + + The configuration file is malformed + + + + + Fatal failure + + + + + Unknown error + + + + + Password is empty + + + + + PackageChooserPage + + + Form + + + + + Product Name + + + + + TextLabel + + + + + Long Product Description + + + + + Package Selection + + + + + Please pick a product from the list. The selected product will be installed. + + + + + PackageChooserViewStep + + + Packages + + + + + PackageModel + + + Name + + + + + Description + + + + + Page_Keyboard + + + Form + + + + + Keyboard Model: + + + + + Type here to test your keyboard + + + + + Page_UserSetup + + + Form + + + + + What is your name? + మీ పేరు ఏమిటి ? + + + + Your Full Name + + + + + What name do you want to use to log in? + ప్రవేశించడానికి ఈ పేరుని ఉపయోగిస్తారు + + + + login + + + + + What is the name of this computer? + + + + + <small>This name will be used if you make the computer visible to others on a network.</small> + + + + + Computer Name + + + + + Choose a password to keep your account safe. + మీ ఖాతా ను భద్రపరుచుకోవడానికి ఒక మంత్రమును ఎంచుకోండి + + + + + <small>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.</small> + అదే మంత్రిని మళ్ళీ ఇక్కడ ఇవ్వండి, దానివలన మీరు పైన ఇచ్చిన దాంట్లో ఏమి అయినా దోషములు ఉంటే సరిదిద్దుకోవచ్చు. ఒక మంచి మంత్రంలో, ఒక అక్షరము, ఒక సంఖ్యా, ఒక విరామచిహ్నం, ఉండాలి. అది కనీసం ఎనిమిది అక్షరాలా పొడవు ఉండాలి. దీనిని కొన్ని వారాలు కానీ నెలలకు కానీ మార్చాలి. + + + + + Password + + + + + + Repeat Password + + + + + When this box is checked, password-strength checking is done and you will not be able to use a weak password. + + + + + Require strong passwords. + + + + + Log in automatically without asking for the password. + + + + + Use the same password for the administrator account. + + + + + Choose a password for the administrator account. + + + + + + <small>Enter the same password twice, so that it can be checked for typing errors.</small> + + + + + PartitionLabelsView + + + Root + + + + + Home + + + + + Boot + + + + + EFI system + + + + + Swap + + + + + New partition for %1 + + + + + New partition + + + + + %1 %2 + size[number] filesystem[name] + + + + + PartitionModel + + + + Free Space + + + + + + New partition + + + + + Name + + + + + File System + + + + + Mount Point + + + + + Size + + + + + PartitionPage + + + Form + + + + + Storage de&vice: + + + + + &Revert All Changes + + + + + New Partition &Table + + + + + Cre&ate + + + + + &Edit + + + + + &Delete + + + + + New Volume Group + + + + + Resize Volume Group + + + + + Deactivate Volume Group + + + + + Remove Volume Group + + + + + I&nstall boot loader on: + + + + + Are you sure you want to create a new partition table on %1? + + + + + Can not create new partition + + + + + 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. + + + + + PartitionViewStep + + + Gathering system information... + + + + + Partitions + + + + + Install %1 <strong>alongside</strong> another operating system. + + + + + <strong>Erase</strong> disk and install %1. + + + + + <strong>Replace</strong> a partition with %1. + + + + + <strong>Manual</strong> partitioning. + + + + + Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). + + + + + <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. + + + + + <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. + + + + + <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). + + + + + Disk <strong>%1</strong> (%2) + + + + + Current: + + + + + After: + + + + + No EFI system partition configured + + + + + An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a FAT32 filesystem with the <strong>%3</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. + + + + + An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>%3</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. + + + + + EFI system partition flag not set + + + + + Option to use GPT on BIOS + + + + + A GPT partition table is the best option for all systems. This installer supports such a setup for BIOS systems too.<br/><br/>To configure a GPT partition table on BIOS, (if not done so already) go back and set the partition table to GPT, next create a 8 MB unformatted partition with the <strong>bios_grub</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. + + + + + Boot partition not encrypted + + + + + A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window. + + + + + has at least one disk device available. + + + + + There are no partitions to install on. + + + + + PlasmaLnfJob + + + Plasma Look-and-Feel Job + + + + + + Could not select KDE Plasma Look-and-Feel package + + + + + PlasmaLnfPage + + + Form + + + + + 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. + + + + + 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 installed. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. + + + + + PlasmaLnfViewStep + + + Look-and-Feel + + + + + PreserveFiles + + + Saving files for later ... + + + + + No files configured to save for later. + + + + + Not all of the configured files could be preserved. + + + + + ProcessResult + + + +There was no output from the command. + + + + + +Output: + + + + + + External command crashed. + + + + + Command <i>%1</i> crashed. + + + + + External command failed to start. + + + + + Command <i>%1</i> failed to start. + + + + + Internal error when starting command. + + + + + Bad parameters for process job call. + + + + + External command failed to finish. + + + + + Command <i>%1</i> failed to finish in %2 seconds. + + + + + External command finished with errors. + + + + + Command <i>%1</i> finished with exit code %2. + + + + + QObject + + + %1 (%2) + + + + + unknown + + + + + extended + + + + + unformatted + + + + + swap + + + + + Default Keyboard Model + + + + + + Default + + + + + + + + File not found + + + + + Path <pre>%1</pre> must be an absolute path. + + + + + Could not create new random file <pre>%1</pre>. + + + + + No product + + + + + No description provided. + + + + + (no mount point) + + + + + Unpartitioned space or unknown partition table + + + + + Recommended + + + <p>This computer does not satisfy some of the recommended requirements for setting up %1.<br/> + Setup can continue, but some features might be disabled.</p> + + + + + RemoveUserJob + + + Remove live user from target system + + + + + RemoveVolumeGroupJob + + + + Remove Volume Group named %1. + + + + + Remove Volume Group named <strong>%1</strong>. + + + + + The installer failed to remove a volume group named '%1'. + + + + + ReplaceWidget + + + Form + + + + + Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. + + + + + The selected item does not appear to be a valid partition. + + + + + %1 cannot be installed on empty space. Please select an existing partition. + + + + + %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. + + + + + %1 cannot be installed on this partition. + + + + + Data partition (%1) + + + + + Unknown system partition (%1) + + + + + %1 system partition (%2) + + + + + <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. + + + + + <strong>%2</strong><br/><br/>An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. + + + + + + + <strong>%3</strong><br/><br/>%1 will be installed on %2.<br/><font color="red">Warning: </font>all data on partition %2 will be lost. + + + + + The EFI system partition at %1 will be used for starting %2. + + + + + EFI system partition: + + + + + Requirements + + + <p>This computer does not satisfy the minimum requirements for installing %1.<br/> + Installation cannot continue.</p> + + + + + <p>This computer does not satisfy some of the recommended requirements for setting up %1.<br/> + Setup can continue, but some features might be disabled.</p> + + + + + ResizeFSJob + + + Resize Filesystem Job + + + + + Invalid configuration + + + + + The file-system resize job has an invalid configuration and will not run. + + + + + KPMCore not Available + + + + + Calamares cannot start KPMCore for the file-system resize job. + + + + + + + + + Resize Failed + + + + + The filesystem %1 could not be found in this system, and cannot be resized. + + + + + The device %1 could not be found in this system, and cannot be resized. + + + + + + The filesystem %1 cannot be resized. + + + + + + The device %1 cannot be resized. + + + + + The filesystem %1 must be resized, but cannot. + + + + + The device %1 must be resized, but cannot + + + + + ResizePartitionJob + + + Resize partition %1. + + + + + Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. + + + + + Resizing %2MiB partition %1 to %3MiB. + + + + + The installer failed to resize partition %1 on disk '%2'. + + + + + ResizeVolumeGroupDialog + + + Resize Volume Group + + + + + ResizeVolumeGroupJob + + + + Resize volume group named %1 from %2 to %3. + + + + + Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. + + + + + The installer failed to resize a volume group named '%1'. + + + + + ResultsListDialog + + + For best results, please ensure that this computer: + + + + + System requirements + + + + + ResultsListWidget + + + This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> + + + + + This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> + + + + + This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. + + + + + This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. + + + + + This program will ask you some questions and set up %2 on your computer. + + + + + ScanningDialog + + + Scanning storage devices... + + + + + Partitioning + + + + + SetHostNameJob + + + Set hostname %1 + + + + + Set hostname <strong>%1</strong>. + + + + + Setting hostname %1. + + + + + + Internal Error + + + + + + Cannot write hostname to target system + + + + + SetKeyboardLayoutJob + + + Set keyboard model to %1, layout to %2-%3 + + + + + Failed to write keyboard configuration for the virtual console. + + + + + + + Failed to write to %1 + + + + + Failed to write keyboard configuration for X11. + + + + + Failed to write keyboard configuration to existing /etc/default directory. + + + + + SetPartFlagsJob + + + Set flags on partition %1. + + + + + Set flags on %1MiB %2 partition. + + + + + Set flags on new partition. + + + + + Clear flags on partition <strong>%1</strong>. + + + + + Clear flags on %1MiB <strong>%2</strong> partition. + + + + + Clear flags on new partition. + + + + + Flag partition <strong>%1</strong> as <strong>%2</strong>. + + + + + Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. + + + + + Flag new partition as <strong>%1</strong>. + + + + + Clearing flags on partition <strong>%1</strong>. + + + + + Clearing flags on %1MiB <strong>%2</strong> partition. + + + + + Clearing flags on new partition. + + + + + Setting flags <strong>%2</strong> on partition <strong>%1</strong>. + + + + + Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. + + + + + Setting flags <strong>%1</strong> on new partition. + + + + + The installer failed to set flags on partition %1. + + + + + SetPasswordJob + + + Set password for user %1 + + + + + Setting password for user %1. + + + + + Bad destination system path. + + + + + rootMountPoint is %1 + + + + + Cannot disable root account. + + + + + passwd terminated with error code %1. + + + + + Cannot set password for user %1. + + + + + usermod terminated with error code %1. + + + + + SetTimezoneJob + + + Set timezone to %1/%2 + + + + + Cannot access selected timezone path. + + + + + Bad path: %1 + + + + + Cannot set timezone. + + + + + Link creation failed, target: %1; link name: %2 + + + + + Cannot set timezone, + + + + + Cannot open /etc/timezone for writing + + + + + ShellProcessJob + + + Shell Processes Job + + + + + SlideCounter + + + %L1 / %L2 + slide counter, %1 of %2 (numeric) + + + + + SummaryPage + + + This is an overview of what will happen once you start the setup procedure. + + + + + This is an overview of what will happen once you start the install procedure. + + + + + SummaryViewStep + + + Summary + + + + + TrackingInstallJob + + + Installation feedback + + + + + Sending installation feedback. + + + + + Internal error in install-tracking. + + + + + HTTP request timed out. + + + + + TrackingKUserFeedbackJob + + + KDE user feedback + + + + + Configuring KDE user feedback. + + + + + + Error in KDE user feedback configuration. + + + + + Could not configure KDE user feedback correctly, script error %1. + + + + + Could not configure KDE user feedback correctly, Calamares error %1. + + + + + TrackingMachineUpdateManagerJob + + + Machine feedback + + + + + Configuring machine feedback. + + + + + + Error in machine feedback configuration. + + + + + Could not configure machine feedback correctly, script error %1. + + + + + Could not configure machine feedback correctly, Calamares error %1. + + + + + TrackingPage + + + Form + + + + + Placeholder + + + + + <html><head/><body><p>Click here to send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> + + + + + <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Click here for more information about user feedback</span></a></p></body></html> + + + + + Tracking helps %1 to see how often it is installed, what hardware it is installed on and which applications are used. To see what will be sent, please click the help icon next to each area. + + + + + By selecting this you will send information about your installation and hardware. This information will only be sent <b>once</b> after the installation finishes. + + + + + By selecting this you will periodically send information about your <b>machine</b> installation, hardware and applications, to %1. + + + + + By selecting this you will regularly send information about your <b>user</b> installation, hardware, applications and application usage patterns, to %1. + + + + + TrackingViewStep + + + Feedback + + + + + UsersPage + + + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> + + + + + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> + + + + + Your passwords do not match! + + + + + UsersViewStep + + + Users + + + + + VariantModel + + + Key + + + + + Value + + + + + VolumeGroupBaseDialog + + + Create Volume Group + + + + + List of Physical Volumes + + + + + Volume Group Name: + + + + + Volume Group Type: + + + + + Physical Extent Size: + + + + + MiB + + + + + Total Size: + + + + + Used Size: + + + + + Total Sectors: + + + + + Quantity of LVs: + + + + + WelcomePage + + + Form + + + + + + Select application and system language + + + + + &About + + + + + Open donations website + + + + + &Donate + + + + + Open help and support website + + + + + &Support + + + + + Open issues and bug-tracking website + + + + + &Known issues + + + + + Open release notes website + + + + + &Release notes + + + + + <h1>Welcome to the Calamares setup program for %1.</h1> + + + + + <h1>Welcome to %1 setup.</h1> + + + + + <h1>Welcome to the Calamares installer for %1.</h1> + + + + + <h1>Welcome to the %1 installer.</h1> + + + + + %1 support + + + + + About %1 setup + + + + + About %1 installer + + + + + <h1>%1</h1><br/><strong>%2<br/>for %3</strong><br/><br/>Copyright 2014-2017 Teo Mrnjavac &lt;teo@kde.org&gt;<br/>Copyright 2017-2020 Adriaan de Groot &lt;groot@kde.org&gt;<br/>Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. + + + + + WelcomeQmlViewStep + + + Welcome + + + + + WelcomeViewStep + + + Welcome + + + + + about + + + <h1>%1</h1><br/> + <strong>%2<br/> + for %3</strong><br/><br/> + Copyright 2014-2017 Teo Mrnjavac &lt;teo@kde.org&gt;<br/> + Copyright 2017-2020 Adriaan de Groot &lt;groot@kde.org&gt;<br/> + Thanks to <a href='https://calamares.io/team/'>the Calamares team</a> + and the <a href='https://www.transifex.com/calamares/calamares/'>Calamares + translators team</a>.<br/><br/> + <a href='https://calamares.io/'>Calamares</a> + development is sponsored by <br/> + <a href='http://www.blue-systems.com/'>Blue Systems</a> - + Liberating Software. + + + + + Back + + + + + i18n + + + <h1>Languages</h1> </br> + The system locale setting affects the language and character set for some command line user interface elements. The current setting is <strong>%1</strong>. + + + + + <h1>Locales</h1> </br> + The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. + + + + + Back + + + + + keyboardq + + + Keyboard Model + + + + + Pick your preferred keyboard model or use the default one based on the detected hardware + + + + + Refresh + + + + + + Layouts + + + + + + Keyboard Layout + + + + + Models + + + + + Variants + + + + + Test your keyboard + + + + + localeq + + + Change + + + + + notesqml + + + <h3>%1</h3> + <p>These are example release notes.</p> + + + + + release_notes + + + <h3>%1</h3> + <p>This an example QML file, showing options in RichText with Flickable content.</p> + + <p>QML with RichText can use HTML tags, Flickable content is useful for touchscreens.</p> + + <p><b>This is bold text</b></p> + <p><i>This is italic text</i></p> + <p><u>This is underlined text</u></p> + <p><center>This text will be center-aligned.</center></p> + <p><s>This is strikethrough</s></p> + + <p>Code example: + <code>ls -l /home</code></p> + + <p><b>Lists:</b></p> + <ul> + <li>Intel CPU systems</li> + <li>AMD CPU systems</li> + </ul> + + <p>The vertical scrollbar is adjustable, current width set to 10.</p> + + + + + Back + + + + + welcomeq + + + <h3>Welcome to the %1 <quote>%2</quote> installer</h3> + <p>This program will ask you some questions and set up %1 on your computer.</p> + + + + + About + + + + + Support + + + + + Known issues + + + + + Release notes + + + + + Donate + + + + From 55dca08c8cc58aadcdef08e97bd8b8dbb02c96cc Mon Sep 17 00:00:00 2001 From: Calamares CI Date: Wed, 26 Aug 2020 13:54:12 +0200 Subject: [PATCH 125/157] i18n: [python] Automatic merge of Transifex translations --- lang/python/te/LC_MESSAGES/python.mo | Bin 0 -> 379 bytes lang/python/te/LC_MESSAGES/python.po | 339 +++++++++++++++++++++++++++ 2 files changed, 339 insertions(+) create mode 100644 lang/python/te/LC_MESSAGES/python.mo create mode 100644 lang/python/te/LC_MESSAGES/python.po diff --git a/lang/python/te/LC_MESSAGES/python.mo b/lang/python/te/LC_MESSAGES/python.mo new file mode 100644 index 0000000000000000000000000000000000000000..3efc124053cac143f1c1109c70e7d3cbac2ea62a GIT binary patch literal 379 zcmYL@-%i3X6vi=n)l09vsEHR4J!^+XN69V_harkAIJvK*jGC=o+D`C6d_AAVP80Z& zU(Pu>|GuBolkbk#k>|{F;W_qPd0IuDk#7!sY-jdLjs6h1gXs#E!dR&l!|7=JGYHb|MY#~>0-xL-y%`i&mun?cJ-GK-01jBtA-T{q(4sb}>_01*qLeE?k z4KD;_f>#V@qHKx=cQ?+}mJzbuZUbkyvT`kUL9Q#3^O9HG2uqybu%u7vZRm5-L$m2D zIT#HCipE+wp&VpiwRhme&XKz0QVnsw;l>IVzhx7M4s-3RwJ?yVT(6`m7>?eh+q-OU hptNiZFJYohWf@lWUuon15dWufSK;#*hrJ={`~oHxYV`mB literal 0 HcmV?d00001 diff --git a/lang/python/te/LC_MESSAGES/python.po b/lang/python/te/LC_MESSAGES/python.po new file mode 100644 index 0000000000..5ab3e4924e --- /dev/null +++ b/lang/python/te/LC_MESSAGES/python.po @@ -0,0 +1,339 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-08-09 20:56+0200\n" +"PO-Revision-Date: 2017-08-09 10:34+0000\n" +"Language-Team: Telugu (https://www.transifex.com/calamares/teams/20061/te/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: te\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: src/modules/grubcfg/main.py:37 +msgid "Configure GRUB." +msgstr "" + +#: src/modules/mount/main.py:38 +msgid "Mounting partitions." +msgstr "" + +#: src/modules/mount/main.py:150 src/modules/initcpiocfg/main.py:205 +#: src/modules/initcpiocfg/main.py:209 +#: src/modules/luksopenswaphookcfg/main.py:95 +#: src/modules/luksopenswaphookcfg/main.py:99 src/modules/rawfs/main.py:173 +#: src/modules/initramfscfg/main.py:94 src/modules/initramfscfg/main.py:98 +#: src/modules/openrcdmcryptcfg/main.py:78 +#: src/modules/openrcdmcryptcfg/main.py:82 src/modules/fstab/main.py:332 +#: src/modules/fstab/main.py:338 src/modules/localecfg/main.py:144 +#: src/modules/networkcfg/main.py:48 +msgid "Configuration Error" +msgstr "" + +#: src/modules/mount/main.py:151 src/modules/initcpiocfg/main.py:206 +#: src/modules/luksopenswaphookcfg/main.py:96 src/modules/rawfs/main.py:174 +#: src/modules/initramfscfg/main.py:95 src/modules/openrcdmcryptcfg/main.py:79 +#: src/modules/fstab/main.py:333 +msgid "No partitions are defined for
    {!s}
    to use." +msgstr "" + +#: src/modules/services-systemd/main.py:35 +msgid "Configure systemd services" +msgstr "" + +#: src/modules/services-systemd/main.py:68 +#: src/modules/services-openrc/main.py:102 +msgid "Cannot modify service" +msgstr "" + +#: src/modules/services-systemd/main.py:69 +msgid "" +"systemctl {arg!s} call in chroot returned error code {num!s}." +msgstr "" + +#: src/modules/services-systemd/main.py:72 +#: src/modules/services-systemd/main.py:76 +msgid "Cannot enable systemd service {name!s}." +msgstr "" + +#: src/modules/services-systemd/main.py:74 +msgid "Cannot enable systemd target {name!s}." +msgstr "" + +#: src/modules/services-systemd/main.py:78 +msgid "Cannot disable systemd target {name!s}." +msgstr "" + +#: src/modules/services-systemd/main.py:80 +msgid "Cannot mask systemd unit {name!s}." +msgstr "" + +#: src/modules/services-systemd/main.py:82 +msgid "" +"Unknown systemd commands {command!s} and " +"{suffix!s} for unit {name!s}." +msgstr "" + +#: src/modules/umount/main.py:40 +msgid "Unmount file systems." +msgstr "" + +#: src/modules/unpackfs/main.py:44 +msgid "Filling up filesystems." +msgstr "" + +#: src/modules/unpackfs/main.py:257 +msgid "rsync failed with error code {}." +msgstr "" + +#: src/modules/unpackfs/main.py:302 +msgid "Unpacking image {}/{}, file {}/{}" +msgstr "" + +#: src/modules/unpackfs/main.py:317 +msgid "Starting to unpack {}" +msgstr "" + +#: src/modules/unpackfs/main.py:326 src/modules/unpackfs/main.py:448 +msgid "Failed to unpack image \"{}\"" +msgstr "" + +#: src/modules/unpackfs/main.py:415 +msgid "No mount point for root partition" +msgstr "" + +#: src/modules/unpackfs/main.py:416 +msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" +msgstr "" + +#: src/modules/unpackfs/main.py:421 +msgid "Bad mount point for root partition" +msgstr "" + +#: src/modules/unpackfs/main.py:422 +msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" +msgstr "" + +#: src/modules/unpackfs/main.py:438 src/modules/unpackfs/main.py:442 +#: src/modules/unpackfs/main.py:462 +msgid "Bad unsquash configuration" +msgstr "" + +#: src/modules/unpackfs/main.py:439 +msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" +msgstr "" + +#: src/modules/unpackfs/main.py:443 +msgid "The source filesystem \"{}\" does not exist" +msgstr "" + +#: src/modules/unpackfs/main.py:449 +msgid "" +"Failed to find unsquashfs, make sure you have the squashfs-tools package " +"installed" +msgstr "" + +#: src/modules/unpackfs/main.py:463 +msgid "The destination \"{}\" in the target system is not a directory" +msgstr "" + +#: src/modules/displaymanager/main.py:523 +msgid "Cannot write KDM configuration file" +msgstr "" + +#: src/modules/displaymanager/main.py:524 +msgid "KDM config file {!s} does not exist" +msgstr "" + +#: src/modules/displaymanager/main.py:585 +msgid "Cannot write LXDM configuration file" +msgstr "" + +#: src/modules/displaymanager/main.py:586 +msgid "LXDM config file {!s} does not exist" +msgstr "" + +#: src/modules/displaymanager/main.py:669 +msgid "Cannot write LightDM configuration file" +msgstr "" + +#: src/modules/displaymanager/main.py:670 +msgid "LightDM config file {!s} does not exist" +msgstr "" + +#: src/modules/displaymanager/main.py:744 +msgid "Cannot configure LightDM" +msgstr "" + +#: src/modules/displaymanager/main.py:745 +msgid "No LightDM greeter installed." +msgstr "" + +#: src/modules/displaymanager/main.py:776 +msgid "Cannot write SLIM configuration file" +msgstr "" + +#: src/modules/displaymanager/main.py:777 +msgid "SLIM config file {!s} does not exist" +msgstr "" + +#: src/modules/displaymanager/main.py:903 +msgid "No display managers selected for the displaymanager module." +msgstr "" + +#: src/modules/displaymanager/main.py:904 +msgid "" +"The displaymanagers list is empty or undefined in bothglobalstorage and " +"displaymanager.conf." +msgstr "" + +#: src/modules/displaymanager/main.py:986 +msgid "Display manager configuration was incomplete" +msgstr "" + +#: src/modules/initcpiocfg/main.py:37 +msgid "Configuring mkinitcpio." +msgstr "" + +#: src/modules/initcpiocfg/main.py:210 +#: src/modules/luksopenswaphookcfg/main.py:100 +#: src/modules/initramfscfg/main.py:99 src/modules/openrcdmcryptcfg/main.py:83 +#: src/modules/fstab/main.py:339 src/modules/localecfg/main.py:145 +#: src/modules/networkcfg/main.py:49 +msgid "No root mount point is given for
    {!s}
    to use." +msgstr "" + +#: src/modules/luksopenswaphookcfg/main.py:35 +msgid "Configuring encrypted swap." +msgstr "" + +#: src/modules/rawfs/main.py:35 +msgid "Installing data." +msgstr "" + +#: src/modules/services-openrc/main.py:38 +msgid "Configure OpenRC services" +msgstr "" + +#: src/modules/services-openrc/main.py:66 +msgid "Cannot add service {name!s} to run-level {level!s}." +msgstr "" + +#: src/modules/services-openrc/main.py:68 +msgid "Cannot remove service {name!s} from run-level {level!s}." +msgstr "" + +#: src/modules/services-openrc/main.py:70 +msgid "" +"Unknown service-action {arg!s} for service {name!s} in run-" +"level {level!s}." +msgstr "" + +#: src/modules/services-openrc/main.py:103 +msgid "" +"rc-update {arg!s} call in chroot returned error code {num!s}." +msgstr "" + +#: src/modules/services-openrc/main.py:110 +msgid "Target runlevel does not exist" +msgstr "" + +#: src/modules/services-openrc/main.py:111 +msgid "" +"The path for runlevel {level!s} is {path!s}, which does not " +"exist." +msgstr "" + +#: src/modules/services-openrc/main.py:119 +msgid "Target service does not exist" +msgstr "" + +#: src/modules/services-openrc/main.py:120 +msgid "" +"The path for service {name!s} is {path!s}, which does not " +"exist." +msgstr "" + +#: src/modules/plymouthcfg/main.py:36 +msgid "Configure Plymouth theme" +msgstr "" + +#: src/modules/packages/main.py:59 src/modules/packages/main.py:68 +#: src/modules/packages/main.py:78 +msgid "Install packages." +msgstr "" + +#: src/modules/packages/main.py:66 +#, python-format +msgid "Processing packages (%(count)d / %(total)d)" +msgstr "" + +#: src/modules/packages/main.py:71 +#, python-format +msgid "Installing one package." +msgid_plural "Installing %(num)d packages." +msgstr[0] "" +msgstr[1] "" + +#: src/modules/packages/main.py:74 +#, python-format +msgid "Removing one package." +msgid_plural "Removing %(num)d packages." +msgstr[0] "" +msgstr[1] "" + +#: src/modules/bootloader/main.py:51 +msgid "Install bootloader." +msgstr "" + +#: src/modules/hwclock/main.py:35 +msgid "Setting hardware clock." +msgstr "" + +#: src/modules/dracut/main.py:36 +msgid "Creating initramfs with dracut." +msgstr "" + +#: src/modules/dracut/main.py:58 +msgid "Failed to run dracut on the target" +msgstr "" + +#: src/modules/dracut/main.py:59 +msgid "The exit code was {}" +msgstr "" + +#: src/modules/initramfscfg/main.py:41 +msgid "Configuring initramfs." +msgstr "" + +#: src/modules/openrcdmcryptcfg/main.py:34 +msgid "Configuring OpenRC dmcrypt service." +msgstr "" + +#: src/modules/fstab/main.py:38 +msgid "Writing fstab." +msgstr "" + +#: src/modules/dummypython/main.py:44 +msgid "Dummy python job." +msgstr "" + +#: src/modules/dummypython/main.py:46 src/modules/dummypython/main.py:102 +#: src/modules/dummypython/main.py:103 +msgid "Dummy python step {}" +msgstr "" + +#: src/modules/localecfg/main.py:39 +msgid "Configuring locales." +msgstr "" + +#: src/modules/networkcfg/main.py:37 +msgid "Saving network configuration." +msgstr "" From fd384f334d8ed6725ff818956959b61674b3c327 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Wed, 26 Aug 2020 14:21:33 +0200 Subject: [PATCH 126/157] CMake: update translation lists - Add Telugu already, even though it's formally not ready yet --- CMakeLists.txt | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 4e95dad8bd..b82c116c58 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -140,13 +140,14 @@ set( CALAMARES_DESCRIPTION_SUMMARY # NOTE: update these lines by running `txstats.py`, or for full automation # `txstats.py -e`. See also # -# Total 68 languages -set( _tx_complete ca fi_FI he hr nl pt_BR sq tg tr_TR uk zh_TW ) -set( _tx_good as ast az az_AZ be cs_CZ da de es fr hi hu it_IT ja - ko lt ml pt_PT ru sk sv zh_CN ) -set( _tx_ok ar bg el en_GB es_MX es_PR et eu fa gl id is mr nb - pl ro sl sr sr@latin th ) -set( _tx_incomplete bn ca@valencia eo fr_CH gu ie kk kn lo lv mk ne_NP +# Total 69 languages +set( _tx_complete az az_AZ ca cs_CZ da fi_FI he hi hr ja nl pt_BR + sq sv tg tr_TR uk zh_TW ) +set( _tx_good as ast be de es fr hu it_IT ko lt ml pt_PT ru sk + zh_CN ) +set( _tx_ok ar bg bn el en_GB es_MX es_PR et eu fa gl id is mr nb + pl ro sl sr sr@latin te th ) +set( _tx_incomplete ca@valencia eo fr_CH gu ie kk kn lo lv mk ne_NP ur uz ) ### Required versions From ae14059e8b0d42dc3c12f7a9b01e2aa462729a40 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Wed, 26 Aug 2020 14:48:23 +0200 Subject: [PATCH 127/157] [webview] Config header was still misplaced - use #error to produce slightly more comprehensible build failers --- src/modules/webview/WebViewStep.cpp | 1 - src/modules/webview/WebViewStep.h | 15 ++++++++++++--- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/src/modules/webview/WebViewStep.cpp b/src/modules/webview/WebViewStep.cpp index 3e3e99c215..8e7c48f1a2 100644 --- a/src/modules/webview/WebViewStep.cpp +++ b/src/modules/webview/WebViewStep.cpp @@ -9,7 +9,6 @@ */ #include "WebViewStep.h" -#include "WebViewConfig.h" #include diff --git a/src/modules/webview/WebViewStep.h b/src/modules/webview/WebViewStep.h index caeed07ebf..6916722110 100644 --- a/src/modules/webview/WebViewStep.h +++ b/src/modules/webview/WebViewStep.h @@ -12,6 +12,8 @@ #ifndef WEBVIEWPLUGIN_H #define WEBVIEWPLUGIN_H +#include "WebViewConfig.h" + #include "DllMacro.h" #include "utils/PluginFactory.h" #include "viewpages/ViewStep.h" @@ -19,9 +21,16 @@ #include #ifdef WEBVIEW_WITH_WEBKIT -#define C_QWEBVIEW QWebView -#else -#define C_QWEBVIEW QWebEngineView +# define C_QWEBVIEW QWebView +#endif +#ifdef WEBVIEW_WITH_WEBENGINE +# ifdef C_QWEBVIEW +# error Both WEBENGINE and WEBKIT enabled +# endif +# define C_QWEBVIEW QWebEngineView +#endif +#ifndef C_QWEBVIEW +# error Neither WEBENGINE nor WEBKIT enabled #endif class C_QWEBVIEW; From 9bdb05d4ea54b489aa90535b4bea5efbfc1e5478 Mon Sep 17 00:00:00 2001 From: demmm Date: Wed, 26 Aug 2020 18:19:42 +0200 Subject: [PATCH 128/157] [localeq] rewrite Offline.qml once completed, this can be a fully functional (offline) locale selection option worldmap.png no longer needed/in use working is the stackview of the region & zones models Timezone text bar shows correct timezone currentIndex see comments on lines 65 & 139, not working update of timezone text bar can't be tested if working as long no index is connected (see lines 93 & 168) Still, already committing, since it does more then old Offline.qml, which had no function for timezone --- src/modules/localeq/Offline.qml | 191 +++++++++++++++++-- src/modules/localeq/img/worldmap.png | Bin 102062 -> 0 bytes src/modules/localeq/img/worldmap.png.license | 2 - src/modules/localeq/localeq.qrc | 1 - 4 files changed, 176 insertions(+), 18 deletions(-) delete mode 100644 src/modules/localeq/img/worldmap.png delete mode 100644 src/modules/localeq/img/worldmap.png.license diff --git a/src/modules/localeq/Offline.qml b/src/modules/localeq/Offline.qml index 8823a388a1..5a0d4eb3f0 100644 --- a/src/modules/localeq/Offline.qml +++ b/src/modules/localeq/Offline.qml @@ -7,6 +7,9 @@ * */ +import io.calamares.core 1.0 +import io.calamares.ui 1.0 + import QtQuick 2.10 import QtQuick.Controls 2.10 import QtQuick.Window 2.14 @@ -14,43 +17,200 @@ import QtQuick.Layouts 1.3 import org.kde.kirigami 2.7 as Kirigami -Column { - width: parent.width +Page { + width: 800 //parent.width + height: 500 - //Needs to come from localeq.conf - property var configTimezone: "America/New York" + StackView { + id: stack + anchors.fill: parent + clip: true - Rectangle { - width: parent.width - height: parent.height / 1.28 + initialItem: Item { - Image { - id: image - anchors.fill: parent - source: "img/worldmap.png" - width: parent.width + Label { + + id: region + anchors.horizontalCenter: parent.horizontalCenter + color: Kirigami.Theme.textColor + horizontalAlignment: Text.AlignCenter + text: qsTr("Select your preferred Region, or use the default one based on your current location.") + } + + ListView { + + id: list + ScrollBar.vertical: ScrollBar { + active: true + } + + width: parent.width / 2 + height: 250 + anchors.centerIn: parent + anchors.verticalCenterOffset: -30 + focus: true + clip: true + boundsBehavior: Flickable.StopAtBounds + spacing: 2 + + Rectangle { + + z: parent.z - 1 + anchors.fill: parent + color: "#BDC3C7" + radius: 5 + opacity: 0.7 + } + + // model loads, dozens of variations tried for currentIndex all fail + model: config.regionModel + currentIndex: config.currentIndex + delegate: ItemDelegate { + + hoverEnabled: true + width: parent.width + highlighted: ListView.isCurrentItem + + Label { + + text: name + Layout.fillHeight: true + Layout.fillWidth: true + width: parent.width + height: 30 + color: highlighted ? Kirigami.Theme.highlightedTextColor : Kirigami.Theme.textColor + + background: Rectangle { + + color: highlighted || hovered ? Kirigami.Theme.highlightColor : "white" //Kirigami.Theme.backgroundColor + opacity: highlighted || hovered ? 0.5 : 0.3 + } + } + + onClicked: { + + list.model.currentIndex = index + // correct to use config.currentTimezoneName when index is updated? + tztext.text = qsTr("Timezone: %1").arg(config.currentTimezoneName) + stack.push(zoneView) + } + } + } + } + + Component { + id: zoneView + + Item { + + Label { + + id: zone + anchors.horizontalCenter: parent.horizontalCenter + color: Kirigami.Theme.textColor + text: qsTr("Select your preferred Zone within your Region.") + } + + ListView { + + id: list2 + ScrollBar.vertical: ScrollBar { + active: true + } + + width: parent.width / 2 + height: 250 + anchors.centerIn: parent + anchors.verticalCenterOffset: -30 + focus: true + clip: true + boundsBehavior: Flickable.StopAtBounds + spacing: 2 + + Rectangle { + + z: parent.z - 1 + anchors.fill: parent + color: "#BDC3C7" + radius: 5 + opacity: 0.7 + } + + // model loads, dozens of variations tried for currentIndex all fail + model: config.regionalZonesModel + currentIndex: config.currentIndex + delegate: ItemDelegate { + + hoverEnabled: true + width: parent.width + highlighted: ListView.isCurrentItem + + Label { + + text: name + Layout.fillHeight: true + Layout.fillWidth: true + width: parent.width + height: 30 + color: highlighted ? Kirigami.Theme.highlightedTextColor : Kirigami.Theme.textColor + + background: Rectangle { + + color: highlighted || hovered ? Kirigami.Theme.highlightColor : "white" //Kirigami.Theme.backgroundColor + opacity: highlighted || hovered ? 0.5 : 0.3 + } + } + + onClicked: { + + list2.model.currentIndex = index + list2.positionViewAtIndex(index, ListView.Center) + // correct to use config.currentTimezoneName when index is updated? + tztext.text = qsTr("Timezone: %1").arg(config.currentTimezoneName) + } + } + } + + Button { + + Layout.fillWidth: true + anchors.verticalCenter: parent.verticalCenter + anchors.verticalCenterOffset: -30 + anchors.left: parent.left + anchors.leftMargin: parent.width / 15 + icon.name: "go-previous" + text: qsTr("Zones") + onClicked: stack.pop() + } + } } } Rectangle { + width: parent.width - height: 100 + height: 60 anchors.horizontalCenter: parent.horizontalCenter + anchors.bottom: parent.bottom Item { + id: location Kirigami.Theme.inherit: false Kirigami.Theme.colorSet: Kirigami.Theme.Complementary anchors.horizontalCenter: parent.horizontalCenter Rectangle { + anchors.centerIn: parent width: 300 height: 30 color: Kirigami.Theme.backgroundColor Text { - text: qsTr("Timezone: %1").arg(configTimezone) + + id: tztext + text: qsTr("Timezone: %1").arg(config.currentTimezoneName) color: Kirigami.Theme.textColor anchors.centerIn: parent } @@ -58,6 +218,7 @@ Column { } Text { + anchors.top: location.bottom anchors.topMargin: 20 padding: 10 @@ -65,7 +226,7 @@ Column { wrapMode: Text.WordWrap horizontalAlignment: Text.AlignHCenter Kirigami.Theme.backgroundColor: Kirigami.Theme.backgroundColor - text: qsTr("To be able to select a timezone, make sure you are connected to the internet. Restart the installer after connecting. You can fine-tune Language and Locale settings below.") + text: qsTr("You can fine-tune Language and Locale settings below.") } } } diff --git a/src/modules/localeq/img/worldmap.png b/src/modules/localeq/img/worldmap.png deleted file mode 100644 index c5c181985ecb4387fa315df0d315bd1a39f24fb5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 102062 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 K!IbG=kNQ8gy&jJM diff --git a/src/modules/localeq/img/worldmap.png.license b/src/modules/localeq/img/worldmap.png.license deleted file mode 100644 index 5f43e650d3..0000000000 --- a/src/modules/localeq/img/worldmap.png.license +++ /dev/null @@ -1,2 +0,0 @@ -SPDX-FileCopyrightText: 2020 demmm -SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/modules/localeq/localeq.qrc b/src/modules/localeq/localeq.qrc index 3f7c9b5e5c..a3f8dec9dd 100644 --- a/src/modules/localeq/localeq.qrc +++ b/src/modules/localeq/localeq.qrc @@ -9,6 +9,5 @@ img/pin.svg img/plus.png img/chevron-left-solid.svg - img/worldmap.png From c6a3e9b81669c8c15237bfba329bf0f894df5380 Mon Sep 17 00:00:00 2001 From: Asif Mahmud Shimon Date: Thu, 27 Aug 2020 11:36:55 +0600 Subject: [PATCH 129/157] Internet accessibility checking done by ping method --- src/libcalamares/network/Manager.cpp | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/src/libcalamares/network/Manager.cpp b/src/libcalamares/network/Manager.cpp index ce7f595719..57faae28c2 100644 --- a/src/libcalamares/network/Manager.cpp +++ b/src/libcalamares/network/Manager.cpp @@ -149,18 +149,23 @@ Manager::hasInternet() bool Manager::checkHasInternet() { - bool hasInternet = d->nam()->networkAccessible() == QNetworkAccessManager::Accessible; - if ( !hasInternet && ( d->nam()->networkAccessible() == QNetworkAccessManager::UnknownAccessibility ) ) - { - hasInternet = synchronousPing( d->m_hasInternetUrl ); - } - if ( hasInternet != d->m_hasInternet ) + d->m_hasInternet = synchronousPing( d->m_hasInternetUrl ); + +// For earlier Qt versions (< 5.15.0), set the accessibility flag to +// NotAccessible if synchronous ping has failed, so that any module +// using Qt's networkAccessible method to determine whether or not +// internet connection is actually avaialable won't get confused over +// virtualization technologies. +#if ( QT_VERSION < QT_VERSION_CHECK( 5, 15, 0 ) ) + if ( !d->m_hasInternet ) { - d->m_hasInternet = hasInternet; - emit hasInternetChanged( hasInternet ); + d->nam()->setNetworkAccessible( QNetworkAccessManager::NotAccessible ); } - return hasInternet; +#endif + + emit hasInternetChanged( d->m_hasInternet ); + return d->m_hasInternet; } void From e1ad08f9b6d0b56e365de2b473c07cbe64a3e9c5 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Thu, 27 Aug 2020 13:33:34 +0200 Subject: [PATCH 130/157] Changes: credits for bugfixes and translations --- CHANGES | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/CHANGES b/CHANGES index d1ea088bde..6fc8b49d6c 100644 --- a/CHANGES +++ b/CHANGES @@ -10,13 +10,29 @@ website will have to do for older versions. # 3.2.30 (unreleased) # This release contains contributions from (alphabetically by first name): - - No external contributors yet + - Anke Boersma + - Asif Mahmud Shimon + - Sai Kamal + +This release has two giant source-code changes that have no effect +on functionality, but do touch each and every source file: + - SPDX headers for licensing information, following the standard + set by REUSE.software ; all source files and resources have + SPDX-License-Identifier information and copyright notices. All + of the boilerplate texts have been removed. + - Calamares coding style has been mechanically applied to the entire + codebase. This was already done to most of it, but there were + some hold-outs. ## Core ## - - No core changes yet + - Network access status is deprecated in Qt 5.15's QNetworkAccessManager, + and was not useful already in some previous versions. Replace its + use in the Calamares network service by testing-it-ourself directly + via a synchronous ping. (Thanks to Asif) + - New Telugu translation. (Thanks to Sai) ## Modules ## - - No module changes yet + - *keyboardq* and *localeq* improvements. (Thanks to Anke) # 3.2.29 (2020-08-20) # From e02c21285a68a20bc5e6e03dbff14cc8deed0e4e Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Thu, 27 Aug 2020 13:37:45 +0200 Subject: [PATCH 131/157] i18n: remove the compiled .mo files from 'sources' --- lang/python/ar/LC_MESSAGES/python.mo | Bin 2998 -> 0 bytes lang/python/as/LC_MESSAGES/python.mo | Bin 10507 -> 0 bytes lang/python/ast/LC_MESSAGES/python.mo | Bin 5220 -> 0 bytes lang/python/az/LC_MESSAGES/python.mo | Bin 8262 -> 0 bytes lang/python/az_AZ/LC_MESSAGES/python.mo | Bin 8281 -> 0 bytes lang/python/be/LC_MESSAGES/python.mo | Bin 9786 -> 0 bytes lang/python/bg/LC_MESSAGES/python.mo | Bin 1259 -> 0 bytes lang/python/bn/LC_MESSAGES/python.mo | Bin 2333 -> 0 bytes lang/python/ca/LC_MESSAGES/python.mo | Bin 8366 -> 0 bytes lang/python/ca@valencia/LC_MESSAGES/python.mo | Bin 410 -> 0 bytes lang/python/cs_CZ/LC_MESSAGES/python.mo | Bin 8534 -> 0 bytes lang/python/da/LC_MESSAGES/python.mo | Bin 7824 -> 0 bytes lang/python/de/LC_MESSAGES/python.mo | Bin 8210 -> 0 bytes lang/python/el/LC_MESSAGES/python.mo | Bin 527 -> 0 bytes lang/python/en_GB/LC_MESSAGES/python.mo | Bin 1065 -> 0 bytes lang/python/eo/LC_MESSAGES/python.mo | Bin 1055 -> 0 bytes lang/python/es/LC_MESSAGES/python.mo | Bin 8870 -> 0 bytes lang/python/es_MX/LC_MESSAGES/python.mo | Bin 1955 -> 0 bytes lang/python/es_PR/LC_MESSAGES/python.mo | Bin 400 -> 0 bytes lang/python/et/LC_MESSAGES/python.mo | Bin 1907 -> 0 bytes lang/python/eu/LC_MESSAGES/python.mo | Bin 2518 -> 0 bytes lang/python/fa/LC_MESSAGES/python.mo | Bin 8471 -> 0 bytes lang/python/fi_FI/LC_MESSAGES/python.mo | Bin 7918 -> 0 bytes lang/python/fr/LC_MESSAGES/python.mo | Bin 8004 -> 0 bytes lang/python/fr_CH/LC_MESSAGES/python.mo | Bin 398 -> 0 bytes lang/python/gl/LC_MESSAGES/python.mo | Bin 2628 -> 0 bytes lang/python/gu/LC_MESSAGES/python.mo | Bin 381 -> 0 bytes lang/python/he/LC_MESSAGES/python.mo | Bin 9196 -> 0 bytes lang/python/hi/LC_MESSAGES/python.mo | Bin 11474 -> 0 bytes lang/python/hr/LC_MESSAGES/python.mo | Bin 8080 -> 0 bytes lang/python/hu/LC_MESSAGES/python.mo | Bin 7880 -> 0 bytes lang/python/id/LC_MESSAGES/python.mo | Bin 2376 -> 0 bytes lang/python/ie/LC_MESSAGES/python.mo | Bin 2906 -> 0 bytes lang/python/is/LC_MESSAGES/python.mo | Bin 918 -> 0 bytes lang/python/it_IT/LC_MESSAGES/python.mo | Bin 8213 -> 0 bytes lang/python/ja/LC_MESSAGES/python.mo | Bin 9156 -> 0 bytes lang/python/kk/LC_MESSAGES/python.mo | Bin 377 -> 0 bytes lang/python/kn/LC_MESSAGES/python.mo | Bin 379 -> 0 bytes lang/python/ko/LC_MESSAGES/python.mo | Bin 8279 -> 0 bytes lang/python/lo/LC_MESSAGES/python.mo | Bin 369 -> 0 bytes lang/python/lt/LC_MESSAGES/python.mo | Bin 8372 -> 0 bytes lang/python/lv/LC_MESSAGES/python.mo | Bin 415 -> 0 bytes lang/python/mk/LC_MESSAGES/python.mo | Bin 1964 -> 0 bytes lang/python/ml/LC_MESSAGES/python.mo | Bin 665 -> 0 bytes lang/python/mr/LC_MESSAGES/python.mo | Bin 380 -> 0 bytes lang/python/nb/LC_MESSAGES/python.mo | Bin 556 -> 0 bytes lang/python/ne_NP/LC_MESSAGES/python.mo | Bin 393 -> 0 bytes lang/python/nl/LC_MESSAGES/python.mo | Bin 8059 -> 0 bytes lang/python/pl/LC_MESSAGES/python.mo | Bin 5473 -> 0 bytes lang/python/pt_BR/LC_MESSAGES/python.mo | Bin 8366 -> 0 bytes lang/python/pt_PT/LC_MESSAGES/python.mo | Bin 8341 -> 0 bytes lang/python/ro/LC_MESSAGES/python.mo | Bin 1174 -> 0 bytes lang/python/ru/LC_MESSAGES/python.mo | Bin 3529 -> 0 bytes lang/python/sk/LC_MESSAGES/python.mo | Bin 6775 -> 0 bytes lang/python/sl/LC_MESSAGES/python.mo | Bin 434 -> 0 bytes lang/python/sq/LC_MESSAGES/python.mo | Bin 8088 -> 0 bytes lang/python/sr/LC_MESSAGES/python.mo | Bin 1870 -> 0 bytes lang/python/sr@latin/LC_MESSAGES/python.mo | Bin 474 -> 0 bytes lang/python/sv/LC_MESSAGES/python.mo | Bin 7891 -> 0 bytes lang/python/te/LC_MESSAGES/python.mo | Bin 379 -> 0 bytes lang/python/tg/LC_MESSAGES/python.mo | Bin 9876 -> 0 bytes lang/python/th/LC_MESSAGES/python.mo | Bin 370 -> 0 bytes lang/python/tr_TR/LC_MESSAGES/python.mo | Bin 8183 -> 0 bytes lang/python/uk/LC_MESSAGES/python.mo | Bin 10684 -> 0 bytes lang/python/ur/LC_MESSAGES/python.mo | Bin 377 -> 0 bytes lang/python/uz/LC_MESSAGES/python.mo | Bin 371 -> 0 bytes lang/python/zh_CN/LC_MESSAGES/python.mo | Bin 7379 -> 0 bytes lang/python/zh_TW/LC_MESSAGES/python.mo | Bin 7526 -> 0 bytes .../lang/ar/LC_MESSAGES/dummypythonqt.mo | Bin 1033 -> 0 bytes .../lang/as/LC_MESSAGES/dummypythonqt.mo | Bin 1207 -> 0 bytes .../lang/ast/LC_MESSAGES/dummypythonqt.mo | Bin 948 -> 0 bytes .../lang/be/LC_MESSAGES/dummypythonqt.mo | Bin 1118 -> 0 bytes .../lang/bg/LC_MESSAGES/dummypythonqt.mo | Bin 1058 -> 0 bytes .../lang/bn/LC_MESSAGES/dummypythonqt.mo | Bin 380 -> 0 bytes .../lang/ca/LC_MESSAGES/dummypythonqt.mo | Bin 914 -> 0 bytes .../ca@valencia/LC_MESSAGES/dummypythonqt.mo | Bin 410 -> 0 bytes .../lang/cs_CZ/LC_MESSAGES/dummypythonqt.mo | Bin 1041 -> 0 bytes .../lang/da/LC_MESSAGES/dummypythonqt.mo | Bin 888 -> 0 bytes .../lang/de/LC_MESSAGES/dummypythonqt.mo | Bin 896 -> 0 bytes .../lang/el/LC_MESSAGES/dummypythonqt.mo | Bin 378 -> 0 bytes .../lang/en_GB/LC_MESSAGES/dummypythonqt.mo | Bin 933 -> 0 bytes .../lang/eo/LC_MESSAGES/dummypythonqt.mo | Bin 934 -> 0 bytes .../lang/es/LC_MESSAGES/dummypythonqt.mo | Bin 908 -> 0 bytes .../lang/es_MX/LC_MESSAGES/dummypythonqt.mo | Bin 976 -> 0 bytes .../lang/es_PR/LC_MESSAGES/dummypythonqt.mo | Bin 400 -> 0 bytes .../lang/et/LC_MESSAGES/dummypythonqt.mo | Bin 880 -> 0 bytes .../lang/eu/LC_MESSAGES/dummypythonqt.mo | Bin 885 -> 0 bytes .../lang/fa/LC_MESSAGES/dummypythonqt.mo | Bin 973 -> 0 bytes .../lang/fi_FI/LC_MESSAGES/dummypythonqt.mo | Bin 946 -> 0 bytes .../lang/fr/LC_MESSAGES/dummypythonqt.mo | Bin 936 -> 0 bytes .../lang/fr_CH/LC_MESSAGES/dummypythonqt.mo | Bin 398 -> 0 bytes .../lang/gl/LC_MESSAGES/dummypythonqt.mo | Bin 889 -> 0 bytes .../lang/gu/LC_MESSAGES/dummypythonqt.mo | Bin 381 -> 0 bytes .../lang/he/LC_MESSAGES/dummypythonqt.mo | Bin 1089 -> 0 bytes .../lang/hi/LC_MESSAGES/dummypythonqt.mo | Bin 1221 -> 0 bytes .../lang/hr/LC_MESSAGES/dummypythonqt.mo | Bin 985 -> 0 bytes .../lang/hu/LC_MESSAGES/dummypythonqt.mo | Bin 877 -> 0 bytes .../lang/id/LC_MESSAGES/dummypythonqt.mo | Bin 901 -> 0 bytes .../lang/is/LC_MESSAGES/dummypythonqt.mo | Bin 906 -> 0 bytes .../lang/it_IT/LC_MESSAGES/dummypythonqt.mo | Bin 938 -> 0 bytes .../lang/ja/LC_MESSAGES/dummypythonqt.mo | Bin 912 -> 0 bytes .../lang/kk/LC_MESSAGES/dummypythonqt.mo | Bin 377 -> 0 bytes .../lang/kn/LC_MESSAGES/dummypythonqt.mo | Bin 379 -> 0 bytes .../lang/ko/LC_MESSAGES/dummypythonqt.mo | Bin 953 -> 0 bytes .../lang/lo/LC_MESSAGES/dummypythonqt.mo | Bin 369 -> 0 bytes .../lang/lt/LC_MESSAGES/dummypythonqt.mo | Bin 1039 -> 0 bytes .../lang/lv/LC_MESSAGES/dummypythonqt.mo | Bin 415 -> 0 bytes .../lang/mk/LC_MESSAGES/dummypythonqt.mo | Bin 584 -> 0 bytes .../lang/ml/LC_MESSAGES/dummypythonqt.mo | Bin 605 -> 0 bytes .../lang/mr/LC_MESSAGES/dummypythonqt.mo | Bin 380 -> 0 bytes .../lang/nb/LC_MESSAGES/dummypythonqt.mo | Bin 390 -> 0 bytes .../lang/ne_NP/LC_MESSAGES/dummypythonqt.mo | Bin 1203 -> 0 bytes .../lang/nl/LC_MESSAGES/dummypythonqt.mo | Bin 914 -> 0 bytes .../lang/pl/LC_MESSAGES/dummypythonqt.mo | Bin 1070 -> 0 bytes .../lang/pt_BR/LC_MESSAGES/dummypythonqt.mo | Bin 925 -> 0 bytes .../lang/pt_PT/LC_MESSAGES/dummypythonqt.mo | Bin 945 -> 0 bytes .../lang/ro/LC_MESSAGES/dummypythonqt.mo | Bin 960 -> 0 bytes .../lang/ru/LC_MESSAGES/dummypythonqt.mo | Bin 876 -> 0 bytes .../lang/sk/LC_MESSAGES/dummypythonqt.mo | Bin 942 -> 0 bytes .../lang/sl/LC_MESSAGES/dummypythonqt.mo | Bin 434 -> 0 bytes .../lang/sq/LC_MESSAGES/dummypythonqt.mo | Bin 914 -> 0 bytes .../lang/sr/LC_MESSAGES/dummypythonqt.mo | Bin 1127 -> 0 bytes .../lang/sr@latin/LC_MESSAGES/dummypythonqt.mo | Bin 474 -> 0 bytes .../lang/sv/LC_MESSAGES/dummypythonqt.mo | Bin 925 -> 0 bytes .../lang/th/LC_MESSAGES/dummypythonqt.mo | Bin 370 -> 0 bytes .../lang/tr_TR/LC_MESSAGES/dummypythonqt.mo | Bin 941 -> 0 bytes .../lang/uk/LC_MESSAGES/dummypythonqt.mo | Bin 1279 -> 0 bytes .../lang/ur/LC_MESSAGES/dummypythonqt.mo | Bin 377 -> 0 bytes .../lang/uz/LC_MESSAGES/dummypythonqt.mo | Bin 371 -> 0 bytes .../lang/zh_CN/LC_MESSAGES/dummypythonqt.mo | Bin 904 -> 0 bytes .../lang/zh_TW/LC_MESSAGES/dummypythonqt.mo | Bin 924 -> 0 bytes 131 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 lang/python/ar/LC_MESSAGES/python.mo delete mode 100644 lang/python/as/LC_MESSAGES/python.mo delete mode 100644 lang/python/ast/LC_MESSAGES/python.mo delete mode 100644 lang/python/az/LC_MESSAGES/python.mo delete mode 100644 lang/python/az_AZ/LC_MESSAGES/python.mo delete mode 100644 lang/python/be/LC_MESSAGES/python.mo delete mode 100644 lang/python/bg/LC_MESSAGES/python.mo delete mode 100644 lang/python/bn/LC_MESSAGES/python.mo delete mode 100644 lang/python/ca/LC_MESSAGES/python.mo delete mode 100644 lang/python/ca@valencia/LC_MESSAGES/python.mo delete mode 100644 lang/python/cs_CZ/LC_MESSAGES/python.mo delete mode 100644 lang/python/da/LC_MESSAGES/python.mo delete mode 100644 lang/python/de/LC_MESSAGES/python.mo delete mode 100644 lang/python/el/LC_MESSAGES/python.mo delete mode 100644 lang/python/en_GB/LC_MESSAGES/python.mo delete mode 100644 lang/python/eo/LC_MESSAGES/python.mo delete mode 100644 lang/python/es/LC_MESSAGES/python.mo delete mode 100644 lang/python/es_MX/LC_MESSAGES/python.mo delete mode 100644 lang/python/es_PR/LC_MESSAGES/python.mo delete mode 100644 lang/python/et/LC_MESSAGES/python.mo delete mode 100644 lang/python/eu/LC_MESSAGES/python.mo delete mode 100644 lang/python/fa/LC_MESSAGES/python.mo delete mode 100644 lang/python/fi_FI/LC_MESSAGES/python.mo delete mode 100644 lang/python/fr/LC_MESSAGES/python.mo delete mode 100644 lang/python/fr_CH/LC_MESSAGES/python.mo delete mode 100644 lang/python/gl/LC_MESSAGES/python.mo delete mode 100644 lang/python/gu/LC_MESSAGES/python.mo delete mode 100644 lang/python/he/LC_MESSAGES/python.mo delete mode 100644 lang/python/hi/LC_MESSAGES/python.mo delete mode 100644 lang/python/hr/LC_MESSAGES/python.mo delete mode 100644 lang/python/hu/LC_MESSAGES/python.mo delete mode 100644 lang/python/id/LC_MESSAGES/python.mo delete mode 100644 lang/python/ie/LC_MESSAGES/python.mo delete mode 100644 lang/python/is/LC_MESSAGES/python.mo delete mode 100644 lang/python/it_IT/LC_MESSAGES/python.mo delete mode 100644 lang/python/ja/LC_MESSAGES/python.mo delete mode 100644 lang/python/kk/LC_MESSAGES/python.mo delete mode 100644 lang/python/kn/LC_MESSAGES/python.mo delete mode 100644 lang/python/ko/LC_MESSAGES/python.mo delete mode 100644 lang/python/lo/LC_MESSAGES/python.mo delete mode 100644 lang/python/lt/LC_MESSAGES/python.mo delete mode 100644 lang/python/lv/LC_MESSAGES/python.mo delete mode 100644 lang/python/mk/LC_MESSAGES/python.mo delete mode 100644 lang/python/ml/LC_MESSAGES/python.mo delete mode 100644 lang/python/mr/LC_MESSAGES/python.mo delete mode 100644 lang/python/nb/LC_MESSAGES/python.mo delete mode 100644 lang/python/ne_NP/LC_MESSAGES/python.mo delete mode 100644 lang/python/nl/LC_MESSAGES/python.mo delete mode 100644 lang/python/pl/LC_MESSAGES/python.mo delete mode 100644 lang/python/pt_BR/LC_MESSAGES/python.mo delete mode 100644 lang/python/pt_PT/LC_MESSAGES/python.mo delete mode 100644 lang/python/ro/LC_MESSAGES/python.mo delete mode 100644 lang/python/ru/LC_MESSAGES/python.mo delete mode 100644 lang/python/sk/LC_MESSAGES/python.mo delete mode 100644 lang/python/sl/LC_MESSAGES/python.mo delete mode 100644 lang/python/sq/LC_MESSAGES/python.mo delete mode 100644 lang/python/sr/LC_MESSAGES/python.mo delete mode 100644 lang/python/sr@latin/LC_MESSAGES/python.mo delete mode 100644 lang/python/sv/LC_MESSAGES/python.mo delete mode 100644 lang/python/te/LC_MESSAGES/python.mo delete mode 100644 lang/python/tg/LC_MESSAGES/python.mo delete mode 100644 lang/python/th/LC_MESSAGES/python.mo delete mode 100644 lang/python/tr_TR/LC_MESSAGES/python.mo delete mode 100644 lang/python/uk/LC_MESSAGES/python.mo delete mode 100644 lang/python/ur/LC_MESSAGES/python.mo delete mode 100644 lang/python/uz/LC_MESSAGES/python.mo delete mode 100644 lang/python/zh_CN/LC_MESSAGES/python.mo delete mode 100644 lang/python/zh_TW/LC_MESSAGES/python.mo delete mode 100644 src/modules/dummypythonqt/lang/ar/LC_MESSAGES/dummypythonqt.mo delete mode 100644 src/modules/dummypythonqt/lang/as/LC_MESSAGES/dummypythonqt.mo delete mode 100644 src/modules/dummypythonqt/lang/ast/LC_MESSAGES/dummypythonqt.mo delete mode 100644 src/modules/dummypythonqt/lang/be/LC_MESSAGES/dummypythonqt.mo delete mode 100644 src/modules/dummypythonqt/lang/bg/LC_MESSAGES/dummypythonqt.mo delete mode 100644 src/modules/dummypythonqt/lang/bn/LC_MESSAGES/dummypythonqt.mo delete mode 100644 src/modules/dummypythonqt/lang/ca/LC_MESSAGES/dummypythonqt.mo delete mode 100644 src/modules/dummypythonqt/lang/ca@valencia/LC_MESSAGES/dummypythonqt.mo delete mode 100644 src/modules/dummypythonqt/lang/cs_CZ/LC_MESSAGES/dummypythonqt.mo delete mode 100644 src/modules/dummypythonqt/lang/da/LC_MESSAGES/dummypythonqt.mo delete mode 100644 src/modules/dummypythonqt/lang/de/LC_MESSAGES/dummypythonqt.mo delete mode 100644 src/modules/dummypythonqt/lang/el/LC_MESSAGES/dummypythonqt.mo delete mode 100644 src/modules/dummypythonqt/lang/en_GB/LC_MESSAGES/dummypythonqt.mo delete mode 100644 src/modules/dummypythonqt/lang/eo/LC_MESSAGES/dummypythonqt.mo delete mode 100644 src/modules/dummypythonqt/lang/es/LC_MESSAGES/dummypythonqt.mo delete mode 100644 src/modules/dummypythonqt/lang/es_MX/LC_MESSAGES/dummypythonqt.mo delete mode 100644 src/modules/dummypythonqt/lang/es_PR/LC_MESSAGES/dummypythonqt.mo delete mode 100644 src/modules/dummypythonqt/lang/et/LC_MESSAGES/dummypythonqt.mo delete mode 100644 src/modules/dummypythonqt/lang/eu/LC_MESSAGES/dummypythonqt.mo delete mode 100644 src/modules/dummypythonqt/lang/fa/LC_MESSAGES/dummypythonqt.mo delete mode 100644 src/modules/dummypythonqt/lang/fi_FI/LC_MESSAGES/dummypythonqt.mo delete mode 100644 src/modules/dummypythonqt/lang/fr/LC_MESSAGES/dummypythonqt.mo delete mode 100644 src/modules/dummypythonqt/lang/fr_CH/LC_MESSAGES/dummypythonqt.mo delete mode 100644 src/modules/dummypythonqt/lang/gl/LC_MESSAGES/dummypythonqt.mo delete mode 100644 src/modules/dummypythonqt/lang/gu/LC_MESSAGES/dummypythonqt.mo delete mode 100644 src/modules/dummypythonqt/lang/he/LC_MESSAGES/dummypythonqt.mo delete mode 100644 src/modules/dummypythonqt/lang/hi/LC_MESSAGES/dummypythonqt.mo delete mode 100644 src/modules/dummypythonqt/lang/hr/LC_MESSAGES/dummypythonqt.mo delete mode 100644 src/modules/dummypythonqt/lang/hu/LC_MESSAGES/dummypythonqt.mo delete mode 100644 src/modules/dummypythonqt/lang/id/LC_MESSAGES/dummypythonqt.mo delete mode 100644 src/modules/dummypythonqt/lang/is/LC_MESSAGES/dummypythonqt.mo delete mode 100644 src/modules/dummypythonqt/lang/it_IT/LC_MESSAGES/dummypythonqt.mo delete mode 100644 src/modules/dummypythonqt/lang/ja/LC_MESSAGES/dummypythonqt.mo delete mode 100644 src/modules/dummypythonqt/lang/kk/LC_MESSAGES/dummypythonqt.mo delete mode 100644 src/modules/dummypythonqt/lang/kn/LC_MESSAGES/dummypythonqt.mo delete mode 100644 src/modules/dummypythonqt/lang/ko/LC_MESSAGES/dummypythonqt.mo delete mode 100644 src/modules/dummypythonqt/lang/lo/LC_MESSAGES/dummypythonqt.mo delete mode 100644 src/modules/dummypythonqt/lang/lt/LC_MESSAGES/dummypythonqt.mo delete mode 100644 src/modules/dummypythonqt/lang/lv/LC_MESSAGES/dummypythonqt.mo delete mode 100644 src/modules/dummypythonqt/lang/mk/LC_MESSAGES/dummypythonqt.mo delete mode 100644 src/modules/dummypythonqt/lang/ml/LC_MESSAGES/dummypythonqt.mo delete mode 100644 src/modules/dummypythonqt/lang/mr/LC_MESSAGES/dummypythonqt.mo delete mode 100644 src/modules/dummypythonqt/lang/nb/LC_MESSAGES/dummypythonqt.mo delete mode 100644 src/modules/dummypythonqt/lang/ne_NP/LC_MESSAGES/dummypythonqt.mo delete mode 100644 src/modules/dummypythonqt/lang/nl/LC_MESSAGES/dummypythonqt.mo delete mode 100644 src/modules/dummypythonqt/lang/pl/LC_MESSAGES/dummypythonqt.mo delete mode 100644 src/modules/dummypythonqt/lang/pt_BR/LC_MESSAGES/dummypythonqt.mo delete mode 100644 src/modules/dummypythonqt/lang/pt_PT/LC_MESSAGES/dummypythonqt.mo delete mode 100644 src/modules/dummypythonqt/lang/ro/LC_MESSAGES/dummypythonqt.mo delete mode 100644 src/modules/dummypythonqt/lang/ru/LC_MESSAGES/dummypythonqt.mo delete mode 100644 src/modules/dummypythonqt/lang/sk/LC_MESSAGES/dummypythonqt.mo delete mode 100644 src/modules/dummypythonqt/lang/sl/LC_MESSAGES/dummypythonqt.mo delete mode 100644 src/modules/dummypythonqt/lang/sq/LC_MESSAGES/dummypythonqt.mo delete mode 100644 src/modules/dummypythonqt/lang/sr/LC_MESSAGES/dummypythonqt.mo delete mode 100644 src/modules/dummypythonqt/lang/sr@latin/LC_MESSAGES/dummypythonqt.mo delete mode 100644 src/modules/dummypythonqt/lang/sv/LC_MESSAGES/dummypythonqt.mo delete mode 100644 src/modules/dummypythonqt/lang/th/LC_MESSAGES/dummypythonqt.mo delete mode 100644 src/modules/dummypythonqt/lang/tr_TR/LC_MESSAGES/dummypythonqt.mo delete mode 100644 src/modules/dummypythonqt/lang/uk/LC_MESSAGES/dummypythonqt.mo delete mode 100644 src/modules/dummypythonqt/lang/ur/LC_MESSAGES/dummypythonqt.mo delete mode 100644 src/modules/dummypythonqt/lang/uz/LC_MESSAGES/dummypythonqt.mo delete mode 100644 src/modules/dummypythonqt/lang/zh_CN/LC_MESSAGES/dummypythonqt.mo delete mode 100644 src/modules/dummypythonqt/lang/zh_TW/LC_MESSAGES/dummypythonqt.mo diff --git a/lang/python/ar/LC_MESSAGES/python.mo b/lang/python/ar/LC_MESSAGES/python.mo deleted file mode 100644 index 53869a8e71fa125ce158a02f7d6fe59f231a4dac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2998 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 LFiq`LBC7l^rPWpR diff --git a/lang/python/ast/LC_MESSAGES/python.mo b/lang/python/ast/LC_MESSAGES/python.mo deleted file mode 100644 index d14fb29fa6c947a78f6a271306ecffe5e4d7eaa8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5220 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 diff --git a/lang/python/az_AZ/LC_MESSAGES/python.mo b/lang/python/az_AZ/LC_MESSAGES/python.mo deleted file mode 100644 index 7ecad241f71e5663e7d04d3dd363cd7ac4419684..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8281 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 diff --git a/lang/python/be/LC_MESSAGES/python.mo b/lang/python/be/LC_MESSAGES/python.mo deleted file mode 100644 index 0f786f5e73881c057802b9516a624d671bfbbd1d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9786 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 diff --git a/lang/python/bg/LC_MESSAGES/python.mo b/lang/python/bg/LC_MESSAGES/python.mo deleted file mode 100644 index 6f3e1574037cbd649e248fe754432fa5a481be0a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1259 zcmaJHxJ_h(+b<&A`w``$ajb$1dH)tG}G;{Ebh)WJJSL&CPE}8 zo-y%Y^y0~Q0JITN@T#}z*~H)APw<(R@+nU8^qG0*eV^yuxAXgK<4XhUBya(^51ayC z1A6@c&Hz7wbHJ~y^B-^<&~U^sn!)X08|;G5gO|Vyzo=!*~GBg4@9#!6-G31K1i!GmZf#fck2{M)zG^{lzexBZWCR6>%~h<)y6 z9zQXLxsWsnNP)VKsK-RQ9`U(HBF^d;d*V$=UJO(D`W=eK;>cw}=%Tt3Nj4?jsK_M} zEz*>f5sXs#lrhf2sB}PnJ9}G-es}yBkqu~p1zws zLj&aQ!1$fv(c6h}R)}J0jtI}so4rL(nAyl7iLp_0oRxfCWA;dYI|#Y`Z~orF71_-U7K+UCq5B zW@=^`4IR>33_Ke9l#}F?lm+2f*38UIT55TJlFg>wD70J}(2&MVSQ16TYPIdF87t>m zsl>?e$iU8*X3}<|FXEDMbU0VQCrCCctwKP3-bLIg8Ve@7C$fWP$4;KMnq;v#z}+a1 zf50IfIbUu!>X4k57z>Iq4a~tP4uwN_p?VbEtzD$H?M`xXv72O4T?s?IQ)_CyvVh-J zwV{@Y`mC1KC$(I8t`9m=dw}VKsg?Q4Lgj_}uGaUa>PM+wsSSM(v9D^a@)Z1qAaxnZ zWo-wPp?NTELzQd3s*FC?)W)u|{}6llW(sho&FW<5E?86EoAJsZFc$Ob-p?+k|6vUZgUQjh?D*Wi4&|1q8G90ssI2 diff --git a/lang/python/bn/LC_MESSAGES/python.mo b/lang/python/bn/LC_MESSAGES/python.mo deleted file mode 100644 index 7faa09a2c0131e9cb69fb3bba3dd92224ad746b5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2333 zcmb7ETW{P%7#*PHvOtlz2#Jd{=~FA}wRe*xo6SW^LJ|Tbjnbq%p=#D1Zwy|0WzRN= zR*M8eR0t3+jVdluRFOJS8d21TUL=(M10QuVH7RU4QS zQ1*TZOP#^WXTlloYqDEib9Wm88wVCfzFQE2H6o!IET(qNrJCsLJ z7*T0MJ3+e%k0P05K>(X(=y>irjd^t0vpJaz1J`S`BPP5spi|PXcgE?=;_?JMGaF8| z5GVJJ$u#qP@QIMNgBG(tqF$3VI6d9zo+i_t?|VUmwp-MNmG+H`WG-w6LSD33Bs|HB z!};*gma>Rbhr6E4#YH9~t%#3xRO0eU@x{DIE(jR{p$-Iex@0+MN(#lANe08R5-5$e z#!lDlbkAuc^-Q98J+P^(Q(E=J%HQgU5-vpHhujv%tYci{Q4HlZx-dTZ?)c0Uy*Raa zVfOrdVUf4ONEmZ*!*h&@b|W^H!Wu0soHrKvWl#DTZ!y7Zv}~0I4XbKcL$qYo`Ul>y z@GHE>Vqq*rEQoz3!l*_oR+Uxj7I%j#1J(dz{f=EJ4OU&twwc2!{1U>{t89RdI54U> zLxY2?jz8Bbm9g)y4wc-h&C2!4r6J3z^jl-+KwXwhL8Fak8B3fsYjlDK4d#3F%!&}L zxMrHGtE)vJg?KJsE81bx#I&&{S`(WBF0om*tT#($JuuG}=4R)n4r)>=S_KS^-~n=3 zZy{O1*M!;fnHLOWSXmTvF}l1oZB!5JB$dk}V=BPhqD?hgt$U&;vqtMdVZq0w`o?q^ zHRBo$T521QmWQc+96b}zzEN5_J6yXUwm(5UnkF|@Ot@`fv!!UVON7DEM!NlFnq0?I z0?W?)@?0ODuPOiAFzKc@wulml$a`tBkK0|P1G2G4Feu+jlO0@as0*-M(N_EFUT${a zNt6MeZmPtt;Yi=7$sO%~RNwI)2&af-ijq|pBrgs`exYSJ>A&`J=YoC()#|X{*v~N z8fZEBy-2D8_#WrYJEl|^RPf0@!0TTck;he2sYU&tA<5KGlgiKj;Ss=rI)%`q?}y^d b-(Tpvj|2UY&|<$;4Um)gUxu%v-u1r#1vW$E diff --git a/lang/python/ca/LC_MESSAGES/python.mo b/lang/python/ca/LC_MESSAGES/python.mo deleted file mode 100644 index 69051c4425fe566a8e2277c19284e7bf16a79c0b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8366 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 diff --git a/lang/python/ca@valencia/LC_MESSAGES/python.mo b/lang/python/ca@valencia/LC_MESSAGES/python.mo deleted file mode 100644 index ab2697f1ec2ad9316c51d2e1498f989f360f1a33..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 410 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 diff --git a/lang/python/da/LC_MESSAGES/python.mo b/lang/python/da/LC_MESSAGES/python.mo deleted file mode 100644 index e202699104276c7de0d6d88729fc8f5e37384f79..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7824 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 AD*ylh diff --git a/lang/python/es/LC_MESSAGES/python.mo b/lang/python/es/LC_MESSAGES/python.mo deleted file mode 100644 index d2ab2f33796606a1d1749770709f2e1e2fdecedc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8870 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 diff --git a/lang/python/es_MX/LC_MESSAGES/python.mo b/lang/python/es_MX/LC_MESSAGES/python.mo deleted file mode 100644 index 86619f9ff2c261365807b91a045a463883d461b3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1955 zcmbW1&u<$=6vqczC^f&MA~+y46+~StUGLhdinD1DC2^5eyGfHY>J3eH$M&SVGt16w z5>xfYg$oBHxWIpb!~t>RpFl!_e}O-N?|66PxQ3?fNY9^rZ|2RsH=g(YS~&kb!FUVu zKIA9JyY~A9{9qh|?}20RL-0HBBk&jS3ixNKpL>yzx1l@WB`_%UP4F6Y23r3gK2=T#X@EtG$zs25PfgeD>_!1#)&;eIK2HpUFEcHJ?8|T8yMf^+P0`zsT z1@4vn23&^z8+aZ32dslvE)?tTg7&D_;t zMaAxCZno3w{^yAsd6JB2IyNK3aG>@ZWX7TmPwB%)q${;yaZFPdK43$x8=D48%3H$s(sa@FqE zhO->z_z&G(&XR!cq)ZAuqD~*zAF4WaM#iK%@Vuj=qlU4Ehyg#gJ9r_BS;8`|Jp*6u zwS512)8qP!{(Y}r>v#K|Y0AxpUt3qwaEVaIDRMFV*m!Bogj}WJh-I3awR^j_-1c;x zJ#D}3y5A+C1IRW^8*an5bb^B8T=Q+s wHHu`WRzl_!f)8O2zA5Z~d2vx|R-lQ}rJ*3JeQCnp0RGdkE#Wc*zccV!e^`-n2LJ#7 diff --git a/lang/python/et/LC_MESSAGES/python.mo b/lang/python/et/LC_MESSAGES/python.mo deleted file mode 100644 index bc59b5fe47cf4561c00fdb21c09ce8761abba066..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1907 zcma)*&u<$=6vr1@D45?rN-M$PMG)0)v)*;6Al)d3lDObDZmiUexK)$g@p|IjneEPO zeyHk=0~|SU;EE6jE}ZD82P8`zxN_$o0EvI0-|^Z>+~AUtoeKKq@6 z^%mp<$d8Z)gY`9d5&Q=H5c~oB2>czq1pYnN-+8_~V+nj0_M2n<9(Wb{ebC1L z1lssNKpX!rcm=$0#&LXb6}0;XJP&>k_HoBA;2iXeFF4L+FaT{F2kYRsWBoVqJ?Q^{ zwvIC|mU+DoHlVwpJ^vm!4}Jw!!Joke@K4YKopa^B58A$Lfk?x79a4e30>=o=>`}e+U`{`zNO4WJXMA61;~Xpd8BSAW z&-Ux&D&$(*EGMZ`b-o&^LK&L&UQ?umL1ttYEF*3;P;+?A=ltaQ)^ zXlRN?Ag>)B8n+d>TRhhofPgyJS8rYayh&Tl%{#4)+m%h8soc129gE2QtcbPSRRL8x z8}26G6*k6QV}=K`=r=xf{Uz7GMh!ps`05oOtFq3tal1K_I$=iT0kv5qG;J6zi#%Ph zQPy0M3d9^bErD)mB^u$1Lodj>JuTlD=; z8Xh-ZtV9QaN!*7#4l*Qa_`dP7gbBG!VV~uio0YrW8}8DPpS`NbbGIo& z72#t9w6rbEVV(hTQ|Tl{&Jy>A%2OSX%toqSSzM;_?@CqD+zK^n%N1w*`bcwIyO`+{fx`Xj+Wd?0U2YO5-g18{f7!5?eQy3Pp(P*C9x17+^y4zVgt#22J zi{0^~y(GvC9}OSXou|$C{@lLZ4ihm;B8C?*;6_B4zOhBp@NwV1U28vXKALsx*sWPj zDqnC`6j8A~yFJrh&uGk)V}}g}BI0FvCgGz`H|y~>d1`BXs-i>diGpVKdn$!57>fms Sra=!Mqn}73qJ;HrPo4k~IWF@6 diff --git a/lang/python/eu/LC_MESSAGES/python.mo b/lang/python/eu/LC_MESSAGES/python.mo deleted file mode 100644 index 6ec9f5277ce928ae017aaca55c6c5927f1abeaed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2518 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 diff --git a/lang/python/fr_CH/LC_MESSAGES/python.mo b/lang/python/fr_CH/LC_MESSAGES/python.mo deleted file mode 100644 index a063ac8ce03b08231482f0194287c8b9d331bc5a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 398 zcmYL@!A`d~`@Ie38RvRgD-mSBQVlqk|b(+V(UNN;l%x<1hEIcs z5SHP5F`2!1b6zTK(bQxjMfaP`pjc7xq8Xa=Pf>f&h*?gdL;PDr0z|st6MA)hL7cp2 zCbJF8IEpzdD2z3i$r_rAO4x6%b0*UkG}qRahGJY*RoiMNjacz*J5dErSk4Njxxv=? z4ek(fncY5&O_L~y!z;E@u#vhbYaiRbK diff --git a/lang/python/gl/LC_MESSAGES/python.mo b/lang/python/gl/LC_MESSAGES/python.mo deleted file mode 100644 index d70c91133d008dd016bf89e7bc75dd23fc949527..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2628 zcmbuAJ8T?97{><)uj3t_1)whphBMCI!wJNkvBcqXA`?5d>`Rn_g7NO$-6Xp+%g$`< zQxs9r)6gLy%1BV9h!ly+^r>hgKvdADpyEG!yT0=s!3nH1_uF}Vv-ACD=6`n%ANrc% zc^Tz(l%G)EKnWkh51wDZ*T7%FW8h!lTi}}yGxiR+2)g=Z@HqGt_yYJN_!4+Kum297 zMEx%4=9zh95Vr=pc`WF@`wch`-U4U9yI>7GdT20y6Z{nQ9nh`$XYezu=}+(|>MM^i z_93Xj1@L?DBk+&BKJz$Z@1ZWiSHW*{-UJV$ej7Xi{+9EVCkE^O1U!ZIFTl6Ko8U5d z2YeSSKgn1f+yq^oUxGdG7D(W+5@T2b}@nHW-HPoZFn zOjCeC4)%>PZ3wVE0VE!wz(mxd>zH1u!6PHDC$$( zw>>QQlHRK9Z!uQHboClrR>tx$q?r4cF{!B(EmCz!D^YapYo98sG@1^IJ_HRl%EY0o zN6a+}v@qlZ7CX{dHloqL4BDsBy~mx?#b!}A5lA>e@>wb(s4(;f`^7S3L@0bK0_y05 zY)=#;3N<4gq@k#=^+fx^7?*z`3YDkIzD|`z&Q+Q!TMf;ogK4%QB7J2-slC=ookq6y z-nq3W7H24gf+P)zD7Jk<2B``}M=Ina6>VwT>xO!ZhsNpz`$${`V+mH=F|V-mDsq_& zzHa(B2NCuUNne6G-g4kw5Q)JdZ_s*k@oe+V5?xr@*j!#aSK1Jjst9*SrmJMYZVw?*A_f#&>0>|Uvfp|p0%-QRIA(D+ZF4AWk>8Fm8k0TkViZbrfLyms~7`%h|UdjJiYr~ zySosqIgym69pR3$OE2ciSro^`l|zT)tc}g@aC9eEcs4HcI-F&0bk>^5l{?^`)$s&< zpQmsP9Q$T&8fZ*a(Y~*Fc!i6YwS#wKV1Ei*o;jaj2gPL8n0e-d1m#va9_RMLh&(f$ z;`kVz20R$3ng7K(k5ts-G8Y<7Jt}o(mOidD!i*D>W14991}t*VT65!ca>bcvjz~)* zmRTJ!%qAtm%49V$&Kz}If@bEI*{K+uqp|dGwsyZG*d;C%GE1SCyGig%?>6x$>NPZaj@5&&V(PzBV@prABXg?qIrtB{x=TMNv8&Jr5@d zS|*FP>HIZV@Jbs8Gb`i@9&2GC(-Z~i92WdjHXe9lj#Jbl;RBEeNFRlS-rijkui%9# zQ8U3IIA0>;{umLgUCjW+HL(0?1Z6}pU3*ck+^UlT=Zz5oCK diff --git a/lang/python/he/LC_MESSAGES/python.mo b/lang/python/he/LC_MESSAGES/python.mo deleted file mode 100644 index cdd79d657a53de8330d232f84dea1b0850f1c258..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9196 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 I61~g%FZYfA>Hq)$ diff --git a/lang/python/hi/LC_MESSAGES/python.mo b/lang/python/hi/LC_MESSAGES/python.mo deleted file mode 100644 index 8b12ae6dcc5a26193270026013bc989f3e606943..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11474 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 diff --git a/lang/python/hu/LC_MESSAGES/python.mo b/lang/python/hu/LC_MESSAGES/python.mo deleted file mode 100644 index 60592e1b5fe95af68a175fe61e319d3c7fecfd53..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7880 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 VZPRGDNu`Xocf+}E+u>^8`42$Q1%m(p diff --git a/lang/python/id/LC_MESSAGES/python.mo b/lang/python/id/LC_MESSAGES/python.mo deleted file mode 100644 index 2a6c5294182d69ae0a5b8a723e78baa83cd5f2cf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2376 zcma)+&u<$=6vqczewp9p=KaM4~)Iz^>lY@9E=bo~%K2YvxQ3;qB;5B@gl{|R0| z{~qYpSvXP5+XCG>7Igc51ulc%gA3q2um+wzS=jG_*U{etozK667C!w268fJ!%-9_G zDflM%Em#JB9rgbn_0K%Q*eQ%R!56{n;B%k>UA&)xr@^m50)GV0f_Fi;{)tB!y9ky+ zw@)8*>wFHL0lxty_zUBgTq^Zrx^0Wh{>(N_aQKqNXw)kt!gq#Q4X7@ws`G#btl|50fT2%9BI4UNg7J z*TRrXu-KEvvZ);XhtYu?-QVtt9v>D3sX)Lfg3m({eud$$e=u2wjEF?n3ZHs9CEFKc zi*Yt%?PrmwuJ;ZlT=_ErR@^nOu&XL|krca| zA?`tp^Fz=#kR7k-d)Gv2aLMbmeQ9;$(&aU}wzjj|+`3ZQ5s6N%*D`_hy$`d%cx_#$ z()O0OBW_AJ$7^sa>U6%g_^wx5@@ntVVy*u6g@qcP(k3_7Yo}b9h{MS`eZ-a3!=Jtj z>HR_eDZ&qen9B&B#uv}IWtK2Y1sMYJ+JeV*YAPR>(nzjozHe<}>ecFCFsN9!uI!0D zH@Dj55s!H)Ox0qRsh+RZ-dU_lzgjM}nys}-h>Mk4X;mvL6kHo7@ZE|%TSb*gwM^YU zPmQoESKI5}(!|bf)f1_=hGO$^_;p(9NW1T8oupsdjQzw<=U9+;dOvUF) zZMnoQ^N>2yaEgTr!jTAZBgZ%UfI)^EP#oH{CF<@NR<81nV>VL1X}^x%)?H(^G3D`0 zwNXbzSxhO9lS~DyodpmlKa1r^kSffbYsmYMpy~0E_@MAYVZHoaVJ&2*sO@4L1(?eZ zTZar6N>eC!uGGcO+~|q~TbFFxMN5f@Q*DHCS9@P>s#9WvThi4D2uy!Ri%51!;<#@+$%6#N!Eh4zU@7`qG(foH&V@GRH@&w-zV&w)RHPlNZt zSHR!Fm%-!5@^wywFQQ!op9kLsUjpmktKf$qt@A1PEcg}p4EP;*2K*5`3;qGpzNa3| z*O>(0M0*{i@w-L;*WgoVe-8#Y<4@o++G8hjehdzw{R=n=vd0)30j9u9;3jwl`~oCD ze*;f~4?qqMJf7172hm;x$u0q306zlh{GWm3|2H7T^XFpxPmtm;P-5&NI0$;+B3K1K z0BM~sK|0^PV*CMk8trpWD-|{!usOjbcst zp0}61<}<*KBynw1y{Ai;Yn7e7AsGX*QKFd48Oh7Ln|nqTHUeWfYEhoruaaZq75bN*-^wyuou6x0O8@=V znv%$spbK2jZi%d3uh)wlU@wRY+98&y1| zd10NmW`wq(aIvZJDIrXxF2a0-Ms*`ahP*W?q8gvmPMQ!7rjnm;I+xg5rLwiPRYuil ztLk#Q?8i|B)gmGU%T^qw*~&<@dS$qxWaUC>VQyi%bC%(9wS>}iQp1Ox1Wr1+?J7wq zlpce22xFz2xVbjtjdtv4tGYDaw1$kpml_}4P;SrF8dtKk9OBxC-b`#FTjM&(ns#Dj zjOTwR&TBq6!G|x5l~8({sBcO*l3NHtUtQ~xG!vs%d8m5y?63vH}}vTE`Y4X{ql^YvGabo!S(JJj?Y>#dNgx)$gNqT}xQssB8g}IGXHt2@^VSLA!VT z_bGH=|MQ&u`m#(44|=kvYywr(qmNlvI{=mrk?Upm90Up99YMow(d;(pTA_$xx5Xi{ zneBZ*H?!XT!r2w`Ktd1wJZ}dDG+$92rlZ+VHg~_4wkPCzI+N!yJT#HHy6Q}j@D*nL zjWfy3wD?HYh4%JLSjexu>}V@}0v1zzCHBOZL+LZEg+fB$cxtm0^++y0J$=uWsc_HE d^Tl07vY}*=()qo|wULhWcNJydR)Ru<{|4sJQ4jzC diff --git a/lang/python/is/LC_MESSAGES/python.mo b/lang/python/is/LC_MESSAGES/python.mo deleted file mode 100644 index b56cd6fbc416f5e95077fc73f1878b18f13b753d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 918 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 Hfzt~86r2T~ z`z^z`99#fi5B7rMm)+ns;D=x*c;@C z^xNV3L*RVw9|MuP2j7b$PK_>gEJ`>{)|KX>jnP~X24rj$P+JvbGSbTV}1oL09S*5 z1Utbw1osxu2Bj`Wzz4ygtqXNR}7|B7!j z`H~m*fNKU_cSZZG2|&kr>LgAO!8h z3;9l&>PuoMek46Kr^=6#AJB!q#0R(Xna5`upBwqK@sSwGg+Y=dr|4U$fIr#=6-}r;3G) z>04^ZbbBxN*39nEzpJ#F%c-ob(tWPu_{z2XqH9|jWx1~7DjB1O>|&l7?M5id8}xiD zpZ0VAkEpq3M&+HN?W=;5<$n*0X$1u3F}V;eH0XnPM8O|K6{?4E3I(KYp>d8Tcn zteMFu&vI8~)1suAx6o4gj&h53Drc>-&`^U`KAIB?veaGK-adc+Vk3Hx$$I9BoTWnZ zGRntKmajsaW9gCC+T%%<-7qIs=1WcbLJQ?hufL{R(axSqvAmPX_6)|}iPd$jyt4`u zn|;>fI{68`HsEGSojd0*ZVZI#$>ywBcsS;+2foOl(DkPjcJEz_TCbSQ2DLy^)tDFk zW~tkkEuTw-YWGVDmc49VY_*qovNShH68e40@3Zn4QkxPdLFB3WoUGleB6*p7+8r$T zvE2HKGRCs?Lkh_oFbj>(vV_ky^F3bU&pC%$w3>d*_si&XA?q;MwMc)2*9546EXrqG zGhOuCjrm!xkTVBW-n7kLONuv9Git!}n3#6*g`DME#{6PFKd1_WexGBjmCg#LCx4;D z3upHwQkmKt=5s?Q{`aH9$fw#Q5Pj+66L!A$p~4NH4I zRAXflBB|3zd4&=(Ijn`mkfJRDR5mX%CJ(KdY%I*?a^i$yL1$kWDZI8QTtKaW#&V9C zvE2G^krMS$A^f< zFu|aPLOA)j#X^;$V~rls;%+DAFxBf?1l6s3SwDr+k_q9FsyQp|6HlRA@pm*L&KOvu zn6vcUQ;;)j*Huv_NszI~kVy3Gf@|F@PMO^y-z0sCUMN?Sd{TJUQ@z<$maTO<*~F!; zleRoB^ngw%Pqj^HON(2GOoy7%<~!uq)XY?4nULJLc-DR$AI${IoIC>enp&o9`2&vI z-&kAi#=VxW!_#NFnE~-enriOncM@7Z5D$c@Oi^`*TMOwQ?ov&e6FrVuy7{Su&GL|{ z_d;D1#63|y(LSN@tllMwvP;+fV%1lc;6YJjCn2D+5RkK@f(>1}mH_H%#JT;xE zxh1-B+86Jd>q$j}g119nHg<6$7LEf`OLnl$Kfx33_Nv$IzN-Q4z^^ z<9-?kdENv2v&S@MQq4Q$k8hG}rkX7LpxJJz^o5hjfWc|RPh^nHeW1}eM8YM$ZXN4! zbG<=3t$M;;P4Aw`MwcEJrddg`q!wjT_gSt-c)HZm+veSQ+wBX~eG8V|yJ*SXla^VM zuBpXdZ#I*fTkQ2x-AonYAh_b5iqZwY$`e&gnO%I%lRjZ&K4cyRNUK@r%bC zkCUZ(EH|}))*?f6y41`SS-+-dms)8~TAHJA&!rYRZr-aT;2SFUgZ((ww*!wNpV|rXiBcv zG|Gs3XZgK+ROFX`8&oQo5))l?RErK%ELSb<8aueBNsuhp@*pJFD{%(_58~3n#LIuMs-V2-jtNm5ZLOb&7bVp+aymcprx$`wL-bPsIv|y9vIts2*;f` zLd_k;zfF^MqkFnj!}j+yXG`C9no~7VP!`xp1^!0Y2YDKoV$3Io93=@@Tw8bp{(wbx zh|9urVA9pKp+1=!!XcKw7p(Wvl@N+BlKK6ZH5*v7|NC>T^W=)k-k zRJKcOg#VrkDvxL~ITTdjzXramjtp1VK?<4_8_uyOKiS6I+2g^4!zcDp*3<>Xv$;-q zA~4!8n$ERS2O%q$Q4*47*C9K?ZALptm}g6{wsd^YJ11U)c0$K(4NB1JHi;e?)Wna+ z4zc$B_(+V6)sg2n2JW zIv4Ap(Kv~M%G25mj5(;ktknxWG2Tx2hYhR}rAHZd7->0ZgBAd1w0JD$b7~7u*3I&u z$QI5WmwIvxk4iIPa(Eh-jo{!j)m>x-^RQ8Nu<%g+C8tD3^e;C{TSQKb+v1ZuJ1&U! z)7k<4)Oi)#qVwm}bu#=(>Co8b=NeM8QN&l!lmw-6vTls#V?3F6?C{a!PZ12gCAaQ> zhUs69A9?kps;Y5f%TF|jl@1DPY6eZvL_HdmHtKzn>ZsnFCo5cjzNghR|S<(U1_7yeB5$$H`(8$Z`3HHOx}iX$iXzf|4u2)rIQJ`HL&)0b|u!uZmR*PG6uG}@vRo4Bt&xm@o_ zzu3$Mii0zER@ZHe$r0Q1RwA1S-*MGzn)fiZF=fBVmLroxx-Sj4crjAl3VpxX>fMN{ zu3yKp$6tNt_zpVLEn~Z0i*sGJED2210>=j!Ea&YBF^F~`qyExF=rloh(zVnXepGgx ztw%KP!Mb57kS6R+NE+1*#crJe8(Y>H)ZP%ghVugJJ}zrveaqJ^p}Jy@G~IIGY7uyy zg^3vd;f44ugJj%Sx58mv5^Q~mUN+&X+VZd#TIAAkO3 zF(@%Ksy4LHC%)K;4ex!zB2Ank65eScUe!(>k~#E9{NEG{9{<*dDvKXBzx4?hZtW}> zKy(-32~O1wOrjx)-u@&#P7d=HNJ(cHQc2VXMGR`_*Frq4A2G)FC5`WlVEFMbiGs53 zSlIF(BhioO)N5w-V~4Sg#H@D%p~a`%Ekd~`@HSqw^VYg_sENKj2F$9qYEBCc5Wo^6L>@I@7hp*?exYY#y zL&8}}(S&`me2toGYb!%B-fp*TtC=)n#dqygl{jSuE1Bj7TjwyiL&&X<^BlLl z>3A9)g8FUZ4VAQ9T1Y-Cm%#F!#Z|$C?4fkcwBa^d~`@9y~yFXcvtxC72*Ah9I)Rm3!SSOJ%p+v_%hm!4D4wWn6-8Te(_*ZSt5*ys)EJ2C z%V_aBnZKZgsI+k~v$@RRahqF6G{Y#K!$N$@+5;o*1j8K~+yf1Pc5y)2&FvNSLeE^~ zTb>I@1TPt$a;132adYilWf>v6-LCBnS5~gXzMbllq`crIH^LITf=PV6123NBR-r)zGkaQ(Mr4B_#vezg(?B9-b)s+{5QUAjX| jhBpeu#n$iw#@dvYVO9N&w%_UD|F+*$_yGs49%}po4svS^ diff --git a/lang/python/ko/LC_MESSAGES/python.mo b/lang/python/ko/LC_MESSAGES/python.mo deleted file mode 100644 index b15abd450a8deb0799083f3f81881fec92d42570..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8279 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 a%Z-&KjEt?Ept}AWT|es4|F+M2r1cB2z-TrA diff --git a/lang/python/lt/LC_MESSAGES/python.mo b/lang/python/lt/LC_MESSAGES/python.mo deleted file mode 100644 index 5f976d9ce8765647927d2ea356e71c1066a4699c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8372 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 GPJRIf0&*At diff --git a/lang/python/mk/LC_MESSAGES/python.mo b/lang/python/mk/LC_MESSAGES/python.mo deleted file mode 100644 index 1680c8dc179d93695bfc46dd429eddb3ad39ee6f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1964 zcmb_c&u<$=6ds^JF)e6zNbwlvU48R_jeZ{C~l&Ak0~|9WB1 zR}AAh*gn`Nu;*ca!rY+87<&;o2HXz}fCqpd0AB^J4E-O6@pS0l9mZdJoUxaYHwByo zeh75?zXAS)oZG-7@Z&vXW-ujR)NQ!Vyp)I40s&)2k?F1 z-lqrg77+9d^z0d!8%SY=e8$+bLqwT;Af4@nJpn_Be7K&lX|9yE)YPga+ucOatZXmX znffTOlt?S+o$lXFL zOJmtR2lIV|f&bu*eV%rRhZc62)Bcwnz*a5s9W1A+>Zu zc0r6Xh6xnwup5aYyXT7Am!C`Y1+aOw&^rfmbUvWDsp*qb?^Wqsb^c84^r^zU=;*|H zb<>ui_indsyoL^_Fn8LU7Z;`5FK30EfK zRwn_~d19radGu0WG>ekniu09ZwD3+R(N?RN%c$7Y@$n;$c>+YL-9-<)hTyTIX^K!Q z$rT-1u(o4@QfX;vsc2m(*%HfcZ>h;64tilq7Q0Mo-1pxsm*U0J;X=JuuWsGCT=Wam zT3MlR+Djc=$BJcJLhq%Tq~-!ojIfonjT7F)R-P->5{Xw;O&vw`19H z=N!?UAO3wFr!7dUM^MJi{FJ?PJ?%TqAbDdXtAW-ah&*sTTS>1&L0{(5blY(|=%^3L x{Jgmp%IQN#x4^fSU2_6n17$D!9`0pAYVW~cSg!F^kgq$H4u55j{vNk!)<1s+OwIrR diff --git a/lang/python/ml/LC_MESSAGES/python.mo b/lang/python/ml/LC_MESSAGES/python.mo deleted file mode 100644 index 60415346e48265a9f8b92a6582ad1cbcfc83f27b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 665 zcmYLFO>Yx15M915d*A?94(8Shyt@e%O*aJ5h6F`4Gzy_-oQ<ZI5C{Rs zUbt|eCxrNtS3&~HKS371gz>g&M|$&S#_##-@1^tm9>h7o6~GeU0$?5B;xXVdfE@D- z`1u*ndj-4WTu(Y zEMb9=>Fw)o!xixJbVgE&N0j6->Vtj0;e0+1v^#)J>2{EaJWQN`NUA~& zCKcAB=w>aMD!=q^N?>sD$oK>ZV4C9obV_4#M>~3l2!_ zlRnLiW}fE#oS%KSyiPn9o-5C(=f=}0^o;zn?`v~&P-@MG%z?~SWGSsvMsu7F$4|q@ z7%$_+>umml7P2-LNa6~$BBO2LNM<-j>6|R&r)oT8B0zH7W5EMqAz^(SFn)V?&AiaF z(8X31l4Md;94EpG*eKlI0Mw3Cy4&r#V1;&SE%)8rR5TZ*sDzb{g10!@W9&Ylm8Bh& z%#!$+H0UxkHX5V`l6}=a0?0kkx)e$eaJ~`NNr>LEDG85v&8xMvB-XiEDP3?JzAHGy k;#9#VJKGyj@Kc7DO>Y*MY&ygeKF>;IyS|Lx6_sI7Lo+tm<&oBVZ|1{+A z7Rox&wxkzwD{8QTw=((@NJkeXy#iw!t#YzDIeUBZW=^i=>ko^|3x5s0HjXZB-IVln zS6jN#Iq_GQbPb=IA%?yd4ssGPo>G=kHX)qlqw!0I^4|&T=*9?TTj8|HNtVPyGBz$J zLRL|nWJLtyVw6n)-BX!fSA|I9Sd!yW%o8cIsGN+eEah2R3Jz?PKwPm2jHBy>C!9yG zj_yihB~|ZmF1i8H<>W$}J=Bd*2Yiaw=V2k(WohrH^NwOvyYo|n%(;i zr7AFVuB0v-RpSzh#{FwJC#vvQ?aqjno@>)t{OIpYJBy~|_j7ij$cq`_hg1LWA;I7& Jw_7lQ_X`j#n(Y7p diff --git a/lang/python/ne_NP/LC_MESSAGES/python.mo b/lang/python/ne_NP/LC_MESSAGES/python.mo deleted file mode 100644 index 1d91bbdddb08eafa1dbf60303e890f96357707f5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 393 zcmYL@Pfx-y7{)Pr>d~`@ns|U{X@^Ef$qop^5Cs;TTumJ>qh@QDwg`R@zn-7P4ik8i zU*7+DpWpMdpN7|o=fZR4IrZFlYK5MeA9j7LcMeL7{)Eht@scdSSg94qNq_L%e~R%U zp1+P~Q#6N48%HKKmrL@v$t_7W$0(VRIef|bh75%Rjyo)PAS@)Tivz}Q@2;5_dJ!t$ zh#W`?qU3lAl_(@`?qdr#*UnXzQ@Y)5+s+7Owf{e5&t?yO)(ng&g{!gQ(!j};aT0PYG1Kn+JH2?qr diff --git a/lang/python/nl/LC_MESSAGES/python.mo b/lang/python/nl/LC_MESSAGES/python.mo deleted file mode 100644 index 4c862621f9ae4faf66ff3b5c949f294f5d7781db..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8059 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 diff --git a/lang/python/pt_BR/LC_MESSAGES/python.mo b/lang/python/pt_BR/LC_MESSAGES/python.mo deleted file mode 100644 index a27bbf671ae34c2f1fdd94ad094e8a21cfaf3db1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8366 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 diff --git a/lang/python/ro/LC_MESSAGES/python.mo b/lang/python/ro/LC_MESSAGES/python.mo deleted file mode 100644 index 3844e22d8ea8beacddfb59637432558bbd6ee318..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1174 zcmaJ=&2G~`5H_X!$egHv6GDqbDqCe^yRB&I;+FoTC_rhHrj?4gY@AK9#oo2N>!vB? zfOrLvIPe4;VaUmvRrr=?;^oz5g758ES|-7yNH3Po{Er4sYOL5WR4LW`gHkm741|T zTeZ#SW`iaoRd_>oSsSlpU5T5*M`nE!H|Rdo8oWjn_0hEJ&0)8K-Ff7>{>y#D9z`GfISKOo|_EAH` zgloCgQ!0_Zpt+DR5-S|QQN4VUe+tS=BnU| za%ggpz%3L#P)-sN#urf7BdMe+*lw=l%IP^>szXy;<)LW9Pw-Kt#nefkK1zjIkFu0R zcwMBi^bt>TQwB2&Xt)h59t7T!>syw^OP=d4dh_pby)^B6w!L5) zPeiMj#tsV=+yC!CQgZn9ogSqgRWzc-^bOq^KaP}*Es9t^!NbU3v!jLQ#^L5g^88Ga zkMBQ4&mCYWN+T9C4lR!Ma^fCsB(HHM*3KW-u+KGk6YwX=AwiPq0nZ`?@ea%=O{wt* DkhND_ diff --git a/lang/python/ru/LC_MESSAGES/python.mo b/lang/python/ru/LC_MESSAGES/python.mo deleted file mode 100644 index c26778b42e95e02654a2d7f49d1b091de1204fc8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3529 zcmb_eU2GIp6dn~(Rz(HGKh%p_?27wW3c|MA3biFw3$-nnNHCf1+-*m8XErl;S!yA+ zPc=Evqqw(GE+?n0&!Zy4x$>y7T?>XN+ z=R4=#*+15-_(s9=0)89tTXCPF1c846>G|S*MR^DKCGaWW@4&Ude}InzS3aO9&jQy2 zp8-aJ&jCAuuK+dR^T5-<^}vh3b-*IEL3S9l5mrE;<_zwEx9FY9J22vhB16KnVfPW&_o4|t@Uwg>oTlcV{ z)M5M=8#+kme<=IQ(quodGRkm@xJ zq>@q%NY^#^(SvlQPV^2570@f#T0uFa?vO?H25Ck55f|0B^iXZ-L0a;monG=Id4Dw8cmNPGQ?M@%v7%1^+nWQz86(yU> zj%33PxrnUnyqc|E(+yo%Y9?h@Pp3@?!)emuNDL%pLzdSOq-LqfoCqr&s-6b1FqxGz z{8)361p-w)x_rmAtPGM818htvTIz_%g-O%-a@ zglTZ*TUO22)uUuVt+WP~E;DDyG_tBCbgC34_n5FK4Vh|jrty?c)lZ@J%~^}L49ixb zH%c*Q^RUuwnMrQj6i_KjR$o`2q#dwlgw@px6Nv@2pwh!L=3%m|inKg?XPmvNG&i`& zo7N%p-;&-6E4^IEBnDMW%Tv5b)ag)I>61d2iqABY+l)GuAJJ{0^q~}Z6J9sxRhtbT zQ}!8XHbcmY_#FmCKCqw-!cCzv{W8^$c~XQrwa|WU*-$Ocx_7p{yK{Ft+uz>P+qrj7 zpoeEoON6@Y0bL92$_?0|J~Pe&-Frhl{IE_wp|@4R9*XW@v1oit0xKm`#9GtH*XTd$~%sP`8&Q|VC=Lct+IX7T&#XZijK7+xuGw;m0 zW9|fVMLMZMtXKktsaC-2~p2I%6l z>Plyop;ZAp1A0D0mTP^S?ndsUVM zH9#vawZ#x?MfWVuBnm-2P;@82R3^ug{~7GXKPLJNBDwRyM~umXQJw#?Uqk1D z)W2A62W+&w+PB#*FW@~l#8Gii$`mV|OU+HKiRlHzKS!O5K67SkRvYzLBvFV2MzY@+ zS{D=~E_^QeH7Oqhx=ZC1NaqMO9mNqlgDvQAOri6!8Qi`j$rvWkz*4;eeaxL7WdqO+ UTeCmzdg{)}faxSol)nA{15``BQ~&?~ diff --git a/lang/python/sk/LC_MESSAGES/python.mo b/lang/python/sk/LC_MESSAGES/python.mo deleted file mode 100644 index ce3bab491cc55b6d7e18ec3e8532d00de737be10..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6775 zcmbtYU2Gjk6<%ne#Xw2RPk(`FAgN7r@3oyYO`SMtVml=`b}ZWoG({?N@6PpI-`$yI zXZJdLjn$$`RS~Mx7gQlti2D#wR2d|YK(f>nv9S;!9#9cah=)G$BM?I3=Ya~oGy8LY z5;tiWY5m>ZnKN_dobQ}Do+X4BX}Ob^PhKF))Me{x8M)j@Ov!lbHEYcZeR$! z5BM_h9^emv2Y|oK(0Z?B?Z^8gzzWa-eiZmk;HQA!2Ywp(2Jj)^zq5CCn`M0%?=!#; z0iOik3v__A&T~Lo_Z8s%z#juY27Ckf5#XPIcLVM;hq1Mf>f2CM>q246o1d@z!l&z;3eP;@Q*<9Qw2t&eVzgy1U>_N4EUq${ck|B??ZQ`{y7XJdp!l*3yguE z0Dc=t^SlluzyAYBcE1C{w9YuN0z3^I1%3rc{@%>+SHREU{VzcB^F1&Y$sY!i{L?_< zO$;RayaZeaeg`-X+>MX>foFlVkFNn~+)wa__VZidXMwvg3GwSm;0fUKz$bt|2aW;n zgcF|uP627Y1W5Y)3rPChht1Lcj{+&~z6d0_7>FsXSAp}up8{$AJE1(Sw+wWFUj-7s z{t6@>?m}?DRMsIN`EM2o_gbKr^(dZ4@X)+vJR}G6n063f=|eN#}Zs zdCGR`G0POn)m;mmP_WtQxxx&_HmvTrqJPZkFWktW)PmQYZ0Yo=Yp>YrAT~oTx2Cdh zf<3W#_5=)Fyr1!fT%5|cq9g$Y>;Vm}1g^cwfO zD^Z^V3kTe*>;BKK0$;_zN3ThvYrdl}I1sRC?*wekfns*RYf)IXrXB6OJZ2u3d_@q! zdnn4*xW>vg<@v4%g*6>{Ud;SBY$(ZARTbjBUl36~Ti>uwa(EAXRV;{Pwi1H`jFFMJ zXGkP{UTZSP!}4tR`o?bSq~p4zapW5sq$a}_Pe~n8a8?nQuHv=`y5DFHOwb)g6WBcD z#Sr?Sq+r>|zVCa65z!-d-iKMbj5Ip1b%YwTmC%erR$Op&X!S7iZ3gu*a_4b#ltxI$ zB6UEEd6nk`wh{<ZF5rl1eks^A%r@=*6)QCZpipbvCh}^x1!pIdy_Bx3RYj;&) zJit_qw{bngrN8xue;N(-QJ+1s4KU6I!PhNPWqM_YBv_ zEbvT)?HLXg+&^NESc}3_t*iW5e7)M6J>kBy2bQ>*Q;Kj+1cYrv{8`YS_DnhJBK_GB!H3d#M*G%Gb zLu0xp&px)+aB4^>eZf&SvuUh?!>30xqgDS<>#S@_wI++h1nCBJ zwTtz#_wJGmy}2?vs@I(hJ$G^bY_yL2L2(WPZI!G;#jlomzHA(_%N55)u~MI_StGJAgrB#h?dC{umpdVEac74_W7w%cYYSO=(PBqf$h~`hn76Anar_ zuNPZE(g__`;XSUZR`MEaCO@>hCF6M)pQ;LHP2l*Ti*z`C3f5GC*nYtXDBE@rj`KqM zn5-o^I@3cr>C`Y>CLJuQRylZ{7M2)mCmn`l!SkVT?)F8N&QRm|F_I7Dtj(KAr%hvO zj<|B!ghg`6i;5`Rq0G!yg3_v`T!+?hqwUL8{(sDHlNz+aPTfp5x+-iW%H~aI5%~cU ze|I0fCi0U_O(x2X%CEdA;Xa*gRVhUp_tYXPUvEN+%7>c~%Pt9pBij51)udCxAK6wFcRSnKo zc{>Js)6%+J^vA3js3uPM{sGo`H*Rnw8SO_Xx=GD$Qb?6zEedScDTW5BUBy*_#u~LE z_U5zSTHko{*;lN2?qAv3e!*-vIZSc{y4q@Y?^KchzC2^7(`@k!o3Vg_k*)+9!XYVC;ai>f77i{pxdmF{FF z=Mi%-itaD1ykJVhk}nX)+Sd-!fT z&CNZ{IW$svdF}vru_`FcZB&v-s>-uwsUpJ3Er}zbA&5$sm?d+pl47~AAxQTklg;ES z8#Qzm2`FkNfRR@_9z7RuHcn1G5$6KyC) zNVEQgy_h;NbP#Oc&=>9}&7Ic^=5LdVvHZTD6)2PIm4^30;a3{AN zGMTSf&QZ$QlES1=Yc2(oP+M4A8jA5|vuRk(q!DwzZDeYRGgh!A)7)U|mJALEx%06p zaNQdYhVikh-ymL3Nz0{0=~wAWSiZHmESQiT$QDc+Zlm|KkHX_zb!yHvie;u|Lgp00 z4`B~QDVV}bij`&s>MOl86lD2lP1NeZ{u|ZgwNFSC`S1V)+{oSr&iY5&gx&5xYPl$I KQM2ChPJRITM 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 Lsv|`Rb>;s6>l_m3 diff --git a/lang/python/sr/LC_MESSAGES/python.mo b/lang/python/sr/LC_MESSAGES/python.mo deleted file mode 100644 index 377bfcbaa708126fa77af9451be5fe192a1488c2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1870 zcmai!OKclO7{>=F1d>;G_d=2~)>;V4;Uk499n)vAit?xW& z@DuP&@FHmaUICv2Z-E5<3jPjX_rWpje>%X}+u#Gx`ak@5VmAQxV1EX*@@4QC zcnx&G`(QWNagebtumBE#CGaiqM=%5a0lo@80Ihw;6O17|dkWKzXE7m)hpiiF#KYEx z5bXgohLqW3t&d>&1p=_TCIx#sjnBKEjOG=AsX~$Z%MP5)LKP+-zs5Bel zo-azIL#hWgUOY=)l~)9Hp1aV=Mm*oQ%JmwRp_Mp<&1j%BPediId76#eYOH3v0%)BK z|F6m^K5vZzp%+4VmWq4JOS73EX_5_1?bv4|Is~IKQkYFMsg{Bwm6IYCJUvIkwgtXQ zg3et?vk4h~DvH_}Ejg!!RA^kDCI*Ja22Kpq>EX$#(NiZ=lcE+%?To96S8@jH73EBa zc}h*3awf&RXKkF1xE6WJx!Ly}x7TrxQP#~LIr@%^k@}b`?MzD^D4*+4=4r|gXTuT? zXv(X4zg(hzP*e& zUeHIyIWCpZg_-FQr*~J+hAIo`3jq%#)I-2_G-ecSb^4Re1_(@m3X% z^ii@bbO(pCZlRE+t}e1m_fR35r4Ps@sAGS;klPXU7mnIxY~l82T{?e0F@cWT1Dh;t zay@-1X1+CB%`eP4H7}a=<|T6*OLNz3nN1vQG#fbl#vc7_e{Ms!VIs&@$ZSK@h?PEv z;%ak+neR-L7~il8HxpNpbztsNbJ;|&z7FMOW-ePt2pq@ThTmnI0HhH!KOp=~NSDn9 znak#ixoW=Le|oR+ed}*{ud%kz^Im(D1&6i(q;&^Q5e(cwq{v1~#~C+Q5NI1!L4%Oh zdc0kS^2V+;60)MW4e@_CPI4Qzwz!=j&Cg)HYVJ5T^|+!4y|i&w(X*sN8$anPl0xCO zO>yZ+4vK3JwLVtb*XW(Rt>@iaOBxSHJKkG&7JmT$?XIrk5IM#<>^2|QhwLJA%S1@# xE36)V3laTyl`Wrp8n^FrVm8tDR=4e&Gn@A6l6QqRY~hiZ8#a9WE~5B5^AA8r=(hj> diff --git a/lang/python/sr@latin/LC_MESSAGES/python.mo b/lang/python/sr@latin/LC_MESSAGES/python.mo deleted file mode 100644 index b9ce140b0634b42dbefe00b7169c268cc193c453..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 474 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 diff --git a/lang/python/tg/LC_MESSAGES/python.mo b/lang/python/tg/LC_MESSAGES/python.mo deleted file mode 100644 index fc92ff37eb9c67f51543be108be8e4b339430473..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9876 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 L9*S}UA9?-cu#Es=RZ9$b_ymQt&-MK7t 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 diff --git a/lang/python/zh_CN/LC_MESSAGES/python.mo b/lang/python/zh_CN/LC_MESSAGES/python.mo deleted file mode 100644 index ac41fe04de33c9aa7546ef0dbe19b2f23858e36e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7379 zcmbuDZ*Ual9mm%{ttG9sYOA%j@`%MIHJ1wk6+=KI1WP55hM-RCOuM<;OP1X2p1XU5 zYnqt^O-LYts31XtCJ-b=lVEKzBphk$^i5xMd{d?~o#~9@?cQZNQ>Sm*v3=9;?|F9j z{v<)$?y&jX?mo}&`8~gX&-3t?J8nKM;d&DHH*q)JC`mFna5Mhk`pV}e>HFaAE}sKe z;rTrH4e<)djKRoYCw|n40tct0p10k0KW=Ofp>%NgDb&5gXQ4A!P~*o z649<2Y{c^}kmh*?BzeCBssD!{>GKIl{cimtYy_?ZY2K9}>7jr$pMH?$GX;_!*T8Rq ze+4&yE50O2_k(rd!(awO!5Tb& z2tEhi_hm7D2e=i_L*Op(k6=Bx8pbUHP4HRpH24$nA0Wwp29qQ`V<5UnM?sSFI!N>Q z2xQ<&7^U+DN!kp456@Tc5WEFOBmEjc@}CYq3ig9!m*0R@;5C;k@RFWuTqdht2{vq~tn{slKl zpL3tc??K$;AMaX?A2;Eq+(u|}9{}9ua2>B@NL6Vgy`-xqq=%JFMktVohhlQN8#%z~X1iwX02 z(p{@nc%2ljppU1_f7R(T4HT2jHea=brhb}YF+HqClAd)ubqyt^@52;}Z5A=~*mbSe zZm0;Ir?%D?I)X*isNxA1ZFW5SSsDq`f2y$EJGL)9VtzERIto>()_te2CmZ){frtF( zU2#Qgto3GX=6z|1CJ}^IE3;aa7$)L(@q)m$RIZPzwJ=v+I2JOJam$mN8yXe5BCF_N*WqjQzCO^rs$2#Gk4KH(`?ZMztNHKUA0bvdjUxp%G-xmF|q z)ll}E&X>{m@o%1eanG%84h<=fR$ zsU#i!@(3+<>Rt_FErtT88aXTTuPABx0bwFkqe{qvKdIc3z1lyicHL+z%&iJ(w_rANsiMenKYLZW_$#?hF(H+&g*++X_q_CR z*9iv8@>LREHsE&MNJ>qMd~UKRqLtbzvAC6F2#kd0`4VEAb*r@{syE9~6A~y3Wz>Pf zxT&B@Q^AEJ_AM9(y9TN^G*^sBtAxl??qo`1R@%{7=4ogq;&I)exNJ^RF+u4{7>0sv zL7RfjNR$hS%P4hxo8XzvU))KKyW~_YNp%4b+`xTl&mJW>196HnH$r|TMbZ{M}Eq*0-84b+=0 zYB;bZ(P9Rg^lDbpuq)80>{F>vU@NxT)vT&=&7*yK-9 z2Fpt7x7XL@Cc37gvILtT3#k`qO2#n*OWAJ)v52VJ1{@J&!&Iz|dz!Wd*5}&MXc5H- z)M0ZGhJUKr`exPgHLhlStdfQ(cJI-^Hr|}O&I(Jmb3Cf8OC1{C*i~Uk6JvY9zAR(B9@RiH% z>$L}Foq+?{R4Q}evXuMmA5|851~aKC$vH9VynEcf*z1f8+K0w+2Ne6zsNHiecQj${ zRAbpmOwU~^{K~gv*ZJ&j#+GlvcM1ic#e;|fNj$jc5BI@6EC|I(U-!L#^hnRl zEu0zlUV8@**D!@byc0*UFp8+@-t_FaGk8V>C^yXHS$kwcNU-}(+vgA4y*>8iu&_+# z-MP%%8@YDb`BTU@XXI^r*|dx;V4p=tZj1T2q2fNAn6a8>+qbFZA^7oEYW3Q6>I zH=qUWisM$CD9CD)!*HTFObDL{brv;PB6f@0h^mzrAR`xqMqZg=&f90Q^G7lhhwa&; zq<)bvory8~^aHK2M8R^IHn1@gzGk1~|?f6LogZS*! zRTR_N?suk`t6grI*y`1ne{lsP|#YO<6k z7Nz(iEAq6W$eSF_q+ZI*jpTAgXq_2*86xzd%mwtcQ^$)oS@z2VOKsN+$|M9XypR$Oa-*y; zi%GAAt}grFY-Y3@l zVq7TiEgFUUc;?%I6cMJ$EvOhj``)yD)!Qm`T(|S=&|>X;@l0I2WLzyt7PyiU0$E! zy*rA`;0#Jq{v3I7(s4qzm5r@p4vliE!w8jwBLI- sJAbfvb55~Baf$}Mk)6qLECERGyk2};?i@OYl@xE?UDaqeRIQNy10#;7v;Y7A diff --git a/lang/python/zh_TW/LC_MESSAGES/python.mo b/lang/python/zh_TW/LC_MESSAGES/python.mo deleted file mode 100644 index 3bf723b474065bf31e3991f5914b10a9a0dd03e7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7526 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 diff --git a/src/modules/dummypythonqt/lang/as/LC_MESSAGES/dummypythonqt.mo b/src/modules/dummypythonqt/lang/as/LC_MESSAGES/dummypythonqt.mo deleted file mode 100644 index 8192eb723d126ea41fb552102d2849b9111f035b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1207 zcmb7DO-~a+7#{14ZCG@EXvv z4O{@e0fWF#;2iJ=xCHzKE&}~02+4qlz^lMRfI|O$l8~q1lcxx|3Vsg00p0+Qf))53 z_(~rk2#EzD1ZD!$0XYLr_jy`dbJXW8IycQq+)Y9glF6o^9v6buIIRXD9dCMGn-m=1-mAK$iP@;mhg-stn zA%!ql;$>+}R*Xd+3McSwTF8w}1Zo-R&KdYDdZxk%B17pypC*X9qiYdSeQ}d%(H0@+rtVu9jr^)5VmQyTCJqi$(<@+ zNtOf8EHjsR44F)c7-6PUsf=YZVGbo`CTH^db6Uw%Vl40__t9UwfdM36k!HhXjz2=n zbruRPv-gV=#_+zME>-2Bk@w3%#qn!49WFU?uTPsYktn#$kh#W05PI0M--uO_O^?u> zV|LJ|16gVfjUOI3@_rp=^YjF60TNQm$y;b;Z#7aj+>u@tv z)K$?B6}{9sdT($K9nPPj#P2PbHe=JK>UE&(S9_s)UsSXmdm@=`AolES#ilhK71!^m zo^BA$#rbvSuW{Axj=qJe1LRnJ?tRV2iaInMN@5zU0;9ju!^8s~e_Oi)|KHiV9`it! Uc&CTF4i@cVMTkO*PW)T_18YnDY5)KL diff --git a/src/modules/dummypythonqt/lang/ast/LC_MESSAGES/dummypythonqt.mo b/src/modules/dummypythonqt/lang/ast/LC_MESSAGES/dummypythonqt.mo deleted file mode 100644 index bbe53ce956e46d3062e498c72fa2b7c9e145949c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 948 zcmaiy&2G~`5XToNAdEQB16&ZAa%n19JI)~rEnc1)TvAFP&V7rRkK_cWj@&T#ZXXFO* z1*sw5kZZ^<Z5cJ8zbRoHO0;DH)|VWkP+-Fwp4>VU_V zZVc%@*G4EAK)=&{(Rmiaez>!{vGvl~;knY5_Dmv%^l6b88mR!B{ubTghoXw1Ys~Th z8g;)({RZ`$;5P!lb-#|y*<{AjNHb|tW|ad#Zaj-I#%t8;P2a=J-ip)P z=!Iv;^WD1BRnl^a+bVP1x8+mo_N=`p5G)w8a(iz^a%x9))H&)@K+pbAiYJX1Fj{#FObf*&#$NATUHVN-ml zWp3>8Q2{wi0na&LWdRwJ;!Sb^RGze`;zdSWF$0JK*^WS O@pEBrrlEK{tEoQ$K@{!) diff --git a/src/modules/dummypythonqt/lang/be/LC_MESSAGES/dummypythonqt.mo b/src/modules/dummypythonqt/lang/be/LC_MESSAGES/dummypythonqt.mo deleted file mode 100644 index 2a7ecc372f48d28bb36e268d93b0a2eb66209172..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1118 zcmb7C%}*0S6dx78N<8R6FPc0K5*pp^ZpEf9-6Ed`1u0NCcyihf?ZSREJF}KXGyxJk zpmH#BLofaTgh2d2^yqc==*7Q5ubzBc1cK?s+5PSBy*Kao-kZ(*xX|*N;5v=CjL0Ke z5zi6P`hYlx_=xC0d_$Z?{6t(r{6<_vTsTHZ3OSD4dYq7l$mh|wPY{wpeu{hrc?UVt zeMgRTzmO-9&$JMNlEy+g!7#zlk#!2aXwH*SvuKX9ddP1@!T;1cfCS_^x0N%7PH#OKf6;Ft4#=2CHV?#qQtPp0bkK{I{}fb)Mz;4 z6@b$^H{kITlJmV8RusxmNtt3kw>;N?TuKIrqNhMl8hZMghATEqxlr;xb-7K2=Ns_Av5L%x zeBgVtkZ~!m2s?0Sv2wfYP|HpfJtuoTDwamATMqDlDS1X61A3WF{eWB4g^r34Rc@$i ztyW8jsJb=H<|3_Hq&9V^&$ud3#nq&yrF6Bx)Oc)UXk_5Y8cl(B2M_skNE94&9&urlX%Vllxm4vokUq3N522VSav3lGQuo zDAE5)OjC=t8hKgs=Aryn{2-2XvCV$ZjENPxA&CWU#JgfduFEfSGhErfwLs)sxgj^@ zw%kJgEO*e_#b+DBg>X@Bgp1)4T1!ptV*7i>hKwAW*W5 diff --git a/src/modules/dummypythonqt/lang/bg/LC_MESSAGES/dummypythonqt.mo b/src/modules/dummypythonqt/lang/bg/LC_MESSAGES/dummypythonqt.mo deleted file mode 100644 index cbd832bc7d09138f9d3045ebdab3d1f4115e3da6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1058 zcmb7?&u`N(6vqt=5J7O55L`ICaoT_+O@*p1qlo?JroqO#uIxIT)=M*zxQg9&72>c7 z2{9pY;>ZESA222=3W8m^y8i$d{sF|16VDxVfF=-DKKZ`){GOj}`P1OQQ-b3-avmum zCy~d99v$Qq@)j9JJ|ZWOFUUFM8*&yIJVZzabp&-2xr3ZW|MOu&R#3m9o;z8 zk9rYx3pGS-qhd*KU@AeE4D7l6|1q@mK9B0iIK-?8i*wXtp@p81RMrJVObF^TSmg;! z)uX5dg_f-Hcu~R)?pb6q49a&gYl!?YyBx6Ql4Lbfs7p}PNz~C$M$@C#F(F*&+nhqu~Nn)k0pz7hpieOL9%se*FqY^ zV^FTrL@=4VU79wt`+2(6Dof0KT;`P^_Fc$&f$VS81VmZT#-wU z!Je5Lj$tSV&d8WS)HAiKcKT06J@0N|;8pjLYO4>bquQX}sBP$ObhnUAwcCBN7uPnR ziE|Gy?;ZLbwW9-QZTG6wYjhr>^YfKix}BcybT{-Wpx&$Y5K%9GSpeJi^P&IleoOgl d529Y^6X`9q|7UCP?-u$d@c26#wcUHc-vMnd~`@G4TM=WxG9)x}*odVu&IQR_;p~%9?h!*ui!xIEsD~HOF{HyU193C8PDk0SXimfmfUGkn!NPN0$Uv1EkR26zHRmmY&sx2Vw4ZM&>EGMh}ZE{Pptr`r|c z4Y=|yAaUcs8*t&yeD&)i}@F?IXG+-ANq z3(ODZCi926$NXjPGP9S2Xt6G`R?J)G4#z()3(;i#&3c3N;T0k7v(B^D{#Djx);Fwd znKqs(I21D{;pzJt_v&+Atut$&X$-qtIHb(y$U1bDg`BL#l;FUWuwLc)1bP!UGJ4m+ z3p4aZCsXk|o;4@VjSduz_Z=0YKcWkqoK_b2aTgBzP}`E}hKFVd7AH1>4+Q%rI#RVquA`#} znvJj}!=?;d5H_Q5=~085w}sZpeu>&<=u8>GIv%McFW^Z|i7L>pra7w2k4^scalOVe zTXb6SHOW3<9zh2kW~gCd9!X%%(Wq0T=B$fjX+MlugD?nf;LC!a}sjJ z)#122l6k5N1_~+xAwzIzV?6iYPpSpy^Eok4){%wed})ZSi>+ec#Q$9uPECobfHJU@ Le*eZ7Hm#U{IEw(O diff --git a/src/modules/dummypythonqt/lang/ca@valencia/LC_MESSAGES/dummypythonqt.mo b/src/modules/dummypythonqt/lang/ca@valencia/LC_MESSAGES/dummypythonqt.mo deleted file mode 100644 index b22984ed705f55012f798124e85046c99ba1cee2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 410 zcmYk0Ur)j?6vZ+6)JLCvxF$Y8v~=AAnI%g^9EK>e;N;ml%Bb1er7eH_AbveRi=7(q zB){~wJty~kot}KQypB9)o(s>h=gQM4^1S-bYkxMLy;7s!Megu;f#3w*mSEY36oluq$XY-E$cciagEVL*GBhM4w%hKxp+ffst@ zs#x&@mbPC95Zo+O9*v>TwIR!%5~vya;Ma$@I5U2>`VkgvG0!o@Gy2uBBBvvVm7 wPE@WJQWXrMH|h4>8T{Lb(sFHhiAUO0mVv5&t~L()@H@tB1?Mr)P9L?t0X>>_EC2ui diff --git a/src/modules/dummypythonqt/lang/cs_CZ/LC_MESSAGES/dummypythonqt.mo b/src/modules/dummypythonqt/lang/cs_CZ/LC_MESSAGES/dummypythonqt.mo deleted file mode 100644 index c83734ac0d2be4665669786134194103e34f8d51..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1041 zcmZuvJ#Q015IrD(I7C4TkPyYBAhHE}A0{%Ckpv;l1qv-us(0>bMAIew`)5N zqNAjRCRKg_6%8O!IT9T|fs&eOZy&YSBi>*dkaUCS{`f-A=H$lVn0q}Y+N)0jql z2Eqo-BvbxwutcUuak|<8%Sf4rq89PG2h-I^4G-=?zm{2vTN#bXlE@N#d!F`9=}*nT zVCm;L_&&HWISCvd;Q}ou56{5?570U1Lt)^Y^Sy0eJvIM diff --git a/src/modules/dummypythonqt/lang/da/LC_MESSAGES/dummypythonqt.mo b/src/modules/dummypythonqt/lang/da/LC_MESSAGES/dummypythonqt.mo deleted file mode 100644 index 1e836027f46bbfe1aa5887ffee5fc481e37b31cf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 888 zcmZva!EVz)5Qeu8({+JI*0gu5t)Xib`9WwxMS>_QcuN-nDioq!Ho` zxbg_R1DrYZ3ApkMoH;RWN-I@e`Sb7Do!=hs&hN*IUj>hQ%nN3~JYc>s_4v*_WPUKq z%o%f^`NKS8{xVOQ#|uKVSXWp_%m=3So!t^*mGu{E9WUG#;yLRh)+em1thKMh%9iuN zse(hXI1exHcloKV^G-d}0fST6-%&#>LXJEsns_MDdzB-Mtb^{PEN9T4(b$@Og12@U zij6|2C!Dn;uB{$voE{QZVlc)VoII^P@I^N+hfv$H^A8@|A$T?O34Ho2`pzC>N^&cc zN9eq^CV_ruW4rUF2S>ew!>zq{!2wp*k=*sU&gAP!?&ZKH5cK!t0e;lAM|Krq0?kI; zl5tbUEr^>*ytdll5$q^Wa^RHlg(B+`@Ts+gE_d3ad0D$&agxa=yfJcss!X7(jP_$# z9urkQiK6Lr8dCiVJ;Kv4wPlp5LY2y)kBA*UYBn0JILcJC66|j6_OAXW4jaLSHH3z% zm{nXR;VDH`p|n|tbgZ05YQG-kWdfNB`o+YlLT*}D z@?M(iJoN46I?Ny2%LbO(5U;EUqG!O&F1vxFc{`MtWmsV05l9yo=kvcIBp*~LwhMg% w)z5EG>il|BNZx(J)p>H-Tx*!xJwy^+Btk%U!^?R&oVU_NGI*UM9}xG&KOpM)vH$=8 diff --git a/src/modules/dummypythonqt/lang/de/LC_MESSAGES/dummypythonqt.mo b/src/modules/dummypythonqt/lang/de/LC_MESSAGES/dummypythonqt.mo deleted file mode 100644 index 9af7a66146284920a510df9841d0ffd13f0524f2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 896 zcmZ{iL2uJA6vqt=5Sciz1G{i|yR8BzO%G*c>S46qRJO6MEj!~TuZ>4yN47&(A-(}u zz6(g)I3PX)5}$!HCth0E1S(d3d4Bf$+m7@9zOnY6QM*k%AV$PG@s6n42jVXAk=Q1_ z5O;_l#3u2RxKC_cW2{NBMlmH`689+odY!R=;x~%by6ZQVx=o6eE}-~?;yy)^EE<(E zO4-^ny?o!IUUkl!)yN(woWbdl7-QyBW}R@Qg&eIFQ-p~&&?)nL4*j`HwK{e1Opkrm z&Sd6`gO0Zl|x16 zm=|d~`@ns|U{>2?ofE!jlGg%CwHxN@({uvB;3OT5+6?#*d?E zf>+7%Wwv-mOQ^MRWNr(&CilC-l1y`q(gj(9q-y#8!#kMxn4_Ea2&l!cL>Qb hlqfBCMwDctO=US&_1|dYaESlgxU2AGj9G7pI=_d1YFGdO diff --git a/src/modules/dummypythonqt/lang/en_GB/LC_MESSAGES/dummypythonqt.mo b/src/modules/dummypythonqt/lang/en_GB/LC_MESSAGES/dummypythonqt.mo deleted file mode 100644 index 283b865e97553203f4f88898a8e258136e264cb4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 933 zcmdUt!E)0u5QYsD7z|u`fD4E1Eg6sEB&T{;|37*+ILFJVIjRF7gSn_7%C0d_!u; zcjON86M2aILLMNS*BqyXzK;G2@)ohW-`Cf=dpFj)r|7Nj1$wJ{jo#`6dX%gTB@Twp z#yY%s-@=jY^QN8YfnWmaYn($th^M)FFKM=tN4MvBZ#JN+wKc zE=34YuYb_n8^B~RJ{capa>uNa%8-%HcuKbCnI^Fe!Htf{n7!v#Lw2ZPAv7C7iv&#) zv><4PLHlt7%{`>rkXTWn3u>eaVV`O#pf8Jp3k}a!Ve~hASt)6xC@C+zM3&E=*raXD zA+kB18;Kb$Ll}sx;5vueso;jCaKJ^D%CZi%+?Yy-zQ0&3JY#F}89TR`{Dc;?q>5?Z zU=Hm!8;w@rGx26`+poK$;b?Gq0)f|X`%)Mtu=8bwpJv#(@vDMz(SanVN;A_vjdw}= za-Xd>V~Pw!B2#QAg!Yu1i`GL})pDa^u4qAar7H0XM70Wax7mU9uv-(b)rFwmasQW} F=nvV|27Lek diff --git a/src/modules/dummypythonqt/lang/eo/LC_MESSAGES/dummypythonqt.mo b/src/modules/dummypythonqt/lang/eo/LC_MESSAGES/dummypythonqt.mo deleted file mode 100644 index ad243b6ea8e11ff9bf37c9b07d77a68fc3771728..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 934 zcmZ{iPjAyO7{(0@5CJYbfItYnyKUOsG(A*RMiFJp(Ad9jD?8)1ZtFF%qu5zjAx>O4 zaOKGNfcqrA1t&fLTsiTiojQpPE5AH>9l!5uThEXAxz7yaHh2PB;4b(Cit!cP2j9RV z_zv!XU*IA510I0+Ym8N)OVAJCEx3pH=XJ(bpueF-{PYH6kD$xY$Iu8GLEl1=G8tIP z5VE;xID6m1SFz8V#Y}^=9MS%^Xv?^S$U5P2ONq2r^dg^h*b;hpT9>+jt-qnS!*D#$i%d=gvVX^yF^7=chd0Kw8@IG4e8x`*38VY>^Q#J z;bcga za!}<#g$Gp%Dq&DtE@ODx!aCl{gtoD8CJSjR&m1-Ma6rw0ky@S7vmvI^Y4F13PLz~+ zzEaeyAzk-#Tp4dkk%Sc4RHBwMv^a1swW05iMx&A|>Z_hSEp<%dcSI}_kxA=2Bw4>w zE>{Cz8h^>#+1!aPjvAE8-kQ-)YHV?w;tWonIzNqt(yP=Nh|Ee?f79CFwTpE{tDekw zq&udobU&n8Te;arLz2d8#(5@UzG1Qi7p>DtXzP_#nts+7H7(RBSX%Yit~n7iryNdv zA_}93voD5l^;A^Bi7u=HSDDPfR`D8%xbHyeo%Z4{)^rl`=+wB7bfosE;Y?Aoif(=CN0ObwIRAP^1JfldCN`qiZ&;@=2QqPd zy~p=tVU^Jlb(UA2FF$S3UTb@2ee;F4Ept;i-nIkP<4;Bd%VQIf*V*LT@=%pAd{sCZ zQMD4*cv$6Ojlyaa*6&x)ybWO;j|-t~Dx4`ITty+%2c`ETOzOc17s6vHvWRwap_Lud z;?TL=MnNzhk9}9hs=hq(6O#prNJSUC`Ox2eKZ|TJJlpaJ>?O?P@`KBoD=`6m~V9S6gv__mEi5iJqZc6oOJgF%Bk9 zOJYqWP9;kC?92Pk*H5VxWo4X{LK#1+o)cHL@y}IQ3(1i2e~Ad;Zn}y7pWM__3GNQH F@*76d{_Fq% diff --git a/src/modules/dummypythonqt/lang/es_MX/LC_MESSAGES/dummypythonqt.mo b/src/modules/dummypythonqt/lang/es_MX/LC_MESSAGES/dummypythonqt.mo deleted file mode 100644 index 54ca848026b74fbc6d355e4a3aa542d0eea1502c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 976 zcmZva&2rN)5XS`+I+)=A2e`n@_LdANj&leZmjL}pq0rDYO*7m;aW;;EEqN@tX<&E* zxWNPP0NmjU2i}5b;KGFyYnLW7P>p~7YbEWjKK94er4NkSGI4|G5toR!MBY9Vmx(V# ziTF-jBz_XtiQmLE;_4a3>ZE1T_rwe03faHTGIob_`5dhwy-%9w>5|?g)uijB??}m| zXyn4kWJ|~9{C|OZ`99C*BWs{=3VS*(3#n>R(lp6 z>p_KWL^60ut5(=QvwexveTxa}jqwyu8kPp=v!_m1Aa@%U2`730M$C*4uivmvswWs& zzCGl9OpVmahtAr@leLE}=(oE2+q+MlE+#s)ylp}`T#+3NyMk-a`@lu%8Ge%@|5;Jd%MfLuqVnVtm(~PNx-{r;;N)$|Jaeh(s(> zG_ECIl-~Fczsn+dSxP z@y23Zo^6CFZ>c~Jr3!s$45XcJ*@q&R(}}WFM0`u9G2OgM3ez-et8m_7=n86Jvx{TwK&31!5D9uX;`6~p}YQUMqN9e5xndQnLu8CV%eU1488J`%4WprQh# x5Z^wnuzvAk6ejxLfzdM+p-!J|8Jj21bDk`mSMNM0v=%!$8HAw>=r*a|{s5Kr88!d_ diff --git a/src/modules/dummypythonqt/lang/es_PR/LC_MESSAGES/dummypythonqt.mo b/src/modules/dummypythonqt/lang/es_PR/LC_MESSAGES/dummypythonqt.mo deleted file mode 100644 index db715902348caf2e7dd713d887f23f45a8bdd8e9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 400 zcmYL@&riZI6vr`o+R?LzXW{{(rRxr4mh6By%%aFLCRbBO88utGw4LA|;=kwLVuuNQ zlTY4zdB48Dmlr=hr!&WuGR|% zhE<#`lf|o-@kVKj=B5;D^w5?D<%)urE>On5M7M(;ndKA$pNtR*5E%gpC<$+UC+~&H zvSlSlIcGJ6Wy7Q}Tj-}P*H%F$3N?WK*4oBUjCZ@;&}t@)*zoB8z wqgWPdEo4a{{1Eo&o5JCjmsYK26`Cns8w#>HlqL$s@SjF~3D*&j!Px8l0aRvk0{{R3 diff --git a/src/modules/dummypythonqt/lang/et/LC_MESSAGES/dummypythonqt.mo b/src/modules/dummypythonqt/lang/et/LC_MESSAGES/dummypythonqt.mo deleted file mode 100644 index cdb2466fa84ca8e127a9762d324b14318cb28f02..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 880 zcmZva&u-H|5XKiMAY5^&#GeC)sf0u;SUZkH6gkQvv?(fWNZPtRvq`3jTYJ~?j+;h^ zH{i;nv;v7+4u}Wf$}@0ALSpPfBUN4bm(Sy!Z+7g=&!vS=g4bQ<2@^7l%txkJpPBp2 z7iNX|#@u6mF^`zv%tL1Bh7dK@Rn{@{jw$MVzbV8s)*q}zojr2*v zl`ZAs6v3fbxCk$Q@9D|hiEDm-#s z5e87L_%-QQrC$TT8u<0+6<*G^vLwSyX&WmtSpXe1x2dr01@)7k8_=kMdY z6=%(8K9BpDrrapuDS2tEBHe(&SY;NexgT!G`aG{V>JT&8)&nz)^eBLOKcdS%13+?m zah|DIZkR0Luc^~Aw9RS*E^eDE8kU>juQnX9&wu{^Y3RmyoZH!%&J%9MQgotXoDTxc z&S&Q_x?(GyouyVm66xWx2+PcQ+I%9eY=nhh>>+~D|LV_OWpN&d3r`ur>?_6CFX!Pe Dfn)w$ diff --git a/src/modules/dummypythonqt/lang/eu/LC_MESSAGES/dummypythonqt.mo b/src/modules/dummypythonqt/lang/eu/LC_MESSAGES/dummypythonqt.mo deleted file mode 100644 index 43448bf58ba8c76c552c0dbcc0761cd7e22338a4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 885 zcmZva&2AGh5XTJ^5L>~aLU2K7Dse~v?`9(rm8~L_rYRI!nzo^5oa}VtX4hW)L7F1o zfGh6;Pk?v>PCNr=BqU~A)Jmn+{`T*&XY8>(KNsdcGiuj~d&Gd4Cq5BX`$F6#z7jR! z8*zj9McgHR6L*M(ON_Nh>!f4iEpdzN@0S^SK>CBUTIUbxebV_WjNK-ENcx2I87YMv zH*#TQvbhuU^nZ+WF+IH|# z4@1_?{!;%fgctIo$OAGY53#UVc>^wQ*u+8r>o%u6h#6n z!oKqewXt)hO`>QzorbPjMDF8ZIMPKl61gaZK^r-Wuu-$oXvGows2*&tZ}!g46NinU ztCd4VdCW>m)Zw9v%3Mgb45P6y7G3+zV2v-G`Bhu(qv1U@(y3Hg0!u^bPP0q^ebCRn z5jkJerl8wY<*{ko&1E?0wrdI&+Yr~619nmgFhpad2+zN6E)<2JdApgf!$WTfj`PS3q=;NZ z+K3*XkW0uuGKzdbE+9XUYsfF;Dl&YEkPPY=>PzG?as}gWrwPfT{zScuYMmkECTb4# zI%*wt9`!XUS_T7C35I0oAUvAS;Y#;;R==47!JDwWz)IXRF_Ma@NP^F$WHk=eAcS1x z`z&vuP?_+^zC; zZM4eFV?GPHv=myTl}@EHwpC@;n6Wswm_Pnb+e{fVflypvf2{_7fa2@QYIw{Q<4~@% zP;xc#s5ncr$9ejwDi3L1l!J;ZY7S&et~zSdfhsc!UKBEq&IX~6e_1pJp`1vM!@+W5 zRKO(IW8((tw|kvGw*=yMakt-&yCz9KqwXY|kZi{v<9!Tv`)!Ed#(VJ&E_$7KC*C{0 zIheZ9>-5_u>2;C~T@tN0ZRu(wq}M&DwUumYd;H;FCmK&KNwg!``tOl|w)gR_d6;n6 U3M8BT_V-uqUN_m+T?{VUZ(6-i`v3p{ diff --git a/src/modules/dummypythonqt/lang/fi_FI/LC_MESSAGES/dummypythonqt.mo b/src/modules/dummypythonqt/lang/fi_FI/LC_MESSAGES/dummypythonqt.mo deleted file mode 100644 index fcc562306b363bf93a2a5ceb06c7680a0f436c98..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 946 zcmZuv&2AGh5H?UiECQq+-~!TwQzGzgHixKe38J(K3h7VUZhHkMaS}Icdu4k`Bg7jZ zapDc~3<%D9;4OHDo;fj_{z=f$e*1aG^LfVB{9a!AM$m2}9wTDJUBnkeVLuS}5I+%R z#4p4h#0laN;t%2>V)+^&b>s^2SHuUz1N2X>6H-DZHwd|p^c49Ca(Ko&$Q$TOWRxrn zB}F<}I(0Apw{TVTd9#SDf#Orx-DEwU_~=>3TxLOXYuSjyP#f6Dq?|!_=Ehp>I(Vmh zK3Pvhe}Y*h^3U#};M0A_QxcE)6-o>X3;4M!w|yvNgGIq3-2=;JHiA!|N!REj-gmS; zpoiR8p;ZLkwe`;0+a??~_x9U6+uj~ewQ+RIj>Lez$wrpOIs&h|L-+VcQE2D}b3B4t zHLTOHM#DOUwJ2P9Rz>qRnRPTaOxc7vZ6fFhDK&JmBMfC3yp(2gwthX5OeB6^%U92f z(_WxhjWT>N8gnKiXbGi+9YYxx2~&d#l*i7cHVT62bn3gJiWu_a;)tNn5+<49HgG7m zL9JS?hrv+1Z?%Jpx7FTiUfwzMtKPa+jw|eSmf~d`KXyTyFrikVKW4^q*Eonime7_q5+7Zq3)ePkt8lt(loga35LQ+_a*$a8 zyKa_$S3(M(oK6QuXc3#RBvar7c9lpiaG-qBNyKEr7)YTqRwCQ^JWcbt$>(R2RcKW{ spUh-Fzk2ulWD@6dOaiR{1^=INp63G=;R1gh5XTn?AP#6!fRHFA6^UT)e2!#U7ZNazjRFaA5+^n5yRp6DZui*Ti(?Q4 zJuNRl#~VPMg14aH3211jm~#|IN+MSGyZ_Ga%fm66G2j?L-+8uiM3UM)u&pl}3R>!OFLPnLDU6&5nIRtymO+Q4d&Wn<`!-B7D7 z2QPHbXU$Z`Z^&zootfQ}INEWTv+fWth@@d@fj)QPv=3!iGFfn6_rQv=jo|$U)-ie? zW5?GLzK6z2ts>|&nlBsATd>#K-dWpxv-1)WmDm_iJ*aW844Z?Ri1q8XTl7S=98zn(N3#O z$kdN@w(_XVSf>PPP|&6EE{ZIIwm}sSVSeabZlfR=jYhsJ)5|^{mT^HWQb9@4296?Z zP_0yIVbC|hg151@(KIaGcW-93HwLPlZ%V5D$g1=$3c8ZC*e1E0^k{ z;Vl*GM5;jq^`3OoT}IG1UMDS#NO@bEjP6Lht^^pz?Ha$Oim1-PRxF}-A8#7@RIEuKl?ye;q@&$OIlC&dEoGk&al9Di=S ViLnHFm;bE+>*v-_q=QKv{R5Z!4I%&l diff --git a/src/modules/dummypythonqt/lang/fr_CH/LC_MESSAGES/dummypythonqt.mo b/src/modules/dummypythonqt/lang/fr_CH/LC_MESSAGES/dummypythonqt.mo deleted file mode 100644 index 17561fc31c40f96ed747da1063e3c579c36a8e8a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 398 zcmYL@!A`d~`@Ie38RvfUm?U4jW>t3;6oDp#|%OIg$IHoJ>O-^17QS=?d* zfAVE!GV^Et-}AGdj?;OIe`A*(5 zlf{-59HpF96k^R~wt?=l5%!zwlF7UW-Ho-ip%^z!)3=&QBi4M^&s2poRPol;(i?i6KaekRo&W#< diff --git a/src/modules/dummypythonqt/lang/gl/LC_MESSAGES/dummypythonqt.mo b/src/modules/dummypythonqt/lang/gl/LC_MESSAGES/dummypythonqt.mo deleted file mode 100644 index 33cbe602c081d24e8fdf55e36dd0345ce0003ed8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 889 zcmZ{i&u`N(6vqt=(1JLy1CtPkH;F^5;iT!IDyb?|x^610tn0dpBW~)Z8HpX)?k^$! z1FrlL{SV-Xdf*S>&fmb93%sPGLsPNx@i)(Y-`KI=kDaYg1lwKYG15iuAs>;neMash zUyvN~4cSJ1BD=^h10ElaPJX@2IKoH|itQ?OQ8-g8B^O=cs7Q z8m15o$<``d_jm9u-RJFeqy~ad;q;jGd1Pax4Krg6G1r;}9EMWC!8nfR(4L!-6sHDW z%DzqNQRu(JtUYpVwioj0nc)fPj`#*A4u=}>F&n3CNNs~`!3)_3&F0#J_a8`G$qViq z+8odxS2~o!gLbX{s&>?XUZZo?Jb7((cp{adEgggd`eGbt+Lazy?GxJJlQ8wr17^4f z#e!R+ZjrhraEqQ>-Y;OYj+r*JtC-LcGg5i*M(X9_X_{TeNfC_kKxmh<*n=a6{~s~| zxsfr6_8ezAo!TZfheJNIeHlAGi&)GQ*N#Dtc8Y~U$#sIr$y=>vt8w)ou3fO|QW!39 z{ds~LG<;^9Bx0ecfInhNb5lL<9@6qvUb@tfE7}mg9E2k9pxh75dY>Kyk=2gIibeEL zsu)jEBw47d#R{xmt2qICRdDkai=2xQyDS3`a>DG@NX&(1GY$z;6PEUD!=>7IJd~`@G4TM=((N9|TCxYkg%CwHxN@&cSxR=>P1^;05MR${v8xIE z$(NbQ%%AyxuCKm3UKgGl&zFSSu%#!`WBuGdOW{q%OHsL&&$>SmEN2Y=WcnUHfVy3{F(8*HRS>qEG2g kIT;iUO3TLZ5>K?LECW^ljW!O4@ZZK=1-CKK-Vk+u0S{(tx&QzG diff --git a/src/modules/dummypythonqt/lang/he/LC_MESSAGES/dummypythonqt.mo b/src/modules/dummypythonqt/lang/he/LC_MESSAGES/dummypythonqt.mo deleted file mode 100644 index e6061d7c42a54b21cc2d92d28722f8c8b67f7f43..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1089 zcma)4O;1xn6n!dcd`4qf=*GomA%W=os;1(rMG=aid=#jxowh^Y!}rm=nOYj-&ZP?p zMMFYZ7&X8z&|l!z-E-w{FfLtrri~!lg_E8+_s+fNyxYlq>+jptuucP)ff8^QcnPTW z5jY2Y0)~Lkz!~5>a0&PcTm<@$X<8OM4E_o{2F@eDbwbl};3@D0@C&dD-UJVTzkuh! zKfsW5)^Y4ewZ3k8u%AMt<~*rR#wg-VT9{#F9+=34WU?VB%z6HX0vHZWecA*rL!t5U?EGm zup|`1%Gh?+u{>@K>$B6dg~Na7n6^G1N0LXFtX0S8lCMdt9xy-3QN?44;4=THG--?+ z_Nh-{VxtgM;;J9jTpB6+@?c7rJgygmM#2JPGEPF=Z&dH3B7Y-C-7r5CQ9e%&4GvO7 zR}dhxhv^R4tsZN*kayA>TfDm(Xs*<-HPYqi<_KQ+4IghS589^jq_%RlAp& e_8%RuF;zR=Ix<&JGqZQgE9iI9-E_b6z<&WTt#B~_ diff --git a/src/modules/dummypythonqt/lang/hi/LC_MESSAGES/dummypythonqt.mo b/src/modules/dummypythonqt/lang/hi/LC_MESSAGES/dummypythonqt.mo deleted file mode 100644 index 9c22e2c82aa2380165da15bb995ca9cc21eaf546..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1221 zcmbtT&ubGw6dtuIM!Zzei-+m0RX527jA3iU+NN4i%M9Vj4xzg6KiP zgZ1D|oT!MX2ugdYNB;;x=0DJLPky^87E48_kNx)B_vU@?y?G?xdwZ4%Y(H=er~n6n zhd^vAz#(82=m)+62Y{czQD7Z70`%@8Bo7_{-vq7!hv9$QO-K{`1AH9J_Yfk$kHM$F z>)447;Lw9a(*3%jvA(tr^8bQfcsQln4t+@u+Q&(=?XVl7QS?nDU1t#;N4s`x6Xzq38An$81kWQ+dqd;iyVY4Rug E1=zC*^#A|> diff --git a/src/modules/dummypythonqt/lang/hr/LC_MESSAGES/dummypythonqt.mo b/src/modules/dummypythonqt/lang/hr/LC_MESSAGES/dummypythonqt.mo deleted file mode 100644 index 6d12c7ddc65d935234fb183ac6678b505653ed0b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 985 zcmZ{iJ#*7A7{?71I1DTufPvxZK(7V-7Pz$M)P<6!TUZQhat&kqf??c6t)QByE!116FHm#eThuw!52$D< z+If6qXiOZ3C+|zx%g=c+A6WuU`>?%E8Z@>sQkv*YK|+-xZ3-2 zn)*<3y|U$%EUye+$@k{(x!BBgqO=uC!c|PPkUp%7o)oZ_HEGPgyn%%{kL_*|M~_9O zVOBWRpXIpGT!!KzQOd#Ieq9zvmR%X#MX+C30^f%i%Td3UBrTku>sIy$ysjysDU4?U%dX>5ufJE^(dqT)CK{CioK zz)Lb3YN|A6C;sleoK1ckO6BOPV0w zfGZEcTL9vg0}sHRXW-lu<3vgkbhO`&$1`J(?fJF5^ofz&CLR+V;vVslaPoz?Pkbd- zi66vW;y3Y#xF8-9%hwpIkX|F*CEgMb$evzj>4Ftw8^QYzteu;I>>=Oj z^Anj{Wpo7XMsv6EvIQrtqvM@}*WQsFnjHDQja8q&C}PVyCIYX0z>nlR<#PC@Kp8=~ z6jpdx=3xcGauimdmPoukVUc%op=~PAL!aGuA5o{Ma7P%4{ zRujabje=k_8u{qb)u}x9dnOBdA{Cj)r45jhY)~$hDq)Zm!J4i73x87^Xt$8uSv8TZ#2Ioh@FyjB{I^%AB`!&-9g!BdB&2E((nxDZF-C|^>Aj|dbtMkVSQD@N*%(rn#Wr47^dF_i(WXM;PkWWh3WT+)Dl5bz~5cK6EpGI zu0T{8=~4UC4cj84$6Z7%y1^~Jn57P)1KJ6)*5toc=N=y#^8vUv5EF#V=>9;=n&A&~ C1NGkk diff --git a/src/modules/dummypythonqt/lang/id/LC_MESSAGES/dummypythonqt.mo b/src/modules/dummypythonqt/lang/id/LC_MESSAGES/dummypythonqt.mo deleted file mode 100644 index faf378083497e7696cd213b594325fb1e0c1b4e0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 901 zcmZ{i&2G~`5XToNAdI*KiC#DioLa%!aSmzZ5JYKH6xz@<3E|2l-Z(On{X9wL(3#tbRwou->Y>Z_ zVmX@9s0Zv)??8%K&x(}wCt^(|g{1-d?AmS@inMUC;He&h!MO?G{Rh^`^r;wG-U|6Z zWJYQgKxcRFaQ8(M2F-4-b^OZdid1Kow@oBN{ydKi@9O}Z&N1(bce2Rg`)EY~m9k&u zeuev0@GF5|dsHTKj?h@%&rq2dtQkL;5<#N^cWaw=> z?N+;aaYWxOJ9}DLp=fLKl=g1Lnf1~brK-bdf|(Jv@w$J&YZv2+rN$!TO*PV?R8au6 zp|s~a4M2uYC(bjB`GL+7x?q(qT+{IDuxvKUb%*uDFvrQNIADlb?*5CV!q5>{#gZ$V vPuD!Q%MN2XEglj7UniI9hpLOUlmravjwb6SUB!y>NQ8>e;uNVGs7U?-MhpJb diff --git a/src/modules/dummypythonqt/lang/is/LC_MESSAGES/dummypythonqt.mo b/src/modules/dummypythonqt/lang/is/LC_MESSAGES/dummypythonqt.mo deleted file mode 100644 index b2f98c8d37a5e113d01aa8d42d65fe9874760175..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 906 zcmZ{iF>ljA6vq!JAPg)WU}1P2kQ(4(J41+EWhiZmLYp>CLdD3%xj5I_caiUzG@`6b ztgJ|UgH8yLm^|<;SXo(En0QW5D^=miKmYIDy?6I~em|C%-ZQf6#66-%+$7!+g?%P& z6JLl`;yZDJ_(j|${t$PFQpQrOIrWD4ymj*Q+% zcxL)#wh^oFh@w{5h1CNkCtZ|d)*HzMnKZ2|(1Qz?%TS~ZW(OXcK3Fle0la?0+Nn8| zA@b&cAIQ`yqXTHKZ)~qWZNNdJ({1kUIvqJSDe{($)PO(9BFlRw0H?jjJMxt(a`>h| z89>GJtK6?}zY2aO@M{k}GG|9v&A%a@ zbxRlXPx)zPk5nxBCO?JYG*yfHrJKk&#tae_{l8@{v=TKM%Rfj&0dnE4|N3jzC^Ay? I%cxWS0>&!Wv-7td>;GeA`4gjdjkrgI#0}yDQMNC{P2ww2 zCB75aiC@GW;y1BMtSm9sB(0HtBwi7>sQ!70u{!C}<@ve|(z{fzlintMK^l-6QnJh% zSs0aUd0sBwSE*N?^GZ3g0a{LAZ(9sx;!b;J+5q0YXZ_q9%LsXI z$d6=hmC*t8H#*NYo^;`;yMNHzeeUeb%;d;-Y^;X-aS>Y{ngE>sF5j0Ys`T(pfii$b z-EVTg!Tl!qjlgf+uTyijg+(6bLfb^3$pbhLCo)$C9@=@w9nfSXqDYxXaVk{eMkZZ< zP%hUZw~h8R6;{srYJdRZcrUV~^Xax1ZY7;f>_*>~k` zBboEAj?7T$IDpnb;o`&r%=U8nNs)_$Z<#!$JJ;E)wC%a8-YcafXz71E-C VZ=e6OI*{!wMcSYmsYuL{^arlg35);$ diff --git a/src/modules/dummypythonqt/lang/ja/LC_MESSAGES/dummypythonqt.mo b/src/modules/dummypythonqt/lang/ja/LC_MESSAGES/dummypythonqt.mo deleted file mode 100644 index 4d131a0f822551962261a6c2bd50591b63394b2e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 912 zcmb7?&ubGw6vs!ciYp@Ypa%uVi?rxuvk_w1kV8#VN$rocU3+%2nIxO;?kqbK(;z}O zs|dB=L0S<= zzyeMKt3YDgz!~5JFa&%7P60oF^T1Ew958qUp)B}e@HTK4I1BOTqX=CA{}uct@V~$( zx(mnpy6fPJ5Kn*yNzb4JL5K$W;okcMjFNL6Pcoy}XKg$?Nh{1vK_n!VErC5I1g$e% z;~^evd0q#XJF>z3S&1ijC4~yEV=qG0W%SSNg2USLk_E_WutSuPb_9k;9y*=EiLBb& zu*oY}(2g+i{RgNV@+Pw-DOJe=3x&gd6PHH|w?}Uk@j`KKzBDtf&9Q)ol1z!ZQzbWB zbwMm{Vy!$w=GZ+a(U37JnTa!LBTI}7F|ydmn8wJ}G?+F?g(Ox;ec@8cLlawck=0tB zgQsboN_s8P-GDN`-h!(k7NeetCul%@CKw)SNErxI*W2xON+!!VHMW$pxu@IIr5+8L z&?RVuo=K;(hTf$5ur^hiD(-)gkxFX??n~ywNjd=>Rk9_i2QGE|9JU)Y6invtSmR`5 zzb@IT#zIo`ZC-W!x`{_Bj@&z^iJMd_yRDGAWSoZ{+@~M(LXkIexIfINa~j%Rf2X47 zDtg%O2BhL;6~9vPClzh}`TMH7t>O(8uS4$p%KP0%PmtB%Rie9T| q4c7Ya22s&7)m>H5*58eFVB-xHy->^D{``Ub=Fa1fJ1Z}H{qh@!K_->} diff --git a/src/modules/dummypythonqt/lang/kk/LC_MESSAGES/dummypythonqt.mo b/src/modules/dummypythonqt/lang/kk/LC_MESSAGES/dummypythonqt.mo deleted file mode 100644 index bd70c813096aceb16cc663bbf8465dcd71c2a6cc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 377 zcmYL@!A`d~`@HSqw^VY@w$x}-6P#SlaqtlZbKl(p?{v%6UIJ$yZ%#jPgr zCtqeJGk@m)IY0aEIGs2y99NE0$Bm;^=(uysTUXnggA%RYd1hg{h85RFC`nN=8qY?L zFz$XJB0gwSA0VUzJ@8mr( zneSN6A?2*1XvV%+u|?gjwY8xbH%-&Gnn@!zeBaMhg)>&NifL}Jbq<3A-yaZM6u9Tj zr}Ow2l=OXXtfb}ALi$;|1eWhDu1hB55M^7Y4Y$#2I)U(b*S^|t4YADBTF9KD@J-l5 jN{WiYOUj*QB}|mA3`Mg38%-1p(SI9td~`@9y~yF=ynfeEx`nFF&jiSxN@(%WvT48o3;o(h_C0f*wqC7 zM>DmD5;D}R6~pOxG8;d| zcoi>Slf?^Kibfj;b6d&+9(JXLOf!tq1uVs1f)Ra;DI=8hjyX6)9g$wjWK}$ z2@yP)KtR$GO+;g&kwi2l;qHIn(X;7p6VIM}+md3C$^Q16xAVT4x0Cm?xoM5yIE!3I zV#s-91@T82xq$2;t;l!e9P%5vg8V@)Bh4oW38S{5=8(t8MT~!(B;*F_FVt(OmrfCK z6;(y`eSN5pP$y8)QX7~`FeFX&u<<^FGr!K${+BMWSsq3PX`E$LjD(~zC%|Gt&=iA7 z?m$n@vI-C_$TYV{B;4n5m2_v!#588LkRz+(Cd-dWmL;(?JI0BhO#%4GW0zI%ZOPh! zQ#=lW7K8y$pOL7;r&vNN{Yhn3SQW+8{GpXFm zrGygW1_YwR$|!qc`W~f+N@hSPsD~9jr08MLLx$ddGl(NFNQG2l4z)#wO70j?*_-v= z&sH}U;C7bdweXZ_-EGWNo5?%3aIcVWwNp8~E+xjOWxxP;7`34_EoD|1nwHP!Rq1bR zPO=#_!7VL8Gt{CE6PiSa&_cmrSl6bx))pA*ABr6Qqpk)6-Q1SU#@Y&5EMBr1sbw?N zv^yY?rjB5;^I@!4X+O;KkD6qT60s9JY1%0R+T*5dRB6C84@5ILhh~&s?pS!kcD5FZ zPQ3%_)6QT=fOzvu?wg{wx!Y(E_rVbxnM;=K`X z{bQxP<8JRmb#B*v_o=$J;VqQC&D9oibeBfc99^hy|6l&WsauQg@{+s!Rt2xL3kTkR gD*9G*UvGP*S->2xv{L!950#x)-t(_@TdlGF0z;ogAOHXW diff --git a/src/modules/dummypythonqt/lang/lo/LC_MESSAGES/dummypythonqt.mo b/src/modules/dummypythonqt/lang/lo/LC_MESSAGES/dummypythonqt.mo deleted file mode 100644 index 61b880bb726cf628303d08f583fae7986774c24c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 369 zcmYL@!A=4(5QZ^&>d~`@9z1At=yngdmT*8^3=w35EBCsTrDnI?w1eP-_R)8Q3)DHyazl6-lIGgJh_R2$W)qg zD@z5rlC_{yY3bDlvGIbj-EP-KCym!@weJ?TW`(R|EuHcVgWa<@ih7(?mR*zCWR@Pk zi*N|T#-$Z_kd<*#l z@)GhlWRwi-EUxI1iJ?1MFW@fk^L&1?0+RP&XOq==WTU4IGns~%Yt7mmS}KLLEROq7 z?VFC0I|d%Bx=mIi(dc5<6!{~%CwQ-BctXMs|A!Kfg$Df0Kf^ZUvgY8zeN_j|`r3!* zFGw|2`@CW3Mw9OGR0}12sIII&S$R~3z4C5tV|&Zm<%voSt?0IB(uY}F(@^wa5-}kcpwVHe<|cR=uG6`3UVc@Jr?e~^swrgKhq<~iqfUK@ zj8%=Yltpx1r7^yuOa`tF?k~V_8_Y(03J+F!-?<05_t1)bOgh=3ya`+1y}|b z{L>^@3ZR&aPHHR$^M(Ja;bDz|2BrcmxC})fW(x}z*<#r~)1z5j7hTgo5K50nFFXF+ z%#;yaL;d)@<`RPmz63vhCt{{;QcE&zc=Y8>R~Qa4MyAL~opF`Xi2fBht*=SQ1oTq| Xtzi>m@hHWHQ~Br!$F++ShvWJixDz3B diff --git a/src/modules/dummypythonqt/lang/lv/LC_MESSAGES/dummypythonqt.mo b/src/modules/dummypythonqt/lang/lv/LC_MESSAGES/dummypythonqt.mo deleted file mode 100644 index cdb444be01e74d2c19a8a37d66317e71e93d73cc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 415 zcmYL@QBT4!6ooPRv`3$PxFkv-TH4Np%#wv54nqW4aPnS988xF@+A{Em`1kxRcACIR zzVzJm+}!hXdGXzFI&)k(t{vx&J4da+A>8MKd+W?mu`WJEYSCncmO>j@CPmmCi7QsA<9BqG&7l8p~qcjP*O1P;yGG~O4d8*iCe+IC$xvCk7y65&uDNASu0FLE8bvBCR#IgQf)8nr zH5ufU7w0?8b2KjW)-X`z-)O@7KK$FTt!^j@Lkg`H)Rr_uN?`y5TpXIAGXtP*@H>64 F@e2W)aufgn diff --git a/src/modules/dummypythonqt/lang/mk/LC_MESSAGES/dummypythonqt.mo b/src/modules/dummypythonqt/lang/mk/LC_MESSAGES/dummypythonqt.mo deleted file mode 100644 index bad77684e145e2a80450640ec7fe278c89d01796..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 584 zcmYL`&2AGh5XYCV11r%(&m1NPqE_JSdIeGBus{fD6_L;oLeIDxcWbh1uWYAjAA}1M zZ@>wuQdK^l!B4=mFq??>Fa0#0k>@{S`S14KF9GTf@(_87+(Sl4txw1Ugd_J6jeNfq z1m_sHkml_m*v9w_BbL{yy)fOV2TH8q{fHllq80QDnJu6cjbLK*XOTHFoRdRgtkjCZ zq}PAj+aJK;VESQr@GhK+N*hPUHkWhqdYM}?(+tAN0hx+ZS@)1P+zAFrOxuJegtmbu zjCLN!sBpxsBQwL5Ex6N$!I&E-6-=dd`qVBYJTKQ3^S|(_GTLcXa#^%8UA}lyJ9p4X zoaona+xrlbd z@o+r2c{OdtVP7jJ6mEN7;d7igb5T`rsk)GzaASo_KhE|@=jL8L>R1>uP??@fl{4rZ zNq4;|gK`m0ilyNN+0&-93{JOUa+ngWGp6EI^}b+zeqKi${5`75t*>}yqX~g)UX($AZ(H_B4HE4 zC=Oc>1C%?Y+K{QDLTA)S6~jKwsHWnKD(J!9Y}+Nz=)!Pqc)~rY(x;EA4WHn=NEb9^ zWXfnB!wCH=B!`_-V+tMn{&KnWOmzT1Vdq{Vb3dsJR59%v9MXOi1kKRTGk@0|4MzRz zw}xKe_M|XO;2l>5KEkkb;};p_q7BI@RhpU3o9Q8GUHht|PM9Knk;pk0X$-9yH`|NG zkZ0~VTPT{5L#c8dgDC1&ccM0I%Fd2}MhC*(w(HpPi!FcI^#$1S2PRv7v*jOK{@i|; kEkE1xyIp^(<0bm8>gIRt+tgLWg|BvfiKF#0#t#kWKdW5IyZ`_I diff --git a/src/modules/dummypythonqt/lang/mr/LC_MESSAGES/dummypythonqt.mo b/src/modules/dummypythonqt/lang/mr/LC_MESSAGES/dummypythonqt.mo deleted file mode 100644 index 48aca7e96ad98d080b6209f2c53afd6f0b08f171..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 380 zcmYL@u};G<5Qd9j^2p3^NDQsOb)2CJt}?VGMHPfbC3H8bn;Io{WV@t12(QPp;DFTr z(x&mF@LCuvwPKJ>W>1sH z1lGywb+LRwE7548LmQ+6Kwz@1e97~F>wLW!*seJbx0S0#SpnPSlJI{D5LF6Gc#Cx5Ff!O@jZMN zr<%Z@d^z`=|L5}Jv*mQ=xN_V$&K-A-MxkTshW9QuJ4Yp2z4FY$WCJU%jZl)JWH5Rf zJjQ4hFP|rixwqt%(iUbW7aJJva|5ZO$V(Qm zGMVpL&LQQjq-d^m&2zyd8mhPQ`>R0howb#r7}s^(wVFvIw*1h|REaZIu##zRuyw}< z2fp7USgvu$n@wi%$usHt-bhKyrG@mPa%L<)SX>oM$Ue$;OdD>amvju_X|H*;_&S!6D&vVaRyf+@^&DwVNJkKY>0n_Y>~;nCdg!d5bs==VLzJq+5cVH3$0 zq*-&BP7%Z&HK!`2YX_ diff --git a/src/modules/dummypythonqt/lang/nl/LC_MESSAGES/dummypythonqt.mo b/src/modules/dummypythonqt/lang/nl/LC_MESSAGES/dummypythonqt.mo deleted file mode 100644 index 95b99b007caab2b1dcdb7068c41e72b152d39c88..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 914 zcmaKq!EVz)5QY~hAdHYu4+8Tlph2jodI zF-m0=vbkw^`o2b^vd*jJ%nB$R!Oo`WVd_(4op6PP46PLj!l5?MDza=0ov|Bewd3HG z?)hvrmGL{uT43i^_a%<@9OkS$zzdW#EiKUFE?oAZl=UYc9O@oeF}4xB|G+v%4>5Lp zz0dd2SgBP6ot4#%m6vVUZ}0A{Z@>0-G1tcNEt|+be^DfscXb3_XPfWhkt{X5B^*Xj ztA=$R)_7Qluoi{OkE&$erm&88jZiifPMZi?2nUEF&oPB3Cx1rIlT66ek9GF+ak$Y{?H-grEwvkHe6*>HOv(QnW>!X>PwWKTi$!6u^mb%Zkg=sW#XcC8oIo{OGaeJft$eKd>olplDY) z@aBM264_*)HdcLOmnDiz;Xq|^>FMI*GVGSOcUCtyGTSVci8j_%zgqgbEc>Efe(TQYWyZlir7#YH^rX zI$`PVVGvOs<~1jx}^X^P8-S_j>yj_6({eHnJ*;rWs8%1IY_5Yemt~CXEmTaf7u7M#Ir>LXLA^Oo0b3Kq!W z70#0l>ha?v!J80a?-Z#>KL~q=KC}|q`u3?aPDNhy9q~Uga2)!Ps)Qy}dN6ZL2SjMf MdxsvrKfKL<0e|T$+yDRo diff --git a/src/modules/dummypythonqt/lang/pt_BR/LC_MESSAGES/dummypythonqt.mo b/src/modules/dummypythonqt/lang/pt_BR/LC_MESSAGES/dummypythonqt.mo deleted file mode 100644 index 5ef78795bdea73708f469fd19e431b16bb58dbe5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 925 zcmZ{i!EVz)5QY~hAdEn$2RP8f^p>b>97k#t92F^T)2h(WGcz4b2x@n4d z1Fk#-ZvbZwJONjZoH=u1oV2M_m6bpLp7qSm*!q7hE_^1q?jlP_gxp6yA;tQNJV3r7 zCFBQk5BY;ULH;6-k;NN?)KSZ*4ta|_!uaP+LRL|Kqdr7kx<$xS)RlAHMtzQPjEW`G zg{cHXvM>wh_dEDh%z3-mX@TNn*xzM+o>nljj=9`|+IR3$ z_bX&074bXFS|(TC9tl1^a6BW?h+k8Q+rk1~?%LNCD9Vy)!(-hC%O*C24-96glC!(mKo6PYL zYSo}lgBlI$5Y)n;u~Nn5?K10VWSFukbJ~Qkor`qDjpWaYiUuaAVU9nAMx04(kInL7 z&Mk-1x?yJ`EkkMKTxLVxACJcsSDYmV{In8l>BlT(k{ND&hvn9~XE6-~|NbrbiAX1Eo*c+#bb-JLvzqO2|XBi`NM8&~BhDL%WLp1TBV4 z2Zj)I$->M%|KGq_+2{3gr45RYVSk4WcveHtI_3%sl3UAC4nu8VtB`U6y@?xXweR4W z9@NNYCgRt4YK2_dJraC;;CN1=5uX!@%fbSFZtivs%CKZw@K_JPvWX4h-FwnA`k2R# zb`yHUjTKsj&}(l#Z$It8QKx^<-FxBnd9ID4yEYXGeNv>BMmhwqw@3T@M3gafi#Z-b zqaHMA(4avRf<_pu-LK>Dc9?ZEGECWwIc-Adiy9c$px2cum3VWX9cqzwEou6k+sC9@(%vkPP zhtW1&yEs=?8*)QCD%OcmX$Wfr;m-RGVOq=UWrblG-PT6pbge`B?F~T*tvqr1<6$@9tjBtj)KBB%$Z@pAj0bn*(F^})%2#|^nY?{&yOV?%nxUu UF}ItW8`}RiW~xfW+o_=b0B8;kJOBUy diff --git a/src/modules/dummypythonqt/lang/ro/LC_MESSAGES/dummypythonqt.mo b/src/modules/dummypythonqt/lang/ro/LC_MESSAGES/dummypythonqt.mo deleted file mode 100644 index b07421664053639ea5225582e2223e486bb4d280..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 960 zcmZ{iL2uJA6vqP$(1PHw10clV?ZA`>+$2S+x{PdeTL*)UbzQeJZtAw)5<9Y;brs{v zi7VfMj{u*5Z^38a%!%g~b<(t1`T3t``)@y6@AtyoHwW8Y@jrars1r=gMT*9+jgV@f{kE*hjv+3!AKiwN)0*FnhqHBrGm{e&&SXjo1ql@2HweT z#o5SsdV;GKolCPvoQ)0)E1b@dUE#!Gt^q%D<#YwCtv5OFSaw0vv5w)>XQ!p)F-r~E z?vW#=G?yZVR%7FR<4qHen(c$_y$^1i6;c_ps|UPC*2{q=9T|h$+9Pdt%B_cNQo~}X zhEa_~RT9-8s>V_Md5F#3q1up+qC#iXNEO36rM*(w`_fYiuP`6fEDFWzK~8yANoBtJ z!fsYauNaj0UZlfl9z$E^RB$T58yZvSI0#0gQN`H3d7qtGXOPm2=2S5q81(3%8iutf zP%`k{-R<4x#WkZ!=x#`1n85VL1?F$qnF)%Fa57t1>gykeZVRgb diff --git a/src/modules/dummypythonqt/lang/ru/LC_MESSAGES/dummypythonqt.mo b/src/modules/dummypythonqt/lang/ru/LC_MESSAGES/dummypythonqt.mo deleted file mode 100644 index 931086b0db46652dca51febbb503f3591ff9fad4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 876 zcmZ{i&rj4q6vwNg#!b9%FdjTS4iYxnZKnca*)FWG7!+h#7VblL*sZkF&CJvV!Uawe zNjMo#9{dl`h(BT^o;^+f0TXZj4_-TMDzh#qmmyWLaA7HkVh&4wt3!p_f+7`L zR5aEnn-LAdf*(hvyIHII=;X}=f6uHl8o5wQqzovBp_Wo@=~`B&(m3U+QP=8AE=+h!Xtuh@pN+93`2IQT6pBvamU zea0L+(`BR9m@q5cj~fARx-hmHsMBk@Ad*})Oau+hnOH>91>Wv1r8hhdz0w=vw~6g} z1O^8oEA0V~5SRcPP>$=8=bRiBz2U6vI_x5GV0*h~DUsnkTF5_(=h@j&S6A{z&g>8J zr~B9!$DGV8de~tC9BgneKb|x68-1+br!V!F(>JEy;?}W#m+t8!{Y`(?N09F5<8&w8 m#qUA3l^%fppub`|@9kmFL;X=7rn~7r=ufCTLi7HApW{uCp;HL4&7mfdr+;oHR@KWTLZW1x%KB2G;5z} zLpv#xI$}np9(MoZl1bQO??nh3Ny>GgjH%UL4PquDJ5cfFi?SA`%0Y(LLOYzr9-Kxh zXCbT%jY+iUIHS?XHbr64=NCnu6R?QI3@bVYGqh8!RBEoHLub`G*ga@o|D$VHtZgL? zm)P4l!R8IWFisLNA=e=ovQ%^9zw5MU{aROis?Sr}l!59AIq;y~6=v3@2RgLcQI@iZ zwp1G94a=kqwZFCw)2+WE;TgE#`%r=9Wst?rg)NLw{@>B257nt?!-q8#xiisHk-r61 z4_>aWTjWsXlS`Zrsq&D`#_QCuygblJI=Rdl;AKN!gl2M;%M2#pBQ?xslV+2>NQ6=t l4w}bHr1ek8rb0Fol8!P8&aX?|P}p!Id8l%gPOi$S`wPJ?3-JH| diff --git a/src/modules/dummypythonqt/lang/sl/LC_MESSAGES/dummypythonqt.mo b/src/modules/dummypythonqt/lang/sl/LC_MESSAGES/dummypythonqt.mo deleted file mode 100644 index 763803202404af79ecc72eb7f55aa033b2cf0cf3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 434 zcmYL@Ur)j?6vZ+6v`3$PxDT2@w6q<+yg7JMJ8n0>{pU_wKD`j*7MV6sbkSIhqM=awQqWz5Yw@ zIf7XpgyC)EphT* zxy;r)6DSdU#b8>fjgUE)P+wYG8iw(9yKP#{rO6j!*G$z4r@Y`Ru7$zYEg9?+(xKQC zxZ#b4qv+I?Hi_3)(h6x&@>RMLR_rV;3!cj^q)V=iu;F_$K*4FQI<*iQMKV?MTxJY{ zkK7)MGBAY~7i-N6G*EhF7|8O^ny}r4!#AwU8%jtRQg{FYZscHnXX(kdV88#5+Ai{4 J)M|9S+Akr8cU=Gg diff --git a/src/modules/dummypythonqt/lang/sq/LC_MESSAGES/dummypythonqt.mo b/src/modules/dummypythonqt/lang/sq/LC_MESSAGES/dummypythonqt.mo deleted file mode 100644 index b7daa29f5b951a768760b8a76981ecf17db4ca16..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 914 zcmZ{iy>1gh5XTn?AP!LwBxoom5=A1|JD(*?bioKGalquuNldB~tnJC&+IPE`-8GIu zG}N>_MP2}E7rX@xFF->>#hi^237OIT?!PlTvtOF;^K+jW*>&PR(IRdVpNPV~5Vwf0 z#3J#HxIz3R?h(IVKqf3;Awl}JEE*0-Zz{i>~^*wZWG!@`|mF z(eS$J=&n?81j}vd&d(WvJ@K09z=)J@Xp_-9t9;_xYIy~w!|I}fg(`$gD<0eFjnDoz z3LqHtrxAJz@h*Y5hpOAd9)gMm)cQ_dbj+khe72d&zRt#HO8&oVW)!l`5sc4l;%NIB Q)BZF#?HOuON}F`dAF)9N$p8QV diff --git a/src/modules/dummypythonqt/lang/sr/LC_MESSAGES/dummypythonqt.mo b/src/modules/dummypythonqt/lang/sr/LC_MESSAGES/dummypythonqt.mo deleted file mode 100644 index 5c8099cd45786b22eb6659fb293da37e0c29520b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1127 zcmb7D&rcIU6kZiI)_CC{G4b#?NFciHZZ!=q6y--TC_f5R&Q9B*UECkd&eTH01oYs= ziw6@!q9(>apg}7YrCv<9PX7Uqo;`c=+a*FY9Pnko`R2WO-+ON++3%elFErR`;3AL% z&H~SX(3-$G;1kdb>;h+ipFkJz3pfvS9@DfGxDUJw+ygGa?>(Vu)8G+sC-^yd82k=w zfPa8zz+D}h21#Vcu_CM?^p~B27tVPyj1H5>YcxB_^4y8T6OzfQAeRflN}Lw`fX1q> zyF%F&S@ykINw@ucTpM-l!hK|QYyX@s*t|9`c}2^W`5{V#Z9(|tp~rCwWyPrBlAkBR zR)j?lA8FaZU*ZL+PZae99thj_EXod#-Wk4?p@q!c{KU+3Y>rp_K`={chOW0PWkpztM6Fhf%doP& z$d^N5qQD&HvVe<(ghV8ghLJK8B1rVbrY5E`2bVPCMr_pgB=<1fN(IwPzAO_JhuPi$ z70N6ST&C~l#`XS#ys*_G5A=*z@Qb!rvZz0A%l$De5kXiuBb1 z+S{gky-TK%PMg%zL*drwPMap(AcK$&e<+>&b2ON~7H%VjF=!gJy1FMpj?o8=2~DzZ zAf~BTs--qnozzDAiF&QJ)Q+mFZB^IQ8`WyBAqa=s>+Q#?-rfikx5DLXdo2<+;UW#H zCPC3eS_@8C>@BizwvKwOxTZGLXVpZpDD#VIbfd$Oifl&>Fw|bxhI)@m4fP?K@kkZ+ d$Ix)YP1U0IOV#-QI}p@66uyW0s2b64@Ebfd~`@F;POJOLwawxKI@p3{j*3h)2$^2htzV~)Nw@};Yee@xE2YrGr)j)sY@*HcK`BQB2SD84{o05q%R^^&Q+`hSQ z-*sTp8IF2`M{g*L+&I#=shX1OMQX`7=itQyGL&zsWXP>>l0!&Yov@IwI{`?L&3uTw!?-ESJlgGeTSSBHwFCJ`WO+iMcS+1`bgh zgp}4gQxn_N4o9T|TV_>hzDE+{ggbQ6-9Fjl(gY1}1^|6FRyaIyjUho$11V~(S#qkE6G-l~;T6X2llr80NMDdHkiI4* z%Sof9jD~FLbU1lmqn^w2s{67C3Wu=0A-b6RG%{A$fq?>z5g9_S)UZ4#iV?I&wqL4k z3u|T9XG^(E-q5NUc5Zf0;&9hu#X5bwz)7E_0eb9((>^#`dJ^!U?1B*^6T#betgXuf zOe|kb`5tN`OBF$TacO<=c?^5;&hF~gOK%6OQd_=hGMVycgUs+w8G+Z{;yZXKorfY~ozNmp7c)zd`uut|NP zeS-^+X|uZXs%${##XBg92zG~w5?a272Z5s=R);R z^H?QiDpeMNOL>xJ1m@6d=L0QrzEbLf&RA6^L({6y!)doQt6-)D;oQ8(Vg+h6sgl^* zzjabznqn?gN|iGHtO1X(s4zb(7P>^LmUUMx0;=&RC}cLn;`7TURrBAB+kh>jwF1V+ Y6o5is90dMZodYSs@o|Q9i&Q*+00E;2(*OVf diff --git a/src/modules/dummypythonqt/lang/th/LC_MESSAGES/dummypythonqt.mo b/src/modules/dummypythonqt/lang/th/LC_MESSAGES/dummypythonqt.mo deleted file mode 100644 index 502e4d130fa5d8c7edb67958d1ffc560b12b0634..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 370 zcmYL@zfQw25XOsO^2p5KfdK?p#~G^NszWI$s-QF~p}R@l#3->N`%24$@OnH84oK}M z{d9M_@BaLppMCd&P68K!%fM;iHqa^Q2+g|?JI_IxvmdHJn5|)@oY&R}nvEw<)d5(kag{_&tlGXuug(?3&DH^Yr*8 z??+@}4Jw0>f3@L0sy(u{mf8$yQAy_&j^6SqBu8I&YNH&arm$;mNr4{{=qSA(@=~0OVa1tkRd*_R6AL$7( zGr-E+kvU5RQnyRRf5BhCz>I{%b5b=@RqH?c^|enS%ZfTTG}v^Xo$Ghtiz!lD_BjUD1};T zy0P3g@FH$FWF-{Mee{|k=XQ4m@9!AiBSDv65Q)n|13u=$Z3k>vYgBMAZh&T~_Tj@v zQd99BZyLJZqPtva5lbIxODh{o&nvK7sqd_Bz0B2lFII+Dbw{-5a?;T>h<(V_wrHKd z7dD2jGQ)i+6}>X`O4KWZSMt5NheaH@O{NVE6q7n+CRRSI@<=F_LN)0cu6P7bqt=FW^kJ< zWD!$by9Q&mTPhaIo@>#X`Cks|asg_C}^&D9yuox{#N! z2wq`6M_zL&pdr***K8#FA)7Qv_KAhV!O3C7^l$(o`zGYby_KjWvYo~Dh69HzW5JYx z84fUdhU_rBs1dc9lr&U&Utn E5A~cErT_o{ diff --git a/src/modules/dummypythonqt/lang/uk/LC_MESSAGES/dummypythonqt.mo b/src/modules/dummypythonqt/lang/uk/LC_MESSAGES/dummypythonqt.mo deleted file mode 100644 index 6b860e05cb0ac98cfb2de597e4f68abba9babcca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1279 zcmaJ=OHUI~7`-ZLtT8bx)P;+WL=9DEI#ZG0z*MnjPc7GP&~y{0**Md8SH{ir)0(^n0B1eZ9^7*4_1l;cN%?19@O4 z@DPYk6W9g31A2ikzz*O$uow6N>;bwrG1d=Gg0F67>^gWi;*VPxy9WLW-UmM1#n=IG z7JL|70++#$z>u^K$J*=ZT?ehARkeK8(KakplD7v%S>98oY zyl+t=cTt<<3vR5@&Nz}=ls3$M%}i@%KbdLE95`a&B*q;fwS3@sqT)zDu;@w{xRfpV zf#d{Feo5A6_x|t<1%v;PU%?a6+>K>mgi2@qRZvLaXlA;-jb9xVWm>_dR>>X zvpdIc=mo!;DmWFV>I7V*Bt#;WHjI8V6_!)U#KhRd$l8xIbt94WJ;^;R*QjB8$#2M1 zt%4bYR46%t;L^UFAJqod`r=V@JkUnGfljXrq2m#T9$C zRw(SgLHhO8?)B&(nPl5!(4j-rii|ik*FuAO5Sw%oJuulwkg+MfCZHjk`r`1HyJ64} z{sX#o>$kr_88Z8lFf{)%{4K!>Ml4tjGxqUy{wI=uRN-f1zxMu^XPbSLj3=ZmI+h$v zF!fA*Qm@of`xU6?aUy!E-he-<4{BMhsFi4uq6bJINzt9?u3AFw9!2-j_#R;s9xJH7 zMqRx{^%Yvt(^9U!9zCA66n95=P-+tVWB27Are3TwYN~g%`k2~}ud`|S-;jjsr|fR>X(;F4YL~EjL!Uc$H0Ybo6ym8)0ywa$QJOGKk)#JN(F? hH7KoG!z(=1rnU@J^EcW!9KnAZ_Y_>kK>H(f@(VKbYBc}= diff --git a/src/modules/dummypythonqt/lang/uz/LC_MESSAGES/dummypythonqt.mo b/src/modules/dummypythonqt/lang/uz/LC_MESSAGES/dummypythonqt.mo deleted file mode 100644 index 4e1a2c34a7068a78550cbd77f3592b484199e0e5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 371 zcmYL@u};G<5Qd9j^2p5KfdK@r;|x{mszWI$s-QF~X?HihriR3hY=@S-2d~Go;DFTr z(x&7$XRq3c%c`e z@>=9TQV=D_%VrH9_-5x^WjUq${l4prP*!f?(9Lv7Gf{|A7_iiNgQZ~*^cbxhdW&Y$ zS$xXLx&az%*eAd};0(k+4#&DbU{6DQ@d!fa z!J1%oJPekAy#p2`tpTYBLev$9?fDpZ`kqJiN(OUQ#}gy8$b1tbsi>++955-V%kYc{ z@jxvI8aUrj6~QMI9u`FtWqq%7AF?i?|8}Q6R-aO=iV78WfD)EHiQ!WRZkt%k%B=%u zMG;HdkPd$I80AAT%Swt2mB};EucgNGsoMgs?DD;{T(;U4YKUfferswy4Js@LnL(zU%A zHm3_%CF;|FhD=%tq|!|7d_R!v4dM@8F{}JQlAWpFo37#)mA9` z?LHj4{fRyUHMi!QTkFxAPkXD+;$HbV{}e@QAAdbx?{r3UdwX~3J*4a{ZASA8(dJ^b zu+d6fei1Fcidysj&H~z9d$+r?6K#L)Xxn|$?z6ZW(!#eJaC#><-hslg6TMv7`|x#t IXBGP7A2L@X(*OVf diff --git a/src/modules/dummypythonqt/lang/zh_TW/LC_MESSAGES/dummypythonqt.mo b/src/modules/dummypythonqt/lang/zh_TW/LC_MESSAGES/dummypythonqt.mo deleted file mode 100644 index f13ff2d5fd45d65ec6884e3352102ece429c9782..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 924 zcmZva%}*0S6u?(SjjLWb=*7cugXrvbE2(u6BbH(ikOC_naoP^;;_ghdGqqG>Qv8Sp zOpGxSB}SqVgBpW35%BDPVPb@(J>k)K@@>~ZBE0Nx-@Nac$$W2Yc&dQx2aW+2a1eM1 z1hNPm2EG8zz&GFk@C!H!`~i*tjk^>j2D$}w1-J?X{vW%;y5FD=f!(wxoTGsb;ys{G zgHD5nlDa^u0;bXsnw$T9unP9MH}G^IMoVa*m!zqqfh8o7MS)x@1j$h}%01Lsbloya zm1Ul@0f{d1w5B8+J97=Pnw0;d!!|7qNm@{>Jl&xZ+_pgQ$sNNQ3d*wefnz+41Sty> z-MpowJU&J<5_f0uF!hAZnTb*ziJp!NNi>`s9O~}Bqz=*o_ayEUIXjEb7jptz+(c@s z9}m*&c2I*miKHfqMvNFXqS%NbBWfD);}H0aw z88ups)^jsKl4W?-W;qkZ)3)5)vWe=m)Ra^7h=aSh=fY*P zLfsVYMjHy3?U6QBSzWBGRi^yuPwO*x|2>zVmD|eN#Qngr`8d`-&#iua0j~9_ihpma zIzQ=8ECh+Q<(K}GN&ms)jg^UQRsQ?e)wk3B$GO_O*=@nFrBbUr_n$3<+t_(3jDbLy QUVSyc{$^=oWd`2PU#CPf6951J From 8b4ae1d687bf98abd6126720c9cb9166f6cde1b1 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Thu, 27 Aug 2020 13:38:45 +0200 Subject: [PATCH 132/157] i18n: Don't compile the Python translations as part of fetching TX --- ci/txpull.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ci/txpull.sh b/ci/txpull.sh index 8c3a824cc8..f688145604 100755 --- a/ci/txpull.sh +++ b/ci/txpull.sh @@ -126,7 +126,7 @@ for MODULE_DIR in $(find src/modules -maxdepth 1 -mindepth 1 -type d) ; do # Convert PO files to MO files for POFILE in $(find ${MODULE_DIR} -name "*.po") ; do sed -i'' '/^"Content-Type/s/CHARSET/UTF-8/' $POFILE - msgfmt -o ${POFILE%.po}.mo $POFILE + # msgfmt -o ${POFILE%.po}.mo $POFILE done git add --verbose ${MODULE_DIR}/lang/* git commit "$AUTHOR" --message="i18n: [${MODULE_NAME}] $BOILERPLATE" | true @@ -136,7 +136,7 @@ done for POFILE in $(find lang -name "python.po") ; do sed -i'' '/^"Content-Type/s/CHARSET/UTF-8/' $POFILE - msgfmt -o ${POFILE%.po}.mo $POFILE + # msgfmt -o ${POFILE%.po}.mo $POFILE done git add --verbose lang/python* git commit "$AUTHOR" --message="i18n: [python] $BOILERPLATE" | true From 23bfcb755ebb495a29abe75437dfb07bb6e71fe5 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Thu, 27 Aug 2020 13:54:08 +0200 Subject: [PATCH 133/157] i18n: pick up the translations CMake module just once --- src/CMakeLists.txt | 7 ++++--- src/calamares/CMakeLists.txt | 1 - src/modules/CMakeLists.txt | 1 - 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index e35a894cdf..5ce5349fb6 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -3,11 +3,12 @@ # SPDX-FileCopyrightText: 2020 Adriaan de Groot # SPDX-License-Identifier: BSD-2-Clause # -include( CalamaresAddPlugin ) -include( CalamaresAddModuleSubdirectory ) -include( CalamaresAddLibrary ) include( CalamaresAddBrandingSubdirectory ) +include( CalamaresAddLibrary ) +include( CalamaresAddModuleSubdirectory ) +include( CalamaresAddPlugin ) include( CalamaresAddTest ) +include( CalamaresAddTranslations ) # library add_subdirectory( libcalamares ) diff --git a/src/calamares/CMakeLists.txt b/src/calamares/CMakeLists.txt index 6d4eceb8a2..604760f3a4 100644 --- a/src/calamares/CMakeLists.txt +++ b/src/calamares/CMakeLists.txt @@ -37,7 +37,6 @@ include_directories( ) # Translations -include( CalamaresAddTranslations ) add_calamares_translations( ${CALAMARES_TRANSLATION_LANGUAGES} ) add_executable( calamares_bin ${calamaresSources} calamares.qrc ${trans_outfile} ) diff --git a/src/modules/CMakeLists.txt b/src/modules/CMakeLists.txt index 8836c74ea6..c7bd2755a6 100644 --- a/src/modules/CMakeLists.txt +++ b/src/modules/CMakeLists.txt @@ -73,7 +73,6 @@ foreach( _category ${_use_categories} ) endif() endforeach() -include( CalamaresAddTranslations ) add_calamares_python_translations( ${CALAMARES_TRANSLATION_LANGUAGES} ) # TODO:3.3: Use FindPython3 From 242d5c6499cd6e76dc0f721c5692fff69d9b017f Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Thu, 27 Aug 2020 13:59:23 +0200 Subject: [PATCH 134/157] i18n: install Python translations from a sensible place - put the installation code in lang/ rather than among the modules - remove useless indirection through CMake macro --- CMakeModules/CalamaresAddTranslations.cmake | 16 ---------------- lang/CMakeLists.txt | 8 ++++++++ src/modules/CMakeLists.txt | 2 -- 3 files changed, 8 insertions(+), 18 deletions(-) diff --git a/CMakeModules/CalamaresAddTranslations.cmake b/CMakeModules/CalamaresAddTranslations.cmake index 4d2fa265cd..f53426e182 100644 --- a/CMakeModules/CalamaresAddTranslations.cmake +++ b/CMakeModules/CalamaresAddTranslations.cmake @@ -48,22 +48,6 @@ macro(add_calamares_translations language) ) endmacro() -# Internal macro for Python translations -# -# Translations of the Python modules that don't have their own -# lang/ subdirectories -- these are collected in top-level -# lang/python//LC_MESSAGES/python.mo -macro(add_calamares_python_translations language) - set( CALAMARES_LANGUAGES "" ) - list( APPEND CALAMARES_LANGUAGES ${ARGV} ) - - install_calamares_gettext_translations( python - SOURCE_DIR ${CMAKE_SOURCE_DIR}/lang/python - FILENAME python.mo - RENAME calamares-python.mo - ) -endmacro() - # Installs a directory containing language-code-labeled subdirectories with # gettext data into the appropriate system directory. Allows renaming the # .mo files during install to avoid namespace clashes. diff --git a/lang/CMakeLists.txt b/lang/CMakeLists.txt index 790d6098ad..8658653ab2 100644 --- a/lang/CMakeLists.txt +++ b/lang/CMakeLists.txt @@ -5,8 +5,16 @@ # ### +include( CalamaresAddTranslations ) + find_package(Qt5 COMPONENTS Xml) if( Qt5Xml_FOUND ) add_executable(txload txload.cpp) target_link_libraries(txload Qt5::Xml) endif() + +install_calamares_gettext_translations( python + SOURCE_DIR ${CMAKE_SOURCE_DIR}/lang/python + FILENAME python.mo + RENAME calamares-python.mo +) diff --git a/src/modules/CMakeLists.txt b/src/modules/CMakeLists.txt index c7bd2755a6..8e8c67848e 100644 --- a/src/modules/CMakeLists.txt +++ b/src/modules/CMakeLists.txt @@ -73,8 +73,6 @@ foreach( _category ${_use_categories} ) endif() endforeach() -add_calamares_python_translations( ${CALAMARES_TRANSLATION_LANGUAGES} ) - # TODO:3.3: Use FindPython3 if ( BUILD_TESTING AND BUILD_SCHEMA_TESTING AND PYTHONINTERP_FOUND AND PYTHON_EXECUTABLE ) # The tests for each config file are independent of whether the From 3529659629037a6246cb681b38c2ffea859a59a6 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Thu, 27 Aug 2020 15:21:23 +0200 Subject: [PATCH 135/157] i18n: compile the gettext translations at build time - need gettext to build translations (TODO: find_program) - compile the .mo files from .po as part of the build, writing to the build-directory only --- CMakeModules/CalamaresAddTranslations.cmake | 32 ++++++++++++--------- 1 file changed, 19 insertions(+), 13 deletions(-) diff --git a/CMakeModules/CalamaresAddTranslations.cmake b/CMakeModules/CalamaresAddTranslations.cmake index f53426e182..ed09d98f95 100644 --- a/CMakeModules/CalamaresAddTranslations.cmake +++ b/CMakeModules/CalamaresAddTranslations.cmake @@ -78,31 +78,37 @@ function( install_calamares_gettext_translations ) if( NOT TRANSLATION_RENAME ) set( TRANSLATION_RENAME "${TRANSLATION_FILENAME}" ) endif() + string( REGEX REPLACE ".mo$" ".po" TRANSLATION_SOURCE_FILENAME "${TRANSLATION_FILENAME}" ) message(STATUS "Installing gettext translations for ${TRANSLATION_NAME}") message(STATUS " Installing ${TRANSLATION_FILENAME} from ${TRANSLATION_SOURCE_DIR}") + set( TARGET_NAME calamares-gettext-translations-${NAME} ) + if( NOT TARGET "${TARGET_NAME}" ) + add_custom_target( "${TARGET_NAME}" ALL ) + endif() + set( TRANSLATION_NAME "${NAME}" ) - set( INSTALLED_TRANSLATIONS "" ) foreach( lang ${CALAMARES_TRANSLATION_LANGUAGES} ) # Global - set( lang_mo "${TRANSLATION_SOURCE_DIR}/${lang}/LC_MESSAGES/${TRANSLATION_FILENAME}" ) + string( MAKE_C_IDENTIFIER "${TARGET_NAME}-${lang}" TARGET_SUBNAME ) + + set( lang_po "${TRANSLATION_SOURCE_DIR}/${lang}/LC_MESSAGES/${TRANSLATION_SOURCE_FILENAME}" ) + set( lang_mo "${CMAKE_BINARY_DIR}/lang/${lang}/LC_MESSAGES/${TRANSLATION_RENAME}" ) if( lang STREQUAL "en" ) message( STATUS " Skipping ${TRANSLATION_NAME} translations for en_US" ) - else( EXISTS ${lang_mo} ) - list( APPEND INSTALLED_LANGUAGES "${lang}" ) + else() + add_custom_command( + OUTPUT ${lang_mo} + COMMAND msgfmt + ARGS -o ${lang_mo} ${lang_po} + MAIN_DEPENDENCY ${lang_po} + ) + add_custom_target( "${TARGET_SUBNAME}" DEPENDS ${lang_mo} ) + add_dependencies( "${TARGET_NAME}" "${TARGET_SUBNAME}" ) install( FILES ${lang_mo} DESTINATION ${CMAKE_INSTALL_LOCALEDIR}/${lang}/LC_MESSAGES/ - RENAME ${TRANSLATION_RENAME} ) - # TODO: make translations available in build dir too, for - # translation when running calamares -d from builddir. - set(_build_lc ${CMAKE_BINARY_DIR}/lang/${lang}/LC_MESSAGES/) - file(COPY ${lang_mo} DESTINATION ${_build_lc}) - if (NOT TRANSLATION_FILENAME STREQUAL TRANSLATION_RENAME) - file(RENAME ${_build_lc}${TRANSLATION_FILENAME} ${_build_lc}${TRANSLATION_RENAME}) - endif() - endif() endforeach() endfunction() From 49e925ef472c0ce4e29a073f88b5e008fd8881c2 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Thu, 27 Aug 2020 15:34:17 +0200 Subject: [PATCH 136/157] i18n: untangle translations in the executable - there's no need for a macro that is going to be used once, especially if there's only one place it can be called. - expand it in place and remove it from the installed CMake module --- CMakeModules/CalamaresAddTranslations.cmake | 36 ----------------- src/calamares/CMakeLists.txt | 44 +++++++++++++++++++-- 2 files changed, 40 insertions(+), 40 deletions(-) diff --git a/CMakeModules/CalamaresAddTranslations.cmake b/CMakeModules/CalamaresAddTranslations.cmake index ed09d98f95..3556c7eda0 100644 --- a/CMakeModules/CalamaresAddTranslations.cmake +++ b/CMakeModules/CalamaresAddTranslations.cmake @@ -12,42 +12,6 @@ include( CMakeParseArguments ) -# Internal macro for adding the C++ / Qt translations to the -# build and install tree. Should be called only once, from -# src/calamares/CMakeLists.txt. -macro(add_calamares_translations language) - list( APPEND CALAMARES_LANGUAGES ${ARGV} ) - - set( calamares_i18n_qrc_content "" ) - - # calamares and qt language files - foreach( lang ${CALAMARES_LANGUAGES} ) - foreach( tlsource "calamares_${lang}" "tz_${lang}" ) - if( EXISTS "${CMAKE_SOURCE_DIR}/lang/${tlsource}.ts" ) - set( calamares_i18n_qrc_content "${calamares_i18n_qrc_content}${tlsource}.qm\n" ) - list( APPEND TS_FILES "${CMAKE_SOURCE_DIR}/lang/${tlsource}.ts" ) - endif() - endforeach() - endforeach() - - set( trans_file calamares_i18n ) - set( trans_infile ${CMAKE_CURRENT_BINARY_DIR}/${trans_file}.qrc ) - set( trans_outfile ${CMAKE_CURRENT_BINARY_DIR}/qrc_${trans_file}.cxx ) - - configure_file( ${CMAKE_SOURCE_DIR}/lang/calamares_i18n.qrc.in ${trans_infile} @ONLY ) - - qt5_add_translation(QM_FILES ${TS_FILES}) - - # Run the resource compiler (rcc_options should already be set) - add_custom_command( - OUTPUT ${trans_outfile} - COMMAND "${Qt5Core_RCC_EXECUTABLE}" - ARGS ${rcc_options} --format-version 1 -name ${trans_file} -o ${trans_outfile} ${trans_infile} - MAIN_DEPENDENCY ${trans_infile} - DEPENDS ${QM_FILES} - ) -endmacro() - # Installs a directory containing language-code-labeled subdirectories with # gettext data into the appropriate system directory. Allows renaming the # .mo files during install to avoid namespace clashes. diff --git a/src/calamares/CMakeLists.txt b/src/calamares/CMakeLists.txt index 604760f3a4..ff7c90bcc6 100644 --- a/src/calamares/CMakeLists.txt +++ b/src/calamares/CMakeLists.txt @@ -4,8 +4,6 @@ # SPDX-License-Identifier: BSD-2-Clause # -# "calamares_bin" is the main application, not to be confused with -# the target "calamares" which is the non-GUI library part. set( calamaresSources main.cpp CalamaresApplication.cpp @@ -36,9 +34,44 @@ include_directories( ${CMAKE_CURRENT_SOURCE_DIR} ) -# Translations -add_calamares_translations( ${CALAMARES_TRANSLATION_LANGUAGES} ) +### TRANSLATIONS +# +# +set( TS_FILES "" ) +set( calamares_i18n_qrc_content "" ) + +# calamares and qt language files +foreach( lang ${CALAMARES_LANGUAGES} ) + foreach( tlsource "calamares_${lang}" "tz_${lang}" ) + if( EXISTS "${CMAKE_SOURCE_DIR}/lang/${tlsource}.ts" ) + set( calamares_i18n_qrc_content "${calamares_i18n_qrc_content}${tlsource}.qm\n" ) + list( APPEND TS_FILES "${CMAKE_SOURCE_DIR}/lang/${tlsource}.ts" ) + endif() + endforeach() +endforeach() + +set( trans_file calamares_i18n ) +set( trans_infile ${CMAKE_CURRENT_BINARY_DIR}/${trans_file}.qrc ) +set( trans_outfile ${CMAKE_CURRENT_BINARY_DIR}/qrc_${trans_file}.cxx ) + +configure_file( ${CMAKE_SOURCE_DIR}/lang/calamares_i18n.qrc.in ${trans_infile} @ONLY ) + +qt5_add_translation(QM_FILES ${TS_FILES}) +# Run the resource compiler (rcc_options should already be set) +add_custom_command( + OUTPUT ${trans_outfile} + COMMAND "${Qt5Core_RCC_EXECUTABLE}" + ARGS ${rcc_options} --format-version 1 -name ${trans_file} -o ${trans_outfile} ${trans_infile} + MAIN_DEPENDENCY ${trans_infile} + DEPENDS ${QM_FILES} +) + +### EXECUTABLE +# +# "calamares_bin" is the main application, not to be confused with +# the target "calamares" which is the non-GUI library part. +# add_executable( calamares_bin ${calamaresSources} calamares.qrc ${trans_outfile} ) target_include_directories( calamares_bin PRIVATE ${CMAKE_SOURCE_DIR} ) set_target_properties(calamares_bin @@ -81,6 +114,9 @@ install( FILES ${CMAKE_SOURCE_DIR}/data/images/squid.svg DESTINATION ${CMAKE_INSTALL_DATADIR}/icons/hicolor/scalable/apps ) +### TESTS +# +# if( BUILD_TESTING ) # Don't install, these are just for enable_testing add_executable( loadmodule testmain.cpp ) From 85d90383170dd760bcc543df1cd2589e73d61541 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Thu, 27 Aug 2020 16:34:31 +0200 Subject: [PATCH 137/157] REUSE: remove special case for .mo files --- .reuse/dep5 | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/.reuse/dep5 b/.reuse/dep5 index 6ed0da1497..a2b9cf8c3b 100644 --- a/.reuse/dep5 +++ b/.reuse/dep5 @@ -83,17 +83,3 @@ Copyright: 2020 Calamares authors and translators Files: src/modules/dummypythonqt/lang/*/LC_MESSAGES/dummypythonqt.po License: GPL-3.0-or-later Copyright: 2020 Calamares authors and translators - -### FIXME ISSUES -# -# The .mo files are build artifacts -# -# FIXME: these shouldn't be in the source repo at all -# -Files: lang/python/*/LC_MESSAGES/python.mo -License: GPL-3.0-or-later -Copyright: 2020 Calamares authors and translators - -Files: src/modules/dummypythonqt/lang/*/LC_MESSAGES/dummypythonqt.mo -License: GPL-3.0-or-later -Copyright: 2020 Calamares authors and translators From 392b4d33a09cd7bddbcdaaba05e8ac73cd9d1ac3 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Thu, 27 Aug 2020 16:39:44 +0200 Subject: [PATCH 138/157] i18n: create the lang// directories in the build as-needed --- CMakeModules/CalamaresAddTranslations.cmake | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/CMakeModules/CalamaresAddTranslations.cmake b/CMakeModules/CalamaresAddTranslations.cmake index 3556c7eda0..be5ce201d5 100644 --- a/CMakeModules/CalamaresAddTranslations.cmake +++ b/CMakeModules/CalamaresAddTranslations.cmake @@ -57,10 +57,12 @@ function( install_calamares_gettext_translations ) string( MAKE_C_IDENTIFIER "${TARGET_NAME}-${lang}" TARGET_SUBNAME ) set( lang_po "${TRANSLATION_SOURCE_DIR}/${lang}/LC_MESSAGES/${TRANSLATION_SOURCE_FILENAME}" ) - set( lang_mo "${CMAKE_BINARY_DIR}/lang/${lang}/LC_MESSAGES/${TRANSLATION_RENAME}" ) + set( lang_mo_dir "${CMAKE_BINARY_DIR}/lang/${lang}/LC_MESSAGES" ) + set( lang_mo "${lang_mo_dir}/${TRANSLATION_RENAME}" ) if( lang STREQUAL "en" ) message( STATUS " Skipping ${TRANSLATION_NAME} translations for en_US" ) else() + make_directory( ${lang_mo_dir} ) add_custom_command( OUTPUT ${lang_mo} COMMAND msgfmt From 6b6267e3a417a9442aaaea7a0a45146bd36c45c6 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Fri, 28 Aug 2020 00:49:23 +0200 Subject: [PATCH 139/157] i18n: check for gettext rather than just calling msgfmt - *secretly* this is already done in the KF5 i18n modules, so the resizefs was already requiring FindGettext. - we don't actually use the gettext modules' CMake macros, so explain why in the module. --- CMakeModules/CalamaresAddTranslations.cmake | 28 ++++++++++++++++++--- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/CMakeModules/CalamaresAddTranslations.cmake b/CMakeModules/CalamaresAddTranslations.cmake index be5ce201d5..56953187c8 100644 --- a/CMakeModules/CalamaresAddTranslations.cmake +++ b/CMakeModules/CalamaresAddTranslations.cmake @@ -12,6 +12,15 @@ include( CMakeParseArguments ) +# The Gettext module is still old-fashioned, ALLCAPS variables +find_package( Gettext ) +set_package_properties( GETTEXT PROPERTIES + DESCRIPTION "GNU gettext (translation) tools." + URL "https://www.gnu.org/software/gettext/" + PURPOSE "Gettext is used in the translation of Python modules." + TYPE REQUIRED +) + # Installs a directory containing language-code-labeled subdirectories with # gettext data into the appropriate system directory. Allows renaming the # .mo files during install to avoid namespace clashes. @@ -44,8 +53,13 @@ function( install_calamares_gettext_translations ) endif() string( REGEX REPLACE ".mo$" ".po" TRANSLATION_SOURCE_FILENAME "${TRANSLATION_FILENAME}" ) - message(STATUS "Installing gettext translations for ${TRANSLATION_NAME}") - message(STATUS " Installing ${TRANSLATION_FILENAME} from ${TRANSLATION_SOURCE_DIR}") + if ( GETTEXT_FOUND AND GETTEXT_MSGFMT_EXECUTABLE ) + message( STATUS "Installing gettext translations for ${TRANSLATION_NAME}") + message( STATUS " Installing ${TRANSLATION_FILENAME} from ${TRANSLATION_SOURCE_DIR}") + else() + message( WARNING "Gettext translations requested for ${TRANSLATION_NAME}, but gettext was not found." ) + return() + endif() set( TARGET_NAME calamares-gettext-translations-${NAME} ) if( NOT TARGET "${TARGET_NAME}" ) @@ -62,10 +76,18 @@ function( install_calamares_gettext_translations ) if( lang STREQUAL "en" ) message( STATUS " Skipping ${TRANSLATION_NAME} translations for en_US" ) else() + # We **don't** use the gettext macro's here because the source + # structure doesn't match: we are calling this once per language + # for all of Calamares's languages, while the gettext module + # expects it to be called once, for a given language source-dir. + # + # Using any of the gettext macros just gets us multiple rules + # for python.gmo, and it wants to use msgmerge, besides, which + # doesn't fit our Transifex workflow. make_directory( ${lang_mo_dir} ) add_custom_command( OUTPUT ${lang_mo} - COMMAND msgfmt + COMMAND ${GETTEXT_MSGFMT_EXECUTABLE} ARGS -o ${lang_mo} ${lang_po} MAIN_DEPENDENCY ${lang_po} ) From e87ce5a43397bf23a1537b2d7bd9e05634824772 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Fri, 28 Aug 2020 13:12:12 +0200 Subject: [PATCH 140/157] Changes: mention Urdu revival --- CHANGES | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGES b/CHANGES index 6fc8b49d6c..5476b42a48 100644 --- a/CHANGES +++ b/CHANGES @@ -12,6 +12,7 @@ website will have to do for older versions. This release contains contributions from (alphabetically by first name): - Anke Boersma - Asif Mahmud Shimon + - Manzoor Ahmed Munawar - Sai Kamal This release has two giant source-code changes that have no effect @@ -30,6 +31,7 @@ on functionality, but do touch each and every source file: use in the Calamares network service by testing-it-ourself directly via a synchronous ping. (Thanks to Asif) - New Telugu translation. (Thanks to Sai) + - Urdu translation started. (Thanks to Manzoor) ## Modules ## - *keyboardq* and *localeq* improvements. (Thanks to Anke) From 9afe7a37111a1f8c356817ee83546c85c4803820 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Fri, 28 Aug 2020 14:24:06 +0200 Subject: [PATCH 141/157] [libcalamares] Document JobQueue signals --- src/libcalamares/JobQueue.h | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/libcalamares/JobQueue.h b/src/libcalamares/JobQueue.h index 23977b78fe..4faf9d4206 100644 --- a/src/libcalamares/JobQueue.h +++ b/src/libcalamares/JobQueue.h @@ -60,8 +60,26 @@ class DLLEXPORT JobQueue : public QObject bool isRunning() const { return !m_finished; } signals: + /** @brief Report progress of the whole queue, with a status message + * + * The @p percent is a value between 0.0 and 1.0 (100%) of the + * overall queue progress (not of the current job), while + * @p prettyName is the status message from the job -- often + * just the name of the job, but some jobs include more information. + */ void progress( qreal percent, const QString& prettyName ); + /** @brief Indicate that the queue is empty, after calling start() + * + * Emitted when the queue empties. The queue may also emit + * failed(), if something went wrong, but finished() is always + * the last one. + */ void finished(); + /** @brief A job in the queue failed. + * + * Contains the (already-translated) text from the job describing + * the failure. + */ void failed( const QString& message, const QString& details ); private: From b37a675657874c3bf20ae9f88dba0f68e8bc4172 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Fri, 28 Aug 2020 14:39:32 +0200 Subject: [PATCH 142/157] [libcalamares] Reimplement JobQueue::queueChanged - switch to QStringList as parameter, since consumers (that is, the debug dialog, which is what this is for) are interested just in the **names** of the jobs. - to allow mutex locking in const methods, mark them mutable. --- src/calamares/DebugWindow.cpp | 13 ++++--------- src/libcalamares/JobQueue.cpp | 26 ++++++++++++++++++++++---- src/libcalamares/JobQueue.h | 8 ++++++++ 3 files changed, 34 insertions(+), 13 deletions(-) diff --git a/src/calamares/DebugWindow.cpp b/src/calamares/DebugWindow.cpp index 9e2bdc5016..f9d6b96143 100644 --- a/src/calamares/DebugWindow.cpp +++ b/src/calamares/DebugWindow.cpp @@ -102,14 +102,8 @@ DebugWindow::DebugWindow() // JobQueue page m_ui->jobQueueText->setReadOnly( true ); - connect( JobQueue::instance(), &JobQueue::queueChanged, this, [this]( const JobList& jobs ) { - QStringList text; - for ( const auto& job : jobs ) - { - text.append( job->prettyName() ); - } - - m_ui->jobQueueText->setText( text.join( '\n' ) ); + connect( JobQueue::instance(), &JobQueue::queueChanged, this, [this]( const QStringList& jobs ) { + m_ui->jobQueueText->setText( jobs.join( '\n' ) ); } ); // Modules page @@ -193,7 +187,8 @@ DebugWindow::DebugWindow() #endif ] { QString moduleName = m_ui->modulesListView->currentIndex().data().toString(); - Module* module = ModuleManager::instance()->moduleInstance( ModuleSystem::InstanceKey::fromString( moduleName ) ); + Module* module + = ModuleManager::instance()->moduleInstance( ModuleSystem::InstanceKey::fromString( moduleName ) ); if ( module ) { m_module = module->configurationMap(); diff --git a/src/libcalamares/JobQueue.cpp b/src/libcalamares/JobQueue.cpp index 64c73434e8..f02170075d 100644 --- a/src/libcalamares/JobQueue.cpp +++ b/src/libcalamares/JobQueue.cpp @@ -151,6 +151,24 @@ class JobThread : public QThread QMetaObject::invokeMethod( m_queue, "finish", Qt::QueuedConnection ); } + /** @brief The names of the queued (not running!) jobs. + */ + QStringList queuedJobs() const + { + QMutexLocker qlock( &m_enqueMutex ); + QStringList l; + l.reserve( m_queuedJobs->count() ); + for ( const auto& j : *m_queuedJobs ) + { + l << j.job->prettyName(); + } + return l; + } + +private: + /* This is called **only** from run(), while m_runMutex is + * already locked, so we can use the m_runningJobs member safely. + */ void emitProgress( qreal percentage ) const { percentage = qBound( 0.0, percentage, 1.0 ); @@ -172,10 +190,8 @@ class JobThread : public QThread m_queue, "progress", Qt::QueuedConnection, Q_ARG( qreal, progress ), Q_ARG( QString, message ) ); } - -private: - QMutex m_runMutex; - QMutex m_enqueMutex; + mutable QMutex m_runMutex; + mutable QMutex m_enqueMutex; std::unique_ptr< WeightedJobList > m_runningJobs = std::make_unique< WeightedJobList >(); std::unique_ptr< WeightedJobList > m_queuedJobs = std::make_unique< WeightedJobList >(); @@ -242,6 +258,7 @@ JobQueue::enqueue( int moduleWeight, const JobList& jobs ) { Q_ASSERT( !m_thread->isRunning() ); m_thread->enqueue( moduleWeight, jobs ); + emit queueChanged( m_thread->queuedJobs() ); } void @@ -249,6 +266,7 @@ JobQueue::finish() { m_finished = true; emit finished(); + emit queueChanged( m_thread->queuedJobs() ); } GlobalStorage* diff --git a/src/libcalamares/JobQueue.h b/src/libcalamares/JobQueue.h index 4faf9d4206..b36d89f26d 100644 --- a/src/libcalamares/JobQueue.h +++ b/src/libcalamares/JobQueue.h @@ -82,6 +82,14 @@ class DLLEXPORT JobQueue : public QObject */ void failed( const QString& message, const QString& details ); + /** @brief Reports the names of jobs in the queue. + * + * When jobs are added via enqueue(), or when the queue otherwise + * changes, the **names** of the jobs are reported. This is + * primarily for debugging purposes. + */ + void queueChanged( const QStringList& jobNames ); + private: void finish(); From 3ae545c8b101c2cb84b6c42455225f1352e3b942 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Fri, 28 Aug 2020 18:18:22 +0200 Subject: [PATCH 143/157] REUSE: qmldir file format doesn't leave space for license information --- src/qml/calamares/slideshow/qmldir | 3 --- src/qml/calamares/slideshow/qmldir.license | 2 ++ 2 files changed, 2 insertions(+), 3 deletions(-) create mode 100644 src/qml/calamares/slideshow/qmldir.license diff --git a/src/qml/calamares/slideshow/qmldir b/src/qml/calamares/slideshow/qmldir index 8b68d11431..7b964b831a 100644 --- a/src/qml/calamares/slideshow/qmldir +++ b/src/qml/calamares/slideshow/qmldir @@ -1,6 +1,3 @@ -/* SPDX-FileCopyrightText: no - SPDX-License-Identifier: CC0-1.0 -*/ module calamares.slideshow Presentation 1.0 Presentation.qml diff --git a/src/qml/calamares/slideshow/qmldir.license b/src/qml/calamares/slideshow/qmldir.license new file mode 100644 index 0000000000..d2da9cf5be --- /dev/null +++ b/src/qml/calamares/slideshow/qmldir.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: no +SPDX-License-Identifier: CC0-1.0 From d584a96335bc5564aec9be7a82fec00dc1f7c530 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Fri, 28 Aug 2020 22:19:26 +0200 Subject: [PATCH 144/157] [users] Improve naming of widget --- src/modules/users/UsersPage.cpp | 10 +++++----- src/modules/users/page_usersetup.ui | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/modules/users/UsersPage.cpp b/src/modules/users/UsersPage.cpp index 8059b02e15..9141ebb4cb 100644 --- a/src/modules/users/UsersPage.cpp +++ b/src/modules/users/UsersPage.cpp @@ -87,8 +87,8 @@ UsersPage::UsersPage( Config* config, QWidget* parent ) ui->checkBoxReusePassword->setVisible( m_config->writeRootPassword() ); ui->checkBoxReusePassword->setChecked( m_config->reuseUserPasswordForRoot() ); - ui->checkBoxValidatePassword->setVisible( m_config->permitWeakPasswords() ); - ui->checkBoxValidatePassword->setChecked( m_config->requireStrongPasswords() ); + ui->checkBoxRequireStrongPassword->setVisible( m_config->permitWeakPasswords() ); + ui->checkBoxRequireStrongPassword->setChecked( m_config->requireStrongPasswords() ); // Connect signals and slots ui->textBoxUserPassword->setText( config->userPassword() ); @@ -107,7 +107,7 @@ UsersPage::UsersPage( Config* config, QWidget* parent ) connect( config, &Config::rootPasswordSecondaryChanged, ui->textBoxVerifiedRootPassword, &QLineEdit::setText ); connect( config, &Config::rootPasswordStatusChanged, this, &UsersPage::reportRootPasswordStatus ); - connect( ui->checkBoxValidatePassword, &QCheckBox::stateChanged, this, [this]( int checked ) { + connect( ui->checkBoxRequireStrongPassword, &QCheckBox::stateChanged, this, [this]( int checked ) { m_config->setRequireStrongPasswords( checked != Qt::Unchecked ); } ); @@ -138,10 +138,10 @@ UsersPage::UsersPage( Config* config, QWidget* parent ) if ( m_config->permitWeakPasswords() ) { - connect( ui->checkBoxValidatePassword, &QCheckBox::stateChanged, this, [this]( int checked ) { + connect( ui->checkBoxRequireStrongPassword, &QCheckBox::stateChanged, this, [this]( int checked ) { m_config->setRequireStrongPasswords( checked != Qt::Unchecked ); } ); - connect( config, &Config::requireStrongPasswordsChanged, ui->checkBoxValidatePassword, &QCheckBox::setChecked ); + connect( config, &Config::requireStrongPasswordsChanged, ui->checkBoxRequireStrongPassword, &QCheckBox::setChecked ); } CALAMARES_RETRANSLATE_SLOT( &UsersPage::retranslate ) diff --git a/src/modules/users/page_usersetup.ui b/src/modules/users/page_usersetup.ui index e03526a11f..ba1c0bc7d5 100644 --- a/src/modules/users/page_usersetup.ui +++ b/src/modules/users/page_usersetup.ui @@ -450,7 +450,7 @@ SPDX-License-Identifier: GPL-3.0-or-later - + When this box is checked, password-strength checking is done and you will not be able to use a weak password. From 15b5ef467e96356fa0db3c44a2f0aa28e6f813d7 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Fri, 28 Aug 2020 22:23:36 +0200 Subject: [PATCH 145/157] [users] Hook up strong- and reuse- password checkboxes - setup the visibility and initial checked-state of the reuse-user- password-for-root near where it gets connected; do similar for the require-strong-password - squash the lambda slot into the regular slot: no sense in connecting twice to the same signal with the same receiver. - only connect config->ui once - only connect at all if the setting is visible (e.g. when weak passwords are allowed for the require-strong checkbox, or when root's password will be written for the reuse-password) --- src/modules/users/UsersPage.cpp | 22 ++++++++-------------- 1 file changed, 8 insertions(+), 14 deletions(-) diff --git a/src/modules/users/UsersPage.cpp b/src/modules/users/UsersPage.cpp index 9141ebb4cb..220b0fa07c 100644 --- a/src/modules/users/UsersPage.cpp +++ b/src/modules/users/UsersPage.cpp @@ -84,12 +84,6 @@ UsersPage::UsersPage( Config* config, QWidget* parent ) { ui->setupUi( this ); - ui->checkBoxReusePassword->setVisible( m_config->writeRootPassword() ); - ui->checkBoxReusePassword->setChecked( m_config->reuseUserPasswordForRoot() ); - - ui->checkBoxRequireStrongPassword->setVisible( m_config->permitWeakPasswords() ); - ui->checkBoxRequireStrongPassword->setChecked( m_config->requireStrongPasswords() ); - // Connect signals and slots ui->textBoxUserPassword->setText( config->userPassword() ); connect( ui->textBoxUserPassword, &QLineEdit::textChanged, config, &Config::setUserPassword ); @@ -107,10 +101,6 @@ UsersPage::UsersPage( Config* config, QWidget* parent ) connect( config, &Config::rootPasswordSecondaryChanged, ui->textBoxVerifiedRootPassword, &QLineEdit::setText ); connect( config, &Config::rootPasswordStatusChanged, this, &UsersPage::reportRootPasswordStatus ); - connect( ui->checkBoxRequireStrongPassword, &QCheckBox::stateChanged, this, [this]( int checked ) { - m_config->setRequireStrongPasswords( checked != Qt::Unchecked ); - } ); - connect( ui->textBoxFullName, &QLineEdit::textEdited, config, &Config::setFullName ); connect( config, &Config::fullNameChanged, this, &UsersPage::onFullNameTextEdited ); @@ -127,21 +117,23 @@ UsersPage::UsersPage( Config* config, QWidget* parent ) } ); connect( config, &Config::autoLoginChanged, ui->checkBoxDoAutoLogin, &QCheckBox::setChecked ); + ui->checkBoxReusePassword->setVisible( m_config->writeRootPassword() ); + ui->checkBoxReusePassword->setChecked( m_config->reuseUserPasswordForRoot() ); if ( m_config->writeRootPassword() ) { - connect( ui->checkBoxReusePassword, &QCheckBox::stateChanged, this, [this]( int checked ) { - m_config->setReuseUserPasswordForRoot( checked != Qt::Unchecked ); - } ); connect( config, &Config::reuseUserPasswordForRootChanged, ui->checkBoxReusePassword, &QCheckBox::setChecked ); connect( ui->checkBoxReusePassword, &QCheckBox::stateChanged, this, &UsersPage::onReuseUserPasswordChanged ); } + ui->checkBoxRequireStrongPassword->setVisible( m_config->permitWeakPasswords() ); + ui->checkBoxRequireStrongPassword->setChecked( m_config->requireStrongPasswords() ); if ( m_config->permitWeakPasswords() ) { connect( ui->checkBoxRequireStrongPassword, &QCheckBox::stateChanged, this, [this]( int checked ) { m_config->setRequireStrongPasswords( checked != Qt::Unchecked ); } ); - connect( config, &Config::requireStrongPasswordsChanged, ui->checkBoxRequireStrongPassword, &QCheckBox::setChecked ); + connect( + config, &Config::requireStrongPasswordsChanged, ui->checkBoxRequireStrongPassword, &QCheckBox::setChecked ); } CALAMARES_RETRANSLATE_SLOT( &UsersPage::retranslate ) @@ -241,6 +233,8 @@ UsersPage::reportUserPasswordStatus( int validity, const QString& message ) void UsersPage::onReuseUserPasswordChanged( const int checked ) { + // Pass the change on to config + m_config->setReuseUserPasswordForRoot( checked != Qt::Unchecked ); /* When "reuse" is checked, hide the fields for explicitly * entering the root password. However, if we're going to * disable the root password anyway, hide them all regardless of From d7dc48d201ed7d50b94606764d270d75c4ddc84a Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Fri, 28 Aug 2020 23:07:54 +0200 Subject: [PATCH 146/157] [users] Add now-obvious missed initialization - start the checkbox off in the state from config --- src/modules/users/UsersPage.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/modules/users/UsersPage.cpp b/src/modules/users/UsersPage.cpp index 220b0fa07c..6ea03f8ef1 100644 --- a/src/modules/users/UsersPage.cpp +++ b/src/modules/users/UsersPage.cpp @@ -112,6 +112,7 @@ UsersPage::UsersPage( Config* config, QWidget* parent ) connect( config, &Config::loginNameChanged, ui->textBoxLoginName, &QLineEdit::setText ); connect( config, &Config::loginNameStatusChanged, this, &UsersPage::reportLoginNameStatus ); + ui->checkBoxDoAutoLogin->setChecked( m_config->doAutoLogin() ); connect( ui->checkBoxDoAutoLogin, &QCheckBox::stateChanged, this, [this]( int checked ) { m_config->setAutoLogin( checked != Qt::Unchecked ); } ); From ec0b68084f7dabc3e4e9eef4fdae44453562b484 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Fri, 28 Aug 2020 23:20:02 +0200 Subject: [PATCH 147/157] [users] Refactor setting GS - both changing the autologin and changing the user (login) name affect global storage, and both may need to change the autologin username; split it into a free function. - the fullname change was bypassing the login in changing the login name, **but** then it needs a back-workaround to keep the "custom" setting off (when custom is off, auto-fill username and hostname is active). - after loading the config, fill GS already. - when finalizing GS, get the autologin settings again. --- src/modules/users/Config.cpp | 60 +++++++++++++++++++++--------------- 1 file changed, 35 insertions(+), 25 deletions(-) diff --git a/src/modules/users/Config.cpp b/src/modules/users/Config.cpp index 5ce8c8ed19..d0f5732861 100644 --- a/src/modules/users/Config.cpp +++ b/src/modules/users/Config.cpp @@ -30,6 +30,30 @@ static const QRegExp HOSTNAME_RX( "^[a-zA-Z0-9][-a-zA-Z0-9_]*$" ); static constexpr const int HOSTNAME_MIN_LENGTH = 2; static constexpr const int HOSTNAME_MAX_LENGTH = 63; +static void +updateGSAutoLogin( bool doAutoLogin, const QString& login ) +{ + Calamares::GlobalStorage* gs = Calamares::JobQueue::instance()->globalStorage(); + + if ( doAutoLogin && !login.isEmpty() ) + { + gs->insert( "autologinUser", login ); + } + else + { + gs->remove( "autologinUser" ); + } + + if ( login.isEmpty() ) + { + gs->remove( "username" ); + } + else + { + gs->insert( "username", login ); + } +} + const NamedEnumTable< HostNameAction >& hostNameActionNames() { @@ -110,15 +134,7 @@ Config::setLoginName( const QString& login ) { if ( login != m_loginName ) { - Calamares::GlobalStorage* gs = Calamares::JobQueue::instance()->globalStorage(); - if ( login.isEmpty() ) - { - gs->remove( "username" ); - } - else - { - gs->insert( "username", login ); - } + updateGSAutoLogin( doAutoLogin(), login ); m_customLoginName = !login.isEmpty(); m_loginName = login; @@ -330,9 +346,9 @@ Config::setFullName( const QString& name ) QString login = makeLoginNameSuggestion( cleanParts ); if ( !login.isEmpty() && login != m_loginName ) { - m_loginName = login; - emit loginNameChanged( login ); - emit loginNameStatusChanged( loginNameStatus() ); + setLoginName( login ); + // It's **still** not custom, though setLoginName() sets that + m_customLoginName = false; } } if ( !m_customHostName ) @@ -340,9 +356,9 @@ Config::setFullName( const QString& name ) QString hostname = makeHostnameSuggestion( cleanParts ); if ( !hostname.isEmpty() && hostname != m_hostName ) { - m_hostName = hostname; - emit hostNameChanged( hostname ); - emit hostNameStatusChanged( hostNameStatus() ); + setHostName( hostname ); + // Still not custom + m_customHostName = false; } } } @@ -353,15 +369,7 @@ Config::setAutoLogin( bool b ) { if ( b != m_doAutoLogin ) { - Calamares::GlobalStorage* gs = Calamares::JobQueue::instance()->globalStorage(); - if ( b ) - { - gs->insert( "autologinUser", loginName() ); - } - else - { - gs->remove( "autologinUser" ); - } + updateGSAutoLogin( b, loginName() ); m_doAutoLogin = b; emit autoLoginChanged( b ); } @@ -700,14 +708,16 @@ Config::setConfigurationMap( const QVariantMap& configurationMap ) } std::sort( m_passwordChecks.begin(), m_passwordChecks.end() ); + updateGSAutoLogin( doAutoLogin(), loginName() ); checkReady(); } void Config::finalizeGlobalStorage() const { - Calamares::GlobalStorage* gs = Calamares::JobQueue::instance()->globalStorage(); + updateGSAutoLogin( doAutoLogin(), loginName() ); + Calamares::GlobalStorage* gs = Calamares::JobQueue::instance()->globalStorage(); if ( writeRootPassword() ) { gs->insert( "reuseRootPassword", reuseUserPasswordForRoot() ); From df0180fc12fd2fae6a6568ecf9795b04224af845 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Tue, 1 Sep 2020 17:09:07 +0200 Subject: [PATCH 148/157] i18n: Tajik timezone translations FIXES #1504 --- lang/tz_tg.ts | 2620 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 2620 insertions(+) create mode 100644 lang/tz_tg.ts diff --git a/lang/tz_tg.ts b/lang/tz_tg.ts new file mode 100644 index 0000000000..77e0756195 --- /dev/null +++ b/lang/tz_tg.ts @@ -0,0 +1,2620 @@ + + + + + + QObject + + + Africa + tz_regions + Африка + + + + America + tz_regions + Америка + + + + Antarctica + tz_regions + Антарктида + + + + Arctic + tz_regions + Арктика + + + + Asia + tz_regions + Осиё + + + + Atlantic + tz_regions + Уқёнуси Атлантикӣ + + + + Australia + tz_regions + Австралия + + + + Europe + tz_regions + Аврупо + + + + Indian + tz_regions + Ҳиндӣ + + + + Pacific + tz_regions + Уқёнуси Ором + + + + Abidjan + tz_names + Абиҷон + + + + Accra + tz_names + Аккра + + + + Adak + tz_names + Адак + + + + Addis Ababa + tz_names + Аддис-Абаба + + + + Adelaide + tz_names + Аделаида + + + + Aden + tz_names + Аден + + + + Algiers + tz_names + Алҷазоир + + + + Almaty + tz_names + Алмаато + + + + Amman + tz_names + Уммон + + + + Amsterdam + tz_names + Амстердам + + + + Anadyr + tz_names + Анадир + + + + Anchorage + tz_names + Анкориҷ + + + + Andorra + tz_names + Андорра + + + + Anguilla + tz_names + Ангвелла + + + + Antananarivo + tz_names + Антананариву + + + + Antigua + tz_names + Антигуа + + + + Apia + tz_names + Апиа + + + + Aqtau + tz_names + Актау + + + + Aqtobe + tz_names + Актобе + + + + Araguaina + tz_names + Арагуаина + + + + Argentina/Buenos Aires + tz_names + Аргентина/Буэнос-Айрес + + + + Argentina/Catamarca + tz_names + Аргентина/Катамарка + + + + Argentina/Cordoba + tz_names + Аргентина/Кордоба + + + + Argentina/Jujuy + tz_names + Аргентина/Ҷуҷуй + + + + Argentina/La Rioja + tz_names + Аргентина/Ла Риоха + + + + Argentina/Mendoza + tz_names + Аргентина/Мендоза + + + + Argentina/Rio Gallegos + tz_names + Аргентина/Рио Галегос + + + + Argentina/Salta + tz_names + Аргентина/Салта + + + + Argentina/San Juan + tz_names + Аргентина/Сан Ҷуан + + + + Argentina/San Luis + tz_names + Аргентина/Сан Луис + + + + Argentina/Tucuman + tz_names + Аргентина/Тукуман + + + + Argentina/Ushuaia + tz_names + Аргентина/Ушуайя + + + + Aruba + tz_names + Аруба + + + + Ashgabat + tz_names + Ашқобод + + + + Asmara + tz_names + Асмэра + + + + Astrakhan + tz_names + Астрахан + + + + Asuncion + tz_names + Асунсон + + + + Athens + tz_names + Афина + + + + Atikokan + tz_names + Атикокак + + + + Atyrau + tz_names + Атирау + + + + Auckland + tz_names + Окленд + + + + Azores + tz_names + Азор + + + + Baghdad + tz_names + Бағдод + + + + Bahia + tz_names + Баҳя + + + + Bahia Banderas + tz_names + Баҳя Бандерас + + + + Bahrain + tz_names + Баҳрайн + + + + Baku + tz_names + Боку + + + + Bamako + tz_names + Бомако + + + + Bangkok + tz_names + Бангкок + + + + Bangui + tz_names + Банги + + + + Banjul + tz_names + Банжул + + + + Barbados + tz_names + Барбадос + + + + Barnaul + tz_names + Барнаул + + + + Beirut + tz_names + Бейрут + + + + Belem + tz_names + Белем + + + + Belgrade + tz_names + Белград + + + + Belize + tz_names + Белиз + + + + Berlin + tz_names + Берлин + + + + Bermuda + tz_names + Бермуда + + + + Bishkek + tz_names + Бишкек + + + + Bissau + tz_names + Бисау + + + + Blanc-Sablon + tz_names + Бланк-Саблон + + + + Blantyre + tz_names + Блантайр + + + + Boa Vista + tz_names + Боа-Виста + + + + Bogota + tz_names + Богота + + + + Boise + tz_names + Бойсе + + + + Bougainville + tz_names + Бугенвил + + + + Bratislava + tz_names + Братислава + + + + Brazzaville + tz_names + Браззавил + + + + Brisbane + tz_names + Брисбен + + + + Broken Hill + tz_names + Брокен-Хилл + + + + Brunei + tz_names + Бруней + + + + Brussels + tz_names + Брюссел + + + + Bucharest + tz_names + Бухарест + + + + Budapest + tz_names + Будапешт + + + + Bujumbura + tz_names + Буҷумбура + + + + Busingen + tz_names + Бусинген + + + + Cairo + tz_names + Қоҳира + + + + Cambridge Bay + tz_names + Кеймбриҷ-Бей + + + + Campo Grande + tz_names + Кампо-Граде + + + + Canary + tz_names + Канарӣ + + + + Cancun + tz_names + Канкун + + + + Cape Verde + tz_names + Кабо-Верде + + + + Caracas + tz_names + Каракас + + + + Casablanca + tz_names + Касабланка + + + + Casey + tz_names + Кейси + + + + Cayenne + tz_names + Кайенна + + + + Cayman + tz_names + Кайман + + + + Ceuta + tz_names + Сеута + + + + Chagos + tz_names + Чагос + + + + Chatham + tz_names + Чатам + + + + Chicago + tz_names + Чикаго + + + + Chihuahua + tz_names + Чихуахуа + + + + Chisinau + tz_names + Кишинев + + + + Chita + tz_names + Чита + + + + Choibalsan + tz_names + Чойбалсан + + + + Christmas + tz_names + Крисмас + + + + Chuuk + tz_names + Чуук + + + + Cocos + tz_names + Кокос + + + + Colombo + tz_names + Коломбо + + + + Comoro + tz_names + Коморо + + + + Conakry + tz_names + Конакри + + + + Copenhagen + tz_names + Копенгаген + + + + Costa Rica + tz_names + Коста-Рика + + + + Creston + tz_names + Крестон + + + + Cuiaba + tz_names + Куяба + + + + Curacao + tz_names + Кюрасао + + + + Currie + tz_names + Керри + + + + Dakar + tz_names + Дакар + + + + Damascus + tz_names + Димишқ + + + + Danmarkshavn + tz_names + Данмарксҳавн + + + + Dar es Salaam + tz_names + Даруссалам + + + + Darwin + tz_names + Дарвин + + + + Davis + tz_names + Дейвис + + + + Dawson + tz_names + Доусон + + + + Dawson Creek + tz_names + Доусон-Крик + + + + Denver + tz_names + Денвер + + + + Detroit + tz_names + Детройт + + + + Dhaka + tz_names + Дакка + + + + Dili + tz_names + Дили + + + + Djibouti + tz_names + Ҷибути + + + + Dominica + tz_names + Доминика + + + + Douala + tz_names + Доуала + + + + Dubai + tz_names + Дубай + + + + Dublin + tz_names + Дублин + + + + DumontDUrville + tz_names + Дюмон д’Юрвил + + + + Dushanbe + tz_names + Душанбе + + + + Easter + tz_names + Писҳо + + + + Edmonton + tz_names + Эдмонтон + + + + Efate + tz_names + Эфате + + + + Eirunepe + tz_names + Эйрунепе + + + + El Aaiun + tz_names + Эл-Аюн + + + + El Salvador + tz_names + Ал-Салвадор + + + + Enderbury + tz_names + Эндербери + + + + Eucla + tz_names + Юкла + + + + Fakaofo + tz_names + Факаофо + + + + Famagusta + tz_names + Фамагуста + + + + Faroe + tz_names + Фарер + + + + Fiji + tz_names + Фиҷи + + + + Fort Nelson + tz_names + Форт Нелсон + + + + Fortaleza + tz_names + Форталеза + + + + Freetown + tz_names + Фритаун + + + + Funafuti + tz_names + Фунафути + + + + Gaborone + tz_names + Габороне + + + + Galapagos + tz_names + Галапагос + + + + Gambier + tz_names + Гамбир + + + + Gaza + tz_names + Газа + + + + Gibraltar + tz_names + Гибралтар + + + + Glace Bay + tz_names + Глас Бэй + + + + Godthab + tz_names + Готхоб + + + + Goose Bay + tz_names + Гус-Бэй + + + + Grand Turk + tz_names + Гранд Турк + + + + Grenada + tz_names + Гренада + + + + Guadalcanal + tz_names + Гуадалканал + + + + Guadeloupe + tz_names + Гваделупа + + + + Guam + tz_names + Гуам + + + + Guatemala + tz_names + Гватемала + + + + Guayaquil + tz_names + Гуаякил + + + + Guernsey + tz_names + Гернси + + + + Guyana + tz_names + Гайана + + + + Halifax + tz_names + Галифакс + + + + Harare + tz_names + Хараре + + + + Havana + tz_names + Гавана + + + + Hebron + tz_names + Ҳеврон + + + + Helsinki + tz_names + Ҳелсинки + + + + Hermosillo + tz_names + Ҳермосилло + + + + Ho Chi Minh + tz_names + Ҳошимин + + + + Hobart + tz_names + Ҳобарт + + + + Hong Kong + tz_names + Ҳонгконг + + + + Honolulu + tz_names + Гонолулу + + + + Hovd + tz_names + Ҳовд + + + + Indiana/Indianapolis + tz_names + Индиана/Индианаполис + + + + Indiana/Knox + tz_names + Индиана/Кнокс + + + + Indiana/Marengo + tz_names + Индиана/Маренго + + + + Indiana/Petersburg + tz_names + Индиана/Питерсберг + + + + Indiana/Tell City + tz_names + Индиана/Телл Сити + + + + Indiana/Vevay + tz_names + Индиана/Вивэй + + + + Indiana/Vincennes + tz_names + Индиана/Винсенс + + + + Indiana/Winamac + tz_names + Индиана/Винамак + + + + Inuvik + tz_names + Инувик + + + + Iqaluit + tz_names + Икалуит + + + + Irkutsk + tz_names + Иркутск + + + + Isle of Man + tz_names + Ҷазираи Мэн + + + + Istanbul + tz_names + Стамбул + + + + Jakarta + tz_names + Ҷакарта + + + + Jamaica + tz_names + Ҷомайка + + + + Jayapura + tz_names + Ҷайапура + + + + Jersey + tz_names + Ҷерси + + + + Jerusalem + tz_names + Байтулмуқаддас + + + + Johannesburg + tz_names + Йоханнесбург + + + + Juba + tz_names + Ҷуба + + + + Juneau + tz_names + Ҷуно + + + + Kabul + tz_names + Кобул + + + + Kaliningrad + tz_names + Калининград + + + + Kamchatka + tz_names + Камчатка + + + + Kampala + tz_names + Кампала + + + + Karachi + tz_names + Қарочӣ + + + + Kathmandu + tz_names + Катманду + + + + Kentucky/Louisville + tz_names + Кентуки/Луисвилл + + + + Kentucky/Monticello + tz_names + Кентуки/Монтиселло + + + + Kerguelen + tz_names + Кергелен + + + + Khandyga + tz_names + Хандига + + + + Khartoum + tz_names + Хартум + + + + Kiev + tz_names + Киев + + + + Kigali + tz_names + Кигали + + + + Kinshasa + tz_names + Киншаса + + + + Kiritimati + tz_names + Киритимати + + + + Kirov + tz_names + Киров + + + + Kolkata + tz_names + Калкута + + + + Kosrae + tz_names + Косра + + + + Kralendijk + tz_names + Кралендейк + + + + Krasnoyarsk + tz_names + Красноярск + + + + Kuala Lumpur + tz_names + Куала-Лумпур + + + + Kuching + tz_names + Кучинг + + + + Kuwait + tz_names + Қувайт + + + + Kwajalein + tz_names + Кваҷалейн + + + + La Paz + tz_names + Ла-Пас + + + + Lagos + tz_names + Лагос + + + + Libreville + tz_names + Либревил + + + + Lima + tz_names + Лима + + + + Lindeman + tz_names + Линдерман + + + + Lisbon + tz_names + Лиссабон + + + + Ljubljana + tz_names + Любляна + + + + Lome + tz_names + Ломе + + + + London + tz_names + Лондон + + + + Longyearbyen + tz_names + Лонгйир + + + + Lord Howe + tz_names + Лорд-Хау + + + + Los Angeles + tz_names + Лос-Анҷелес + + + + Lower Princes + tz_names + Лоуэр-Принс + + + + Luanda + tz_names + Луанда + + + + Lubumbashi + tz_names + Лубумбаши + + + + Lusaka + tz_names + Лусака + + + + Luxembourg + tz_names + Люксембург + + + + Macau + tz_names + Макау + + + + Maceio + tz_names + Масейо + + + + Macquarie + tz_names + Макгвайр + + + + Madeira + tz_names + Мадейра + + + + Madrid + tz_names + Мадрид + + + + Magadan + tz_names + Магадан + + + + Mahe + tz_names + Маэ + + + + Majuro + tz_names + Маҷуро + + + + Makassar + tz_names + Макассар + + + + Malabo + tz_names + Малабо + + + + Maldives + tz_names + Малдив + + + + Malta + tz_names + Малта + + + + Managua + tz_names + Манагуа + + + + Manaus + tz_names + Манаус + + + + Manila + tz_names + Манила + + + + Maputo + tz_names + Мапуту + + + + Mariehamn + tz_names + Мариехамн + + + + Marigot + tz_names + Маригот + + + + Marquesas + tz_names + Маркизас + + + + Martinique + tz_names + Мартиника + + + + Maseru + tz_names + Масеру + + + + Matamoros + tz_names + Матаморос + + + + Mauritius + tz_names + Маврикий + + + + Mawson + tz_names + Маусон + + + + Mayotte + tz_names + Майотта + + + + Mazatlan + tz_names + Масатлан + + + + Mbabane + tz_names + Мбабане + + + + McMurdo + tz_names + Мак-Мердо + + + + Melbourne + tz_names + Мелбурн + + + + Menominee + tz_names + Меномини + + + + Merida + tz_names + Мерида + + + + Metlakatla + tz_names + Метлакатла + + + + Mexico City + tz_names + Мехико + + + + Midway + tz_names + Мидуэй + + + + Minsk + tz_names + Минск + + + + Miquelon + tz_names + Микелон + + + + Mogadishu + tz_names + Могадишо + + + + Monaco + tz_names + Монако + + + + Moncton + tz_names + Монктон + + + + Monrovia + tz_names + Монровия + + + + Monterrey + tz_names + Монтеррей + + + + Montevideo + tz_names + Монтевидео + + + + Montserrat + tz_names + Монтсеррат + + + + Moscow + tz_names + Москав + + + + Muscat + tz_names + Масқат + + + + Nairobi + tz_names + Найроби + + + + Nassau + tz_names + Нассау + + + + Nauru + tz_names + Новурӯ + + + + Ndjamena + tz_names + Нҷамена + + + + New York + tz_names + Штати Ню-Йорк + + + + Niamey + tz_names + Ниамей + + + + Nicosia + tz_names + Никосия + + + + Nipigon + tz_names + Нипигон + + + + Niue + tz_names + Нива + + + + Nome + tz_names + Ном + + + + Norfolk + tz_names + Норфолк + + + + Noronha + tz_names + Нороня + + + + North Dakota/Beulah + tz_names + Дакотаи Шимолӣ/Бойла + + + + North Dakota/Center + tz_names + Дакотаи Шимолӣ/Марказ + + + + North Dakota/New Salem + tz_names + Дакотаи Шимолӣ/Ню Сейлем + + + + Nouakchott + tz_names + Нуакшот + + + + Noumea + tz_names + Нумеа + + + + Novokuznetsk + tz_names + Новокузнетск + + + + Novosibirsk + tz_names + Новосибирск + + + + Ojinaga + tz_names + Оҷинага + + + + Omsk + tz_names + Омск + + + + Oral + tz_names + Орал + + + + Oslo + tz_names + Осло + + + + Ouagadougou + tz_names + Уагадугу + + + + Pago Pago + tz_names + Паго-Паго + + + + Palau + tz_names + Палаув + + + + Palmer + tz_names + Палмер + + + + Panama + tz_names + Панама + + + + Pangnirtung + tz_names + Пангниртунг + + + + Paramaribo + tz_names + Парамарибо + + + + Paris + tz_names + Париж + + + + Perth + tz_names + Перт + + + + Phnom Penh + tz_names + Пномпен + + + + Phoenix + tz_names + Феникс + + + + Pitcairn + tz_names + Питкоирн + + + + Podgorica + tz_names + Подгоритса + + + + Pohnpei + tz_names + Понпеи + + + + Pontianak + tz_names + Понтианак + + + + Port Moresby + tz_names + Порт-Морсби + + + + Port of Spain + tz_names + Порт-оф-Спейн + + + + Port-au-Prince + tz_names + Порт-о-Пренс + + + + Porto Velho + tz_names + Порту-Велю + + + + Porto-Novo + tz_names + Порто-Ново + + + + Prague + tz_names + Прага + + + + Puerto Rico + tz_names + Пуэрто-Рико + + + + Punta Arenas + tz_names + Пунта Аренас + + + + Pyongyang + tz_names + Пхенян + + + + Qatar + tz_names + Қатар + + + + Qostanay + tz_names + Костанай + + + + Qyzylorda + tz_names + Қизилорда + + + + Rainy River + tz_names + Рейни Ривер + + + + Rankin Inlet + tz_names + Ранкин-Инлет + + + + Rarotonga + tz_names + Раротонга + + + + Recife + tz_names + Ресиф + + + + Regina + tz_names + Регина + + + + Resolute + tz_names + Резолют + + + + Reunion + tz_names + Реюнон + + + + Reykjavik + tz_names + Рейкявик + + + + Riga + tz_names + Рига + + + + Rio Branco + tz_names + Риу-Бранку + + + + Riyadh + tz_names + Арриёз + + + + Rome + tz_names + Рим + + + + Rothera + tz_names + Ротера + + + + Saipan + tz_names + Сайпан + + + + Sakhalin + tz_names + Сахалин + + + + Samara + tz_names + Самара + + + + Samarkand + tz_names + Самарқанд + + + + San Marino + tz_names + Сан-Марино + + + + Santarem + tz_names + Сантарем + + + + Santiago + tz_names + Сантяго + + + + Santo Domingo + tz_names + Санто-Доминго + + + + Sao Paulo + tz_names + Сан-Паулу + + + + Sao Tome + tz_names + Сан-Томе + + + + Sarajevo + tz_names + Сараево + + + + Saratov + tz_names + Саратов + + + + Scoresbysund + tz_names + Скорсбисунд + + + + Seoul + tz_names + Сеул + + + + Shanghai + tz_names + Шанхай + + + + Simferopol + tz_names + Симферопол + + + + Singapore + tz_names + Сингапур + + + + Sitka + tz_names + Ситка + + + + Skopje + tz_names + Скопе + + + + Sofia + tz_names + София + + + + South Georgia + tz_names + Ҷорҷияи Ҷанубӣ + + + + Srednekolymsk + tz_names + Среднеколимск + + + + St Barthelemy + tz_names + Сент-Бартелми + + + + St Helena + tz_names + Сент-Ҳелена + + + + St Johns + tz_names + Сент-Ҷонс + + + + St Kitts + tz_names + Сент-Китс + + + + St Lucia + tz_names + Сент-Люсиа + + + + St Thomas + tz_names + Сент-Томас + + + + St Vincent + tz_names + Сент-Винсент + + + + Stanley + tz_names + Стэнли + + + + Stockholm + tz_names + Стокголм + + + + Swift Current + tz_names + Свифт Каррент + + + + Sydney + tz_names + Сидней + + + + Syowa + tz_names + Сева + + + + Tahiti + tz_names + Таити + + + + Taipei + tz_names + Тайбэй + + + + Tallinn + tz_names + Таллин + + + + Tarawa + tz_names + Тарава + + + + Tashkent + tz_names + Тошкент + + + + Tbilisi + tz_names + Тбилиси + + + + Tegucigalpa + tz_names + Тегусигалпа + + + + Tehran + tz_names + Теҳрон + + + + Thimphu + tz_names + Тхимпху + + + + Thule + tz_names + Фула + + + + Thunder Bay + tz_names + Тандер-Бей + + + + Tijuana + tz_names + Тихуана + + + + Tirane + tz_names + Тирана + + + + Tokyo + tz_names + Токио + + + + Tomsk + tz_names + Томск + + + + Tongatapu + tz_names + Тонгатапу + + + + Toronto + tz_names + Торонто + + + + Tortola + tz_names + Тортола + + + + Tripoli + tz_names + Триполи + + + + Troll + tz_names + Тролл + + + + Tunis + tz_names + Тунис + + + + Ulaanbaatar + tz_names + Улон-Ботур + + + + Ulyanovsk + tz_names + Уляновск + + + + Urumqi + tz_names + Урумчи + + + + Ust-Nera + tz_names + Уст-Нера + + + + Uzhgorod + tz_names + Ужгород + + + + Vaduz + tz_names + Вадуз + + + + Vancouver + tz_names + Ванкувер + + + + Vatican + tz_names + Ватикан + + + + Vienna + tz_names + Вена + + + + Vientiane + tz_names + Вентян + + + + Vilnius + tz_names + Вилнюс + + + + Vladivostok + tz_names + Владивосток + + + + Volgograd + tz_names + Волгоград + + + + Vostok + tz_names + Восток + + + + Wake + tz_names + Вэйк + + + + Wallis + tz_names + Уоллис + + + + Warsaw + tz_names + Варшава + + + + Whitehorse + tz_names + Уайтхорс + + + + Windhoek + tz_names + Виндхук + + + + Winnipeg + tz_names + Виннипег + + + + Yakutat + tz_names + Якутат + + + + Yakutsk + tz_names + Якутск + + + + Yangon + tz_names + Янгон + + + + Yekaterinburg + tz_names + Екатеринбург + + + + Yellowknife + tz_names + Йеллоунайф + + + + Yerevan + tz_names + Ереван + + + + Zagreb + tz_names + Загреб + + + + Zaporozhye + tz_names + Запорожие + + + + Zurich + tz_names + Тсурих + + + From d5eaacf67a6194f9324c15a316f346654296c4f4 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Wed, 2 Sep 2020 11:56:51 +0200 Subject: [PATCH 149/157] i18n: used wrong list of languages FIXES #1505 --- src/calamares/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/calamares/CMakeLists.txt b/src/calamares/CMakeLists.txt index ff7c90bcc6..94abb9f549 100644 --- a/src/calamares/CMakeLists.txt +++ b/src/calamares/CMakeLists.txt @@ -41,7 +41,7 @@ set( TS_FILES "" ) set( calamares_i18n_qrc_content "" ) # calamares and qt language files -foreach( lang ${CALAMARES_LANGUAGES} ) +foreach( lang ${CALAMARES_TRANSLATION_LANGUAGES} ) foreach( tlsource "calamares_${lang}" "tz_${lang}" ) if( EXISTS "${CMAKE_SOURCE_DIR}/lang/${tlsource}.ts" ) set( calamares_i18n_qrc_content "${calamares_i18n_qrc_content}${tlsource}.qm\n" ) From 5ed57331d67cfad1acc131e5793c096b9b56ec85 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Thu, 3 Sep 2020 15:03:22 +0200 Subject: [PATCH 150/157] i18n: Update timezone translations SEE #1506 --- CHANGES | 2 + lang/tz_ru.ts | 2620 +++++++++++++++++++++++++++++++++++++++++++++++++ lang/tz_tg.ts | 2 +- 3 files changed, 2623 insertions(+), 1 deletion(-) create mode 100644 lang/tz_ru.ts diff --git a/CHANGES b/CHANGES index 0f6dd7de1e..7508354c9c 100644 --- a/CHANGES +++ b/CHANGES @@ -14,6 +14,7 @@ This release contains contributions from (alphabetically by first name): - Asif Mahmud Shimon - Manzoor Ahmed Munawar - Sai Kamal + - Victor Ibragimov This release has two giant source-code changes that have no effect on functionality, but do touch each and every source file: @@ -32,6 +33,7 @@ on functionality, but do touch each and every source file: via a synchronous ping. (Thanks to Asif) - New Telugu translation. (Thanks to Sai) - Urdu translation started. (Thanks to Manzoor) + - Timezones translated in Tajik and Russian. (Thanks to Victor) ## Modules ## - *keyboardq* and *localeq* improvements. (Thanks to Anke) diff --git a/lang/tz_ru.ts b/lang/tz_ru.ts new file mode 100644 index 0000000000..4c60096b51 --- /dev/null +++ b/lang/tz_ru.ts @@ -0,0 +1,2620 @@ + + + + + + QObject + + + Africa + tz_regions + Африка + + + + America + tz_regions + Америка + + + + Antarctica + tz_regions + Антарктида + + + + Arctic + tz_regions + Северный Ледовитый океан + + + + Asia + tz_regions + Азия + + + + Atlantic + tz_regions + Атлантика + + + + Australia + tz_regions + Австралия + + + + Europe + tz_regions + Европа + + + + Indian + tz_regions + Индийский океан + + + + Pacific + tz_regions + Тихоокеанское время + + + + Abidjan + tz_names + Абиджан + + + + Accra + tz_names + Аккра + + + + Adak + tz_names + Адак + + + + Addis Ababa + tz_names + Аддис-Абеба + + + + Adelaide + tz_names + Аделаида + + + + Aden + tz_names + Аден + + + + Algiers + tz_names + Алжир + + + + Almaty + tz_names + Алма-Ата + + + + Amman + tz_names + Амман + + + + Amsterdam + tz_names + Амстердам + + + + Anadyr + tz_names + Анадырь + + + + Anchorage + tz_names + Анкоридж + + + + Andorra + tz_names + Андорра + + + + Anguilla + tz_names + Ангилья + + + + Antananarivo + tz_names + Антананариву + + + + Antigua + tz_names + Антигуа + + + + Apia + tz_names + Апиа + + + + Aqtau + tz_names + Актау + + + + Aqtobe + tz_names + Актобе + + + + Araguaina + tz_names + Арагуаина + + + + Argentina/Buenos Aires + tz_names + Аргентина/Буэнос-Айрес + + + + Argentina/Catamarca + tz_names + Аргентина/Катамарка + + + + Argentina/Cordoba + tz_names + Аргентина/Кордова + + + + Argentina/Jujuy + tz_names + Аргентина/Жужуй + + + + Argentina/La Rioja + tz_names + Аргентина/Ла-Риоха + + + + Argentina/Mendoza + tz_names + Аргентина/Мендоса + + + + Argentina/Rio Gallegos + tz_names + Аргентина/Рио-Гальегос + + + + Argentina/Salta + tz_names + Аргентина/Сальта + + + + Argentina/San Juan + tz_names + Аргентина/Сан-Хуан + + + + Argentina/San Luis + tz_names + Аргентина/Сан-Луис + + + + Argentina/Tucuman + tz_names + Аргентина/Тукуман + + + + Argentina/Ushuaia + tz_names + Аргентина/Ушуая + + + + Aruba + tz_names + Аруба + + + + Ashgabat + tz_names + Ашхабад + + + + Asmara + tz_names + Асмэра + + + + Astrakhan + tz_names + Астрахань + + + + Asuncion + tz_names + Асунсьон + + + + Athens + tz_names + Афины + + + + Atikokan + tz_names + Атикокан + + + + Atyrau + tz_names + Атырау + + + + Auckland + tz_names + Окленд + + + + Azores + tz_names + Азорские острова + + + + Baghdad + tz_names + Багдад + + + + Bahia + tz_names + Баия + + + + Bahia Banderas + tz_names + Баия-де-Бандерас + + + + Bahrain + tz_names + Бахрейн + + + + Baku + tz_names + Баку + + + + Bamako + tz_names + Бамако + + + + Bangkok + tz_names + Бангкок + + + + Bangui + tz_names + Банги + + + + Banjul + tz_names + Банжул + + + + Barbados + tz_names + Барбадос + + + + Barnaul + tz_names + Барнаул + + + + Beirut + tz_names + Бейрут + + + + Belem + tz_names + Белен + + + + Belgrade + tz_names + Белград + + + + Belize + tz_names + Белиз + + + + Berlin + tz_names + Берлин + + + + Bermuda + tz_names + Бермуды + + + + Bishkek + tz_names + Бишкек + + + + Bissau + tz_names + Бисау + + + + Blanc-Sablon + tz_names + Бланк-Саблон + + + + Blantyre + tz_names + Блантир + + + + Boa Vista + tz_names + Боа-Виста + + + + Bogota + tz_names + Богота + + + + Boise + tz_names + Бойсе + + + + Bougainville + tz_names + Бугенвиль + + + + Bratislava + tz_names + Братислава + + + + Brazzaville + tz_names + Браззавиль + + + + Brisbane + tz_names + Брисбен + + + + Broken Hill + tz_names + Брокен-Хилл + + + + Brunei + tz_names + Бруней + + + + Brussels + tz_names + Брюссель + + + + Bucharest + tz_names + Бухарест + + + + Budapest + tz_names + Будапешт + + + + Bujumbura + tz_names + Бужумбура + + + + Busingen + tz_names + Бюзинген + + + + Cairo + tz_names + Каир + + + + Cambridge Bay + tz_names + Кеймбридж-Бей + + + + Campo Grande + tz_names + Кампу-Гранде + + + + Canary + tz_names + Канары + + + + Cancun + tz_names + Канкун + + + + Cape Verde + tz_names + Кабо-Верде + + + + Caracas + tz_names + Каракас + + + + Casablanca + tz_names + Касабланка + + + + Casey + tz_names + Кейси + + + + Cayenne + tz_names + Кайенна + + + + Cayman + tz_names + Кайман + + + + Ceuta + tz_names + Сеута + + + + Chagos + tz_names + Чагос + + + + Chatham + tz_names + Чатем + + + + Chicago + tz_names + Чикаго + + + + Chihuahua + tz_names + Чиуауа + + + + Chisinau + tz_names + Кишинев + + + + Chita + tz_names + Чита + + + + Choibalsan + tz_names + Чойбалсан + + + + Christmas + tz_names + о. Рождества + + + + Chuuk + tz_names + Чуук + + + + Cocos + tz_names + Кокосовые острова + + + + Colombo + tz_names + Коломбо + + + + Comoro + tz_names + Коморские острова + + + + Conakry + tz_names + Конакри + + + + Copenhagen + tz_names + Копенгаген + + + + Costa Rica + tz_names + Коста-Рика + + + + Creston + tz_names + Крестон + + + + Cuiaba + tz_names + Куяба + + + + Curacao + tz_names + Кюрасао + + + + Currie + tz_names + Курри + + + + Dakar + tz_names + Дакар + + + + Damascus + tz_names + Дамаск + + + + Danmarkshavn + tz_names + Денмаркшавн + + + + Dar es Salaam + tz_names + Дар-эс-Салам + + + + Darwin + tz_names + Дарвин + + + + Davis + tz_names + Дейвис + + + + Dawson + tz_names + Доусон + + + + Dawson Creek + tz_names + Доусон-Крик + + + + Denver + tz_names + Денвер + + + + Detroit + tz_names + Детройт + + + + Dhaka + tz_names + Дакка + + + + Dili + tz_names + Дили + + + + Djibouti + tz_names + Джибути + + + + Dominica + tz_names + Доминика + + + + Douala + tz_names + Дуала + + + + Dubai + tz_names + Дубай + + + + Dublin + tz_names + Дублин + + + + DumontDUrville + tz_names + Дюмон д’Юрвиль + + + + Dushanbe + tz_names + Душанбе + + + + Easter + tz_names + Остров Пасхи + + + + Edmonton + tz_names + Эдмонтон + + + + Efate + tz_names + Эфате + + + + Eirunepe + tz_names + Эйрунепе + + + + El Aaiun + tz_names + Эль-Аюн + + + + El Salvador + tz_names + Сальвадор + + + + Enderbury + tz_names + Эндербери + + + + Eucla + tz_names + Юкла + + + + Fakaofo + tz_names + Факаофо + + + + Famagusta + tz_names + Фамагуста + + + + Faroe + tz_names + Фаэро + + + + Fiji + tz_names + Фиджи + + + + Fort Nelson + tz_names + Форт Нельсон + + + + Fortaleza + tz_names + Форталеза + + + + Freetown + tz_names + Фритаун + + + + Funafuti + tz_names + Фунафути + + + + Gaborone + tz_names + Габороне + + + + Galapagos + tz_names + Галапагос + + + + Gambier + tz_names + Гамбье + + + + Gaza + tz_names + Газа + + + + Gibraltar + tz_names + Гибралтар + + + + Glace Bay + tz_names + Глейс-Бей + + + + Godthab + tz_names + Готхоб + + + + Goose Bay + tz_names + Гус-Бей + + + + Grand Turk + tz_names + Гранд-Терк + + + + Grenada + tz_names + Гренада + + + + Guadalcanal + tz_names + Гуадалканал + + + + Guadeloupe + tz_names + Гваделупа + + + + Guam + tz_names + Гуам + + + + Guatemala + tz_names + Гватемала + + + + Guayaquil + tz_names + Гуаякиль + + + + Guernsey + tz_names + Гернси + + + + Guyana + tz_names + Гайана + + + + Halifax + tz_names + Галифакс + + + + Harare + tz_names + Хараре + + + + Havana + tz_names + Гавана + + + + Hebron + tz_names + Хеврон + + + + Helsinki + tz_names + Хельсинки + + + + Hermosillo + tz_names + Эрмосильо + + + + Ho Chi Minh + tz_names + Хошимин + + + + Hobart + tz_names + Хобарт + + + + Hong Kong + tz_names + Гонконг + + + + Honolulu + tz_names + Гонолулу + + + + Hovd + tz_names + Ховд + + + + Indiana/Indianapolis + tz_names + Индиана/Индианаполис + + + + Indiana/Knox + tz_names + Индиана/Нокс + + + + Indiana/Marengo + tz_names + Индиана/Маренго + + + + Indiana/Petersburg + tz_names + Индиана/Петербург + + + + Indiana/Tell City + tz_names + Индиана/Телл-Сити + + + + Indiana/Vevay + tz_names + Индиана/Вивей + + + + Indiana/Vincennes + tz_names + Индиана/Винсеннс + + + + Indiana/Winamac + tz_names + Индиана/Винамак + + + + Inuvik + tz_names + Инувик + + + + Iqaluit + tz_names + Икалуит + + + + Irkutsk + tz_names + Иркутск + + + + Isle of Man + tz_names + о. Мэн + + + + Istanbul + tz_names + Стамбул + + + + Jakarta + tz_names + Джакарта + + + + Jamaica + tz_names + Ямайка + + + + Jayapura + tz_names + Джаяпура + + + + Jersey + tz_names + Джерси + + + + Jerusalem + tz_names + Иерусалим + + + + Johannesburg + tz_names + Йоханнесбург + + + + Juba + tz_names + Джуба + + + + Juneau + tz_names + Джуно + + + + Kabul + tz_names + Кабул + + + + Kaliningrad + tz_names + Калининград + + + + Kamchatka + tz_names + Камчатка + + + + Kampala + tz_names + Кампала + + + + Karachi + tz_names + Карачи + + + + Kathmandu + tz_names + Катманду + + + + Kentucky/Louisville + tz_names + Кентукки/Луисвилль + + + + Kentucky/Monticello + tz_names + Кентуки/Монтицелло + + + + Kerguelen + tz_names + Кергелен + + + + Khandyga + tz_names + Хандыга + + + + Khartoum + tz_names + Хартум + + + + Kiev + tz_names + Киев + + + + Kigali + tz_names + Кигали + + + + Kinshasa + tz_names + Киншаса + + + + Kiritimati + tz_names + Киритимати + + + + Kirov + tz_names + Киров + + + + Kolkata + tz_names + Колката + + + + Kosrae + tz_names + Косрае + + + + Kralendijk + tz_names + Кралендейк + + + + Krasnoyarsk + tz_names + Красноярск + + + + Kuala Lumpur + tz_names + Куала-Лумпур + + + + Kuching + tz_names + Кучинг + + + + Kuwait + tz_names + Кувейт + + + + Kwajalein + tz_names + Квайалейн + + + + La Paz + tz_names + Ла-Пас + + + + Lagos + tz_names + Лагос + + + + Libreville + tz_names + Либревиль + + + + Lima + tz_names + Лима + + + + Lindeman + tz_names + Линдеман + + + + Lisbon + tz_names + Лисабон + + + + Ljubljana + tz_names + Любляна + + + + Lome + tz_names + Ломе + + + + London + tz_names + Лондон + + + + Longyearbyen + tz_names + Лонгйербиен + + + + Lord Howe + tz_names + Лорд-Хау + + + + Los Angeles + tz_names + Лос-Анджелес + + + + Lower Princes + tz_names + Лоуэр-Принс + + + + Luanda + tz_names + Луанда + + + + Lubumbashi + tz_names + Лубумбаши + + + + Lusaka + tz_names + Лусака + + + + Luxembourg + tz_names + Люксембург + + + + Macau + tz_names + Макао + + + + Maceio + tz_names + Масейо + + + + Macquarie + tz_names + Маккуори + + + + Madeira + tz_names + Мадейра + + + + Madrid + tz_names + Мадрид + + + + Magadan + tz_names + Магадан + + + + Mahe + tz_names + Маэ + + + + Majuro + tz_names + Маджуро + + + + Makassar + tz_names + Макассар + + + + Malabo + tz_names + Малабо + + + + Maldives + tz_names + Мальдивы + + + + Malta + tz_names + Мальта + + + + Managua + tz_names + Манагуа + + + + Manaus + tz_names + Манаус + + + + Manila + tz_names + Манила + + + + Maputo + tz_names + Мапуту + + + + Mariehamn + tz_names + Мариехамн + + + + Marigot + tz_names + Мариго + + + + Marquesas + tz_names + Маркизские острова + + + + Martinique + tz_names + Мартиника + + + + Maseru + tz_names + Масеру + + + + Matamoros + tz_names + Матаморос + + + + Mauritius + tz_names + Маврикий + + + + Mawson + tz_names + Моусон + + + + Mayotte + tz_names + Майотта + + + + Mazatlan + tz_names + Масатлан + + + + Mbabane + tz_names + Мбабане + + + + McMurdo + tz_names + Мак-Мёрдо + + + + Melbourne + tz_names + Мельбурн + + + + Menominee + tz_names + Меномини + + + + Merida + tz_names + Мерида + + + + Metlakatla + tz_names + Метлакатла + + + + Mexico City + tz_names + Мехико + + + + Midway + tz_names + Мидуэй + + + + Minsk + tz_names + Минск + + + + Miquelon + tz_names + Микелон + + + + Mogadishu + tz_names + Могадишо + + + + Monaco + tz_names + Монако + + + + Moncton + tz_names + Монктон + + + + Monrovia + tz_names + Монровия + + + + Monterrey + tz_names + Монтеррей + + + + Montevideo + tz_names + Монтевидео + + + + Montserrat + tz_names + Монтсеррат + + + + Moscow + tz_names + Москва + + + + Muscat + tz_names + Маскат + + + + Nairobi + tz_names + Найроби + + + + Nassau + tz_names + Нассау + + + + Nauru + tz_names + Науру + + + + Ndjamena + tz_names + Нджамена + + + + New York + tz_names + Нью-Йорк + + + + Niamey + tz_names + Ниамей + + + + Nicosia + tz_names + Никосия + + + + Nipigon + tz_names + Нипигон + + + + Niue + tz_names + Ниуэ + + + + Nome + tz_names + Ном + + + + Norfolk + tz_names + Норфолк + + + + Noronha + tz_names + Норонха + + + + North Dakota/Beulah + tz_names + Северная Дакота/Бьюла + + + + North Dakota/Center + tz_names + Северная Дакота/Центр + + + + North Dakota/New Salem + tz_names + Северная Дакота/Нью-Салем + + + + Nouakchott + tz_names + Нуакшот + + + + Noumea + tz_names + Нумеа + + + + Novokuznetsk + tz_names + Новокузнецк + + + + Novosibirsk + tz_names + Новосибирск + + + + Ojinaga + tz_names + Охинага + + + + Omsk + tz_names + Омск + + + + Oral + tz_names + Уральск + + + + Oslo + tz_names + Осло + + + + Ouagadougou + tz_names + Уагадугу + + + + Pago Pago + tz_names + Паго-Паго + + + + Palau + tz_names + Палау + + + + Palmer + tz_names + Палмер + + + + Panama + tz_names + Панама + + + + Pangnirtung + tz_names + Пангниртанг + + + + Paramaribo + tz_names + Парамарибо + + + + Paris + tz_names + Париж + + + + Perth + tz_names + Перт + + + + Phnom Penh + tz_names + Пномпень + + + + Phoenix + tz_names + Феникс + + + + Pitcairn + tz_names + Питкэрн + + + + Podgorica + tz_names + Подгорица + + + + Pohnpei + tz_names + Понпеи + + + + Pontianak + tz_names + Понтианак + + + + Port Moresby + tz_names + Порт-Морсби + + + + Port of Spain + tz_names + Порт-оф-Спейн + + + + Port-au-Prince + tz_names + Порт-о-Пренс + + + + Porto Velho + tz_names + Порту-Велью + + + + Porto-Novo + tz_names + Порто-Ново + + + + Prague + tz_names + Прага + + + + Puerto Rico + tz_names + Пуэрто-Рико + + + + Punta Arenas + tz_names + Пунта-Аренас + + + + Pyongyang + tz_names + Пхеньян + + + + Qatar + tz_names + Катар + + + + Qostanay + tz_names + Костанай + + + + Qyzylorda + tz_names + Кызылорда + + + + Rainy River + tz_names + Рейни Ривер + + + + Rankin Inlet + tz_names + Раротонга + + + + Rarotonga + tz_names + Раротонга + + + + Recife + tz_names + Ресифи + + + + Regina + tz_names + Реджайна + + + + Resolute + tz_names + Резолют + + + + Reunion + tz_names + Реюньон + + + + Reykjavik + tz_names + Рейкьявик + + + + Riga + tz_names + Рига + + + + Rio Branco + tz_names + Риу-Бранку + + + + Riyadh + tz_names + Эр-Рияд + + + + Rome + tz_names + Рим + + + + Rothera + tz_names + Ротера + + + + Saipan + tz_names + Сайпан + + + + Sakhalin + tz_names + Сахалин + + + + Samara + tz_names + Самара + + + + Samarkand + tz_names + Самарканд + + + + San Marino + tz_names + Сан-Марино + + + + Santarem + tz_names + Сантарен + + + + Santiago + tz_names + Сантьяго + + + + Santo Domingo + tz_names + Санто-Доминго + + + + Sao Paulo + tz_names + Сан-Паулу + + + + Sao Tome + tz_names + Сан-Томе + + + + Sarajevo + tz_names + Сараево + + + + Saratov + tz_names + Саратов + + + + Scoresbysund + tz_names + Скоресбисунд + + + + Seoul + tz_names + Сеул + + + + Shanghai + tz_names + Шанхай + + + + Simferopol + tz_names + Симферополь + + + + Singapore + tz_names + Сингапур + + + + Sitka + tz_names + Ситка + + + + Skopje + tz_names + Скопье + + + + Sofia + tz_names + София + + + + South Georgia + tz_names + Южная Георгия + + + + Srednekolymsk + tz_names + Среднеколымск + + + + St Barthelemy + tz_names + Сен-Бартельми + + + + St Helena + tz_names + о. Святой Елены + + + + St Johns + tz_names + Сент-Джонс + + + + St Kitts + tz_names + Сент-Китс + + + + St Lucia + tz_names + Сент-Люсия + + + + St Thomas + tz_names + Сент-Томас + + + + St Vincent + tz_names + Сент-Винсент + + + + Stanley + tz_names + Стэнли + + + + Stockholm + tz_names + Стокгольм + + + + Swift Current + tz_names + Свифт-Керрент + + + + Sydney + tz_names + Сидней + + + + Syowa + tz_names + Сёва + + + + Tahiti + tz_names + Таити + + + + Taipei + tz_names + Тайбэй + + + + Tallinn + tz_names + Таллин + + + + Tarawa + tz_names + Тарава + + + + Tashkent + tz_names + Ташкент + + + + Tbilisi + tz_names + Тбилиси + + + + Tegucigalpa + tz_names + Тегусигальпа + + + + Tehran + tz_names + Тегеран + + + + Thimphu + tz_names + Тхимпху + + + + Thule + tz_names + Туле + + + + Thunder Bay + tz_names + Тандер-Бей + + + + Tijuana + tz_names + Тихуана + + + + Tirane + tz_names + Тирана + + + + Tokyo + tz_names + Токио + + + + Tomsk + tz_names + Томск + + + + Tongatapu + tz_names + Тонгатапу + + + + Toronto + tz_names + Торонто + + + + Tortola + tz_names + Тортола + + + + Tripoli + tz_names + Триполи + + + + Troll + tz_names + Тролл + + + + Tunis + tz_names + Тунис + + + + Ulaanbaatar + tz_names + Улан-Батор + + + + Ulyanovsk + tz_names + Ульяновск + + + + Urumqi + tz_names + Урумчи + + + + Ust-Nera + tz_names + Усть-Нера + + + + Uzhgorod + tz_names + Ужгород + + + + Vaduz + tz_names + Вадуц + + + + Vancouver + tz_names + Ванкувер + + + + Vatican + tz_names + Ватикан + + + + Vienna + tz_names + Вена + + + + Vientiane + tz_names + Вьентьян + + + + Vilnius + tz_names + Вильнюс + + + + Vladivostok + tz_names + Владивосток + + + + Volgograd + tz_names + Волгоград + + + + Vostok + tz_names + Восток + + + + Wake + tz_names + Уэйк + + + + Wallis + tz_names + Уоллис + + + + Warsaw + tz_names + Варшава + + + + Whitehorse + tz_names + Уайтхорс + + + + Windhoek + tz_names + Виндхук + + + + Winnipeg + tz_names + Виннипег + + + + Yakutat + tz_names + Якутат + + + + Yakutsk + tz_names + Якутск + + + + Yangon + tz_names + Янгон + + + + Yekaterinburg + tz_names + Екатеринбург + + + + Yellowknife + tz_names + Йеллоунайф + + + + Yerevan + tz_names + Ереван + + + + Zagreb + tz_names + Загреб + + + + Zaporozhye + tz_names + Запорожье + + + + Zurich + tz_names + Цюрих + + + diff --git a/lang/tz_tg.ts b/lang/tz_tg.ts index 77e0756195..4c3fe86b76 100644 --- a/lang/tz_tg.ts +++ b/lang/tz_tg.ts @@ -58,7 +58,7 @@ Indian tz_regions - Ҳиндӣ + Уқёнуси Ҳинд
    From 32649f78eae77e38c4278adc8bc96821c8927470 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Thu, 3 Sep 2020 15:39:04 +0200 Subject: [PATCH 151/157] [libcalamares] Restore finish() slot to job queue FIXES #1507 --- src/libcalamares/JobQueue.cpp | 1 + src/libcalamares/JobQueue.h | 8 +++++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/libcalamares/JobQueue.cpp b/src/libcalamares/JobQueue.cpp index 172d59714c..17ea6a1416 100644 --- a/src/libcalamares/JobQueue.cpp +++ b/src/libcalamares/JobQueue.cpp @@ -135,6 +135,7 @@ class JobThread : public QThread { emitProgress( 1.0 ); } + m_runningJobs->clear(); QMetaObject::invokeMethod( m_queue, "finish", Qt::QueuedConnection ); } diff --git a/src/libcalamares/JobQueue.h b/src/libcalamares/JobQueue.h index 5182170005..5c4c6c35fe 100644 --- a/src/libcalamares/JobQueue.h +++ b/src/libcalamares/JobQueue.h @@ -77,9 +77,15 @@ class DLLEXPORT JobQueue : public QObject */ void queueChanged( const QStringList& jobNames ); -private: +public slots: + /** @brief Implementation detail + * + * This is a private implementation detail for the job thread, + * which should not be called by other core. + */ void finish(); +private: static JobQueue* s_instance; JobThread* m_thread; From d94b9caba5531500c9e716702db535211c339cff Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Thu, 3 Sep 2020 16:11:35 +0200 Subject: [PATCH 152/157] [libcalamaresui] Less mutex shenanigans --- src/libcalamaresui/viewpages/Slideshow.cpp | 14 +++++++++----- src/libcalamaresui/viewpages/Slideshow.h | 3 +++ 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/src/libcalamaresui/viewpages/Slideshow.cpp b/src/libcalamaresui/viewpages/Slideshow.cpp index 13f0a3e514..268843421e 100644 --- a/src/libcalamaresui/viewpages/Slideshow.cpp +++ b/src/libcalamaresui/viewpages/Slideshow.cpp @@ -117,11 +117,8 @@ SlideshowQML::loadQmlV2Complete() { // We're alreay visible! Must have been slow QML loading, and we // passed onActivate already. changeSlideShowState() locks - // the same mutex: we could set up a workaround to call - // changeSlideShowState() later after destruction of l. - // - l.unlock(); - changeSlideShowState( Slideshow::Start ); + // the same mutex: call changeSlideShowState() after l is dead. + QTimer::singleShot( 0, this, &SlideshowQML::startSlideShow ); } } } @@ -142,6 +139,13 @@ SlideshowQML::loadQmlV2Complete() } } +void +SlideshowQML::startSlideShow() +{ + changeSlideShowState( Slideshow::Start ); +} + + /* * Applies V1 and V2 QML activation / deactivation: * - V1 loads the QML in @p widget on activation. Sets root object property diff --git a/src/libcalamaresui/viewpages/Slideshow.h b/src/libcalamaresui/viewpages/Slideshow.h index 7327347555..4432eed7be 100644 --- a/src/libcalamaresui/viewpages/Slideshow.h +++ b/src/libcalamaresui/viewpages/Slideshow.h @@ -100,6 +100,9 @@ public slots: void loadQmlV2Complete(); void loadQmlV2(); ///< Loads the slideshow QML (from branding) for API version 2 + /// Implementation detail + void startSlideShow(); + private: QQuickWidget* m_qmlShow; QQmlComponent* m_qmlComponent; From e0ba5a6ba2c2b2ba846308ccc2d7f4b8c293feb4 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Thu, 3 Sep 2020 20:15:28 +0200 Subject: [PATCH 153/157] [libcalamares] Convenience functions for localeConf GS entry --- src/libcalamares/CMakeLists.txt | 1 + src/libcalamares/locale/Global.cpp | 78 ++++++++++++++++++++++++++++ src/libcalamares/locale/Global.h | 82 ++++++++++++++++++++++++++++++ src/libcalamares/locale/Tests.cpp | 71 ++++++++++++++++++++++++++ 4 files changed, 232 insertions(+) create mode 100644 src/libcalamares/locale/Global.cpp create mode 100644 src/libcalamares/locale/Global.h diff --git a/src/libcalamares/CMakeLists.txt b/src/libcalamares/CMakeLists.txt index 8498964462..be5b252f0f 100644 --- a/src/libcalamares/CMakeLists.txt +++ b/src/libcalamares/CMakeLists.txt @@ -39,6 +39,7 @@ set( libSources geoip/Handler.cpp # Locale-data service + locale/Global.cpp locale/Label.cpp locale/LabelModel.cpp locale/Lookup.cpp diff --git a/src/libcalamares/locale/Global.cpp b/src/libcalamares/locale/Global.cpp new file mode 100644 index 0000000000..a23a104784 --- /dev/null +++ b/src/libcalamares/locale/Global.cpp @@ -0,0 +1,78 @@ +/* === This file is part of Calamares - === + * + * SPDX-FileCopyrightText: 2020 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later + * + * Calamares is Free Software: see the License-Identifier above. + * + * + */ +#include "Global.h" + +#include "GlobalStorage.h" +#include "utils/Logger.h" + +namespace CalamaresUtils +{ +namespace Locale +{ + +static const char gsKey[] = "localeConf"; + +template < typename T > +void +insertGS( const QMap< QString, T >& values, QVariantMap& localeConf ) +{ + for ( auto it = values.constBegin(); it != values.constEnd(); ++it ) + { + localeConf.insert( it.key(), it.value() ); + } +} + +void +insertGS( Calamares::GlobalStorage& gs, const QMap< QString, QString >& values, InsertMode mode ) +{ + QVariantMap localeConf = mode == InsertMode::Overwrite ? QVariantMap() : gs.value( gsKey ).toMap(); + insertGS( values, localeConf ); + gs.insert( gsKey, localeConf ); +} + +void +insertGS( Calamares::GlobalStorage& gs, const QVariantMap& values, InsertMode mode ) +{ + QVariantMap localeConf = mode == InsertMode::Overwrite ? QVariantMap() : gs.value( gsKey ).toMap(); + insertGS( values, localeConf ); + gs.insert( gsKey, localeConf ); +} + +void +insertGS( Calamares::GlobalStorage& gs, const QString& key, const QString& value ) +{ + QVariantMap localeConf = gs.value( gsKey ).toMap(); + localeConf.insert( key, value ); + gs.insert( gsKey, localeConf ); +} + +void +removeGS( Calamares::GlobalStorage& gs, const QString& key ) +{ + if ( gs.contains( gsKey ) ) + { + QVariantMap localeConf = gs.value( gsKey ).toMap(); + if ( localeConf.contains( key ) ) + { + localeConf.remove( key ); + gs.insert( gsKey, localeConf ); + } + } +} + +void +clearGS( Calamares::GlobalStorage& gs ) +{ + gs.remove( gsKey ); +} + + +} // namespace Locale +} // namespace CalamaresUtils diff --git a/src/libcalamares/locale/Global.h b/src/libcalamares/locale/Global.h new file mode 100644 index 0000000000..56f09ce4c9 --- /dev/null +++ b/src/libcalamares/locale/Global.h @@ -0,0 +1,82 @@ +/* === This file is part of Calamares - === + * + * SPDX-FileCopyrightText: 2020 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later + * + * Calamares is Free Software: see the License-Identifier above. + * + * + */ + +/** @file GlobalStorage management for Locale settings + * + * The *localeConf* key in Global Storage is semi-structured, + * and there are multiple modules that write to it (and some that + * read from it). Functions in this file provide access to + * that semi-structured data. + */ + +#ifndef LOCALE_GLOBAL_H +#define LOCALE_GLOBAL_H + +#include "DllMacro.h" + +#include +#include +#include + +namespace Calamares +{ +class GlobalStorage; +} + +namespace CalamaresUtils +{ +namespace Locale +{ + +/** @brief Selector for methods that insert multiple values. + * + * When inserting, use @c Overwrite to remove all keys not in the collection + * of values being inserted; use @c Merge to preserve whatever is + * already in Global Storage but not mentioned in the collection. + */ +enum class InsertMode +{ + Overwrite, + Merge +}; + +/** @brief Insert the given @p values into the *localeConf* map in @p gs + * + * @param gs The Global Storage to write to + * @param values The collection of keys and values to write to @p gs + * @param mode Indicates whether the *localeConf* key is cleared first + * + * The keys in the collection @p values should be first-level keys + * in *localeConf*, e.g. "LANG" or "LC_TIME". No effort is made to + * enforce this. + */ +DLLEXPORT void +insertGS( Calamares::GlobalStorage& gs, const QVariantMap& values, InsertMode mode = InsertMode::Merge ); +/** @brief Insert the given @p values into the *localeConf* map in @p gs + * + * Alternate way of providing the keys and values. + */ +DLLEXPORT void insertGS( Calamares::GlobalStorage& gs, + const QMap< QString, QString >& values, + InsertMode mode = InsertMode::Merge ); +/** @brief Write a single @p key and @p value to the *localeConf* map + */ +DLLEXPORT void insertGS( Calamares::GlobalStorage& gs, const QString& key, const QString& value ); +/** @brief Remove a single @p key from the *localeConf* map + */ +DLLEXPORT void removeGS( Calamares::GlobalStorage& gs, const QString& key ); +/** @brief Remove the *localeConf* map from Global Storage + */ +DLLEXPORT void clearGS( Calamares::GlobalStorage& gs ); + +} // namespace Locale +} // namespace CalamaresUtils + +#endif diff --git a/src/libcalamares/locale/Tests.cpp b/src/libcalamares/locale/Tests.cpp index 6e0140e795..b701ce8492 100644 --- a/src/libcalamares/locale/Tests.cpp +++ b/src/libcalamares/locale/Tests.cpp @@ -8,11 +8,13 @@ * */ +#include "locale/Global.h" #include "locale/LabelModel.h" #include "locale/TimeZone.h" #include "locale/TranslatableConfiguration.h" #include "CalamaresVersion.h" +#include "GlobalStorage.h" #include "utils/Logger.h" #include @@ -45,6 +47,9 @@ private Q_SLOTS: void testLocationLookup_data(); void testLocationLookup(); void testLocationLookup2(); + + // Global Storage updates + void testGSUpdates(); }; LocaleTests::LocaleTests() {} @@ -446,6 +451,72 @@ LocaleTests::testLocationLookup2() QCOMPARE( trunc( altzone->latitude() * 1000.0 ), -29466 ); } +void +LocaleTests::testGSUpdates() +{ + Calamares::GlobalStorage gs; + + const QString gsKey( "localeConf" ); + + QCOMPARE( gs.value( gsKey ), QVariant() ); + + // Insert one + { + CalamaresUtils::Locale::insertGS( gs, "LANG", "en_US" ); + auto map = gs.value( gsKey ).toMap(); + QCOMPARE( map.count(), 1 ); + QCOMPARE( map.value( "LANG" ).toString(), QString( "en_US" ) ); + } + + // Overwrite one + { + CalamaresUtils::Locale::insertGS( gs, "LANG", "nl_BE" ); + auto map = gs.value( gsKey ).toMap(); + QCOMPARE( map.count(), 1 ); + QCOMPARE( map.value( "LANG" ).toString(), QString( "nl_BE" ) ); + } + + // Insert a second value + { + CalamaresUtils::Locale::insertGS( gs, "LC_TIME", "UTC" ); + auto map = gs.value( gsKey ).toMap(); + QCOMPARE( map.count(), 2 ); + QCOMPARE( map.value( "LANG" ).toString(), QString( "nl_BE" ) ); + QCOMPARE( map.value( "LC_TIME" ).toString(), QString( "UTC" ) ); + } + + // Overwrite parts + { + QMap< QString, QString > kv; + kv.insert( "LANG", "en_SU" ); + kv.insert( "LC_CURRENCY", "rbl" ); + + // Overwrite one, add one + CalamaresUtils::Locale::insertGS( gs, kv, CalamaresUtils::Locale::InsertMode::Merge ); + auto map = gs.value( gsKey ).toMap(); + QCOMPARE( map.count(), 3 ); + QCOMPARE( map.value( "LANG" ).toString(), QString( "en_SU" ) ); + QCOMPARE( map.value( "LC_TIME" ).toString(), QString( "UTC" ) ); // unchanged + QCOMPARE( map.value( "LC_CURRENCY" ).toString(), QString( "rbl" ) ); + } + + // Overwrite with clear + { + QMap< QString, QString > kv; + kv.insert( "LANG", "en_US" ); + kv.insert( "LC_CURRENCY", "peso" ); + + // Overwrite one, add one + CalamaresUtils::Locale::insertGS( gs, kv, CalamaresUtils::Locale::InsertMode::Overwrite ); + auto map = gs.value( gsKey ).toMap(); + QCOMPARE( map.count(), 2 ); // the rest were cleared + QCOMPARE( map.value( "LANG" ).toString(), QString( "en_US" ) ); + QVERIFY( !map.contains( "LC_TIME" ) ); + QCOMPARE( map.value( "LC_TIME" ).toString(), QString() ); // removed + QCOMPARE( map.value( "LC_CURRENCY" ).toString(), QString( "peso" ) ); + } +} + QTEST_GUILESS_MAIN( LocaleTests ) From 634a53d27a14dd23bf38a120413fa86618b641e2 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Thu, 3 Sep 2020 20:20:05 +0200 Subject: [PATCH 154/157] [locale] Use new convenience function for updating localeConf --- src/modules/locale/Config.cpp | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/src/modules/locale/Config.cpp b/src/modules/locale/Config.cpp index 37857cc71f..1417e5b89a 100644 --- a/src/modules/locale/Config.cpp +++ b/src/modules/locale/Config.cpp @@ -14,6 +14,7 @@ #include "GlobalStorage.h" #include "JobQueue.h" #include "Settings.h" +#include "locale/Global.h" #include "locale/Label.h" #include "modulesystem/ModuleManager.h" #include "network/Manager.h" @@ -167,13 +168,7 @@ updateGSLocation( Calamares::GlobalStorage* gs, const CalamaresUtils::Locale::Ti static void updateGSLocale( Calamares::GlobalStorage* gs, const LocaleConfiguration& locale ) { - auto map = locale.toMap(); - QVariantMap vm; - for ( auto it = map.constBegin(); it != map.constEnd(); ++it ) - { - vm.insert( it.key(), it.value() ); - } - gs->insert( "localeConf", vm ); + CalamaresUtils::Locale::insertGS( *gs, locale.toMap(), CalamaresUtils::Locale::InsertMode::Overwrite ); } Config::Config( QObject* parent ) From 466e08a8baad120e4aa285770a0c71155c0d9ac7 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Thu, 3 Sep 2020 20:33:22 +0200 Subject: [PATCH 155/157] [welcome] Set some localeConf values from the welcome page --- CHANGES | 5 +++++ src/modules/welcome/Config.cpp | 10 +++++++++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/CHANGES b/CHANGES index 7508354c9c..c44b3b84a6 100644 --- a/CHANGES +++ b/CHANGES @@ -39,6 +39,11 @@ on functionality, but do touch each and every source file: - *keyboardq* and *localeq* improvements. (Thanks to Anke) - *users* module did not set up autologin properly. This is yet another regression left over from 3.2.28. (Reported by Phil and pcrepix, #1498) + - *welcome* module now sets the *LANG* key in the locale configuration + (which is shared with the *locale* module and consumed by the + *localecfg* module). This makes it feasible to drop the *locale* + module and still set the installed system's language to the language + selected in Calamares. (Reported by FerenOS) # 3.2.29 (2020-08-20) # diff --git a/src/modules/welcome/Config.cpp b/src/modules/welcome/Config.cpp index d4641562ac..72e1cfc3b7 100644 --- a/src/modules/welcome/Config.cpp +++ b/src/modules/welcome/Config.cpp @@ -10,8 +10,11 @@ #include "Config.h" #include "Branding.h" +#include "GlobalStorage.h" +#include "JobQueue.h" #include "Settings.h" #include "geoip/Handler.h" +#include "locale/Global.h" #include "locale/Lookup.h" #include "modulesystem/ModuleManager.h" #include "utils/Logger.h" @@ -186,7 +189,12 @@ Config::setLocaleIndex( int index ) QLocale::setDefault( selectedLocale ); CalamaresUtils::installTranslator( selectedLocale, Calamares::Branding::instance()->translationsDirectory() ); - + if ( Calamares::JobQueue::instance() && Calamares::JobQueue::instance()->globalStorage() ) + { + CalamaresUtils::Locale::insertGS( *Calamares::JobQueue::instance()->globalStorage(), + QStringLiteral( "LANG" ), + CalamaresUtils::translatorLocaleName() ); + } emit localeIndexChanged( m_localeIndex ); } From 67efa8b4bb6ad988e42b65a01e82a8e98ad74b3c Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Thu, 3 Sep 2020 20:45:04 +0200 Subject: [PATCH 156/157] Changes: pre-release housekeeping --- CHANGES | 2 +- CMakeLists.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGES b/CHANGES index c44b3b84a6..94b28b40fb 100644 --- a/CHANGES +++ b/CHANGES @@ -7,7 +7,7 @@ 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.30 (unreleased) # +# 3.2.30 (2020-09-03) # This release contains contributions from (alphabetically by first name): - Anke Boersma diff --git a/CMakeLists.txt b/CMakeLists.txt index b82c116c58..120d8ecd02 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -44,7 +44,7 @@ project( CALAMARES VERSION 3.2.30 LANGUAGES C CXX ) -set( CALAMARES_VERSION_RC 1 ) # Set to 0 during release cycle, 1 during development +set( CALAMARES_VERSION_RC 0 ) # Set to 0 during release cycle, 1 during development ### OPTIONS # From 7f38faa80ddfcd6e7b785b7494bad572af98c90b Mon Sep 17 00:00:00 2001 From: hayao Date: Sat, 12 Sep 2020 15:50:19 +0900 Subject: [PATCH 157/157] [change] : sidebar colors --- src/branding/alter/branding.desc | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/branding/alter/branding.desc b/src/branding/alter/branding.desc index 56008552ee..eeceb5d80f 100644 --- a/src/branding/alter/branding.desc +++ b/src/branding/alter/branding.desc @@ -127,8 +127,7 @@ slideshowAPI: 2 # branding component also ships a stylesheet.qss. Then they are # the corresponding CSS attributes of #sidebarApp. style: -# sidebarBackground: "#EFEFEF" - sidebarBackground: "#FFFFFF" - sidebarText: "#000000" - sidebarTextSelect: "#1565C0" - sidebarTextHighlight: "#EFEFEF" + sidebarBackground: "#2F343F" + sidebarText: "#FFFFFF" + sidebarTextSelect: "#0079ef" + sidebarTextHighlight: "#2F343F"

    G48nTn8QT?2CaRIV{3Czsgt22f&^9gxf2t~|!>iN; z%b)V?GBYqO@DJKNe}aI%IL07xA?=si^+af zj!Ojfx7mCS$Y+uA&jWzq@U8HyeU8W*@&rmlAQqJbC&+**&3ZfE6JH;*FtM$3_ev1h zznao)l-s>)(CAyU`y}qgy6r)^gTU>(Pk!P&=RbdQTjb2qDmaauV_QD~7c{Z43%NnL zZyI`!R;f0KX_3GR^e^>?zW}Nn;6Q=b{wEjVQ}%soTJ_iT1VD+0eC&;yo9=FZu0u(q z5goOER@H~Yb1$$O0g=GPz`kFcF5e1M)PX(18#@ox`pq`cl{DCxgbWD~`BOgN`w1RfH6J4mM+d}*3}z^xf&HkS`~T(#8f_j3?zn@>S~ zkO$fZ_%2<$^%^k&tcYJKIbTz07PYjz(k!a^-?rmo-Tay){)xMTiT-~be}a3lO8hef zIG!+<(l#x+UDTIZGsC;|={*vfkKuI_r%NCD)6%gGmugj<&?GUC`@F3-9K3B+TiKD{ z8_(lXtrXJ^n=^Zx&-G1>F&;Q_Ewp9iR)My7sb2T6?yNt4nk?>|6^3`OVD*Y@XYzPE z&S+$;0YB)K-JmJv8aZYh-!stY>_7XY$giDWH?s*pIB6{>_(CgP0Twjd62+@|+ML-~ zhVCcZEL?59o)tD0@6v_O*ANEK$0Mz%b4~T$dqWNS&rlXv3OTClS2vV$TDt-T53?^p j3o^Y34>@wc%CgYnRP=uV#}2U^ diff --git a/src/modules/locale/images/orig/timezone_-3.0.png b/src/modules/locale/images/orig/timezone_-3.0.png deleted file mode 100644 index c22dbb64aced33e357cfe9adc59dcae28fd957c4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13615 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 a7uLQ&n{j0qtN;LnBqO0HUi$K%_x}rS>e8VA diff --git a/src/modules/locale/images/orig/timezone_-3.5.png b/src/modules/locale/images/orig/timezone_-3.5.png deleted file mode 100644 index c1df00b9b7590ec54f2afe0e5fdb611b249e9031..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 740 zcmeAS@N?(olHy`uVBq!ia0y~yU{+vYV4TUp3>0zuvh*B~VlH;_4B_D5xc$)o0g%gC z;1OBOz`(W$gc)7$8Uh&%k|nMYCBgY=CFO}lsSM@i<$9TU*~Q6;1*v-ZMd`EO*+>Bu zkDAIM~AU|C&~d(MU4ow92N&@RQ2AirP+CMISURyIyKMOF3W^z5!F)8{W+zIprZ^YgTe~DWM4fk5s11 diff --git a/src/modules/locale/images/orig/timezone_-4.0.png b/src/modules/locale/images/orig/timezone_-4.0.png deleted file mode 100644 index 4b5a4318cb69764a46726a4988011e4f63aa34ff..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15084 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 QEG-#4UHx3vIVCg!0As{}FaQ7m diff --git a/src/modules/locale/images/orig/timezone_-5.0.png b/src/modules/locale/images/orig/timezone_-5.0.png deleted file mode 100644 index 06c15e69783d9389a55d0cf7ecf0e87a6a89d03e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19166 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 diff --git a/src/modules/locale/images/orig/timezone_-6.0.png b/src/modules/locale/images/orig/timezone_-6.0.png deleted file mode 100644 index 8505fb1f7a5691f9910a10e90543aa2fdc4a04d6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13764 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 diff --git a/src/modules/locale/images/orig/timezone_-7.0.png b/src/modules/locale/images/orig/timezone_-7.0.png deleted file mode 100644 index fec235da455e7da6027000eb00293fa426720584..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11977 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 diff --git a/src/modules/locale/images/orig/timezone_-9.0.png b/src/modules/locale/images/orig/timezone_-9.0.png deleted file mode 100644 index 04cb3cb8b1ce5d39be740b903c3c7967d5b3f9ee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7908 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 diff --git a/src/modules/locale/images/orig/timezone_-9.5.png b/src/modules/locale/images/orig/timezone_-9.5.png deleted file mode 100644 index b1c788dc87370c1fd43fb52e2ac82dabda7cc12c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 437 zcmeAS@N?(olHy`uVBq!ia0y~yU{+vYV4TUq3>0Z*@i-5pn2Vh}LpV4%Za?&Y0OWEO zctjR6Ft9BGVMf=xhCl{`WQl7;NpOBzNqJ&XDnogBxn5>oc5!lIL8@MUQTpt6Hc~)E zS^+*GuK)l42QnEPK**s%A+FCdWwu-42Dh@!?q!=jTaN{HoDA+f72I~)z39k$KtX`P(dWTJsRM4=y)3RZKfZ_R zpZ%--;L;h78@jAOwR8dv{$IJ43q)>_ohA_ZMg5MGM3Z7$LWiP65=R@5DKY7u;b8$L dlHBrRq4?4L-uVWC_CG=TJYD@<);T3K0RT)QUWxz! diff --git a/src/modules/locale/images/orig/timezone_0.0.png b/src/modules/locale/images/orig/timezone_0.0.png deleted file mode 100644 index e59b773caf83fa84b7e1c7d8c5a57ddd3414186b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11074 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 diff --git a/src/modules/locale/images/orig/timezone_1.0.png b/src/modules/locale/images/orig/timezone_1.0.png deleted file mode 100644 index 2053b7e2e2fd82c7d3bafe26f4508b486e9682e5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15458 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 nl$*HlZI!T3W$-d2m?6NP} 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 F{V&1%yDtC$ diff --git a/src/modules/locale/images/orig/timezone_10.5.png b/src/modules/locale/images/orig/timezone_10.5.png deleted file mode 100644 index 6ec7f9fa9428e433389de14ae48a19b05a1116a0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 421 zcmeAS@N?(olHy`uVBq!ia0y~yU{+vYV4TUq3>0Z*@i-5pn2Vh}LpV4%Za?&Y0OWEO zctjR6Ft9BGVMf=xhCl{`WQl7;NpOBzNqJ&XDnogBxn5>oc5!lIL8@MUQTpt6Hc~)E zx&b~RuK)l42QnEN7#LI-7%UlNEM*E;yBBYCuiW8XyWhWhk8ktgfQEg(9Vdf(&V?qp zKc5Cv%v%!V7tFxO#Lmg-pHVe`!R0Hx$J3VrB`$ipIEF|_zCGwD+Mpo7df+|lnM5Wf zfySDYg_C4+9^O8D2589ugFh?Y3UckdFUs{Yz0GNzIzHE2`O0`@C9_S(`G*xCWuC5n JF6*2Ung9#4SS0`e diff --git a/src/modules/locale/images/orig/timezone_11.0.png b/src/modules/locale/images/orig/timezone_11.0.png deleted file mode 100644 index 6168aa2ba9c73ed88897539c8d77ce9ab2353e4e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12113 zcmcI~2T+sS)+lxaDWZrX9Vwwom(D>Dq*#K|i_&{BNDED+N|z=eAT3DmT|lIlfOG-` z1f)Yk50H@jA@SVz&Yd%N&VBPgXPl4hw$@&Kt-V5@JW`<`qbDOFA)$Dvsstn2_)&zsad1poW8v#K75gydr8>Hjmza3TC3B)43ZbzQZb zEM47SzOo>3cXt=CakK-Oy>zw^aC&8xf{>vnAz>kTsPxA(k58L$_h^Q3pP$>PdM?NQ zGvs_XY+^$D&c8j+Y6*`|W0#_ur+}FTZrU!g-xV;qk{qWuQKmC+m`45w;8k}JNyuUm5 zKLY(d$x@Uv{($Ab2KpZ{`qyN&In^opeK!C(u5{06d0BtiGx)VEIjvT>Olv&w$4{}u z)+Ng9A)8~K>lRrq{H$l^6$rR%xiFFR{*-zO4=N-lK0PQu! zjV9P~`THfhM1HVypfmYd^8}a6H}D|;8`k|MRJITxQ0?G~)*t?-`~RJKcY3BH1`7Lm z^7GQxQ2Ap%GsQ5Y4*R}<$7~At)zL!JfxG!UPT*H_qRmX|D|c%-1zJue>9^qBYI*uA z+Fcg5zbIDIycJj{)-Z14WfG}ca!CnJQ+u8qztRS(x8y1at9&&$-;k~+#>A&n=i=n% zqBpz=vRh+5*h@%%Wu=}XE&c3^2K36M3QW_Rp2#;%Q!>g-Lq^K9OTwCJdFzT=iXkGw1=TuzjJoU2msK7nJ>~f2)SMMZJr_+Xo@#JV&_AXU z$>nf(e!GS_6g?#;m#`rjG)Xxcta98cfo9-k!DFYYu3S|oX@WyWeSP|rU)#8;;+woR zvfkNiRUjA4H;Wiie&|`bwuYpjn2^T2xQLdTPKG%&YPvc1__Fd3YcUt!X zk^(Yc(pE_a-sfgzdwDDQCTRa5YhbkSoIKU3aq_R+iN_ruR;Wu%G?`YA`*3#FdF{8Y z0`&?c7>@cTx&oOrMP6%4ymr?vKxi7FvqZp#Qr_qOm+By~+pwea=GVTNJ zTP~03oaY*w*-HyCzqPI7Ch=+1B>iSD^P1!A4_$4~3@N79!NI{dD6Nk-WLd)r3eDo+ zeSl;>Sz?S@!iKeS7TBH3i-hdRzUE4Y#XKrt6`>`klor^)G$fvd=Q`3G+AHDh ziGStRp1d4(bBY;yWSrj-Os!~LAGe$6Q4LEqI_geqR}**lEzEXX=adXh`Qx{?WSG7| z?>!omrZ&5L4Ux>nUsdsuQ6q<ZN=edax?&OteUj3l${@WnFLAIS4E3`;)Kxo6eT{6 ze{60oId|Q-xxz1F;6C45!fVm>fy~6AeLD2HBI(PU`-(|w5r-A}CvwXQ#&2S7N5S50 zf0VUP9&)w_B+C)qq_C1`6rryzau;7vs%eOjv`g2Qu-eqZHi=BF7o#K*1VgFsk|4=w zawHgq`{LG!;j6kp@MsXWGk(p_z7(fwWYC%~YdioE2kZlaLwK8q_>Af|>>@>sx{s_t)=g0L^rBB4`e4%Y9SE{B?#LcDB zMw|Z-1*q}fuYyUcEP2;f%=>YR;oO-@q*u*2Ufn&#;p&Efm5W;%PvdoFRa(lLS2Jb% zn@%4es7geXI?}Tmaf8&JcM)Oq$1F!NOmFQ4?MLCZGkuQQGi6}AKWS1lCpIbbq~SiE z1>zf6Ll;l$hr35ZQ4EiUGp5S9I6EqW8}ylFIGmh^r3gkh&UI%rmV(OHYD$ZI{5n<> zN_O%zSnJ*g*=qqm9D<~2c$ld!?8@rFGQH8cGG9r#ezMH zkRU?b0vy{m%cTTQzH{2EzS$WotKOldcr!>?bGL)4z6Tl=?=-#BD|o9cnwS1*nfkU% zDCA+Ct0pSefaz%4WNB&qx$!!>kiZCw_~mDP1~`QS`Q=|WlHF+>u}KhM8e+P_$U%&2 zxo=%pr_savWM7Uq=Q@Zk+%Y6TsS6Q(FzaIyk~y@3X{c_*>1;+UAGp;xN#5gW+ge2F z5zI}GE#`9u8iU=E|9G*%Y5?*xfa#vg&!pu`UbktNyvNf?>|+QgI8q}a*6xPm#LkdTd{;!37@zk*ND3R1Nc)e^ z70{{lQEG~Ul?WQ=39iO8M;$F^!^opcVvp5*2Ajsh>}HsmjbKj6bx+ypY39cVfJ-!d zc-ChZPRTV^?<6(DD|_dz_nQxV=zf5)_4r&f|2D4P*2#Cv+G#o2Yj_0e@zvB&O%out zFD}V9-PKfrQ{dLJPSzw{y&FKy_Tx31_!HEaK+ZD_Qi5{; zY(#R=`PF0tNA7?lT`iN<+A`U0FeENWdh!e)qL1T|oeMoTw-ZOe=<#uK)_^zx_8SFE zb$hdka_kmQCx*42>*&EtvHFQdfQ*3Fs{=!#iQ6f=^g__7Qt%gKpPlprv>?`UL6Hcn zck0^YQ#twNrtd&830OsTfwk^=1Hm{(XNz{Y>?WJGmb6z&FQcF~Bm{ktY~Xd(7!%V* zbHkBk=c*%m1kli0N|)e4cRe9oV4z26Cnt`LUMK>jQs5RIF;Z!QwdcE6xSu{dIO4Kp zBL76Ky+kJR+4R6Uyi2}by|Yc*>x(SWVe0Nq#Cu^5MnI0zojdQ;Y?iFQ!96_&bo{dW zN}-liuy~$yYE!k_N%*VYjfie~xyx(9m%iRCdm}z$(BJ2C9U^k`3=YyCn&CF+cM#F) zlWQXFQZ&Y*fM;0r5YtJ)C1&`c>fB>8H6`V8tB3B8yk~woEtgxL%bcJ20e;kY+*qm5&m>%|QL|$dVAE)a17!w@aT)j{3DIYsI zf~#U`RtIoAVlqT$H5H==xaK_|S4S@jHX%3V4(9tmH-k1Fq%R76J>6+@!JRhbD_f`S zJiALA0E+pJeYlBo5qTi`1(oVsRJGdZcf1IlzyGHI^b5`kA$$FfzcmyfT~74Mt-9|3 zd5Y{K-HWK@#x)|Zkzc4xyC#@whh8z6sXMmZT_W)*)tek>Ld$BK0GLLv)}`r2xt z9(|%kUzx$K6XJJ;AQUD?`o@107QUKkq1BSr{xJ(^h?HxtK_7;xK#oO92^kx3tk?=A zCqGdK0Zk`t@el%gl6I&c$^mi)z!;@3YI94nVx2-^u`+hus9 z*?d%!Yh|i|aovdFy;;-m6)t zR3Y8I&l)gsTm*HJ#X$2d987~VR82XdLke0;`ZYEZg&=#ZQ?5ug0C_Qr~J8t$e0dU8d^k55lE zK_5ePuK*#ejSm%h*#{ne{-jGgq1w8kn4`xmfmr9IJCg&s`ebQ~Lnm32OIzcF< zmsI5Z`gU~9#LI{j!1hwe`v?&+7-R9yZQ1(K{`?!Tpr4z!(yr0HiY1-2H1t~F6UE`| zALea29M&e+TJI`PwSQ=AOuZc$eo^}XZ!!`-i_s2;*q(ch+>=0J5x3Rytl1(T`s3lV zXsy<3O3-*Jg!>iKAtu!xmRoZjwfZ0>ly-MQ%g5X`q`m(o@$-z6x?`!fwEv0*UIp92Y?Hno4YcbT=V1=ZW! zyg6Kg%MB8#X_TC3uCozO6KB|S@0p1$+1QjucSy1tt6?smC)6FfUZkI(JDaN4(x!2S zy7^1EC1nmJ?mJxe;)|uy0VfY;b<{$FD&mo%<9;sVuKgyGPDqD!iS#2#G0rWW3ir9- z>uw1Mtg9s_wC1*NA%wNC$34G%-#ZAK>j+1HH=i%UjdZr;}WMLU%A18jiD zv=8)jKlNx7oL29ie9dQrm*8Bwbo+&KPp0HCecL_sWgQ_YimEnlqO{C1e)Axw$<2kx zwZP6XsL_NcGNk!ShH08pY;RF{38u-0`?WW2C%w~5`ONIkj)UF;8VUBQtDS2U(&--? zzSY1iaSp$@wL-OmwXu~oyBWiwSUoGYA3i)Y;GINiZ+>)cW6Mu-VpU6c>{Gje_MV%7 zoP^X3grn26vo|(#AtiZDu2E%p+NHHCv`RwWv$RU+m8$Kv$c&b#i#mnt-qWf4<(gWd ztWga@CEPO2Zm)M+w`-Zmm;}7!t{Zv}YaZGkyxE{gare&oYHPYUiqs5W#riixR7g3d z^@`dDRaa|Y{!+1A&Q1T6F?KE^?OKUFm1}zP;Kg^b$^iZ=RSz66TMpRl2%p0Lw$;VyQEjzCb&?>Gw z*&Hz8m5Zav%*~qLYSS%pZ=a+~<0;xJYIOD*7W|q9jR-x|%Uv6~_^v?(pRQnZuH9!8 znR(${PAKS_^S!oNh)D4*#_r{4UMTtMX-LXCzn#Bb@NV&el|lJD6utB;%KqzdS#2VU z%0>n^a>)&>(sF2xcyY2ifRzA%@aEZzEou9U_!C@pt|toTeIH=4N=B&n`iFA_#=W8e zoA>RxRM*S>GOokIJM-y0k@4dbbKajNmZy{0O}w6~rM&O7JBtslnFl(w3OQRtF77u~ zOifLq{NyukUwL$ckSK(6h-s1mtXA{X)vjMpO)=1&)G}%;1*!W!tz7fEeKs=6lFEF! zlD5-SGDg?6e`2E#1WFXY>0MR4-ZgM=$Ln27H=Dw#&1lKi*b|t;*AOc9mkR54Hw9@E zgO(f0`%(}h<<3dVZ+bi%#BGvSr*Q}?9DpY8@*VFlDIwvME3#ZBa%14N#NZD{ccvej z44%FWWZ%w%Z2*U_VW-?g_38VdQE{4_askwMo88wVL@t%Qgd__tP@$0>fSx~L)E_Tf zKG^@{&5^gw`lo^dhaEyGsdMJb-A4P1>W&`3t~Ud`&y707!qx9Q?U12+j$GB5W&AQb zYQE@M5==+}IzA+){a7!Fd*8e7-nfMZ(NWF_=8bL?F^$Jn|7><5N zH_L1%y>)^wPFZA+D+%d5da_;%F!W21cj|%-p*XtT!Q_WSzee<#` zmNNOCYcurLM_YalHUEcAW!aYM6J#Mk7bqg!>hV6$4)4E2QBW0Ksk1#1 zY~miN^^wYIe|x48eJHp#Nrib~#nTx~O$aN5b=h|d3%Of`7Cv8}^_dUq zOb{O(bwgf?-#sY0rbrr`m7_Y0kqA%d{hr0txIO{uY>33zyO+C3q>~Zq*9sj&uAPw`t63TTwqC76y$`=dU})o!4qKGO2Crj^7UP6R)&SmN*E;7P z#79C@q8{xBfdCF`L%4MwCKF-Ttbs^Rfe^ePG)X(pHO5Wg^`2M;yrn+8(XYhhRO