From f942519dc24b9484e8f8ca51b894816211a1be33 Mon Sep 17 00:00:00 2001 From: Josef Reidinger Date: Wed, 14 Feb 2024 21:56:55 +0100 Subject: [PATCH 01/48] initial global btrfs option --- .../storage/ProposalSettingsSection.jsx | 50 +++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/web/src/components/storage/ProposalSettingsSection.jsx b/web/src/components/storage/ProposalSettingsSection.jsx index d5b7bccc16..f387803bb2 100644 --- a/web/src/components/storage/ProposalSettingsSection.jsx +++ b/web/src/components/storage/ProposalSettingsSection.jsx @@ -448,6 +448,50 @@ const EncryptionSettingsForm = ({ ); }; +/** + * Allows to define snapshots enablement + * @component + * + * @param {object} props + * @param {boolean} [props.isChecked=false] - Whether system snapshots are selected + * @param {boolean} [props.isLoading=false] - Whether to show the selector as loading + * @param {onChangeFn} [props.onChange=noop] - On change callback + * + * @callback onChangeFn + * @param {object} settings + */ +const SnapshotsField = ({ + isChecked: isCheckedProp = false, + isLoading = false, + onChange = noop +}) => { + const [isChecked, setIsChecked] = useState(isCheckedProp); + + const switchState = (checked) => { + setIsChecked(checked); + onChange(checked); + }; + + if (isLoading) return ; + + const explanation = _("Btrfs snapshots for root partition enforce root volume to use btrfs with snapshots enabled. It is useful for returning to previous snapshot of system e.g. after software upgrade."); + + return ( + <> +
+ + {explanation} +
+ + ); +}; + /** * Allows to define encryption * @component @@ -714,6 +758,12 @@ export default function ProposalSettingsSection({ isLoading={settings.lvm === undefined} onChange={changeLVM} /> + Date: Thu, 15 Feb 2024 10:52:56 +0100 Subject: [PATCH 02/48] update text and try to change layout --- web/src/components/storage/ProposalSettingsSection.jsx | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/web/src/components/storage/ProposalSettingsSection.jsx b/web/src/components/storage/ProposalSettingsSection.jsx index f387803bb2..1a01aa41a9 100644 --- a/web/src/components/storage/ProposalSettingsSection.jsx +++ b/web/src/components/storage/ProposalSettingsSection.jsx @@ -474,11 +474,11 @@ const SnapshotsField = ({ if (isLoading) return ; - const explanation = _("Btrfs snapshots for root partition enforce root volume to use btrfs with snapshots enabled. It is useful for returning to previous snapshot of system e.g. after software upgrade."); + const explanation = _("Allows to restore a previous version of the system after configuration changes or software upgrades."); return ( <> -
+
- {explanation} +
+ {explanation} +
); From 3aa43e05e2788f4daef42f59d89a56e0a5b480a1 Mon Sep 17 00:00:00 2001 From: Josef Reidinger Date: Fri, 16 Feb 2024 15:10:23 +0100 Subject: [PATCH 03/48] first functionality for btrfs snapshots globally --- .../storage/ProposalSettingsSection.jsx | 58 +++++++++++++------ 1 file changed, 40 insertions(+), 18 deletions(-) diff --git a/web/src/components/storage/ProposalSettingsSection.jsx b/web/src/components/storage/ProposalSettingsSection.jsx index 1a01aa41a9..4695b29005 100644 --- a/web/src/components/storage/ProposalSettingsSection.jsx +++ b/web/src/components/storage/ProposalSettingsSection.jsx @@ -453,31 +453,34 @@ const EncryptionSettingsForm = ({ * @component * * @param {object} props - * @param {boolean} [props.isChecked=false] - Whether system snapshots are selected - * @param {boolean} [props.isLoading=false] - Whether to show the selector as loading + * @param {ProposalSettings} props.settings - Settings used for calculating a proposal. * @param {onChangeFn} [props.onChange=noop] - On change callback * * @callback onChangeFn * @param {object} settings */ const SnapshotsField = ({ - isChecked: isCheckedProp = false, - isLoading = false, + settings, onChange = noop }) => { - const [isChecked, setIsChecked] = useState(isCheckedProp); + const rootVolume = (settings.volumes || []).find((i) => i.mountPath === "/"); - const switchState = (checked) => { - setIsChecked(checked); - onChange(checked); - }; + const initialChecked = rootVolume !== undefined && rootVolume.fsType === "Btrfs" && rootVolume.snapshots; + const [isChecked, setIsChecked] = useState(initialChecked); - if (isLoading) return ; + // no root volume is probably some error or still loading + if (rootVolume === undefined) { + return ; + } - const explanation = _("Allows to restore a previous version of the system after configuration changes or software upgrades."); + const switchState = (_, checked) => { + setIsChecked(checked); + onChange({ value: checked, settings }); + }; - return ( - <> + if (rootVolume.outline.snapshotsConfigurable) { + const explanation = _("Uses btrfs for the root file system allowing to boot to a previous version of the system after configuration changes or software upgrades."); + return (
- - ); + ); + } else if (rootVolume.fsType === "Btrfs" && rootVolume.snapshots) { + return ( +
+ {_("Btrfs snapshots required by product.")} +
+ ); + } else { // strange situation, should not happen + return undefined; + } }; /** @@ -742,6 +753,19 @@ export default function ProposalSettingsSection({ onChange({ volumes }); }; + const changeBtrfsSnapshots = ({ value, settings }) => { + const rootVolume = settings.volumes.find((i) => i.mountPath === "/"); + + if (value) { + rootVolume.fsType = "Btrfs"; + rootVolume.snapshots = true; + } else { + rootVolume.snapshots = false; + } + + changeVolumes(settings.volumes); + }; + const { bootDevice } = settings; const encryption = settings.encryptionPassword !== undefined && settings.encryptionPassword.length > 0; @@ -762,9 +786,7 @@ export default function ProposalSettingsSection({ /> Date: Tue, 20 Feb 2024 08:49:56 +0100 Subject: [PATCH 04/48] adapt volume form to move of btrfs with snapshots to global flag --- web/src/components/storage/VolumeForm.jsx | 82 ++++------------------- 1 file changed, 14 insertions(+), 68 deletions(-) diff --git a/web/src/components/storage/VolumeForm.jsx b/web/src/components/storage/VolumeForm.jsx index f593863323..8bee1a2742 100644 --- a/web/src/components/storage/VolumeForm.jsx +++ b/web/src/components/storage/VolumeForm.jsx @@ -123,11 +123,6 @@ const MountPointFormSelect = ({ value, volumes, onChange, ...selectProps }) => { ); }; -/** - * Btrfs file system type can be offered with two flavors, with and without snapshots. - */ -const BTRFS_WITH_SNAPSHOTS = "BtrfsWithSnapshots"; - /** * Possible file system type options for a volume. * @function @@ -136,40 +131,7 @@ const BTRFS_WITH_SNAPSHOTS = "BtrfsWithSnapshots"; * @returns {string[]} */ const fsOptions = (volume) => { - const options = (volume, fsType) => { - if (fsType !== "Btrfs") return fsType; - - const { snapshotsConfigurable } = volume.outline; - if (snapshotsConfigurable) return [BTRFS_WITH_SNAPSHOTS, fsType]; - - return (volume.snapshots ? BTRFS_WITH_SNAPSHOTS : fsType); - }; - - return volume.outline.fsTypes.flatMap(fsType => options(volume, fsType)); -}; - -/** - * File system option according to the given type and the value of snapshots. - * @function - * - * @param {FsValue} value - * @returns {string} - */ -const fsOption = ({ fsType, snapshots }) => { - if (fsType !== "Btrfs") return fsType; - - return (snapshots ? BTRFS_WITH_SNAPSHOTS : fsType); -}; - -/** - * Label for a file system type option. - * @function - * - * @param {string} fsOption - * @returns {string} - */ -const fsOptionLabel = (fsOption) => { - return (fsOption === BTRFS_WITH_SNAPSHOTS ? sprintf("Btrfs %s", _("with snapshots")) : fsOption); + return volume.outline.fsTypes; }; /** @@ -180,10 +142,7 @@ const fsOptionLabel = (fsOption) => { * @returns {FsValue} */ const fsValue = (fsOption) => { - if (fsOption === BTRFS_WITH_SNAPSHOTS) - return { fsType: "Btrfs", snapshots: true }; - else - return { fsType: fsOption, snapshots: false }; + return { fsType: fsOption, snapshots: false }; }; /** @@ -196,27 +155,9 @@ const fsValue = (fsOption) => { * @returns {ReactComponent} */ const FsSelectOption = ({ fsOption }) => { - const label = () => { - if (fsOption === BTRFS_WITH_SNAPSHOTS) return "Btrfs"; - return fsOption; - }; - - const details = () => { - if (fsOption === BTRFS_WITH_SNAPSHOTS) return _("with snapshots"); - return undefined; - }; - - const description = () => { - if (fsOption === BTRFS_WITH_SNAPSHOTS) - // TRANSLATORS: description of Btrfs snapshots feature. - return _("Allows rolling back any change done to the system and restoring its previous state"); - - return undefined; - }; - return ( - - {label()} + + {fsOption} ); }; @@ -237,7 +178,7 @@ const FsSelect = ({ id, value, volume, onChange }) => { const [isOpen, setIsOpen] = useState(false); const options = fsOptions(volume); - const selected = fsOption(value); + const selected = value; const onToggleClick = () => { setIsOpen(!isOpen); @@ -257,7 +198,7 @@ const FsSelect = ({ id, value, volume, onChange }) => { isExpanded={isOpen} className="full-width" > - {fsOptionLabel(selected)} + {selected} ); }; @@ -300,8 +241,13 @@ const FsSelect = ({ id, value, volume, onChange }) => { */ const FsField = ({ value, volume, onChange }) => { const isSingleFs = () => { - const { fsTypes, snapshotsConfigurable } = volume.outline; - return fsTypes.length === 1 && (fsTypes[0] !== "Btrfs" || !snapshotsConfigurable); + // check for btrfs with snapshots + if (volume.fsType === "Btrfs" && volume.snapshots) { + return true; + } + + const { fsTypes } = volume.outline; + return fsTypes.length === 1; }; const Info = () => { @@ -330,7 +276,7 @@ const FsField = ({ value, volume, onChange }) => { condition={isSingleFs()} then={ -

{fsOptionLabel(fsOption(value))}

+

{value}

} else={ From 19e005868de0f6133c4f9da3bafe9047be573184 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Imobach=20Gonz=C3=A1lez=20Sosa?= Date: Wed, 21 Feb 2024 11:45:01 +0000 Subject: [PATCH 05/48] rust: add a locales service to the web API --- rust/agama-dbus-server/src/l10n.rs | 4 +- rust/agama-dbus-server/src/l10n/locale.rs | 3 +- rust/agama-dbus-server/src/l10n/web.rs | 107 ++++++++++++++++++++++ rust/agama-dbus-server/src/web/docs.rs | 8 +- rust/agama-dbus-server/src/web/service.rs | 3 + rust/agama-locale-data/src/lib.rs | 2 +- rust/agama-locale-data/src/locale.rs | 3 +- 7 files changed, 124 insertions(+), 6 deletions(-) create mode 100644 rust/agama-dbus-server/src/l10n/web.rs diff --git a/rust/agama-dbus-server/src/l10n.rs b/rust/agama-dbus-server/src/l10n.rs index fcf6ec3b1c..e7bb10a7e9 100644 --- a/rust/agama-dbus-server/src/l10n.rs +++ b/rust/agama-dbus-server/src/l10n.rs @@ -2,11 +2,13 @@ pub mod helpers; mod keyboard; mod locale; mod timezone; +pub mod web; use crate::error::Error; use agama_locale_data::{KeymapId, LocaleCode}; use anyhow::Context; use keyboard::KeymapsDatabase; +pub use locale::LocaleEntry; use locale::LocalesDatabase; use std::process::Command; use timezone::TimezonesDatabase; @@ -16,7 +18,7 @@ pub struct Locale { timezone: String, timezones_db: TimezonesDatabase, locales: Vec, - locales_db: LocalesDatabase, + pub locales_db: LocalesDatabase, keymap: KeymapId, keymaps_db: KeymapsDatabase, ui_locale: LocaleCode, diff --git a/rust/agama-dbus-server/src/l10n/locale.rs b/rust/agama-dbus-server/src/l10n/locale.rs index a56919ea0a..fadcf9b71b 100644 --- a/rust/agama-dbus-server/src/l10n/locale.rs +++ b/rust/agama-dbus-server/src/l10n/locale.rs @@ -3,10 +3,11 @@ use crate::error::Error; use agama_locale_data::{InvalidLocaleCode, LocaleCode}; use anyhow::Context; +use serde::Serialize; use std::process::Command; /// Represents a locale, including the localized language and territory. -#[derive(Debug)] +#[derive(Debug, Serialize, Clone, utoipa::ToSchema)] pub struct LocaleEntry { /// The locale code (e.g., "es_ES.UTF-8"). pub code: LocaleCode, diff --git a/rust/agama-dbus-server/src/l10n/web.rs b/rust/agama-dbus-server/src/l10n/web.rs new file mode 100644 index 0000000000..0ec3600a9b --- /dev/null +++ b/rust/agama-dbus-server/src/l10n/web.rs @@ -0,0 +1,107 @@ +//! This module implements the web API for the localization module. + +use super::{locale::LocaleEntry, Locale}; +use agama_locale_data::{InvalidKeymap, LocaleCode}; +use axum::{ + extract::State, + http::StatusCode, + response::{IntoResponse, Response}, + routing::{get, put}, + Json, Router, +}; +use serde::{Deserialize, Serialize}; +use serde_json::json; +use std::sync::{Arc, RwLock}; +use thiserror::Error; + +#[derive(Error, Debug)] +pub enum LocaleError { + #[error("Unknown locale code: {0}")] + UnknownLocale(String), + #[error("Unknown timezone: {0}")] + UnknownTimezone(String), + #[error("Invalid keymap: {0}")] + InvalidKeymap(#[from] InvalidKeymap), +} + +impl IntoResponse for LocaleError { + fn into_response(self) -> Response { + let body = json!({ + "error": self.to_string() + }); + (StatusCode::BAD_REQUEST, Json(body)).into_response() + } +} + +// Locale service state. +type LocaleState = Arc>; + +/// Sets up and returns the axum service for the localization module. +pub fn l10n_service() -> Router { + let code = LocaleCode::default(); + let locale = Locale::new_with_locale(&code).unwrap(); + let state = Arc::new(RwLock::new(locale)); + Router::new() + .route("/locales", get(locales)) + .route("/config", put(set_config).get(get_config)) + .with_state(state) +} + +#[derive(Debug, Serialize, utoipa::ToSchema)] +pub struct LocalesResponse { + locales: Vec, +} + +#[utoipa::path(get, path = "/locales", responses( + (status = 200, description = "List of known locales", body = LocalesResponse) +))] +pub async fn locales(State(state): State) -> Json { + let data = state.read().expect("could not access to locale data"); + let locales = data.locales_db.entries().to_vec(); + Json(LocalesResponse { locales }) +} + +#[derive(Serialize, Deserialize)] +struct LocaleConfig { + locales: Option>, + keymap: Option, + timezone: Option, +} + +async fn set_config( + State(state): State, + Json(value): Json, +) -> Result, LocaleError> { + let mut data = state.write().unwrap(); + + if let Some(locales) = &value.locales { + for loc in locales { + if !data.locales_db.exists(loc.as_str()) { + return Err(LocaleError::UnknownLocale(loc.to_string())); + } + } + data.locales = locales.clone(); + } + + if let Some(timezone) = &value.timezone { + if !data.timezones_db.exists(timezone) { + return Err(LocaleError::UnknownTimezone(timezone.to_string())); + } + data.timezone = timezone.to_owned(); + } + + if let Some(keymap_id) = &value.keymap { + data.keymap = keymap_id.parse()?; + } + + Ok(Json(())) +} + +async fn get_config(State(state): State) -> Json { + let data = state.read().unwrap(); + Json(LocaleConfig { + locales: Some(data.locales.clone()), + keymap: Some(data.keymap()), + timezone: Some(data.timezone().to_string()), + }) +} diff --git a/rust/agama-dbus-server/src/web/docs.rs b/rust/agama-dbus-server/src/web/docs.rs index a45465aa44..fd87be616b 100644 --- a/rust/agama-dbus-server/src/web/docs.rs +++ b/rust/agama-dbus-server/src/web/docs.rs @@ -3,7 +3,11 @@ use utoipa::OpenApi; #[derive(OpenApi)] #[openapi( info(description = "Agama web API description"), - paths(super::http::ping), - components(schemas(super::http::PingResponse)) + paths(super::http::ping, crate::l10n::web::locales), + components( + schemas(super::http::PingResponse), + schemas(crate::l10n::web::LocalesResponse), + schemas(crate::l10n::LocaleEntry) + ) )] pub struct ApiDoc; diff --git a/rust/agama-dbus-server/src/web/service.rs b/rust/agama-dbus-server/src/web/service.rs index 2c30d24212..890af8b337 100644 --- a/rust/agama-dbus-server/src/web/service.rs +++ b/rust/agama-dbus-server/src/web/service.rs @@ -1,4 +1,5 @@ use super::{auth::TokenClaims, config::ServiceConfig, state::ServiceState}; +use crate::l10n::web::l10n_service; use axum::{ middleware, routing::{get, post}, @@ -12,9 +13,11 @@ pub fn service(config: ServiceConfig, dbus_connection: zbus::Connection) -> Rout config, dbus_connection, }; + Router::new() .route("/protected", get(super::http::protected)) .route("/ws", get(super::ws::ws_handler)) + .nest_service("/l10n", l10n_service()) .route_layer(middleware::from_extractor_with_state::( state.clone(), )) diff --git a/rust/agama-locale-data/src/lib.rs b/rust/agama-locale-data/src/lib.rs index 71d6c1654c..096d29f358 100644 --- a/rust/agama-locale-data/src/lib.rs +++ b/rust/agama-locale-data/src/lib.rs @@ -19,7 +19,7 @@ pub mod timezone_part; use keyboard::xkeyboard; -pub use locale::{InvalidLocaleCode, KeymapId, LocaleCode}; +pub use locale::{InvalidKeymap, InvalidLocaleCode, KeymapId, LocaleCode}; fn file_reader(file_path: &str) -> anyhow::Result { let file = File::open(file_path) diff --git a/rust/agama-locale-data/src/locale.rs b/rust/agama-locale-data/src/locale.rs index 43fa6ce5f7..2291bb8c85 100644 --- a/rust/agama-locale-data/src/locale.rs +++ b/rust/agama-locale-data/src/locale.rs @@ -1,11 +1,12 @@ //! Defines useful types to deal with localization values use regex::Regex; +use serde::Serialize; use std::sync::OnceLock; use std::{fmt::Display, str::FromStr}; use thiserror::Error; -#[derive(Clone, Debug, PartialEq)] +#[derive(Clone, Debug, PartialEq, Serialize)] pub struct LocaleCode { // ISO-639 pub language: String, From 509423285cf584b41e5c20786a8ce8ca8df60afe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Imobach=20Gonz=C3=A1lez=20Sosa?= Date: Thu, 22 Feb 2024 12:29:55 +0000 Subject: [PATCH 06/48] rust: add keyboards and timezones to the API --- rust/agama-dbus-server/src/l10n/keyboard.rs | 2 ++ rust/agama-dbus-server/src/l10n/timezone.rs | 3 +- rust/agama-dbus-server/src/l10n/web.rs | 32 ++++++++++++++++++++- rust/agama-locale-data/src/locale.rs | 2 +- 4 files changed, 36 insertions(+), 3 deletions(-) diff --git a/rust/agama-dbus-server/src/l10n/keyboard.rs b/rust/agama-dbus-server/src/l10n/keyboard.rs index 8a286bf4f6..d5447e066d 100644 --- a/rust/agama-dbus-server/src/l10n/keyboard.rs +++ b/rust/agama-dbus-server/src/l10n/keyboard.rs @@ -1,8 +1,10 @@ use agama_locale_data::{get_localectl_keymaps, keyboard::XkbConfigRegistry, KeymapId}; use gettextrs::*; +use serde::Serialize; use std::collections::HashMap; // Minimal representation of a keymap +#[derive(Clone, Debug, Serialize)] pub struct Keymap { pub id: KeymapId, description: String, diff --git a/rust/agama-dbus-server/src/l10n/timezone.rs b/rust/agama-dbus-server/src/l10n/timezone.rs index bfa7ddae8f..f6614e26f6 100644 --- a/rust/agama-dbus-server/src/l10n/timezone.rs +++ b/rust/agama-dbus-server/src/l10n/timezone.rs @@ -3,10 +3,11 @@ use crate::error::Error; use agama_locale_data::territory::Territories; use agama_locale_data::timezone_part::TimezoneIdParts; +use serde::Serialize; use std::collections::HashMap; /// Represents a timezone, including each part as localized. -#[derive(Debug)] +#[derive(Clone, Debug, Serialize)] pub struct TimezoneEntry { /// Timezone identifier (e.g. "Atlantic/Canary"). pub code: String, diff --git a/rust/agama-dbus-server/src/l10n/web.rs b/rust/agama-dbus-server/src/l10n/web.rs index 0ec3600a9b..c211753946 100644 --- a/rust/agama-dbus-server/src/l10n/web.rs +++ b/rust/agama-dbus-server/src/l10n/web.rs @@ -1,6 +1,6 @@ //! This module implements the web API for the localization module. -use super::{locale::LocaleEntry, Locale}; +use super::{keyboard::Keymap, locale::LocaleEntry, timezone::TimezoneEntry, Locale}; use agama_locale_data::{InvalidKeymap, LocaleCode}; use axum::{ extract::State, @@ -42,7 +42,9 @@ pub fn l10n_service() -> Router { let locale = Locale::new_with_locale(&code).unwrap(); let state = Arc::new(RwLock::new(locale)); Router::new() + .route("/keymaps", get(keymaps)) .route("/locales", get(locales)) + .route("/timezones", get(timezones)) .route("/config", put(set_config).get(get_config)) .with_state(state) } @@ -68,6 +70,34 @@ struct LocaleConfig { timezone: Option, } +#[derive(Debug, Serialize, utoipa::ToSchema)] +pub struct TimezonesResponse { + timezones: Vec, +} + +#[utoipa::path(get, path = "/timezones", responses( + (status = 200, description = "List of known timezones", body = TimezonesResponse) +))] +pub async fn timezones(State(state): State) -> Json { + let data = state.read().expect("could not access to locale data"); + let timezones = data.timezones_db.entries().to_vec(); + Json(TimezonesResponse { timezones }) +} + +#[derive(Debug, Serialize, utoipa::ToSchema)] +pub struct KeymapsResponse { + keymaps: Vec, +} + +#[utoipa::path(get, path = "/keymaps", responses( + (status = 200, description = "List of known keymaps", body = KeymapsResponse) +))] +pub async fn keymaps(State(state): State) -> Json { + let data = state.read().expect("could not access to locale data"); + let keymaps = data.keymaps_db.entries().to_vec(); + Json(KeymapsResponse { keymaps }) +} + async fn set_config( State(state): State, Json(value): Json, diff --git a/rust/agama-locale-data/src/locale.rs b/rust/agama-locale-data/src/locale.rs index 2291bb8c85..f46f5501fd 100644 --- a/rust/agama-locale-data/src/locale.rs +++ b/rust/agama-locale-data/src/locale.rs @@ -80,7 +80,7 @@ static KEYMAP_ID_REGEX: OnceLock = OnceLock::new(); /// let id_with_dashes: KeymapId = "es-ast".parse().unwrap(); /// assert_eq!(id, id_with_dashes); /// ``` -#[derive(Clone, Debug, PartialEq)] +#[derive(Clone, Debug, PartialEq, Serialize)] pub struct KeymapId { pub layout: String, pub variant: Option, From 6073a39006636bcbeb4285f0f0b4ab0a62a6daa6 Mon Sep 17 00:00:00 2001 From: Knut Anderssen Date: Thu, 22 Feb 2024 14:13:53 +0000 Subject: [PATCH 07/48] Added ui_locale handling --- rust/agama-dbus-server/src/l10n/web.rs | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/rust/agama-dbus-server/src/l10n/web.rs b/rust/agama-dbus-server/src/l10n/web.rs index c211753946..c72398c1ce 100644 --- a/rust/agama-dbus-server/src/l10n/web.rs +++ b/rust/agama-dbus-server/src/l10n/web.rs @@ -1,6 +1,8 @@ //! This module implements the web API for the localization module. use super::{keyboard::Keymap, locale::LocaleEntry, timezone::TimezoneEntry, Locale}; +use crate::error::Error; +use crate::l10n::helpers; use agama_locale_data::{InvalidKeymap, LocaleCode}; use axum::{ extract::State, @@ -22,6 +24,8 @@ pub enum LocaleError { UnknownTimezone(String), #[error("Invalid keymap: {0}")] InvalidKeymap(#[from] InvalidKeymap), + #[error("Cannot translate: {0}")] + CannotTranslate(#[from] Error), } impl IntoResponse for LocaleError { @@ -68,6 +72,7 @@ struct LocaleConfig { locales: Option>, keymap: Option, timezone: Option, + ui_locale: Option, } #[derive(Debug, Serialize, utoipa::ToSchema)] @@ -124,6 +129,16 @@ async fn set_config( data.keymap = keymap_id.parse()?; } + if let Some(ui_locale) = &value.ui_locale { + let locale: LocaleCode = ui_locale + .as_str() + .try_into() + .map_err(|_e| LocaleError::UnknownLocale(ui_locale.to_string()))?; + + helpers::set_service_locale(&locale); + data.translate(&locale)?; + } + Ok(Json(())) } @@ -133,5 +148,6 @@ async fn get_config(State(state): State) -> Json { locales: Some(data.locales.clone()), keymap: Some(data.keymap()), timezone: Some(data.timezone().to_string()), + ui_locale: Some(data.ui_locale().to_string()), }) } From a1aeff0a13726e565cec9d0f88a9b8dbd79e3a24 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Imobach=20Gonz=C3=A1lez=20Sosa?= Date: Fri, 23 Feb 2024 07:45:10 +0000 Subject: [PATCH 08/48] rust: emit events over a WebSocket --- rust/agama-dbus-server/src/l10n/web.rs | 52 ++++++++++++++++------ rust/agama-dbus-server/src/web.rs | 3 ++ rust/agama-dbus-server/src/web/event.rs | 13 ++++++ rust/agama-dbus-server/src/web/progress.rs | 40 +++++++++++++++++ rust/agama-dbus-server/src/web/service.rs | 5 ++- rust/agama-dbus-server/src/web/state.rs | 5 ++- rust/agama-dbus-server/src/web/ws.rs | 46 ++++--------------- rust/agama-lib/src/progress.rs | 2 +- 8 files changed, 110 insertions(+), 56 deletions(-) create mode 100644 rust/agama-dbus-server/src/web/event.rs create mode 100644 rust/agama-dbus-server/src/web/progress.rs diff --git a/rust/agama-dbus-server/src/l10n/web.rs b/rust/agama-dbus-server/src/l10n/web.rs index c72398c1ce..c56b84dffe 100644 --- a/rust/agama-dbus-server/src/l10n/web.rs +++ b/rust/agama-dbus-server/src/l10n/web.rs @@ -1,8 +1,11 @@ //! This module implements the web API for the localization module. use super::{keyboard::Keymap, locale::LocaleEntry, timezone::TimezoneEntry, Locale}; -use crate::error::Error; -use crate::l10n::helpers; +use crate::{ + error::Error, + l10n::helpers, + web::{Event, EventsSender}, +}; use agama_locale_data::{InvalidKeymap, LocaleCode}; use axum::{ extract::State, @@ -37,14 +40,23 @@ impl IntoResponse for LocaleError { } } -// Locale service state. -type LocaleState = Arc>; +#[derive(Clone)] +struct LocaleState { + locale: Arc>, + events: EventsSender, +} /// Sets up and returns the axum service for the localization module. -pub fn l10n_service() -> Router { +/// +/// * `events`: channel to send the events to the main service. +pub fn l10n_service(events: EventsSender) -> Router { let code = LocaleCode::default(); let locale = Locale::new_with_locale(&code).unwrap(); - let state = Arc::new(RwLock::new(locale)); + let state = LocaleState { + locale: Arc::new(RwLock::new(locale)), + events, + }; + Router::new() .route("/keymaps", get(keymaps)) .route("/locales", get(locales)) @@ -61,8 +73,11 @@ pub struct LocalesResponse { #[utoipa::path(get, path = "/locales", responses( (status = 200, description = "List of known locales", body = LocalesResponse) ))] -pub async fn locales(State(state): State) -> Json { - let data = state.read().expect("could not access to locale data"); +async fn locales(State(state): State) -> Json { + let data = state + .locale + .read() + .expect("could not access to locale data"); let locales = data.locales_db.entries().to_vec(); Json(LocalesResponse { locales }) } @@ -83,8 +98,11 @@ pub struct TimezonesResponse { #[utoipa::path(get, path = "/timezones", responses( (status = 200, description = "List of known timezones", body = TimezonesResponse) ))] -pub async fn timezones(State(state): State) -> Json { - let data = state.read().expect("could not access to locale data"); +async fn timezones(State(state): State) -> Json { + let data = state + .locale + .read() + .expect("could not access to locale data"); let timezones = data.timezones_db.entries().to_vec(); Json(TimezonesResponse { timezones }) } @@ -97,8 +115,11 @@ pub struct KeymapsResponse { #[utoipa::path(get, path = "/keymaps", responses( (status = 200, description = "List of known keymaps", body = KeymapsResponse) ))] -pub async fn keymaps(State(state): State) -> Json { - let data = state.read().expect("could not access to locale data"); +async fn keymaps(State(state): State) -> Json { + let data = state + .locale + .read() + .expect("could not access to locale data"); let keymaps = data.keymaps_db.entries().to_vec(); Json(KeymapsResponse { keymaps }) } @@ -107,7 +128,7 @@ async fn set_config( State(state): State, Json(value): Json, ) -> Result, LocaleError> { - let mut data = state.write().unwrap(); + let mut data = state.locale.write().unwrap(); if let Some(locales) = &value.locales { for loc in locales { @@ -137,13 +158,16 @@ async fn set_config( helpers::set_service_locale(&locale); data.translate(&locale)?; + _ = state.events.send(Event::LocaleChanged { + locale: locale.to_string(), + }); } Ok(Json(())) } async fn get_config(State(state): State) -> Json { - let data = state.read().unwrap(); + let data = state.locale.read().unwrap(); Json(LocaleConfig { locales: Some(data.locales.clone()), keymap: Some(data.keymap()), diff --git a/rust/agama-dbus-server/src/web.rs b/rust/agama-dbus-server/src/web.rs index b3e1490f9b..59126d9ce5 100644 --- a/rust/agama-dbus-server/src/web.rs +++ b/rust/agama-dbus-server/src/web.rs @@ -7,7 +7,9 @@ mod auth; mod config; mod docs; +mod event; mod http; +mod progress; mod service; mod state; mod ws; @@ -15,4 +17,5 @@ mod ws; pub use auth::generate_token; pub use config::ServiceConfig; pub use docs::ApiDoc; +pub use event::{Event, EventsReceiver, EventsSender}; pub use service::service; diff --git a/rust/agama-dbus-server/src/web/event.rs b/rust/agama-dbus-server/src/web/event.rs new file mode 100644 index 0000000000..76db326bc4 --- /dev/null +++ b/rust/agama-dbus-server/src/web/event.rs @@ -0,0 +1,13 @@ +use agama_lib::progress::Progress; +use serde::Serialize; +use tokio::sync::broadcast::{Receiver, Sender}; + +#[derive(Clone, Serialize)] +#[serde(tag = "type")] +pub enum Event { + LocaleChanged { locale: String }, + Progress(Progress), +} + +pub type EventsSender = Sender; +pub type EventsReceiver = Receiver; diff --git a/rust/agama-dbus-server/src/web/progress.rs b/rust/agama-dbus-server/src/web/progress.rs new file mode 100644 index 0000000000..c892edd8ed --- /dev/null +++ b/rust/agama-dbus-server/src/web/progress.rs @@ -0,0 +1,40 @@ +//! Implements a mechanism to monitor track service progress. + +use super::event::{Event, EventsSender}; +use agama_lib::progress::{Progress, ProgressPresenter}; +use async_trait::async_trait; + +// let presenter = EventsProgressPresenter::new(socket); +// let mut monitor = ProgressMonitor::new(connection).await.unwrap(); +// _ = monitor.run(presenter).await; + +/// Experimental ProgressPresenter to emit progress events over a Events. +pub struct EventsProgressPresenter(EventsSender); + +impl EventsProgressPresenter { + pub fn new(events: EventsSender) -> Self { + Self(events) + } + + pub async fn report_progress(&mut self, progress: &Progress) { + _ = self.0.send(Event::Progress(progress.clone())) + // _ = self.events.send(Message::Text(payload)).await; + } +} + +#[async_trait] +impl ProgressPresenter for EventsProgressPresenter { + async fn start(&mut self, progress: &Progress) { + self.report_progress(progress).await; + } + + async fn update_main(&mut self, progress: &Progress) { + self.report_progress(progress).await; + } + + async fn update_detail(&mut self, progress: &Progress) { + self.report_progress(progress).await; + } + + async fn finish(&mut self) {} +} diff --git a/rust/agama-dbus-server/src/web/service.rs b/rust/agama-dbus-server/src/web/service.rs index 890af8b337..0b93e85039 100644 --- a/rust/agama-dbus-server/src/web/service.rs +++ b/rust/agama-dbus-server/src/web/service.rs @@ -5,19 +5,22 @@ use axum::{ routing::{get, post}, Router, }; +use tokio::sync::broadcast::channel; use tower_http::trace::TraceLayer; /// Returns a service that implements the web-based Agama API. pub fn service(config: ServiceConfig, dbus_connection: zbus::Connection) -> Router { + let (tx, _) = channel(16); let state = ServiceState { config, dbus_connection, + events: tx.clone(), }; Router::new() .route("/protected", get(super::http::protected)) .route("/ws", get(super::ws::ws_handler)) - .nest_service("/l10n", l10n_service()) + .nest_service("/l10n", l10n_service(tx)) .route_layer(middleware::from_extractor_with_state::( state.clone(), )) diff --git a/rust/agama-dbus-server/src/web/state.rs b/rust/agama-dbus-server/src/web/state.rs index 49e16c4e22..73342a66ad 100644 --- a/rust/agama-dbus-server/src/web/state.rs +++ b/rust/agama-dbus-server/src/web/state.rs @@ -1,12 +1,13 @@ //! Implements the web service state. -use super::config::ServiceConfig; +use super::{config::ServiceConfig, EventsSender}; /// Web service state. /// -/// It holds the service configuration and the current D-Bus connection. +/// It holds the service configuration, the current D-Bus connection and a channel to send events. #[derive(Clone)] pub struct ServiceState { pub config: ServiceConfig, pub dbus_connection: zbus::Connection, + pub events: EventsSender, } diff --git a/rust/agama-dbus-server/src/web/ws.rs b/rust/agama-dbus-server/src/web/ws.rs index 3cfd9061c1..ea080bd60b 100644 --- a/rust/agama-dbus-server/src/web/ws.rs +++ b/rust/agama-dbus-server/src/web/ws.rs @@ -1,8 +1,6 @@ //! Implements the websocket handling. -use super::state::ServiceState; -use agama_lib::progress::{Progress, ProgressMonitor, ProgressPresenter}; -use async_trait::async_trait; +use super::{state::ServiceState, EventsSender}; use axum::{ extract::{ ws::{Message, WebSocket}, @@ -15,42 +13,14 @@ pub async fn ws_handler( State(state): State, ws: WebSocketUpgrade, ) -> impl IntoResponse { - ws.on_upgrade(move |socket| handle_socket(socket, state.dbus_connection)) + ws.on_upgrade(move |socket| handle_socket(socket, state.dbus_connection, state.events)) } -async fn handle_socket(socket: WebSocket, connection: zbus::Connection) { - let presenter = WebSocketProgressPresenter::new(socket); - let mut monitor = ProgressMonitor::new(connection).await.unwrap(); - _ = monitor.run(presenter).await; -} - -/// Experimental ProgressPresenter to emit progress events over a WebSocket. -struct WebSocketProgressPresenter(WebSocket); - -impl WebSocketProgressPresenter { - pub fn new(socket: WebSocket) -> Self { - Self(socket) +async fn handle_socket(mut socket: WebSocket, _connection: zbus::Connection, events: EventsSender) { + let mut rx = events.subscribe(); + while let Ok(msg) = rx.recv().await { + if let Ok(json) = serde_json::to_string(&msg) { + _ = socket.send(Message::Text(json)).await; + } } - - pub async fn report_progress(&mut self, progress: &Progress) { - let payload = serde_json::to_string(&progress).unwrap(); - _ = self.0.send(Message::Text(payload)).await; - } -} - -#[async_trait] -impl ProgressPresenter for WebSocketProgressPresenter { - async fn start(&mut self, progress: &Progress) { - self.report_progress(progress).await; - } - - async fn update_main(&mut self, progress: &Progress) { - self.report_progress(progress).await; - } - - async fn update_detail(&mut self, progress: &Progress) { - self.report_progress(progress).await; - } - - async fn finish(&mut self) {} } diff --git a/rust/agama-lib/src/progress.rs b/rust/agama-lib/src/progress.rs index 0e3b1a7237..44bd6e0787 100644 --- a/rust/agama-lib/src/progress.rs +++ b/rust/agama-lib/src/progress.rs @@ -53,7 +53,7 @@ use tokio_stream::{StreamExt, StreamMap}; use zbus::Connection; /// Represents the progress for an Agama service. -#[derive(Default, Debug, Serialize)] +#[derive(Clone, Default, Debug, Serialize)] pub struct Progress { /// Current step pub current_step: u32, From 4d704a9b23fe4beb1493b75dce9b70cadbe6a623 Mon Sep 17 00:00:00 2001 From: Lukas Ocilka Date: Fri, 23 Feb 2024 10:30:10 +0100 Subject: [PATCH 09/48] A little fix in the "About Agama" text - Added missing "is" - Using better phrase "we recommend using" --- web/src/components/core/About.jsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/web/src/components/core/About.jsx b/web/src/components/core/About.jsx index 6fcd86cc5f..91bd04d922 100644 --- a/web/src/components/core/About.jsx +++ b/web/src/components/core/About.jsx @@ -51,9 +51,9 @@ export default function About() { { // TRANSLATORS: content of the "About" popup (1/2) _("Agama is an experimental installer for (open)SUSE systems. It \ -still under development so, please, do not use it in \ +is still under development so, please, do not use it in \ production environments. If you want to give it a try, we \ -recommend to use a virtual machine to prevent any possible \ +recommend using a virtual machine to prevent from any possible \ data loss.") } From b35b152360d40b0e6ce56b4a69796e7a4113166a Mon Sep 17 00:00:00 2001 From: Lukas Ocilka Date: Fri, 23 Feb 2024 11:21:14 +0100 Subject: [PATCH 10/48] Removed "from" as suggested by @mvidner Co-authored-by: Martin Vidner --- web/src/components/core/About.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/src/components/core/About.jsx b/web/src/components/core/About.jsx index 91bd04d922..be97bd7892 100644 --- a/web/src/components/core/About.jsx +++ b/web/src/components/core/About.jsx @@ -53,7 +53,7 @@ export default function About() { _("Agama is an experimental installer for (open)SUSE systems. It \ is still under development so, please, do not use it in \ production environments. If you want to give it a try, we \ -recommend using a virtual machine to prevent from any possible \ +recommend using a virtual machine to prevent any possible \ data loss.") } From 26e2e3a8dd23f59863b5ad22b9143b896251f97a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Imobach=20Gonz=C3=A1lez=20Sosa?= Date: Fri, 23 Feb 2024 11:48:48 +0000 Subject: [PATCH 11/48] rust: introduce MainServiceBuilder * It makes easier to build the web server. * The server is not coupled to D-Bus at all. --- rust/agama-dbus-server/src/web.rs | 18 +++++- rust/agama-dbus-server/src/web/service.rs | 74 ++++++++++++++++------- rust/agama-dbus-server/src/web/state.rs | 1 - rust/agama-dbus-server/src/web/ws.rs | 4 +- rust/agama-dbus-server/tests/service.rs | 2 +- 5 files changed, 72 insertions(+), 27 deletions(-) diff --git a/rust/agama-dbus-server/src/web.rs b/rust/agama-dbus-server/src/web.rs index 59126d9ce5..fcb2b70046 100644 --- a/rust/agama-dbus-server/src/web.rs +++ b/rust/agama-dbus-server/src/web.rs @@ -18,4 +18,20 @@ pub use auth::generate_token; pub use config::ServiceConfig; pub use docs::ApiDoc; pub use event::{Event, EventsReceiver, EventsSender}; -pub use service::service; + +use crate::l10n::web::l10n_service; +use axum::Router; +use service::MainServiceBuilder; +use tokio::sync::broadcast::channel; + +/// Returns a service that implements the web-based Agama API. +/// +/// * `config`: service configuration. +/// * `dbus`: D-Bus connection. +pub fn service(config: ServiceConfig, _dbus: zbus::Connection) -> Router { + let (tx, _) = channel(16); + MainServiceBuilder::new(tx.clone()) + .add_service("/l10n", l10n_service(tx.clone())) + .with_config(config) + .build() +} diff --git a/rust/agama-dbus-server/src/web/service.rs b/rust/agama-dbus-server/src/web/service.rs index 0b93e85039..2ee0c1b75f 100644 --- a/rust/agama-dbus-server/src/web/service.rs +++ b/rust/agama-dbus-server/src/web/service.rs @@ -1,31 +1,61 @@ -use super::{auth::TokenClaims, config::ServiceConfig, state::ServiceState}; -use crate::l10n::web::l10n_service; +use super::{auth::TokenClaims, config::ServiceConfig, state::ServiceState, EventsSender}; use axum::{ + extract::Request, middleware, + response::IntoResponse, routing::{get, post}, Router, }; -use tokio::sync::broadcast::channel; +use std::convert::Infallible; +use tower::Service; use tower_http::trace::TraceLayer; -/// Returns a service that implements the web-based Agama API. -pub fn service(config: ServiceConfig, dbus_connection: zbus::Connection) -> Router { - let (tx, _) = channel(16); - let state = ServiceState { - config, - dbus_connection, - events: tx.clone(), - }; +pub struct MainServiceBuilder { + config: ServiceConfig, + events: EventsSender, + router: Router, +} + +impl MainServiceBuilder { + pub fn new(events: EventsSender) -> Self { + let router = Router::new().route("/ws", get(super::ws::ws_handler)); + let config = ServiceConfig::default(); + + Self { + events, + router, + config, + } + } + + pub fn with_config(self, config: ServiceConfig) -> Self { + Self { config, ..self } + } + + pub fn add_service(self, path: &str, service: T) -> Self + where + T: Service + Clone + Send + 'static, + T::Response: IntoResponse, + T::Future: Send + 'static, + { + Self { + router: self.router.nest_service(path, service), + ..self + } + } - Router::new() - .route("/protected", get(super::http::protected)) - .route("/ws", get(super::ws::ws_handler)) - .nest_service("/l10n", l10n_service(tx)) - .route_layer(middleware::from_extractor_with_state::( - state.clone(), - )) - .route("/ping", get(super::http::ping)) - .route("/authenticate", post(super::http::authenticate)) - .layer(TraceLayer::new_for_http()) - .with_state(state) + pub fn build(self) -> Router { + let state = ServiceState { + config: self.config, + events: self.events, + }; + self.router + .route_layer(middleware::from_extractor_with_state::( + state.clone(), + )) + .route("/ping", get(super::http::ping)) + .route("/authenticate", post(super::http::authenticate)) + .layer(TraceLayer::new_for_http()) + .with_state(state) + } } diff --git a/rust/agama-dbus-server/src/web/state.rs b/rust/agama-dbus-server/src/web/state.rs index 73342a66ad..c35592b8c5 100644 --- a/rust/agama-dbus-server/src/web/state.rs +++ b/rust/agama-dbus-server/src/web/state.rs @@ -8,6 +8,5 @@ use super::{config::ServiceConfig, EventsSender}; #[derive(Clone)] pub struct ServiceState { pub config: ServiceConfig, - pub dbus_connection: zbus::Connection, pub events: EventsSender, } diff --git a/rust/agama-dbus-server/src/web/ws.rs b/rust/agama-dbus-server/src/web/ws.rs index ea080bd60b..e7c348ddb8 100644 --- a/rust/agama-dbus-server/src/web/ws.rs +++ b/rust/agama-dbus-server/src/web/ws.rs @@ -13,10 +13,10 @@ pub async fn ws_handler( State(state): State, ws: WebSocketUpgrade, ) -> impl IntoResponse { - ws.on_upgrade(move |socket| handle_socket(socket, state.dbus_connection, state.events)) + ws.on_upgrade(move |socket| handle_socket(socket, state.events)) } -async fn handle_socket(mut socket: WebSocket, _connection: zbus::Connection, events: EventsSender) { +async fn handle_socket(mut socket: WebSocket, events: EventsSender) { let mut rx = events.subscribe(); while let Ok(msg) = rx.recv().await { if let Ok(json) = serde_json::to_string(&msg) { diff --git a/rust/agama-dbus-server/tests/service.rs b/rust/agama-dbus-server/tests/service.rs index c825fbbe43..838719b5ce 100644 --- a/rust/agama-dbus-server/tests/service.rs +++ b/rust/agama-dbus-server/tests/service.rs @@ -36,7 +36,7 @@ async fn access_protected_route(token: &str, jwt_secret: &str) -> Response { let config = ServiceConfig { jwt_secret: jwt_secret.to_string(), }; - let web_server = service(config, dbus_server.connection()); + let web_server = service(config); let request = Request::builder() .uri("/protected") .method(Method::GET) From 432d3f763bea04ca4038c9a76dbb969c4e691383 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Imobach=20Gonz=C3=A1lez=20Sosa?= Date: Fri, 23 Feb 2024 12:09:07 +0000 Subject: [PATCH 12/48] rust: emit progress events through the websocket --- .../agama-dbus-server/src/agama-web-server.rs | 10 ++++++---- rust/agama-dbus-server/src/web.rs | 20 ++++++++++++++----- 2 files changed, 21 insertions(+), 9 deletions(-) diff --git a/rust/agama-dbus-server/src/agama-web-server.rs b/rust/agama-dbus-server/src/agama-web-server.rs index 9df6dfac0c..7f4f2ee969 100644 --- a/rust/agama-dbus-server/src/agama-web-server.rs +++ b/rust/agama-dbus-server/src/agama-web-server.rs @@ -1,6 +1,6 @@ -use agama_dbus_server::web; -use agama_lib::connection; +use agama_dbus_server::web::{self, run_monitor}; use clap::{Parser, Subcommand}; +use tokio::sync::broadcast::channel; use tracing_subscriber::prelude::*; use utoipa::OpenApi; @@ -35,9 +35,11 @@ async fn serve_command(address: &str) { .await .unwrap_or_else(|_| panic!("could not listen on {}", address)); - let dbus_connection = connection().await.unwrap(); + let (tx, _) = channel(16); + run_monitor(tx.clone()).await; + let config = web::ServiceConfig::load().unwrap(); - let service = web::service(config, dbus_connection); + let service = web::service(config, tx); axum::serve(listener, service) .await .expect("could not mount app on listener"); diff --git a/rust/agama-dbus-server/src/web.rs b/rust/agama-dbus-server/src/web.rs index fcb2b70046..597825bae9 100644 --- a/rust/agama-dbus-server/src/web.rs +++ b/rust/agama-dbus-server/src/web.rs @@ -14,6 +14,7 @@ mod service; mod state; mod ws; +use agama_lib::{connection, progress::ProgressMonitor}; pub use auth::generate_token; pub use config::ServiceConfig; pub use docs::ApiDoc; @@ -22,16 +23,25 @@ pub use event::{Event, EventsReceiver, EventsSender}; use crate::l10n::web::l10n_service; use axum::Router; use service::MainServiceBuilder; -use tokio::sync::broadcast::channel; + +use self::progress::EventsProgressPresenter; /// Returns a service that implements the web-based Agama API. /// /// * `config`: service configuration. /// * `dbus`: D-Bus connection. -pub fn service(config: ServiceConfig, _dbus: zbus::Connection) -> Router { - let (tx, _) = channel(16); - MainServiceBuilder::new(tx.clone()) - .add_service("/l10n", l10n_service(tx.clone())) +pub fn service(config: ServiceConfig, events: EventsSender) -> Router { + MainServiceBuilder::new(events.clone()) + .add_service("/l10n", l10n_service(events)) .with_config(config) .build() } + +pub async fn run_monitor(events: EventsSender) { + let presenter = EventsProgressPresenter::new(events); + let connection = connection().await.unwrap(); + let mut monitor = ProgressMonitor::new(connection).await.unwrap(); + tokio::spawn(async move { + _ = monitor.run(presenter).await; + }); +} From e72ad9c330b4f3bb88c86baba047afcb9ff3cb51 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Imobach=20Gonz=C3=A1lez=20Sosa?= Date: Fri, 23 Feb 2024 16:50:37 +0000 Subject: [PATCH 13/48] rust: add some tests for the locale API --- rust/agama-dbus-server/src/l10n/web.rs | 47 +++++++++++++++ rust/agama-dbus-server/src/network/model.rs | 1 - rust/agama-dbus-server/src/web.rs | 2 +- rust/agama-dbus-server/tests/common/mod.rs | 6 ++ rust/agama-dbus-server/tests/l10n.rs | 66 +++++++++++++++++++++ rust/agama-dbus-server/tests/service.rs | 47 ++++++++------- 6 files changed, 147 insertions(+), 22 deletions(-) create mode 100644 rust/agama-dbus-server/tests/l10n.rs diff --git a/rust/agama-dbus-server/src/l10n/web.rs b/rust/agama-dbus-server/src/l10n/web.rs index c56b84dffe..4187c4e2a9 100644 --- a/rust/agama-dbus-server/src/l10n/web.rs +++ b/rust/agama-dbus-server/src/l10n/web.rs @@ -175,3 +175,50 @@ async fn get_config(State(state): State) -> Json { ui_locale: Some(data.ui_locale().to_string()), }) } + +#[cfg(test)] +mod tests { + use crate::l10n::{web::LocaleState, Locale}; + use agama_locale_data::{KeymapId, LocaleCode}; + use std::sync::{Arc, RwLock}; + use tokio::{sync::broadcast::channel, test}; + + fn build_state() -> LocaleState { + let (tx, _) = channel(16); + let default_code = LocaleCode::default(); + let locale = Locale::new_with_locale(&default_code).unwrap(); + LocaleState { + locale: Arc::new(RwLock::new(locale)), + events: tx, + } + } + + #[test] + async fn test_locales() { + let state = build_state(); + let response = super::locales(axum::extract::State(state)).await; + let default = LocaleCode::default(); + let found = response.locales.iter().find(|l| l.code == default); + assert!(found.is_some()); + } + + #[test] + async fn test_keymaps() { + let state = build_state(); + let response = super::keymaps(axum::extract::State(state)).await; + let english: KeymapId = "us".parse().unwrap(); + let found = response.keymaps.iter().find(|k| k.id == english); + assert!(found.is_some()); + } + + #[test] + async fn test_timezones() { + let state = build_state(); + let response = super::timezones(axum::extract::State(state)).await; + let found = response + .timezones + .iter() + .find(|t| t.code == "Atlantic/Canary"); + assert!(found.is_some()); + } +} diff --git a/rust/agama-dbus-server/src/network/model.rs b/rust/agama-dbus-server/src/network/model.rs index 4a963b07d0..551c353496 100644 --- a/rust/agama-dbus-server/src/network/model.rs +++ b/rust/agama-dbus-server/src/network/model.rs @@ -345,7 +345,6 @@ mod tests { let error = state .set_ports(&bond0, vec!["eth0".to_string()]) .unwrap_err(); - dbg!(&error); assert!(matches!(error, NetworkStateError::UnknownConnection(_))); } diff --git a/rust/agama-dbus-server/src/web.rs b/rust/agama-dbus-server/src/web.rs index 597825bae9..5c6116e22d 100644 --- a/rust/agama-dbus-server/src/web.rs +++ b/rust/agama-dbus-server/src/web.rs @@ -22,7 +22,7 @@ pub use event::{Event, EventsReceiver, EventsSender}; use crate::l10n::web::l10n_service; use axum::Router; -use service::MainServiceBuilder; +pub use service::MainServiceBuilder; use self::progress::EventsProgressPresenter; diff --git a/rust/agama-dbus-server/tests/common/mod.rs b/rust/agama-dbus-server/tests/common/mod.rs index 009d95bfb1..cd77539774 100644 --- a/rust/agama-dbus-server/tests/common/mod.rs +++ b/rust/agama-dbus-server/tests/common/mod.rs @@ -1,4 +1,5 @@ use agama_lib::error::ServiceError; +use axum::body::{to_bytes, Body}; use std::{ error::Error, future::Future, @@ -144,3 +145,8 @@ where } } } + +pub async fn body_to_string(body: Body) -> String { + let bytes = to_bytes(body, usize::MAX).await.unwrap(); + String::from_utf8(bytes.to_vec()).unwrap() +} diff --git a/rust/agama-dbus-server/tests/l10n.rs b/rust/agama-dbus-server/tests/l10n.rs new file mode 100644 index 0000000000..6ad7e352a0 --- /dev/null +++ b/rust/agama-dbus-server/tests/l10n.rs @@ -0,0 +1,66 @@ +mod common; + +use agama_dbus_server::l10n::web::l10n_service; +use axum::{ + body::Body, + http::{Request, StatusCode}, + Router, +}; +use common::body_to_string; +use tokio::{sync::broadcast::channel, test}; +use tower::ServiceExt; + +fn build_service() -> Router { + let (tx, _) = channel(16); + l10n_service(tx) +} + +#[test] +async fn test_get_config() { + let service = build_service(); + let request = Request::builder() + .uri("/config") + .body(Body::empty()) + .unwrap(); + let response = service.oneshot(request).await.unwrap(); + assert_eq!(response.status(), StatusCode::OK); +} + +#[test] +async fn test_locales() { + let service = build_service(); + let request = Request::builder() + .uri("/locales") + .body(Body::empty()) + .unwrap(); + let response = service.oneshot(request).await.unwrap(); + assert_eq!(response.status(), StatusCode::OK); + let body = body_to_string(response.into_body()).await; + assert!(body.contains(r#""language":"English""#)); +} + +#[test] +async fn test_keymaps() { + let service = build_service(); + let request = Request::builder() + .uri("/keymaps") + .body(Body::empty()) + .unwrap(); + let response = service.oneshot(request).await.unwrap(); + assert_eq!(response.status(), StatusCode::OK); + let body = body_to_string(response.into_body()).await; + assert!(body.contains(r#""layout":"us""#)); +} + +#[test] +async fn test_timezones() { + let service = build_service(); + let request = Request::builder() + .uri("/timezones") + .body(Body::empty()) + .unwrap(); + let response = service.oneshot(request).await.unwrap(); + assert_eq!(response.status(), StatusCode::OK); + let body = body_to_string(response.into_body()).await; + assert!(body.contains(r#""code":"Atlantic/Canary""#)); +} diff --git a/rust/agama-dbus-server/tests/service.rs b/rust/agama-dbus-server/tests/service.rs index 838719b5ce..aac1b2922b 100644 --- a/rust/agama-dbus-server/tests/service.rs +++ b/rust/agama-dbus-server/tests/service.rs @@ -1,29 +1,32 @@ mod common; -use self::common::DBusServer; -use agama_dbus_server::{service, web::generate_token, web::ServiceConfig}; +use agama_dbus_server::{ + service, + web::{generate_token, MainServiceBuilder, ServiceConfig}, +}; use axum::{ body::Body, http::{Method, Request, StatusCode}, response::Response, + routing::get, + Router, }; -use http_body_util::BodyExt; +use common::body_to_string; use std::error::Error; -use tokio::test; +use tokio::{sync::broadcast::channel, test}; use tower::ServiceExt; -async fn body_to_string(body: Body) -> String { - let bytes = body.collect().await.unwrap().to_bytes(); - String::from_utf8(bytes.to_vec()).unwrap() +fn build_service() -> Router { + let (tx, _) = channel(16); + service(ServiceConfig::default(), tx) } #[test] async fn test_ping() -> Result<(), Box> { - let dbus_server = DBusServer::new().start().await?; - let web_server = service(ServiceConfig::default(), dbus_server.connection()); + let web_service = build_service(); let request = Request::builder().uri("/ping").body(Body::empty()).unwrap(); - let response = web_server.oneshot(request).await.unwrap(); + let response = web_service.oneshot(request).await.unwrap(); assert_eq!(response.status(), StatusCode::OK); let body = body_to_string(response.into_body()).await; @@ -31,12 +34,20 @@ async fn test_ping() -> Result<(), Box> { Ok(()) } +async fn protected() -> String { + "OK".to_string() +} + async fn access_protected_route(token: &str, jwt_secret: &str) -> Response { - let dbus_server = DBusServer::new().start().await.unwrap(); let config = ServiceConfig { jwt_secret: jwt_secret.to_string(), }; - let web_server = service(config); + let (tx, _) = channel(16); + let web_service = MainServiceBuilder::new(tx) + .add_service("/protected", get(protected)) + .with_config(config) + .build(); + let request = Request::builder() .uri("/protected") .method(Method::GET) @@ -44,12 +55,10 @@ async fn access_protected_route(token: &str, jwt_secret: &str) -> Response { .body(Body::empty()) .unwrap(); - web_server.oneshot(request).await.unwrap() + web_service.oneshot(request).await.unwrap() } -// TODO: The following test should belong to `auth.rs`. However, we need a working -// D-Bus connection which is not available on containers. Let's keep the test -// here until by now. +// TODO: The following test should belong to `auth.rs` #[test] async fn test_access_protected_route() -> Result<(), Box> { let token = generate_token("nots3cr3t"); @@ -60,10 +69,8 @@ async fn test_access_protected_route() -> Result<(), Box> { assert_eq!(body, "OK"); Ok(()) } - -// TODO: The following test should belong to `auth.rs`. However, we need a working -// D-Bus connection which is not available on containers. Let's keep the test -// here until by now. +// +// TODO: The following test should belong to `auth.rs`. #[test] async fn test_access_protected_route_failed() -> Result<(), Box> { let token = generate_token("nots3cr3t"); From 3e34464e1bc65bd5179590cbfcc5124bfaab90a6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Imobach=20Gonz=C3=A1lez=20Sosa?= Date: Fri, 23 Feb 2024 17:01:26 +0000 Subject: [PATCH 14/48] rust: minor clean-up --- rust/agama-dbus-server/src/l10n/timezone.rs | 1 - rust/agama-dbus-server/src/l10n/web.rs | 17 ++++------------- rust/agama-dbus-server/src/web/http.rs | 5 ----- 3 files changed, 4 insertions(+), 19 deletions(-) diff --git a/rust/agama-dbus-server/src/l10n/timezone.rs b/rust/agama-dbus-server/src/l10n/timezone.rs index f6614e26f6..2ba507aca0 100644 --- a/rust/agama-dbus-server/src/l10n/timezone.rs +++ b/rust/agama-dbus-server/src/l10n/timezone.rs @@ -115,7 +115,6 @@ mod tests { let mut db = TimezonesDatabase::new(); db.read("es").unwrap(); let found_timezones = db.entries(); - dbg!(&found_timezones); let found = found_timezones .iter() .find(|tz| tz.code == "Europe/Berlin") diff --git a/rust/agama-dbus-server/src/l10n/web.rs b/rust/agama-dbus-server/src/l10n/web.rs index 4187c4e2a9..b7fbe02f02 100644 --- a/rust/agama-dbus-server/src/l10n/web.rs +++ b/rust/agama-dbus-server/src/l10n/web.rs @@ -73,11 +73,8 @@ pub struct LocalesResponse { #[utoipa::path(get, path = "/locales", responses( (status = 200, description = "List of known locales", body = LocalesResponse) ))] -async fn locales(State(state): State) -> Json { - let data = state - .locale - .read() - .expect("could not access to locale data"); +async fn locales(State(state): State) -> Result, Error> { + let data = state.locale.read().unwrap(); let locales = data.locales_db.entries().to_vec(); Json(LocalesResponse { locales }) } @@ -99,10 +96,7 @@ pub struct TimezonesResponse { (status = 200, description = "List of known timezones", body = TimezonesResponse) ))] async fn timezones(State(state): State) -> Json { - let data = state - .locale - .read() - .expect("could not access to locale data"); + let data = state.locale.read().unwrap(); let timezones = data.timezones_db.entries().to_vec(); Json(TimezonesResponse { timezones }) } @@ -116,10 +110,7 @@ pub struct KeymapsResponse { (status = 200, description = "List of known keymaps", body = KeymapsResponse) ))] async fn keymaps(State(state): State) -> Json { - let data = state - .locale - .read() - .expect("could not access to locale data"); + let data = state.locale.read().unwrap(); let keymaps = data.keymaps_db.entries().to_vec(); Json(KeymapsResponse { keymaps }) } diff --git a/rust/agama-dbus-server/src/web/http.rs b/rust/agama-dbus-server/src/web/http.rs index f6131044db..54da54a3ae 100644 --- a/rust/agama-dbus-server/src/web/http.rs +++ b/rust/agama-dbus-server/src/web/http.rs @@ -24,11 +24,6 @@ pub async fn ping() -> Json { }) } -// TODO: remove this route (as it is just for teting) as soon as we have a legit protected one -pub async fn protected() -> String { - "OK".to_string() -} - #[derive(Serialize)] pub struct AuthResponse { /// Bearer token to use on subsequent calls From d7340f86666e27207a9fc278e4e28c770f39b1b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Imobach=20Gonz=C3=A1lez=20Sosa?= Date: Fri, 23 Feb 2024 21:42:20 +0000 Subject: [PATCH 15/48] rust: fix locales handler --- rust/agama-dbus-server/src/l10n/web.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rust/agama-dbus-server/src/l10n/web.rs b/rust/agama-dbus-server/src/l10n/web.rs index b7fbe02f02..d5ba71e4b5 100644 --- a/rust/agama-dbus-server/src/l10n/web.rs +++ b/rust/agama-dbus-server/src/l10n/web.rs @@ -73,7 +73,7 @@ pub struct LocalesResponse { #[utoipa::path(get, path = "/locales", responses( (status = 200, description = "List of known locales", body = LocalesResponse) ))] -async fn locales(State(state): State) -> Result, Error> { +async fn locales(State(state): State) -> Json { let data = state.locale.read().unwrap(); let locales = data.locales_db.entries().to_vec(); Json(LocalesResponse { locales }) From 3272239942fe7eaa5d837226788a13e5e156445a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Imobach=20Gonz=C3=A1lez=20Sosa?= Date: Fri, 23 Feb 2024 22:07:38 +0000 Subject: [PATCH 16/48] rust: enable HTTP compression --- rust/Cargo.lock | 53 +++++++++++++++++++++++ rust/agama-dbus-server/Cargo.toml | 2 +- rust/agama-dbus-server/src/web/service.rs | 3 +- 3 files changed, 56 insertions(+), 2 deletions(-) diff --git a/rust/Cargo.lock b/rust/Cargo.lock index d79e816f4c..5e55fbc73e 100644 --- a/rust/Cargo.lock +++ b/rust/Cargo.lock @@ -158,6 +158,21 @@ dependencies = [ "memchr", ] +[[package]] +name = "alloc-no-stdlib" +version = "2.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3" + +[[package]] +name = "alloc-stdlib" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94fb8275041c72129eb51b7d0322c29b8387a0386127718b096429201a5d6ece" +dependencies = [ + "alloc-no-stdlib", +] + [[package]] name = "android-tzdata" version = "0.1.1" @@ -250,6 +265,19 @@ dependencies = [ "pin-project-lite", ] +[[package]] +name = "async-compression" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a116f46a969224200a0a97f29cfd4c50e7534e4b4826bd23ea2c3c533039c82c" +dependencies = [ + "brotli", + "futures-core", + "memchr", + "pin-project-lite", + "tokio", +] + [[package]] name = "async-io" version = "1.13.0" @@ -572,6 +600,27 @@ dependencies = [ "tracing", ] +[[package]] +name = "brotli" +version = "3.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "516074a47ef4bce09577a3b379392300159ce5b1ba2e501ff1c819950066100f" +dependencies = [ + "alloc-no-stdlib", + "alloc-stdlib", + "brotli-decompressor", +] + +[[package]] +name = "brotli-decompressor" +version = "2.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e2e4afe60d7dd600fdd3de8d0f08c2b7ec039712e3b6137ff98b7004e82de4f" +dependencies = [ + "alloc-no-stdlib", + "alloc-stdlib", +] + [[package]] name = "bumpalo" version = "3.15.0" @@ -2968,12 +3017,16 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0da193277a4e2c33e59e09b5861580c33dd0a637c3883d0fa74ba40c0374af2e" dependencies = [ + "async-compression", "bitflags 2.4.1", "bytes", + "futures-core", "http", "http-body", "http-body-util", "pin-project-lite", + "tokio", + "tokio-util", "tower-layer", "tower-service", "tracing", diff --git a/rust/agama-dbus-server/Cargo.toml b/rust/agama-dbus-server/Cargo.toml index 85f8753a9e..7ebc2906e7 100644 --- a/rust/agama-dbus-server/Cargo.toml +++ b/rust/agama-dbus-server/Cargo.toml @@ -29,7 +29,7 @@ macaddr = "1.0" async-trait = "0.1.75" axum = { version = "0.7.4", features = ["ws"] } serde_json = "1.0.113" -tower-http = { version = "0.5.1", features = ["trace"] } +tower-http = { version = "0.5.1", features = ["compression-br", "trace"] } tracing-subscriber = "0.3.18" tracing-journald = "0.3.0" tracing = "0.1.40" diff --git a/rust/agama-dbus-server/src/web/service.rs b/rust/agama-dbus-server/src/web/service.rs index 2ee0c1b75f..d2590bc688 100644 --- a/rust/agama-dbus-server/src/web/service.rs +++ b/rust/agama-dbus-server/src/web/service.rs @@ -8,7 +8,7 @@ use axum::{ }; use std::convert::Infallible; use tower::Service; -use tower_http::trace::TraceLayer; +use tower_http::{compression::CompressionLayer, trace::TraceLayer}; pub struct MainServiceBuilder { config: ServiceConfig, @@ -56,6 +56,7 @@ impl MainServiceBuilder { .route("/ping", get(super::http::ping)) .route("/authenticate", post(super::http::authenticate)) .layer(TraceLayer::new_for_http()) + .layer(CompressionLayer::new().br(true)) .with_state(state) } } From f3ca60bf501fb56863d2d209a817fd1b1c30be56 Mon Sep 17 00:00:00 2001 From: YaST Bot Date: Sun, 25 Feb 2024 02:43:51 +0000 Subject: [PATCH 17/48] Update web PO files Agama-weblate commit: 64c273f68ab9d2d489186689f1d744932cb3efc5 --- web/po/cs.po | 353 +++++++++++++++++++++++---------------- web/po/de.po | 350 ++++++++++++++++++++++---------------- web/po/es.po | 432 +++++++++++++++++++++++++++++------------------ web/po/fr.po | 431 +++++++++++++++++++++++++++++------------------ web/po/id.po | 435 ++++++++++++++++++++++++++++++------------------ web/po/ja.po | 419 ++++++++++++++++++++++++++++------------------ web/po/ka.po | 364 ++++++++++++++++++++++++---------------- web/po/mk.po | 350 ++++++++++++++++++++++---------------- web/po/nl.po | 380 +++++++++++++++++++++++++----------------- web/po/pt_BR.po | 362 ++++++++++++++++++++++++---------------- web/po/ru.po | 358 +++++++++++++++++++++++---------------- web/po/sv.po | 425 ++++++++++++++++++++++++++++------------------ web/po/uk.po | 353 +++++++++++++++++++++++---------------- 13 files changed, 3025 insertions(+), 1987 deletions(-) diff --git a/web/po/cs.po b/web/po/cs.po index 9d03f2c337..4257f9c802 100644 --- a/web/po/cs.po +++ b/web/po/cs.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-02-18 02:07+0000\n" +"POT-Creation-Date: 2024-02-25 02:07+0000\n" "PO-Revision-Date: 2023-12-31 20:39+0000\n" "Last-Translator: Ladislav Slezák \n" "Language-Team: Czech LVM " +"Volume Group for installation." +msgstr "" + +#: src/components/storage/ProposalFileSystemsSection.jsx:70 +msgid "File systems" +msgstr "" + +#: src/components/storage/ProposalPageMenu.jsx:40 +msgid "Manage and format" +msgstr "" + +#: src/components/storage/ProposalPageMenu.jsx:58 +msgid "Activate disks" +msgstr "" + +#: src/components/storage/ProposalPageMenu.jsx:60 +msgid "zFCP" +msgstr "" + +#: src/components/storage/ProposalPageMenu.jsx:76 +msgid "Connect to iSCSI targets" +msgstr "" + +#: src/components/storage/ProposalPageMenu.jsx:78 +msgid "iSCSI" +msgstr "" + #. TRANSLATORS: The word 'directly' is key here. For example, booting to the installer media and then choosing #. 'Boot from Hard Disk' from there will not work. Keep it sort (this is a hint in a form) but keep it clear. #. Do not translate 'abbr' and 'title', they are part of the HTML markup. -#: src/components/storage/ProposalSettingsSection.jsx:426 +#: src/components/storage/ProposalSettingsSection.jsx:86 msgid "" "The password will not be needed to boot and access the data if the TPM can verify the integrity of the " @@ -1247,40 +1266,161 @@ msgid "" "first run." msgstr "" -#: src/components/storage/ProposalSettingsSection.jsx:444 +#: src/components/storage/ProposalSettingsSection.jsx:104 msgid "Use the TPM to decrypt automatically on each boot" msgstr "" -#: src/components/storage/ProposalSettingsSection.jsx:515 +#: src/components/storage/ProposalSettingsSection.jsx:175 msgid "Change encryption settings" msgstr "" -#: src/components/storage/ProposalSettingsSection.jsx:520 -#: src/components/storage/ProposalSettingsSection.jsx:541 +#: src/components/storage/ProposalSettingsSection.jsx:180 +#: src/components/storage/ProposalSettingsSection.jsx:201 msgid "Encryption settings" msgstr "" -#: src/components/storage/ProposalSettingsSection.jsx:534 +#: src/components/storage/ProposalSettingsSection.jsx:194 msgid "Use encryption" msgstr "" -#: src/components/storage/ProposalSettingsSection.jsx:621 +#: src/components/storage/ProposalSettingsSection.jsx:244 +msgid "Settings" +msgstr "" + +#: src/components/storage/ProposalSpacePolicySection.jsx:50 +msgid "Delete current content" +msgstr "" + +#: src/components/storage/ProposalSpacePolicySection.jsx:51 +msgid "All partitions will be removed and any data in the disks will be lost." +msgstr "" + +#: src/components/storage/ProposalSpacePolicySection.jsx:55 +msgid "Shrink existing partitions" +msgstr "" + +#: src/components/storage/ProposalSpacePolicySection.jsx:56 +msgid "The data is kept, but the current partitions will be resized as needed." +msgstr "" + +#: src/components/storage/ProposalSpacePolicySection.jsx:60 +msgid "Use available space" +msgstr "" + +#: src/components/storage/ProposalSpacePolicySection.jsx:61 msgid "" -"Select how to make free space in the disks selected for allocating the " -"file systems." +"The data is kept. Only the space not assigned to any partition will be used." msgstr "" -#. TRANSLATORS: To be completed with the rest of a sentence like "deleting all content" -#: src/components/storage/ProposalSettingsSection.jsx:627 -msgid "Find space" +#: src/components/storage/ProposalSpacePolicySection.jsx:65 +msgid "Custom" msgstr "" -#: src/components/storage/ProposalSettingsSection.jsx:631 -msgid "Space Policy" +#: src/components/storage/ProposalSpacePolicySection.jsx:66 +msgid "Select what to do with each partition." msgstr "" -#: src/components/storage/ProposalSettingsSection.jsx:708 -msgid "Settings" +#: src/components/storage/ProposalSpacePolicySection.jsx:72 +msgid "Used device" +msgstr "" + +#: src/components/storage/ProposalSpacePolicySection.jsx:73 +msgid "Current content" +msgstr "" + +#: src/components/storage/ProposalSpacePolicySection.jsx:74 +#: src/components/storage/ProposalVolumes.jsx:309 +#: src/components/storage/VolumeForm.jsx:795 +msgid "Size" +msgstr "" + +#: src/components/storage/ProposalSpacePolicySection.jsx:75 +#: src/components/storage/ProposalVolumes.jsx:308 +msgid "Details" +msgstr "" + +#: src/components/storage/ProposalSpacePolicySection.jsx:76 +msgid "Action" +msgstr "" + +#. TRANSLATORS: %s is replaced by partition table type (e.g., GPT) +#: src/components/storage/ProposalSpacePolicySection.jsx:110 +#, c-format +msgid "%s partition table" +msgstr "" + +#: src/components/storage/ProposalSpacePolicySection.jsx:121 +msgid "EFI system partition" +msgstr "" + +#. TRANSLATORS: %s is replaced by a file system type (e.g., btrfs). +#: src/components/storage/ProposalSpacePolicySection.jsx:124 +#, c-format +msgid "%s file system" +msgstr "" + +#. TRANSLATORS: %s is replaced by a LVM volume group name (e.g., /dev/vg0). +#: src/components/storage/ProposalSpacePolicySection.jsx:131 +#, c-format +msgid "LVM physical volume of %s" +msgstr "" + +#. TRANSLATORS: %s is replaced by a RAID name (e.g., /dev/md0). +#: src/components/storage/ProposalSpacePolicySection.jsx:134 +#, c-format +msgid "Member of RAID %s" +msgstr "" + +#: src/components/storage/ProposalSpacePolicySection.jsx:136 +msgid "Not identified" +msgstr "" + +#. TRANSLATORS: %s is replaced by a disk size (e.g., 20 GiB) +#: src/components/storage/ProposalSpacePolicySection.jsx:173 +#, c-format +msgid "%s unused" +msgstr "" + +#. TRANSLATORS: %s is replaced by a disk size (e.g., 2 GiB) +#: src/components/storage/ProposalSpacePolicySection.jsx:186 +#, c-format +msgid "Shrinkable by %s" +msgstr "" + +#. TRANSLATORS: %s is replaced by a device name (e.g., /dev/sda) +#: src/components/storage/ProposalSpacePolicySection.jsx:221 +#, c-format +msgid "Space action selector for %s" +msgstr "" + +#: src/components/storage/ProposalSpacePolicySection.jsx:224 +#: src/components/storage/ProposalVolumes.jsx:229 +#: src/components/storage/iscsi/NodesPresenter.jsx:77 +msgid "Delete" +msgstr "" + +#: src/components/storage/ProposalSpacePolicySection.jsx:228 +msgid "Allow resize" +msgstr "" + +#: src/components/storage/ProposalSpacePolicySection.jsx:230 +msgid "Do not modify" +msgstr "" + +#: src/components/storage/ProposalSpacePolicySection.jsx:382 +msgid "Actions to find space" +msgstr "" + +#. TRANSLATORS: The storage "Find Space" section's title +#: src/components/storage/ProposalSpacePolicySection.jsx:452 +msgid "Find Space" +msgstr "" + +#. TRANSLATORS: The storage "Find space" sections's description +#: src/components/storage/ProposalSpacePolicySection.jsx:454 +msgid "" +"Allocating the file systems might need to find free space in the devices " +"listed below. Choose how to do it." msgstr "" #. TRANSLATORS: header for a list of items @@ -1349,11 +1489,6 @@ msgstr "" msgid "transactional" msgstr "" -#: src/components/storage/ProposalVolumes.jsx:229 -#: src/components/storage/iscsi/NodesPresenter.jsx:77 -msgid "Delete" -msgstr "" - #: src/components/storage/ProposalVolumes.jsx:275 msgid "Edit file system" msgstr "" @@ -1364,23 +1499,10 @@ msgstr "" msgid "Mount point" msgstr "" -#: src/components/storage/ProposalVolumes.jsx:308 -msgid "Details" -msgstr "" - -#: src/components/storage/ProposalVolumes.jsx:309 -#: src/components/storage/VolumeForm.jsx:795 -msgid "Size" -msgstr "" - #: src/components/storage/ProposalVolumes.jsx:345 msgid "Table with mount points" msgstr "" -#: src/components/storage/ProposalVolumes.jsx:408 -msgid "File systems to create in your system" -msgstr "" - #: src/components/storage/VolumeForm.jsx:102 msgid "Select a value" msgstr "" @@ -1836,71 +1958,6 @@ msgstr "" msgid "Targets" msgstr "" -#. TRANSLATORS: automatic actions to find space for installation in the target disk(s) -#: src/components/storage/space-policy-utils.jsx:45 -msgid "Delete current content" -msgstr "" - -#. TRANSLATORS: automatic actions to find space for installation in the target disk(s) -#: src/components/storage/space-policy-utils.jsx:49 -msgid "Shrink existing partitions" -msgstr "" - -#. TRANSLATORS: automatic actions to find space for installation in the target disk(s) -#: src/components/storage/space-policy-utils.jsx:53 -msgid "Use available space" -msgstr "" - -#: src/components/storage/space-policy-utils.jsx:65 -msgid "All partitions will be removed and any data in the disks will be lost." -msgstr "" - -#: src/components/storage/space-policy-utils.jsx:68 -msgid "" -"The data is kept, but the current partitions will be resized as needed to " -"make enough space." -msgstr "" - -#: src/components/storage/space-policy-utils.jsx:71 -msgid "" -"The data is kept and existing partitions will not be modified. Only the " -"space that is not assigned to any partition will be used." -msgstr "" - -#: src/components/storage/space-policy-utils.jsx:108 -msgid "Select a mechanism to make space" -msgstr "" - -#: src/components/storage/space-policy-utils.jsx:127 -#, c-format -msgid "deleting all content of the installation device" -msgid_plural "deleting all content of the %d selected disks" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" - -#: src/components/storage/space-policy-utils.jsx:137 -#, c-format -msgid "shrinking partitions of the installation device" -msgid_plural "shrinking partitions of the %d selected disks" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" - -#. TRANSLATORS: This is presented next to the label "Find space", so the whole sentence -#. would read as "Find space without modifying any partition". -#: src/components/storage/space-policy-utils.jsx:145 -msgid "without modifying any partition" -msgstr "" - -#: src/components/storage/space-policy-utils.jsx:160 -#, c-format -msgid "This will only affect the installation device" -msgid_plural "This will affect the %d disks selected for installation" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" - #: src/components/storage/utils.js:44 msgid "KiB" msgstr "" diff --git a/web/po/de.po b/web/po/de.po index 261ab6acfd..077d1dc8fc 100644 --- a/web/po/de.po +++ b/web/po/de.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-02-18 02:07+0000\n" +"POT-Creation-Date: 2024-02-25 02:07+0000\n" "PO-Revision-Date: 2023-12-31 20:39+0000\n" "Last-Translator: anonymous \n" "Language-Team: German LVM " +"Volume Group for installation." +msgstr "" + +#: src/components/storage/ProposalFileSystemsSection.jsx:70 +msgid "File systems" +msgstr "" + +#: src/components/storage/ProposalPageMenu.jsx:40 +msgid "Manage and format" +msgstr "" + +#: src/components/storage/ProposalPageMenu.jsx:58 +msgid "Activate disks" +msgstr "" + +#: src/components/storage/ProposalPageMenu.jsx:60 +msgid "zFCP" +msgstr "" + +#: src/components/storage/ProposalPageMenu.jsx:76 +msgid "Connect to iSCSI targets" +msgstr "" + +#: src/components/storage/ProposalPageMenu.jsx:78 +msgid "iSCSI" +msgstr "" + #. TRANSLATORS: The word 'directly' is key here. For example, booting to the installer media and then choosing #. 'Boot from Hard Disk' from there will not work. Keep it sort (this is a hint in a form) but keep it clear. #. Do not translate 'abbr' and 'title', they are part of the HTML markup. -#: src/components/storage/ProposalSettingsSection.jsx:426 +#: src/components/storage/ProposalSettingsSection.jsx:86 msgid "" "The password will not be needed to boot and access the data if the TPM can verify the integrity of the " @@ -1242,40 +1261,161 @@ msgid "" "first run." msgstr "" -#: src/components/storage/ProposalSettingsSection.jsx:444 +#: src/components/storage/ProposalSettingsSection.jsx:104 msgid "Use the TPM to decrypt automatically on each boot" msgstr "" -#: src/components/storage/ProposalSettingsSection.jsx:515 +#: src/components/storage/ProposalSettingsSection.jsx:175 msgid "Change encryption settings" msgstr "" -#: src/components/storage/ProposalSettingsSection.jsx:520 -#: src/components/storage/ProposalSettingsSection.jsx:541 +#: src/components/storage/ProposalSettingsSection.jsx:180 +#: src/components/storage/ProposalSettingsSection.jsx:201 msgid "Encryption settings" msgstr "" -#: src/components/storage/ProposalSettingsSection.jsx:534 +#: src/components/storage/ProposalSettingsSection.jsx:194 msgid "Use encryption" msgstr "" -#: src/components/storage/ProposalSettingsSection.jsx:621 +#: src/components/storage/ProposalSettingsSection.jsx:244 +msgid "Settings" +msgstr "" + +#: src/components/storage/ProposalSpacePolicySection.jsx:50 +msgid "Delete current content" +msgstr "" + +#: src/components/storage/ProposalSpacePolicySection.jsx:51 +msgid "All partitions will be removed and any data in the disks will be lost." +msgstr "" + +#: src/components/storage/ProposalSpacePolicySection.jsx:55 +msgid "Shrink existing partitions" +msgstr "" + +#: src/components/storage/ProposalSpacePolicySection.jsx:56 +msgid "The data is kept, but the current partitions will be resized as needed." +msgstr "" + +#: src/components/storage/ProposalSpacePolicySection.jsx:60 +msgid "Use available space" +msgstr "" + +#: src/components/storage/ProposalSpacePolicySection.jsx:61 msgid "" -"Select how to make free space in the disks selected for allocating the " -"file systems." +"The data is kept. Only the space not assigned to any partition will be used." msgstr "" -#. TRANSLATORS: To be completed with the rest of a sentence like "deleting all content" -#: src/components/storage/ProposalSettingsSection.jsx:627 -msgid "Find space" +#: src/components/storage/ProposalSpacePolicySection.jsx:65 +msgid "Custom" msgstr "" -#: src/components/storage/ProposalSettingsSection.jsx:631 -msgid "Space Policy" +#: src/components/storage/ProposalSpacePolicySection.jsx:66 +msgid "Select what to do with each partition." msgstr "" -#: src/components/storage/ProposalSettingsSection.jsx:708 -msgid "Settings" +#: src/components/storage/ProposalSpacePolicySection.jsx:72 +msgid "Used device" +msgstr "" + +#: src/components/storage/ProposalSpacePolicySection.jsx:73 +msgid "Current content" +msgstr "" + +#: src/components/storage/ProposalSpacePolicySection.jsx:74 +#: src/components/storage/ProposalVolumes.jsx:309 +#: src/components/storage/VolumeForm.jsx:795 +msgid "Size" +msgstr "" + +#: src/components/storage/ProposalSpacePolicySection.jsx:75 +#: src/components/storage/ProposalVolumes.jsx:308 +msgid "Details" +msgstr "" + +#: src/components/storage/ProposalSpacePolicySection.jsx:76 +msgid "Action" +msgstr "" + +#. TRANSLATORS: %s is replaced by partition table type (e.g., GPT) +#: src/components/storage/ProposalSpacePolicySection.jsx:110 +#, c-format +msgid "%s partition table" +msgstr "" + +#: src/components/storage/ProposalSpacePolicySection.jsx:121 +msgid "EFI system partition" +msgstr "" + +#. TRANSLATORS: %s is replaced by a file system type (e.g., btrfs). +#: src/components/storage/ProposalSpacePolicySection.jsx:124 +#, c-format +msgid "%s file system" +msgstr "" + +#. TRANSLATORS: %s is replaced by a LVM volume group name (e.g., /dev/vg0). +#: src/components/storage/ProposalSpacePolicySection.jsx:131 +#, c-format +msgid "LVM physical volume of %s" +msgstr "" + +#. TRANSLATORS: %s is replaced by a RAID name (e.g., /dev/md0). +#: src/components/storage/ProposalSpacePolicySection.jsx:134 +#, c-format +msgid "Member of RAID %s" +msgstr "" + +#: src/components/storage/ProposalSpacePolicySection.jsx:136 +msgid "Not identified" +msgstr "" + +#. TRANSLATORS: %s is replaced by a disk size (e.g., 20 GiB) +#: src/components/storage/ProposalSpacePolicySection.jsx:173 +#, c-format +msgid "%s unused" +msgstr "" + +#. TRANSLATORS: %s is replaced by a disk size (e.g., 2 GiB) +#: src/components/storage/ProposalSpacePolicySection.jsx:186 +#, c-format +msgid "Shrinkable by %s" +msgstr "" + +#. TRANSLATORS: %s is replaced by a device name (e.g., /dev/sda) +#: src/components/storage/ProposalSpacePolicySection.jsx:221 +#, c-format +msgid "Space action selector for %s" +msgstr "" + +#: src/components/storage/ProposalSpacePolicySection.jsx:224 +#: src/components/storage/ProposalVolumes.jsx:229 +#: src/components/storage/iscsi/NodesPresenter.jsx:77 +msgid "Delete" +msgstr "" + +#: src/components/storage/ProposalSpacePolicySection.jsx:228 +msgid "Allow resize" +msgstr "" + +#: src/components/storage/ProposalSpacePolicySection.jsx:230 +msgid "Do not modify" +msgstr "" + +#: src/components/storage/ProposalSpacePolicySection.jsx:382 +msgid "Actions to find space" +msgstr "" + +#. TRANSLATORS: The storage "Find Space" section's title +#: src/components/storage/ProposalSpacePolicySection.jsx:452 +msgid "Find Space" +msgstr "" + +#. TRANSLATORS: The storage "Find space" sections's description +#: src/components/storage/ProposalSpacePolicySection.jsx:454 +msgid "" +"Allocating the file systems might need to find free space in the devices " +"listed below. Choose how to do it." msgstr "" #. TRANSLATORS: header for a list of items @@ -1344,11 +1484,6 @@ msgstr "" msgid "transactional" msgstr "" -#: src/components/storage/ProposalVolumes.jsx:229 -#: src/components/storage/iscsi/NodesPresenter.jsx:77 -msgid "Delete" -msgstr "" - #: src/components/storage/ProposalVolumes.jsx:275 msgid "Edit file system" msgstr "" @@ -1359,23 +1494,10 @@ msgstr "" msgid "Mount point" msgstr "" -#: src/components/storage/ProposalVolumes.jsx:308 -msgid "Details" -msgstr "" - -#: src/components/storage/ProposalVolumes.jsx:309 -#: src/components/storage/VolumeForm.jsx:795 -msgid "Size" -msgstr "" - #: src/components/storage/ProposalVolumes.jsx:345 msgid "Table with mount points" msgstr "" -#: src/components/storage/ProposalVolumes.jsx:408 -msgid "File systems to create in your system" -msgstr "" - #: src/components/storage/VolumeForm.jsx:102 msgid "Select a value" msgstr "" @@ -1831,68 +1953,6 @@ msgstr "" msgid "Targets" msgstr "" -#. TRANSLATORS: automatic actions to find space for installation in the target disk(s) -#: src/components/storage/space-policy-utils.jsx:45 -msgid "Delete current content" -msgstr "" - -#. TRANSLATORS: automatic actions to find space for installation in the target disk(s) -#: src/components/storage/space-policy-utils.jsx:49 -msgid "Shrink existing partitions" -msgstr "" - -#. TRANSLATORS: automatic actions to find space for installation in the target disk(s) -#: src/components/storage/space-policy-utils.jsx:53 -msgid "Use available space" -msgstr "" - -#: src/components/storage/space-policy-utils.jsx:65 -msgid "All partitions will be removed and any data in the disks will be lost." -msgstr "" - -#: src/components/storage/space-policy-utils.jsx:68 -msgid "" -"The data is kept, but the current partitions will be resized as needed to " -"make enough space." -msgstr "" - -#: src/components/storage/space-policy-utils.jsx:71 -msgid "" -"The data is kept and existing partitions will not be modified. Only the " -"space that is not assigned to any partition will be used." -msgstr "" - -#: src/components/storage/space-policy-utils.jsx:108 -msgid "Select a mechanism to make space" -msgstr "" - -#: src/components/storage/space-policy-utils.jsx:127 -#, c-format -msgid "deleting all content of the installation device" -msgid_plural "deleting all content of the %d selected disks" -msgstr[0] "" -msgstr[1] "" - -#: src/components/storage/space-policy-utils.jsx:137 -#, c-format -msgid "shrinking partitions of the installation device" -msgid_plural "shrinking partitions of the %d selected disks" -msgstr[0] "" -msgstr[1] "" - -#. TRANSLATORS: This is presented next to the label "Find space", so the whole sentence -#. would read as "Find space without modifying any partition". -#: src/components/storage/space-policy-utils.jsx:145 -msgid "without modifying any partition" -msgstr "" - -#: src/components/storage/space-policy-utils.jsx:160 -#, c-format -msgid "This will only affect the installation device" -msgid_plural "This will affect the %d disks selected for installation" -msgstr[0] "" -msgstr[1] "" - #: src/components/storage/utils.js:44 msgid "KiB" msgstr "" diff --git a/web/po/es.po b/web/po/es.po index 29b9462cf0..cf07647938 100644 --- a/web/po/es.po +++ b/web/po/es.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-02-18 02:07+0000\n" +"POT-Creation-Date: 2024-02-25 02:07+0000\n" "PO-Revision-Date: 2024-02-09 13:42+0000\n" "Last-Translator: Victor hck \n" "Language-Team: Spanish LVM " +"Volume Group for installation." +msgstr "" + +#: src/components/storage/ProposalFileSystemsSection.jsx:70 +#, fuzzy +msgid "File systems" +msgstr "Tipo de sistema de archivos" + +#: src/components/storage/ProposalPageMenu.jsx:40 +msgid "Manage and format" +msgstr "Administrar y formatear" + +#: src/components/storage/ProposalPageMenu.jsx:58 +msgid "Activate disks" +msgstr "Activar discos" + +#: src/components/storage/ProposalPageMenu.jsx:60 +msgid "zFCP" +msgstr "zFCP" + +#: src/components/storage/ProposalPageMenu.jsx:76 +msgid "Connect to iSCSI targets" +msgstr "Conectar a objetivos iSCSI" + +#: src/components/storage/ProposalPageMenu.jsx:78 +msgid "iSCSI" +msgstr "iSCSI" + #. TRANSLATORS: The word 'directly' is key here. For example, booting to the installer media and then choosing #. 'Boot from Hard Disk' from there will not work. Keep it sort (this is a hint in a form) but keep it clear. #. Do not translate 'abbr' and 'title', they are part of the HTML markup. -#: src/components/storage/ProposalSettingsSection.jsx:426 +#: src/components/storage/ProposalSettingsSection.jsx:86 msgid "" "The password will not be needed to boot and access the data if the TPM can verify the integrity of the " @@ -1286,43 +1307,177 @@ msgstr "" "integridad del sistema. El sellado TPM requiere que el nuevo sistema se " "inicie directamente en su primera ejecución." -#: src/components/storage/ProposalSettingsSection.jsx:444 +#: src/components/storage/ProposalSettingsSection.jsx:104 msgid "Use the TPM to decrypt automatically on each boot" msgstr "Utilice el TPM para descifrar automáticamente en cada arranque" -#: src/components/storage/ProposalSettingsSection.jsx:515 +#: src/components/storage/ProposalSettingsSection.jsx:175 msgid "Change encryption settings" msgstr "Cambiar las configuraciones de cifrado" -#: src/components/storage/ProposalSettingsSection.jsx:520 -#: src/components/storage/ProposalSettingsSection.jsx:541 +#: src/components/storage/ProposalSettingsSection.jsx:180 +#: src/components/storage/ProposalSettingsSection.jsx:201 msgid "Encryption settings" msgstr "Configuraciones del cifrado" -#: src/components/storage/ProposalSettingsSection.jsx:534 +#: src/components/storage/ProposalSettingsSection.jsx:194 msgid "Use encryption" msgstr "Usar cifrado" -#: src/components/storage/ProposalSettingsSection.jsx:621 +#: src/components/storage/ProposalSettingsSection.jsx:244 +msgid "Settings" +msgstr "Ajustes" + +#: src/components/storage/ProposalSpacePolicySection.jsx:50 +msgid "Delete current content" +msgstr "Eliminar el contenido actual" + +#: src/components/storage/ProposalSpacePolicySection.jsx:51 +msgid "All partitions will be removed and any data in the disks will be lost." +msgstr "" +"Se eliminarán todas las particiones y se perderán todos los datos de los " +"discos." + +#: src/components/storage/ProposalSpacePolicySection.jsx:55 +msgid "Shrink existing partitions" +msgstr "Reducir las particiones existentes" + +#: src/components/storage/ProposalSpacePolicySection.jsx:56 +#, fuzzy +msgid "The data is kept, but the current partitions will be resized as needed." +msgstr "" +"Los datos se conservan, pero las particiones actuales cambiarán de tamaño " +"según sea necesario para crear espacio suficiente." + +#: src/components/storage/ProposalSpacePolicySection.jsx:60 +msgid "Use available space" +msgstr "Utilice el espacio disponible" + +#: src/components/storage/ProposalSpacePolicySection.jsx:61 +#, fuzzy msgid "" -"Select how to make free space in the disks selected for allocating the " -"file systems." +"The data is kept. Only the space not assigned to any partition will be used." msgstr "" -"Seleccione cómo liberar espacio en los discos seleccionados para asignar los " -"sistemas de archivos." +"Los datos se conservan y las particiones existentes no se modificarán. Sólo " +"se utilizará el espacio que no esté asignado a ninguna partición." -#. TRANSLATORS: To be completed with the rest of a sentence like "deleting all content" -#: src/components/storage/ProposalSettingsSection.jsx:627 -msgid "Find space" -msgstr "Encontrar espacio" +#: src/components/storage/ProposalSpacePolicySection.jsx:65 +#, fuzzy +msgid "Custom" +msgstr "Dispositivos personalizados" -#: src/components/storage/ProposalSettingsSection.jsx:631 -msgid "Space Policy" -msgstr "Política de espacio" +#: src/components/storage/ProposalSpacePolicySection.jsx:66 +msgid "Select what to do with each partition." +msgstr "" -#: src/components/storage/ProposalSettingsSection.jsx:708 -msgid "Settings" -msgstr "Ajustes" +#: src/components/storage/ProposalSpacePolicySection.jsx:72 +#, fuzzy +msgid "Used device" +msgstr "Leer dispositivos zFCP" + +#: src/components/storage/ProposalSpacePolicySection.jsx:73 +#, fuzzy +msgid "Current content" +msgstr "Eliminar el contenido actual" + +#: src/components/storage/ProposalSpacePolicySection.jsx:74 +#: src/components/storage/ProposalVolumes.jsx:309 +#: src/components/storage/VolumeForm.jsx:795 +msgid "Size" +msgstr "Tamaño" + +#: src/components/storage/ProposalSpacePolicySection.jsx:75 +#: src/components/storage/ProposalVolumes.jsx:308 +msgid "Details" +msgstr "Detalles" + +#: src/components/storage/ProposalSpacePolicySection.jsx:76 +#, fuzzy +msgid "Action" +msgstr "Acciones" + +#. TRANSLATORS: %s is replaced by partition table type (e.g., GPT) +#: src/components/storage/ProposalSpacePolicySection.jsx:110 +#, fuzzy, c-format +msgid "%s partition table" +msgstr "partición" + +#: src/components/storage/ProposalSpacePolicySection.jsx:121 +#, fuzzy +msgid "EFI system partition" +msgstr "partición" + +#. TRANSLATORS: %s is replaced by a file system type (e.g., btrfs). +#: src/components/storage/ProposalSpacePolicySection.jsx:124 +#, fuzzy, c-format +msgid "%s file system" +msgstr "Agregar sistema de archivos" + +#. TRANSLATORS: %s is replaced by a LVM volume group name (e.g., /dev/vg0). +#: src/components/storage/ProposalSpacePolicySection.jsx:131 +#, c-format +msgid "LVM physical volume of %s" +msgstr "" + +#. TRANSLATORS: %s is replaced by a RAID name (e.g., /dev/md0). +#: src/components/storage/ProposalSpacePolicySection.jsx:134 +#, fuzzy, c-format +msgid "Member of RAID %s" +msgstr "Miembros: %s" + +#: src/components/storage/ProposalSpacePolicySection.jsx:136 +msgid "Not identified" +msgstr "" + +#. TRANSLATORS: %s is replaced by a disk size (e.g., 20 GiB) +#: src/components/storage/ProposalSpacePolicySection.jsx:173 +#, c-format +msgid "%s unused" +msgstr "" + +#. TRANSLATORS: %s is replaced by a disk size (e.g., 2 GiB) +#: src/components/storage/ProposalSpacePolicySection.jsx:186 +#, c-format +msgid "Shrinkable by %s" +msgstr "" + +#. TRANSLATORS: %s is replaced by a device name (e.g., /dev/sda) +#: src/components/storage/ProposalSpacePolicySection.jsx:221 +#, c-format +msgid "Space action selector for %s" +msgstr "" + +#: src/components/storage/ProposalSpacePolicySection.jsx:224 +#: src/components/storage/ProposalVolumes.jsx:229 +#: src/components/storage/iscsi/NodesPresenter.jsx:77 +msgid "Delete" +msgstr "Eliminar" + +#: src/components/storage/ProposalSpacePolicySection.jsx:228 +msgid "Allow resize" +msgstr "" + +#: src/components/storage/ProposalSpacePolicySection.jsx:230 +msgid "Do not modify" +msgstr "" + +#: src/components/storage/ProposalSpacePolicySection.jsx:382 +#, fuzzy +msgid "Actions to find space" +msgstr "Acciones para la conexión %s" + +#. TRANSLATORS: The storage "Find Space" section's title +#: src/components/storage/ProposalSpacePolicySection.jsx:452 +#, fuzzy +msgid "Find Space" +msgstr "Encontrar espacio" + +#. TRANSLATORS: The storage "Find space" sections's description +#: src/components/storage/ProposalSpacePolicySection.jsx:454 +msgid "" +"Allocating the file systems might need to find free space in the devices " +"listed below. Choose how to do it." +msgstr "" #. TRANSLATORS: header for a list of items #: src/components/storage/ProposalVolumes.jsx:59 @@ -1390,11 +1545,6 @@ msgstr "con instantáneas" msgid "transactional" msgstr "transaccional" -#: src/components/storage/ProposalVolumes.jsx:229 -#: src/components/storage/iscsi/NodesPresenter.jsx:77 -msgid "Delete" -msgstr "Eliminar" - #: src/components/storage/ProposalVolumes.jsx:275 msgid "Edit file system" msgstr "Editar sistema de archivos" @@ -1405,23 +1555,10 @@ msgstr "Editar sistema de archivos" msgid "Mount point" msgstr "Punto de montaje" -#: src/components/storage/ProposalVolumes.jsx:308 -msgid "Details" -msgstr "Detalles" - -#: src/components/storage/ProposalVolumes.jsx:309 -#: src/components/storage/VolumeForm.jsx:795 -msgid "Size" -msgstr "Tamaño" - #: src/components/storage/ProposalVolumes.jsx:345 msgid "Table with mount points" msgstr "Tabla con puntos de montaje" -#: src/components/storage/ProposalVolumes.jsx:408 -msgid "File systems to create in your system" -msgstr "Sistemas de archivos para crear en su sistema" - #: src/components/storage/VolumeForm.jsx:102 msgid "Select a value" msgstr "Seleccionar un valor" @@ -1890,75 +2027,6 @@ msgstr "Descubrir" msgid "Targets" msgstr "Objetivos" -#. TRANSLATORS: automatic actions to find space for installation in the target disk(s) -#: src/components/storage/space-policy-utils.jsx:45 -msgid "Delete current content" -msgstr "Eliminar el contenido actual" - -#. TRANSLATORS: automatic actions to find space for installation in the target disk(s) -#: src/components/storage/space-policy-utils.jsx:49 -msgid "Shrink existing partitions" -msgstr "Reducir las particiones existentes" - -#. TRANSLATORS: automatic actions to find space for installation in the target disk(s) -#: src/components/storage/space-policy-utils.jsx:53 -msgid "Use available space" -msgstr "Utilice el espacio disponible" - -#: src/components/storage/space-policy-utils.jsx:65 -msgid "All partitions will be removed and any data in the disks will be lost." -msgstr "" -"Se eliminarán todas las particiones y se perderán todos los datos de los " -"discos." - -#: src/components/storage/space-policy-utils.jsx:68 -msgid "" -"The data is kept, but the current partitions will be resized as needed to " -"make enough space." -msgstr "" -"Los datos se conservan, pero las particiones actuales cambiarán de tamaño " -"según sea necesario para crear espacio suficiente." - -#: src/components/storage/space-policy-utils.jsx:71 -msgid "" -"The data is kept and existing partitions will not be modified. Only the " -"space that is not assigned to any partition will be used." -msgstr "" -"Los datos se conservan y las particiones existentes no se modificarán. Sólo " -"se utilizará el espacio que no esté asignado a ninguna partición." - -#: src/components/storage/space-policy-utils.jsx:108 -msgid "Select a mechanism to make space" -msgstr "Seleccione un mecanismo para hacer espacio" - -#: src/components/storage/space-policy-utils.jsx:127 -#, c-format -msgid "deleting all content of the installation device" -msgid_plural "deleting all content of the %d selected disks" -msgstr[0] "eliminar todo el contenido del dispositivo de instalación" -msgstr[1] "eliminar todo el contenido de los %d discos seleccionados" - -#: src/components/storage/space-policy-utils.jsx:137 -#, c-format -msgid "shrinking partitions of the installation device" -msgid_plural "shrinking partitions of the %d selected disks" -msgstr[0] "Reduccir las particiones del dispositivo de instalación" -msgstr[1] "Reduccir las particiones de los %d discos seleccionados" - -#. TRANSLATORS: This is presented next to the label "Find space", so the whole sentence -#. would read as "Find space without modifying any partition". -#: src/components/storage/space-policy-utils.jsx:145 -msgid "without modifying any partition" -msgstr "sin modificar ninguna partición" - -#: src/components/storage/space-policy-utils.jsx:160 -#, c-format -msgid "This will only affect the installation device" -msgid_plural "This will affect the %d disks selected for installation" -msgstr[0] "Esto sólo afectará al dispositivo de instalación" -msgstr[1] "" -"Esto sólo afectará a los %d discos seleccionados para la instalación" - #: src/components/storage/utils.js:44 msgid "KiB" msgstr "KB" @@ -2140,6 +2208,48 @@ msgstr "Usuario" msgid "Root authentication" msgstr "Autenticación de root" +#~ msgid "Devices will not be modified until installation starts." +#~ msgstr "" +#~ "Los dispositivos no se modificarán hasta que comience la instalación." + +#~ msgid "File systems to create in your system" +#~ msgstr "Sistemas de archivos para crear en su sistema" + +#~ msgid "" +#~ "Select how to make free space in the disks selected for allocating " +#~ "the file systems." +#~ msgstr "" +#~ "Seleccione cómo liberar espacio en los discos seleccionados para asignar " +#~ "los sistemas de archivos." + +#~ msgid "Space Policy" +#~ msgstr "Política de espacio" + +#~ msgid "Select a mechanism to make space" +#~ msgstr "Seleccione un mecanismo para hacer espacio" + +#, c-format +#~ msgid "deleting all content of the installation device" +#~ msgid_plural "deleting all content of the %d selected disks" +#~ msgstr[0] "eliminar todo el contenido del dispositivo de instalación" +#~ msgstr[1] "eliminar todo el contenido de los %d discos seleccionados" + +#, c-format +#~ msgid "shrinking partitions of the installation device" +#~ msgid_plural "shrinking partitions of the %d selected disks" +#~ msgstr[0] "Reduccir las particiones del dispositivo de instalación" +#~ msgstr[1] "Reduccir las particiones de los %d discos seleccionados" + +#~ msgid "without modifying any partition" +#~ msgstr "sin modificar ninguna partición" + +#, c-format +#~ msgid "This will only affect the installation device" +#~ msgid_plural "This will affect the %d disks selected for installation" +#~ msgstr[0] "Esto sólo afectará al dispositivo de instalación" +#~ msgstr[1] "" +#~ "Esto sólo afectará a los %d discos seleccionados para la instalación" + #, c-format #~ msgid "Edit %s connection" #~ msgstr "Editar %s conexión" diff --git a/web/po/fr.po b/web/po/fr.po index 5b2cca83da..16590e40d9 100644 --- a/web/po/fr.po +++ b/web/po/fr.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-02-18 02:07+0000\n" +"POT-Creation-Date: 2024-02-25 02:07+0000\n" "PO-Revision-Date: 2024-01-23 12:59+0000\n" "Last-Translator: faila fail \n" "Language-Team: French LVM " +"Volume Group for installation." +msgstr "" + +#: src/components/storage/ProposalFileSystemsSection.jsx:70 +#, fuzzy +msgid "File systems" +msgstr "Type de système de fichiers" + +#: src/components/storage/ProposalPageMenu.jsx:40 +msgid "Manage and format" +msgstr "Gérer et formater" + +#: src/components/storage/ProposalPageMenu.jsx:58 +msgid "Activate disks" +msgstr "Activer les disques" + +#: src/components/storage/ProposalPageMenu.jsx:60 +msgid "zFCP" +msgstr "zFCP" + +#: src/components/storage/ProposalPageMenu.jsx:76 +msgid "Connect to iSCSI targets" +msgstr "Se connecter aux cibles iSCSI" + +#: src/components/storage/ProposalPageMenu.jsx:78 +msgid "iSCSI" +msgstr "iSCSI" + #. TRANSLATORS: The word 'directly' is key here. For example, booting to the installer media and then choosing #. 'Boot from Hard Disk' from there will not work. Keep it sort (this is a hint in a form) but keep it clear. #. Do not translate 'abbr' and 'title', they are part of the HTML markup. -#: src/components/storage/ProposalSettingsSection.jsx:426 +#: src/components/storage/ProposalSettingsSection.jsx:86 msgid "" "The password will not be needed to boot and access the data if the TPM can verify the integrity of the " @@ -1301,44 +1320,177 @@ msgstr "" "l'intégrité du système. Le scellement par TPM exige que le nouveau système " "soit démarré directement lors de sa première exécution." -#: src/components/storage/ProposalSettingsSection.jsx:444 +#: src/components/storage/ProposalSettingsSection.jsx:104 msgid "Use the TPM to decrypt automatically on each boot" msgstr "Utiliser le TPM pour décrypter automatiquement à chaque démarrage" -#: src/components/storage/ProposalSettingsSection.jsx:515 +#: src/components/storage/ProposalSettingsSection.jsx:175 msgid "Change encryption settings" msgstr "Modifier les paramètres de chiffrement" -#: src/components/storage/ProposalSettingsSection.jsx:520 -#: src/components/storage/ProposalSettingsSection.jsx:541 +#: src/components/storage/ProposalSettingsSection.jsx:180 +#: src/components/storage/ProposalSettingsSection.jsx:201 msgid "Encryption settings" msgstr "Paramètres de chiffrement" -#: src/components/storage/ProposalSettingsSection.jsx:534 +#: src/components/storage/ProposalSettingsSection.jsx:194 msgid "Use encryption" msgstr "Utiliser le chiffrement" -#: src/components/storage/ProposalSettingsSection.jsx:621 +#: src/components/storage/ProposalSettingsSection.jsx:244 +msgid "Settings" +msgstr "Paramètres" + +#: src/components/storage/ProposalSpacePolicySection.jsx:50 +msgid "Delete current content" +msgstr "Supprimer le contenu actuel" + +#: src/components/storage/ProposalSpacePolicySection.jsx:51 +msgid "All partitions will be removed and any data in the disks will be lost." +msgstr "" +"Toutes les partitions seront supprimées et toutes les données contenues dans " +"les disques seront perdues." + +#: src/components/storage/ProposalSpacePolicySection.jsx:55 +msgid "Shrink existing partitions" +msgstr "Réduire les partitions existantes" + +#: src/components/storage/ProposalSpacePolicySection.jsx:56 +#, fuzzy +msgid "The data is kept, but the current partitions will be resized as needed." +msgstr "" +"Les données sont conservées, mais les partitions actuelles seront " +"redimensionnées si nécessaire pour libérer de l'espace." + +#: src/components/storage/ProposalSpacePolicySection.jsx:60 +msgid "Use available space" +msgstr "Utiliser l'espace disponible" + +#: src/components/storage/ProposalSpacePolicySection.jsx:61 +#, fuzzy msgid "" -"Select how to make free space in the disks selected for allocating the " -"file systems." +"The data is kept. Only the space not assigned to any partition will be used." msgstr "" -"Sélectionnez la manière de libérer de l'espace sur les disques sélectionnés " -"pour l'allocation des systèmes de fichiers." +"Les données sont conservées et les partitions existantes ne seront pas " +"modifiées. Seul l'espace qui n'est attribué à aucune partition sera utilisé." -#. TRANSLATORS: To be completed with the rest of a sentence like "deleting all content" -#: src/components/storage/ProposalSettingsSection.jsx:627 -msgid "Find space" -msgstr "Trouver de l'espace" +#: src/components/storage/ProposalSpacePolicySection.jsx:65 +#, fuzzy +msgid "Custom" +msgstr "Périphériques personnalisés" -#: src/components/storage/ProposalSettingsSection.jsx:631 +#: src/components/storage/ProposalSpacePolicySection.jsx:66 +msgid "Select what to do with each partition." +msgstr "" + +#: src/components/storage/ProposalSpacePolicySection.jsx:72 #, fuzzy -msgid "Space Policy" -msgstr "Politique sur l'espace" +msgid "Used device" +msgstr "Lire les périphériques zFCP" -#: src/components/storage/ProposalSettingsSection.jsx:708 -msgid "Settings" -msgstr "Paramètres" +#: src/components/storage/ProposalSpacePolicySection.jsx:73 +#, fuzzy +msgid "Current content" +msgstr "Supprimer le contenu actuel" + +#: src/components/storage/ProposalSpacePolicySection.jsx:74 +#: src/components/storage/ProposalVolumes.jsx:309 +#: src/components/storage/VolumeForm.jsx:795 +msgid "Size" +msgstr "Taille" + +#: src/components/storage/ProposalSpacePolicySection.jsx:75 +#: src/components/storage/ProposalVolumes.jsx:308 +msgid "Details" +msgstr "Détails" + +#: src/components/storage/ProposalSpacePolicySection.jsx:76 +#, fuzzy +msgid "Action" +msgstr "Actions" + +#. TRANSLATORS: %s is replaced by partition table type (e.g., GPT) +#: src/components/storage/ProposalSpacePolicySection.jsx:110 +#, fuzzy, c-format +msgid "%s partition table" +msgstr "partition" + +#: src/components/storage/ProposalSpacePolicySection.jsx:121 +#, fuzzy +msgid "EFI system partition" +msgstr "partition" + +#. TRANSLATORS: %s is replaced by a file system type (e.g., btrfs). +#: src/components/storage/ProposalSpacePolicySection.jsx:124 +#, fuzzy, c-format +msgid "%s file system" +msgstr "Ajouter un système de fichiers" + +#. TRANSLATORS: %s is replaced by a LVM volume group name (e.g., /dev/vg0). +#: src/components/storage/ProposalSpacePolicySection.jsx:131 +#, c-format +msgid "LVM physical volume of %s" +msgstr "" + +#. TRANSLATORS: %s is replaced by a RAID name (e.g., /dev/md0). +#: src/components/storage/ProposalSpacePolicySection.jsx:134 +#, fuzzy, c-format +msgid "Member of RAID %s" +msgstr "Membres : %s" + +#: src/components/storage/ProposalSpacePolicySection.jsx:136 +msgid "Not identified" +msgstr "" + +#. TRANSLATORS: %s is replaced by a disk size (e.g., 20 GiB) +#: src/components/storage/ProposalSpacePolicySection.jsx:173 +#, c-format +msgid "%s unused" +msgstr "" + +#. TRANSLATORS: %s is replaced by a disk size (e.g., 2 GiB) +#: src/components/storage/ProposalSpacePolicySection.jsx:186 +#, c-format +msgid "Shrinkable by %s" +msgstr "" + +#. TRANSLATORS: %s is replaced by a device name (e.g., /dev/sda) +#: src/components/storage/ProposalSpacePolicySection.jsx:221 +#, c-format +msgid "Space action selector for %s" +msgstr "" + +#: src/components/storage/ProposalSpacePolicySection.jsx:224 +#: src/components/storage/ProposalVolumes.jsx:229 +#: src/components/storage/iscsi/NodesPresenter.jsx:77 +msgid "Delete" +msgstr "Supprimer" + +#: src/components/storage/ProposalSpacePolicySection.jsx:228 +msgid "Allow resize" +msgstr "" + +#: src/components/storage/ProposalSpacePolicySection.jsx:230 +msgid "Do not modify" +msgstr "" + +#: src/components/storage/ProposalSpacePolicySection.jsx:382 +#, fuzzy +msgid "Actions to find space" +msgstr "Actions concernant la connexion %s" + +#. TRANSLATORS: The storage "Find Space" section's title +#: src/components/storage/ProposalSpacePolicySection.jsx:452 +#, fuzzy +msgid "Find Space" +msgstr "Trouver de l'espace" + +#. TRANSLATORS: The storage "Find space" sections's description +#: src/components/storage/ProposalSpacePolicySection.jsx:454 +msgid "" +"Allocating the file systems might need to find free space in the devices " +"listed below. Choose how to do it." +msgstr "" #. TRANSLATORS: header for a list of items #: src/components/storage/ProposalVolumes.jsx:59 @@ -1406,11 +1558,6 @@ msgstr "avec des clichés" msgid "transactional" msgstr "transactionnel" -#: src/components/storage/ProposalVolumes.jsx:229 -#: src/components/storage/iscsi/NodesPresenter.jsx:77 -msgid "Delete" -msgstr "Supprimer" - #: src/components/storage/ProposalVolumes.jsx:275 msgid "Edit file system" msgstr "Modifier le système de fichiers" @@ -1421,23 +1568,10 @@ msgstr "Modifier le système de fichiers" msgid "Mount point" msgstr "Point de montage" -#: src/components/storage/ProposalVolumes.jsx:308 -msgid "Details" -msgstr "Détails" - -#: src/components/storage/ProposalVolumes.jsx:309 -#: src/components/storage/VolumeForm.jsx:795 -msgid "Size" -msgstr "Taille" - #: src/components/storage/ProposalVolumes.jsx:345 msgid "Table with mount points" msgstr "Table avec points de montage" -#: src/components/storage/ProposalVolumes.jsx:408 -msgid "File systems to create in your system" -msgstr "Systèmes de fichiers à créer dans votre système" - #: src/components/storage/VolumeForm.jsx:102 msgid "Select a value" msgstr "Sélectionner une valeur" @@ -1907,74 +2041,6 @@ msgstr "Découvrir" msgid "Targets" msgstr "Cibles" -#. TRANSLATORS: automatic actions to find space for installation in the target disk(s) -#: src/components/storage/space-policy-utils.jsx:45 -msgid "Delete current content" -msgstr "Supprimer le contenu actuel" - -#. TRANSLATORS: automatic actions to find space for installation in the target disk(s) -#: src/components/storage/space-policy-utils.jsx:49 -msgid "Shrink existing partitions" -msgstr "Réduire les partitions existantes" - -#. TRANSLATORS: automatic actions to find space for installation in the target disk(s) -#: src/components/storage/space-policy-utils.jsx:53 -msgid "Use available space" -msgstr "Utiliser l'espace disponible" - -#: src/components/storage/space-policy-utils.jsx:65 -msgid "All partitions will be removed and any data in the disks will be lost." -msgstr "" -"Toutes les partitions seront supprimées et toutes les données contenues dans " -"les disques seront perdues." - -#: src/components/storage/space-policy-utils.jsx:68 -msgid "" -"The data is kept, but the current partitions will be resized as needed to " -"make enough space." -msgstr "" -"Les données sont conservées, mais les partitions actuelles seront " -"redimensionnées si nécessaire pour libérer de l'espace." - -#: src/components/storage/space-policy-utils.jsx:71 -msgid "" -"The data is kept and existing partitions will not be modified. Only the " -"space that is not assigned to any partition will be used." -msgstr "" -"Les données sont conservées et les partitions existantes ne seront pas " -"modifiées. Seul l'espace qui n'est attribué à aucune partition sera utilisé." - -#: src/components/storage/space-policy-utils.jsx:108 -msgid "Select a mechanism to make space" -msgstr "Sélectionner un mécanisme pour faire de la place" - -#: src/components/storage/space-policy-utils.jsx:127 -#, c-format -msgid "deleting all content of the installation device" -msgid_plural "deleting all content of the %d selected disks" -msgstr[0] "suppression de tout le contenu du périphérique d'installation" -msgstr[1] "suppression de tout le contenu des %d disques sélectionnés" - -#: src/components/storage/space-policy-utils.jsx:137 -#, c-format -msgid "shrinking partitions of the installation device" -msgid_plural "shrinking partitions of the %d selected disks" -msgstr[0] "réduction des partitions du périphérique d'installation" -msgstr[1] "réduction des partitions des %d disques sélectionnés" - -#. TRANSLATORS: This is presented next to the label "Find space", so the whole sentence -#. would read as "Find space without modifying any partition". -#: src/components/storage/space-policy-utils.jsx:145 -msgid "without modifying any partition" -msgstr "sans modifier aucune partition" - -#: src/components/storage/space-policy-utils.jsx:160 -#, c-format -msgid "This will only affect the installation device" -msgid_plural "This will affect the %d disks selected for installation" -msgstr[0] "Cela n'affectera que le périphérique d'installation" -msgstr[1] "Cela affectera les %d disques sélectionnés pour l'installation" - #: src/components/storage/utils.js:44 msgid "KiB" msgstr "KiB" @@ -2156,6 +2222,49 @@ msgstr "Utilisateur" msgid "Root authentication" msgstr "Authentification root" +#~ msgid "Devices will not be modified until installation starts." +#~ msgstr "" +#~ "Les périphériques ne seront pas modifiés tant que l'installation n'aura " +#~ "pas commencé." + +#~ msgid "File systems to create in your system" +#~ msgstr "Systèmes de fichiers à créer dans votre système" + +#~ msgid "" +#~ "Select how to make free space in the disks selected for allocating " +#~ "the file systems." +#~ msgstr "" +#~ "Sélectionnez la manière de libérer de l'espace sur les disques " +#~ "sélectionnés pour l'allocation des systèmes de fichiers." + +#, fuzzy +#~ msgid "Space Policy" +#~ msgstr "Politique sur l'espace" + +#~ msgid "Select a mechanism to make space" +#~ msgstr "Sélectionner un mécanisme pour faire de la place" + +#, c-format +#~ msgid "deleting all content of the installation device" +#~ msgid_plural "deleting all content of the %d selected disks" +#~ msgstr[0] "suppression de tout le contenu du périphérique d'installation" +#~ msgstr[1] "suppression de tout le contenu des %d disques sélectionnés" + +#, c-format +#~ msgid "shrinking partitions of the installation device" +#~ msgid_plural "shrinking partitions of the %d selected disks" +#~ msgstr[0] "réduction des partitions du périphérique d'installation" +#~ msgstr[1] "réduction des partitions des %d disques sélectionnés" + +#~ msgid "without modifying any partition" +#~ msgstr "sans modifier aucune partition" + +#, c-format +#~ msgid "This will only affect the installation device" +#~ msgid_plural "This will affect the %d disks selected for installation" +#~ msgstr[0] "Cela n'affectera que le périphérique d'installation" +#~ msgstr[1] "Cela affectera les %d disques sélectionnés pour l'installation" + #, c-format #~ msgid "Edit %s connection" #~ msgstr "Modifier la connexion %s" diff --git a/web/po/id.po b/web/po/id.po index 5681c76990..b31b978f88 100644 --- a/web/po/id.po +++ b/web/po/id.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-02-18 02:07+0000\n" -"PO-Revision-Date: 2024-01-12 18:59+0000\n" +"POT-Creation-Date: 2024-02-25 02:07+0000\n" +"PO-Revision-Date: 2024-02-21 04:42+0000\n" "Last-Translator: Arif Budiman \n" "Language-Team: Indonesian \n" @@ -155,10 +155,9 @@ msgstr "" #: src/components/product/ProductPage.jsx:71 #: src/components/product/ProductPage.jsx:140 #: src/components/product/ProductPage.jsx:207 -#: src/components/storage/ProposalSettingsSection.jsx:172 -#: src/components/storage/ProposalSettingsSection.jsx:367 -#: src/components/storage/ProposalSettingsSection.jsx:551 -#: src/components/storage/ProposalSettingsSection.jsx:647 +#: src/components/storage/ProposalDeviceSection.jsx:169 +#: src/components/storage/ProposalDeviceSection.jsx:364 +#: src/components/storage/ProposalSettingsSection.jsx:211 #: src/components/storage/ProposalVolumes.jsx:148 #: src/components/storage/ProposalVolumes.jsx:283 #: src/components/storage/ZFCPPage.jsx:511 @@ -172,22 +171,23 @@ msgstr "Instal" #: src/components/core/InstallationFinished.jsx:41 msgid "TPM sealing requires the new system to be booted directly." -msgstr "" +msgstr "Penyegelan TPM mengharuskan sistem baru untuk di-boot secara langsung." #: src/components/core/InstallationFinished.jsx:46 msgid "" "If a local media was used to run this installer, remove it before the next " "boot." msgstr "" +"Jika media lokal digunakan untuk menjalankan penginstalasi ini, hapus media " +"tersebut sebelum boot berikutnya." #: src/components/core/InstallationFinished.jsx:50 -#, fuzzy msgid "Hide details" -msgstr "Detail" +msgstr "Sembunyikan detail" #: src/components/core/InstallationFinished.jsx:50 msgid "See more details" -msgstr "" +msgstr "Lihat detail lebih lanjut" #. TRANSLATORS: Do not translate 'abbr' and 'title', they are part of the HTML markup #: src/components/core/InstallationFinished.jsx:55 @@ -197,6 +197,10 @@ msgid "" "first boot of the new system. For that to work, the machine needs to boot " "directly to the new boot loader." msgstr "" +"Langkah terakhir untuk mengonfigurasi TPM agar secara otomatis membuka perangkat yang dienkripsi " +"akan dilakukan pada saat booting pertama dari sistem yang baru. Agar dapat " +"berfungsi, mesin harus melakukan booting langsung ke boot loader yang baru." #. TRANSLATORS: page title #: src/components/core/InstallationFinished.jsx:88 @@ -824,7 +828,7 @@ msgid "Software" msgstr "Perangkat lunak" #: src/components/overview/StorageSection.jsx:42 -#: src/components/storage/ProposalSettingsSection.jsx:132 +#: src/components/storage/ProposalDeviceSection.jsx:129 msgid "No device selected yet" msgstr "Belum ada perangkat yang dipilih" @@ -864,7 +868,7 @@ msgstr "Memeriksa perangkat penyimpanan" #. TRANSLATORS: page title #. TRANSLATORS: page section title #: src/components/overview/StorageSection.jsx:208 -#: src/components/storage/ProposalPage.jsx:232 +#: src/components/storage/ProposalPage.jsx:239 msgid "Storage" msgstr "Penyimpanan" @@ -992,9 +996,8 @@ msgid "No products available for selection" msgstr "Tidak ada produk yang tersedia untuk dipilih" #: src/components/product/ProductSelector.jsx:42 -#, fuzzy msgid "Available products" -msgstr "Lokal yang tersedia" +msgstr "Produk yang tersedia" #: src/components/questions/GenericQuestion.jsx:35 #: src/components/questions/LuksActivationQuestion.jsx:60 @@ -1084,7 +1087,9 @@ msgstr "ID saluran" msgid "Status" msgstr "Status" +#. TRANSLATORS: The storage "Device" section's title #: src/components/storage/DASDTable.jsx:66 +#: src/components/storage/ProposalDeviceSection.jsx:423 msgid "Device" msgstr "Perangkat" @@ -1160,77 +1165,60 @@ msgid "Storage iSCSI" msgstr "Penyimpanan iSCSI" #. TRANSLATORS: show/hide toggle action, this is a clickable link -#: src/components/storage/ProposalActionsSection.jsx:71 +#: src/components/storage/ProposalActionsSection.jsx:70 #, c-format msgid "Hide %d subvolume action" msgid_plural "Hide %d subvolume actions" msgstr[0] "Menyembunyikan tindakan subvolume %d" #. TRANSLATORS: show/hide toggle action, this is a clickable link -#: src/components/storage/ProposalActionsSection.jsx:73 +#: src/components/storage/ProposalActionsSection.jsx:72 #, c-format msgid "Show %d subvolume action" msgid_plural "Show %d subvolume actions" msgstr[0] "Tampilkan tindakan subvolume %d" -#: src/components/storage/ProposalActionsSection.jsx:78 -msgid "Actions to create the file systems and to ensure the system boots." -msgstr "" -"Tindakan untuk membuat sistem berkas dan memastikan sistem melakukan booting." - -#. TRANSLATORS: section title, list of planned actions for the selected device, -#. e.g. "delete partition A", "create partition B with filesystem C", ... -#: src/components/storage/ProposalActionsSection.jsx:126 +#. TRANSLATORS: The storage "Planned Actions" section's title. The +#. section shows a list of planned actions for the selected device, e.g. +#. "delete partition A", "create partition B with filesystem C", ... +#: src/components/storage/ProposalActionsSection.jsx:124 msgid "Planned Actions" msgstr "Tindakan yang Direncanakan" -#: src/components/storage/ProposalPage.jsx:211 -msgid "Devices will not be modified until installation starts." -msgstr "Perangkat tidak akan dimodifikasi hingga penginstalan dimulai." - -#: src/components/storage/ProposalPageMenu.jsx:40 -msgid "Manage and format" -msgstr "Mengelola dan memformat" - -#: src/components/storage/ProposalPageMenu.jsx:58 -msgid "Activate disks" -msgstr "Mengaktifkan disk" - -#: src/components/storage/ProposalPageMenu.jsx:60 -msgid "zFCP" -msgstr "zFCP" - -#: src/components/storage/ProposalPageMenu.jsx:76 -msgid "Connect to iSCSI targets" -msgstr "Menyambungkan ke target iSCSI" +#. TRANSLATORS: The storage "Planned Actions" section's description +#: src/components/storage/ProposalActionsSection.jsx:126 +#, fuzzy +msgid "Actions to create the file systems and to ensure the new system boots." +msgstr "" +"Tindakan untuk membuat sistem berkas dan memastikan sistem melakukan booting." -#: src/components/storage/ProposalPageMenu.jsx:78 -msgid "iSCSI" -msgstr "iSCSI" +#: src/components/storage/ProposalDeviceSection.jsx:135 +msgid "Waiting for information about selected device" +msgstr "" -#: src/components/storage/ProposalSettingsSection.jsx:141 +#: src/components/storage/ProposalDeviceSection.jsx:138 msgid "Select the device for installing the system." msgstr "Pilih perangkat untuk menginstal sistem." -#: src/components/storage/ProposalSettingsSection.jsx:146 -#: src/components/storage/ProposalSettingsSection.jsx:150 -#: src/components/storage/ProposalSettingsSection.jsx:248 +#: src/components/storage/ProposalDeviceSection.jsx:143 +#: src/components/storage/ProposalDeviceSection.jsx:147 +#: src/components/storage/ProposalDeviceSection.jsx:245 msgid "Installation device" msgstr "Perangkat penginstalan" -#: src/components/storage/ProposalSettingsSection.jsx:156 +#: src/components/storage/ProposalDeviceSection.jsx:153 msgid "No devices found." msgstr "Tidak ada perangkat yang ditemukan." -#: src/components/storage/ProposalSettingsSection.jsx:245 +#: src/components/storage/ProposalDeviceSection.jsx:242 msgid "Devices for creating the volume group" msgstr "Perangkat untuk membuat grup volume" -#: src/components/storage/ProposalSettingsSection.jsx:254 +#: src/components/storage/ProposalDeviceSection.jsx:251 msgid "Custom devices" msgstr "Perangkat khusus" -#: src/components/storage/ProposalSettingsSection.jsx:318 +#: src/components/storage/ProposalDeviceSection.jsx:315 msgid "" "Configuration of the system volume group. All the file systems will be " "created in a logical volume of the system volume group." @@ -1238,27 +1226,64 @@ msgstr "" "Konfigurasi grup volume sistem. Semua sistem berkas akan dibuat dalam volume " "logis dari grup volume sistem." -#: src/components/storage/ProposalSettingsSection.jsx:324 +#: src/components/storage/ProposalDeviceSection.jsx:321 msgid "Configure the LVM settings" msgstr "Mengkonfigurasi pengaturan LVM" -#: src/components/storage/ProposalSettingsSection.jsx:329 -#: src/components/storage/ProposalSettingsSection.jsx:349 +#: src/components/storage/ProposalDeviceSection.jsx:326 +#: src/components/storage/ProposalDeviceSection.jsx:346 msgid "LVM settings" msgstr "Pengaturan LVM" -#: src/components/storage/ProposalSettingsSection.jsx:342 +#: src/components/storage/ProposalDeviceSection.jsx:333 +msgid "Waiting for information about LVM" +msgstr "" + +#: src/components/storage/ProposalDeviceSection.jsx:339 msgid "Use logical volume management (LVM)" msgstr "Gunakan manajemen volume logis (LVM)" -#: src/components/storage/ProposalSettingsSection.jsx:350 +#: src/components/storage/ProposalDeviceSection.jsx:347 msgid "System Volume Group" msgstr "Grup Volume Sistem" +#. TRANSLATORS: The storage "Device" sections's description. Do not +#. translate 'abbr' and 'title', they are part of the HTML markup. +#: src/components/storage/ProposalDeviceSection.jsx:414 +msgid "" +"Select the main disk or LVM " +"Volume Group for installation." +msgstr "" + +#: src/components/storage/ProposalFileSystemsSection.jsx:70 +#, fuzzy +msgid "File systems" +msgstr "Jenis sistem berkas" + +#: src/components/storage/ProposalPageMenu.jsx:40 +msgid "Manage and format" +msgstr "Mengelola dan memformat" + +#: src/components/storage/ProposalPageMenu.jsx:58 +msgid "Activate disks" +msgstr "Mengaktifkan disk" + +#: src/components/storage/ProposalPageMenu.jsx:60 +msgid "zFCP" +msgstr "zFCP" + +#: src/components/storage/ProposalPageMenu.jsx:76 +msgid "Connect to iSCSI targets" +msgstr "Menyambungkan ke target iSCSI" + +#: src/components/storage/ProposalPageMenu.jsx:78 +msgid "iSCSI" +msgstr "iSCSI" + #. TRANSLATORS: The word 'directly' is key here. For example, booting to the installer media and then choosing #. 'Boot from Hard Disk' from there will not work. Keep it sort (this is a hint in a form) but keep it clear. #. Do not translate 'abbr' and 'title', they are part of the HTML markup. -#: src/components/storage/ProposalSettingsSection.jsx:426 +#: src/components/storage/ProposalSettingsSection.jsx:86 msgid "" "The password will not be needed to boot and access the data if the TPM can verify the integrity of the " @@ -1266,44 +1291,176 @@ msgid "" "first run." msgstr "" -#: src/components/storage/ProposalSettingsSection.jsx:444 +#: src/components/storage/ProposalSettingsSection.jsx:104 msgid "Use the TPM to decrypt automatically on each boot" msgstr "" -#: src/components/storage/ProposalSettingsSection.jsx:515 +#: src/components/storage/ProposalSettingsSection.jsx:175 #, fuzzy msgid "Change encryption settings" msgstr "Pengaturan enkripsi" -#: src/components/storage/ProposalSettingsSection.jsx:520 -#: src/components/storage/ProposalSettingsSection.jsx:541 +#: src/components/storage/ProposalSettingsSection.jsx:180 +#: src/components/storage/ProposalSettingsSection.jsx:201 msgid "Encryption settings" msgstr "Pengaturan enkripsi" -#: src/components/storage/ProposalSettingsSection.jsx:534 +#: src/components/storage/ProposalSettingsSection.jsx:194 msgid "Use encryption" msgstr "Gunakan enkripsi" -#: src/components/storage/ProposalSettingsSection.jsx:621 +#: src/components/storage/ProposalSettingsSection.jsx:244 +msgid "Settings" +msgstr "Pengaturan" + +#: src/components/storage/ProposalSpacePolicySection.jsx:50 +msgid "Delete current content" +msgstr "Hapus konten saat ini" + +#: src/components/storage/ProposalSpacePolicySection.jsx:51 +msgid "All partitions will be removed and any data in the disks will be lost." +msgstr "Semua partisi akan dihapus dan semua data dalam disk akan hilang." + +#: src/components/storage/ProposalSpacePolicySection.jsx:55 +msgid "Shrink existing partitions" +msgstr "Perkecil partisi yang ada" + +#: src/components/storage/ProposalSpacePolicySection.jsx:56 +#, fuzzy +msgid "The data is kept, but the current partitions will be resized as needed." +msgstr "" +"Data akan disimpan, namun partisi yang ada akan diubah ukurannya sesuai " +"kebutuhan untuk menyediakan ruang yang cukup." + +#: src/components/storage/ProposalSpacePolicySection.jsx:60 +msgid "Use available space" +msgstr "Gunakan ruang yang tersedia" + +#: src/components/storage/ProposalSpacePolicySection.jsx:61 +#, fuzzy msgid "" -"Select how to make free space in the disks selected for allocating the " -"file systems." +"The data is kept. Only the space not assigned to any partition will be used." msgstr "" -"Memilih cara mengosongkan ruang pada disk yang dipilih untuk mengalokasikan " -"sistem berkas." +"Data akan disimpan dan partisi yang ada tidak akan diubah. Hanya ruang yang " +"tidak ditetapkan ke partisi mana pun yang akan digunakan." -#. TRANSLATORS: To be completed with the rest of a sentence like "deleting all content" -#: src/components/storage/ProposalSettingsSection.jsx:627 -msgid "Find space" -msgstr "Temukan ruang" +#: src/components/storage/ProposalSpacePolicySection.jsx:65 +#, fuzzy +msgid "Custom" +msgstr "Perangkat khusus" -#: src/components/storage/ProposalSettingsSection.jsx:631 -msgid "Space Policy" -msgstr "Kebijakan Ruang" +#: src/components/storage/ProposalSpacePolicySection.jsx:66 +msgid "Select what to do with each partition." +msgstr "" -#: src/components/storage/ProposalSettingsSection.jsx:708 -msgid "Settings" -msgstr "Pengaturan" +#: src/components/storage/ProposalSpacePolicySection.jsx:72 +#, fuzzy +msgid "Used device" +msgstr "Baca perangkat zFCP" + +#: src/components/storage/ProposalSpacePolicySection.jsx:73 +#, fuzzy +msgid "Current content" +msgstr "Hapus konten saat ini" + +#: src/components/storage/ProposalSpacePolicySection.jsx:74 +#: src/components/storage/ProposalVolumes.jsx:309 +#: src/components/storage/VolumeForm.jsx:795 +msgid "Size" +msgstr "Ukuran" + +#: src/components/storage/ProposalSpacePolicySection.jsx:75 +#: src/components/storage/ProposalVolumes.jsx:308 +msgid "Details" +msgstr "Detail" + +#: src/components/storage/ProposalSpacePolicySection.jsx:76 +#, fuzzy +msgid "Action" +msgstr "Tindakan" + +#. TRANSLATORS: %s is replaced by partition table type (e.g., GPT) +#: src/components/storage/ProposalSpacePolicySection.jsx:110 +#, fuzzy, c-format +msgid "%s partition table" +msgstr "partisi" + +#: src/components/storage/ProposalSpacePolicySection.jsx:121 +#, fuzzy +msgid "EFI system partition" +msgstr "partisi" + +#. TRANSLATORS: %s is replaced by a file system type (e.g., btrfs). +#: src/components/storage/ProposalSpacePolicySection.jsx:124 +#, fuzzy, c-format +msgid "%s file system" +msgstr "Tambahkan sistem berkas" + +#. TRANSLATORS: %s is replaced by a LVM volume group name (e.g., /dev/vg0). +#: src/components/storage/ProposalSpacePolicySection.jsx:131 +#, c-format +msgid "LVM physical volume of %s" +msgstr "" + +#. TRANSLATORS: %s is replaced by a RAID name (e.g., /dev/md0). +#: src/components/storage/ProposalSpacePolicySection.jsx:134 +#, fuzzy, c-format +msgid "Member of RAID %s" +msgstr "Anggota: %s" + +#: src/components/storage/ProposalSpacePolicySection.jsx:136 +msgid "Not identified" +msgstr "" + +#. TRANSLATORS: %s is replaced by a disk size (e.g., 20 GiB) +#: src/components/storage/ProposalSpacePolicySection.jsx:173 +#, c-format +msgid "%s unused" +msgstr "" + +#. TRANSLATORS: %s is replaced by a disk size (e.g., 2 GiB) +#: src/components/storage/ProposalSpacePolicySection.jsx:186 +#, c-format +msgid "Shrinkable by %s" +msgstr "" + +#. TRANSLATORS: %s is replaced by a device name (e.g., /dev/sda) +#: src/components/storage/ProposalSpacePolicySection.jsx:221 +#, c-format +msgid "Space action selector for %s" +msgstr "" + +#: src/components/storage/ProposalSpacePolicySection.jsx:224 +#: src/components/storage/ProposalVolumes.jsx:229 +#: src/components/storage/iscsi/NodesPresenter.jsx:77 +msgid "Delete" +msgstr "Menghapus" + +#: src/components/storage/ProposalSpacePolicySection.jsx:228 +msgid "Allow resize" +msgstr "" + +#: src/components/storage/ProposalSpacePolicySection.jsx:230 +msgid "Do not modify" +msgstr "" + +#: src/components/storage/ProposalSpacePolicySection.jsx:382 +#, fuzzy +msgid "Actions to find space" +msgstr "Tindakan untuk koneksi %s" + +#. TRANSLATORS: The storage "Find Space" section's title +#: src/components/storage/ProposalSpacePolicySection.jsx:452 +#, fuzzy +msgid "Find Space" +msgstr "Temukan ruang" + +#. TRANSLATORS: The storage "Find space" sections's description +#: src/components/storage/ProposalSpacePolicySection.jsx:454 +msgid "" +"Allocating the file systems might need to find free space in the devices " +"listed below. Choose how to do it." +msgstr "" #. TRANSLATORS: header for a list of items #: src/components/storage/ProposalVolumes.jsx:59 @@ -1371,11 +1528,6 @@ msgstr "dengan snapshot" msgid "transactional" msgstr "transaksional" -#: src/components/storage/ProposalVolumes.jsx:229 -#: src/components/storage/iscsi/NodesPresenter.jsx:77 -msgid "Delete" -msgstr "Menghapus" - #: src/components/storage/ProposalVolumes.jsx:275 msgid "Edit file system" msgstr "Edit sistem berkas" @@ -1386,23 +1538,10 @@ msgstr "Edit sistem berkas" msgid "Mount point" msgstr "Titik pemasangan" -#: src/components/storage/ProposalVolumes.jsx:308 -msgid "Details" -msgstr "Detail" - -#: src/components/storage/ProposalVolumes.jsx:309 -#: src/components/storage/VolumeForm.jsx:795 -msgid "Size" -msgstr "Ukuran" - #: src/components/storage/ProposalVolumes.jsx:345 msgid "Table with mount points" msgstr "Tabel dengan titik pemasangan" -#: src/components/storage/ProposalVolumes.jsx:408 -msgid "File systems to create in your system" -msgstr "Sistem berkas yang akan dibuat di sistem Anda" - #: src/components/storage/VolumeForm.jsx:102 #, fuzzy msgid "Select a value" @@ -1868,69 +2007,6 @@ msgstr "Temukan" msgid "Targets" msgstr "Target" -#. TRANSLATORS: automatic actions to find space for installation in the target disk(s) -#: src/components/storage/space-policy-utils.jsx:45 -msgid "Delete current content" -msgstr "Hapus konten saat ini" - -#. TRANSLATORS: automatic actions to find space for installation in the target disk(s) -#: src/components/storage/space-policy-utils.jsx:49 -msgid "Shrink existing partitions" -msgstr "Perkecil partisi yang ada" - -#. TRANSLATORS: automatic actions to find space for installation in the target disk(s) -#: src/components/storage/space-policy-utils.jsx:53 -msgid "Use available space" -msgstr "Gunakan ruang yang tersedia" - -#: src/components/storage/space-policy-utils.jsx:65 -msgid "All partitions will be removed and any data in the disks will be lost." -msgstr "Semua partisi akan dihapus dan semua data dalam disk akan hilang." - -#: src/components/storage/space-policy-utils.jsx:68 -msgid "" -"The data is kept, but the current partitions will be resized as needed to " -"make enough space." -msgstr "" -"Data akan disimpan, namun partisi yang ada akan diubah ukurannya sesuai " -"kebutuhan untuk menyediakan ruang yang cukup." - -#: src/components/storage/space-policy-utils.jsx:71 -msgid "" -"The data is kept and existing partitions will not be modified. Only the " -"space that is not assigned to any partition will be used." -msgstr "" -"Data akan disimpan dan partisi yang ada tidak akan diubah. Hanya ruang yang " -"tidak ditetapkan ke partisi mana pun yang akan digunakan." - -#: src/components/storage/space-policy-utils.jsx:108 -msgid "Select a mechanism to make space" -msgstr "Pilih mekanisme untuk menyediakan ruang" - -#: src/components/storage/space-policy-utils.jsx:127 -#, c-format -msgid "deleting all content of the installation device" -msgid_plural "deleting all content of the %d selected disks" -msgstr[0] "menghapus semua konten dari %d disk yang dipilih" - -#: src/components/storage/space-policy-utils.jsx:137 -#, c-format -msgid "shrinking partitions of the installation device" -msgid_plural "shrinking partitions of the %d selected disks" -msgstr[0] "mengecilkan partisi dari %d disk yang dipilih" - -#. TRANSLATORS: This is presented next to the label "Find space", so the whole sentence -#. would read as "Find space without modifying any partition". -#: src/components/storage/space-policy-utils.jsx:145 -msgid "without modifying any partition" -msgstr "tanpa memodifikasi partisi apa pun" - -#: src/components/storage/space-policy-utils.jsx:160 -#, c-format -msgid "This will only affect the installation device" -msgid_plural "This will affect the %d disks selected for installation" -msgstr[0] "Ini akan mempengaruhi %d disk yang dipilih untuk instalasi" - #: src/components/storage/utils.js:44 msgid "KiB" msgstr "KiB" @@ -2112,6 +2188,43 @@ msgstr "Pengguna" msgid "Root authentication" msgstr "Autentikasi root" +#~ msgid "Devices will not be modified until installation starts." +#~ msgstr "Perangkat tidak akan dimodifikasi hingga penginstalan dimulai." + +#~ msgid "File systems to create in your system" +#~ msgstr "Sistem berkas yang akan dibuat di sistem Anda" + +#~ msgid "" +#~ "Select how to make free space in the disks selected for allocating " +#~ "the file systems." +#~ msgstr "" +#~ "Memilih cara mengosongkan ruang pada disk yang dipilih untuk " +#~ "mengalokasikan sistem berkas." + +#~ msgid "Space Policy" +#~ msgstr "Kebijakan Ruang" + +#~ msgid "Select a mechanism to make space" +#~ msgstr "Pilih mekanisme untuk menyediakan ruang" + +#, c-format +#~ msgid "deleting all content of the installation device" +#~ msgid_plural "deleting all content of the %d selected disks" +#~ msgstr[0] "menghapus semua konten dari %d disk yang dipilih" + +#, c-format +#~ msgid "shrinking partitions of the installation device" +#~ msgid_plural "shrinking partitions of the %d selected disks" +#~ msgstr[0] "mengecilkan partisi dari %d disk yang dipilih" + +#~ msgid "without modifying any partition" +#~ msgstr "tanpa memodifikasi partisi apa pun" + +#, c-format +#~ msgid "This will only affect the installation device" +#~ msgid_plural "This will affect the %d disks selected for installation" +#~ msgstr[0] "Ini akan mempengaruhi %d disk yang dipilih untuk instalasi" + #, c-format #~ msgid "Edit %s connection" #~ msgstr "Mengedit koneksi %s" diff --git a/web/po/ja.po b/web/po/ja.po index dccfc99f99..7b0a3648f2 100644 --- a/web/po/ja.po +++ b/web/po/ja.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-02-18 02:07+0000\n" -"PO-Revision-Date: 2024-01-22 06:59+0000\n" +"POT-Creation-Date: 2024-02-25 02:07+0000\n" +"PO-Revision-Date: 2024-02-22 01:00+0000\n" "Last-Translator: Yasuhiko Kamata \n" "Language-Team: Japanese \n" @@ -154,10 +154,9 @@ msgstr "" #: src/components/product/ProductPage.jsx:71 #: src/components/product/ProductPage.jsx:140 #: src/components/product/ProductPage.jsx:207 -#: src/components/storage/ProposalSettingsSection.jsx:172 -#: src/components/storage/ProposalSettingsSection.jsx:367 -#: src/components/storage/ProposalSettingsSection.jsx:551 -#: src/components/storage/ProposalSettingsSection.jsx:647 +#: src/components/storage/ProposalDeviceSection.jsx:169 +#: src/components/storage/ProposalDeviceSection.jsx:364 +#: src/components/storage/ProposalSettingsSection.jsx:211 #: src/components/storage/ProposalVolumes.jsx:148 #: src/components/storage/ProposalVolumes.jsx:283 #: src/components/storage/ZFCPPage.jsx:511 @@ -830,7 +829,7 @@ msgid "Software" msgstr "ソフトウエア" #: src/components/overview/StorageSection.jsx:42 -#: src/components/storage/ProposalSettingsSection.jsx:132 +#: src/components/storage/ProposalDeviceSection.jsx:129 msgid "No device selected yet" msgstr "まだ何もデバイスを選択していません" @@ -870,7 +869,7 @@ msgstr "ストレージデバイスを検出しています" #. TRANSLATORS: page title #. TRANSLATORS: page section title #: src/components/overview/StorageSection.jsx:208 -#: src/components/storage/ProposalPage.jsx:232 +#: src/components/storage/ProposalPage.jsx:239 msgid "Storage" msgstr "ストレージ" @@ -996,9 +995,8 @@ msgid "No products available for selection" msgstr "選択できる製品がありません" #: src/components/product/ProductSelector.jsx:42 -#, fuzzy msgid "Available products" -msgstr "利用可能なロケール" +msgstr "利用可能な製品" #: src/components/questions/GenericQuestion.jsx:35 #: src/components/questions/LuksActivationQuestion.jsx:60 @@ -1088,7 +1086,9 @@ msgstr "チャネル ID" msgid "Status" msgstr "状態" +#. TRANSLATORS: The storage "Device" section's title #: src/components/storage/DASDTable.jsx:66 +#: src/components/storage/ProposalDeviceSection.jsx:423 msgid "Device" msgstr "デバイス" @@ -1164,78 +1164,61 @@ msgid "Storage iSCSI" msgstr "ストレージ iSCSI" #. TRANSLATORS: show/hide toggle action, this is a clickable link -#: src/components/storage/ProposalActionsSection.jsx:71 +#: src/components/storage/ProposalActionsSection.jsx:70 #, c-format msgid "Hide %d subvolume action" msgid_plural "Hide %d subvolume actions" msgstr[0] "%d 個のサブボリューム処理を隠す" #. TRANSLATORS: show/hide toggle action, this is a clickable link -#: src/components/storage/ProposalActionsSection.jsx:73 +#: src/components/storage/ProposalActionsSection.jsx:72 #, c-format msgid "Show %d subvolume action" msgid_plural "Show %d subvolume actions" msgstr[0] "%d 個のサブボリューム処理を表示" -#: src/components/storage/ProposalActionsSection.jsx:78 -msgid "Actions to create the file systems and to ensure the system boots." -msgstr "" -"ファイルシステムを作成するための処理とシステムが起動できるようにするための処" -"理です。" - -#. TRANSLATORS: section title, list of planned actions for the selected device, -#. e.g. "delete partition A", "create partition B with filesystem C", ... -#: src/components/storage/ProposalActionsSection.jsx:126 +#. TRANSLATORS: The storage "Planned Actions" section's title. The +#. section shows a list of planned actions for the selected device, e.g. +#. "delete partition A", "create partition B with filesystem C", ... +#: src/components/storage/ProposalActionsSection.jsx:124 msgid "Planned Actions" msgstr "処理の計画" -#: src/components/storage/ProposalPage.jsx:211 -msgid "Devices will not be modified until installation starts." -msgstr "インストールを開始するまではデバイスへの書き込みは行われません。" - -#: src/components/storage/ProposalPageMenu.jsx:40 -msgid "Manage and format" -msgstr "管理とフォーマット" - -#: src/components/storage/ProposalPageMenu.jsx:58 -msgid "Activate disks" -msgstr "ディスクの有効化" - -#: src/components/storage/ProposalPageMenu.jsx:60 -msgid "zFCP" -msgstr "zFCP" - -#: src/components/storage/ProposalPageMenu.jsx:76 -msgid "Connect to iSCSI targets" -msgstr "iSCSI ターゲットへの接続" +#. TRANSLATORS: The storage "Planned Actions" section's description +#: src/components/storage/ProposalActionsSection.jsx:126 +#, fuzzy +msgid "Actions to create the file systems and to ensure the new system boots." +msgstr "" +"ファイルシステムを作成するための処理とシステムが起動できるようにするための処" +"理です。" -#: src/components/storage/ProposalPageMenu.jsx:78 -msgid "iSCSI" -msgstr "iSCSI" +#: src/components/storage/ProposalDeviceSection.jsx:135 +msgid "Waiting for information about selected device" +msgstr "" -#: src/components/storage/ProposalSettingsSection.jsx:141 +#: src/components/storage/ProposalDeviceSection.jsx:138 msgid "Select the device for installing the system." msgstr "システムのインストール先デバイスを選択してください。" -#: src/components/storage/ProposalSettingsSection.jsx:146 -#: src/components/storage/ProposalSettingsSection.jsx:150 -#: src/components/storage/ProposalSettingsSection.jsx:248 +#: src/components/storage/ProposalDeviceSection.jsx:143 +#: src/components/storage/ProposalDeviceSection.jsx:147 +#: src/components/storage/ProposalDeviceSection.jsx:245 msgid "Installation device" msgstr "インストール先のデバイス" -#: src/components/storage/ProposalSettingsSection.jsx:156 +#: src/components/storage/ProposalDeviceSection.jsx:153 msgid "No devices found." msgstr "デバイスが見つかりませんでした。" -#: src/components/storage/ProposalSettingsSection.jsx:245 +#: src/components/storage/ProposalDeviceSection.jsx:242 msgid "Devices for creating the volume group" msgstr "ボリュームグループを作成するデバイス" -#: src/components/storage/ProposalSettingsSection.jsx:254 +#: src/components/storage/ProposalDeviceSection.jsx:251 msgid "Custom devices" msgstr "独自のデバイス" -#: src/components/storage/ProposalSettingsSection.jsx:318 +#: src/components/storage/ProposalDeviceSection.jsx:315 msgid "" "Configuration of the system volume group. All the file systems will be " "created in a logical volume of the system volume group." @@ -1243,27 +1226,64 @@ msgstr "" "システムのボリュームグループ向けの設定です。全てのファイルシステムは、システ" "ムのボリュームグループにある論理ボリューム内に作成されます。" -#: src/components/storage/ProposalSettingsSection.jsx:324 +#: src/components/storage/ProposalDeviceSection.jsx:321 msgid "Configure the LVM settings" msgstr "LVM 設定" -#: src/components/storage/ProposalSettingsSection.jsx:329 -#: src/components/storage/ProposalSettingsSection.jsx:349 +#: src/components/storage/ProposalDeviceSection.jsx:326 +#: src/components/storage/ProposalDeviceSection.jsx:346 msgid "LVM settings" msgstr "LVM 設定" -#: src/components/storage/ProposalSettingsSection.jsx:342 +#: src/components/storage/ProposalDeviceSection.jsx:333 +msgid "Waiting for information about LVM" +msgstr "" + +#: src/components/storage/ProposalDeviceSection.jsx:339 msgid "Use logical volume management (LVM)" msgstr "論理ボリュームマネージャ (LVM) を使用する" -#: src/components/storage/ProposalSettingsSection.jsx:350 +#: src/components/storage/ProposalDeviceSection.jsx:347 msgid "System Volume Group" msgstr "システムのボリュームグループ" +#. TRANSLATORS: The storage "Device" sections's description. Do not +#. translate 'abbr' and 'title', they are part of the HTML markup. +#: src/components/storage/ProposalDeviceSection.jsx:414 +msgid "" +"Select the main disk or LVM " +"Volume Group for installation." +msgstr "" + +#: src/components/storage/ProposalFileSystemsSection.jsx:70 +#, fuzzy +msgid "File systems" +msgstr "ファイルシステムの種類" + +#: src/components/storage/ProposalPageMenu.jsx:40 +msgid "Manage and format" +msgstr "管理とフォーマット" + +#: src/components/storage/ProposalPageMenu.jsx:58 +msgid "Activate disks" +msgstr "ディスクの有効化" + +#: src/components/storage/ProposalPageMenu.jsx:60 +msgid "zFCP" +msgstr "zFCP" + +#: src/components/storage/ProposalPageMenu.jsx:76 +msgid "Connect to iSCSI targets" +msgstr "iSCSI ターゲットへの接続" + +#: src/components/storage/ProposalPageMenu.jsx:78 +msgid "iSCSI" +msgstr "iSCSI" + #. TRANSLATORS: The word 'directly' is key here. For example, booting to the installer media and then choosing #. 'Boot from Hard Disk' from there will not work. Keep it sort (this is a hint in a form) but keep it clear. #. Do not translate 'abbr' and 'title', they are part of the HTML markup. -#: src/components/storage/ProposalSettingsSection.jsx:426 +#: src/components/storage/ProposalSettingsSection.jsx:86 msgid "" "The password will not be needed to boot and access the data if the TPM can verify the integrity of the " @@ -1275,43 +1295,168 @@ msgstr "" "シーリングを使用するには、新しいシステムの初回起動時に直接起動を行う必要があ" "ります。" -#: src/components/storage/ProposalSettingsSection.jsx:444 +#: src/components/storage/ProposalSettingsSection.jsx:104 msgid "Use the TPM to decrypt automatically on each boot" msgstr "毎回の起動時に TPM を利用して自動的に暗号化解除する" -#: src/components/storage/ProposalSettingsSection.jsx:515 +#: src/components/storage/ProposalSettingsSection.jsx:175 msgid "Change encryption settings" msgstr "暗号化設定の変更" -#: src/components/storage/ProposalSettingsSection.jsx:520 -#: src/components/storage/ProposalSettingsSection.jsx:541 +#: src/components/storage/ProposalSettingsSection.jsx:180 +#: src/components/storage/ProposalSettingsSection.jsx:201 msgid "Encryption settings" msgstr "暗号化の設定" -#: src/components/storage/ProposalSettingsSection.jsx:534 +#: src/components/storage/ProposalSettingsSection.jsx:194 msgid "Use encryption" msgstr "暗号化を使用する" -#: src/components/storage/ProposalSettingsSection.jsx:621 +#: src/components/storage/ProposalSettingsSection.jsx:244 +msgid "Settings" +msgstr "設定" + +#: src/components/storage/ProposalSpacePolicySection.jsx:50 +msgid "Delete current content" +msgstr "現在の内容を全て削除" + +#: src/components/storage/ProposalSpacePolicySection.jsx:51 +msgid "All partitions will be removed and any data in the disks will be lost." +msgstr "" +"ディスク内の全てのパーティションを削除します。これにより、ディスク内に存在す" +"るデータは全て失われます。" + +#: src/components/storage/ProposalSpacePolicySection.jsx:55 +msgid "Shrink existing partitions" +msgstr "既存のパーティションの縮小" + +#: src/components/storage/ProposalSpacePolicySection.jsx:56 +msgid "The data is kept, but the current partitions will be resized as needed." +msgstr "" +"既存のデータは保持しますが、十分な領域を確保するために既存のパーティションの" +"サイズ変更を行います。" + +#: src/components/storage/ProposalSpacePolicySection.jsx:60 +msgid "Use available space" +msgstr "利用可能な領域を使用する" + +#: src/components/storage/ProposalSpacePolicySection.jsx:61 msgid "" -"Select how to make free space in the disks selected for allocating the " -"file systems." +"The data is kept. Only the space not assigned to any partition will be used." msgstr "" -"選択したディスク内にファイルシステムを割り当てるための領域確保方法を選択して" -"ください。" +"既存のデータを全て保持します。パーティションに割り当てられていない空き領域の" +"みを使用します。" -#. TRANSLATORS: To be completed with the rest of a sentence like "deleting all content" -#: src/components/storage/ProposalSettingsSection.jsx:627 -msgid "Find space" -msgstr "領域の検出" +#: src/components/storage/ProposalSpacePolicySection.jsx:65 +msgid "Custom" +msgstr "独自設定" -#: src/components/storage/ProposalSettingsSection.jsx:631 -msgid "Space Policy" -msgstr "領域ポリシー" +#: src/components/storage/ProposalSpacePolicySection.jsx:66 +msgid "Select what to do with each partition." +msgstr "パーティションの設定作業を独自に実施します。" -#: src/components/storage/ProposalSettingsSection.jsx:708 -msgid "Settings" -msgstr "設定" +#: src/components/storage/ProposalSpacePolicySection.jsx:72 +msgid "Used device" +msgstr "使用済みデバイス" + +#: src/components/storage/ProposalSpacePolicySection.jsx:73 +msgid "Current content" +msgstr "現在の内容" + +#: src/components/storage/ProposalSpacePolicySection.jsx:74 +#: src/components/storage/ProposalVolumes.jsx:309 +#: src/components/storage/VolumeForm.jsx:795 +msgid "Size" +msgstr "サイズ" + +#: src/components/storage/ProposalSpacePolicySection.jsx:75 +#: src/components/storage/ProposalVolumes.jsx:308 +msgid "Details" +msgstr "詳細" + +#: src/components/storage/ProposalSpacePolicySection.jsx:76 +msgid "Action" +msgstr "処理" + +#. TRANSLATORS: %s is replaced by partition table type (e.g., GPT) +#: src/components/storage/ProposalSpacePolicySection.jsx:110 +#, c-format +msgid "%s partition table" +msgstr "%s パーティションテーブル" + +#: src/components/storage/ProposalSpacePolicySection.jsx:121 +msgid "EFI system partition" +msgstr "EFI システムパーティション" + +#. TRANSLATORS: %s is replaced by a file system type (e.g., btrfs). +#: src/components/storage/ProposalSpacePolicySection.jsx:124 +#, c-format +msgid "%s file system" +msgstr "%s ファイルシステム" + +#. TRANSLATORS: %s is replaced by a LVM volume group name (e.g., /dev/vg0). +#: src/components/storage/ProposalSpacePolicySection.jsx:131 +#, c-format +msgid "LVM physical volume of %s" +msgstr "%s の LVM 物理ボリューム" + +#. TRANSLATORS: %s is replaced by a RAID name (e.g., /dev/md0). +#: src/components/storage/ProposalSpacePolicySection.jsx:134 +#, c-format +msgid "Member of RAID %s" +msgstr "RAID %s のメンバー" + +#: src/components/storage/ProposalSpacePolicySection.jsx:136 +msgid "Not identified" +msgstr "不明" + +#. TRANSLATORS: %s is replaced by a disk size (e.g., 20 GiB) +#: src/components/storage/ProposalSpacePolicySection.jsx:173 +#, c-format +msgid "%s unused" +msgstr "%s の未使用" + +#. TRANSLATORS: %s is replaced by a disk size (e.g., 2 GiB) +#: src/components/storage/ProposalSpacePolicySection.jsx:186 +#, c-format +msgid "Shrinkable by %s" +msgstr "%s 単位で縮小可能" + +#. TRANSLATORS: %s is replaced by a device name (e.g., /dev/sda) +#: src/components/storage/ProposalSpacePolicySection.jsx:221 +#, c-format +msgid "Space action selector for %s" +msgstr "%s に対する領域処理の選択" + +#: src/components/storage/ProposalSpacePolicySection.jsx:224 +#: src/components/storage/ProposalVolumes.jsx:229 +#: src/components/storage/iscsi/NodesPresenter.jsx:77 +msgid "Delete" +msgstr "削除" + +#: src/components/storage/ProposalSpacePolicySection.jsx:228 +msgid "Allow resize" +msgstr "サイズ変更の許可" + +#: src/components/storage/ProposalSpacePolicySection.jsx:230 +msgid "Do not modify" +msgstr "変更しない" + +#: src/components/storage/ProposalSpacePolicySection.jsx:382 +msgid "Actions to find space" +msgstr "領域の検出処理" + +#. TRANSLATORS: The storage "Find Space" section's title +#: src/components/storage/ProposalSpacePolicySection.jsx:452 +msgid "Find Space" +msgstr "領域の検出" + +#. TRANSLATORS: The storage "Find space" sections's description +#: src/components/storage/ProposalSpacePolicySection.jsx:454 +msgid "" +"Allocating the file systems might need to find free space in the devices " +"listed below. Choose how to do it." +msgstr "" #. TRANSLATORS: header for a list of items #: src/components/storage/ProposalVolumes.jsx:59 @@ -1379,11 +1524,6 @@ msgstr "スナップショット有り" msgid "transactional" msgstr "トランザクション型" -#: src/components/storage/ProposalVolumes.jsx:229 -#: src/components/storage/iscsi/NodesPresenter.jsx:77 -msgid "Delete" -msgstr "削除" - #: src/components/storage/ProposalVolumes.jsx:275 msgid "Edit file system" msgstr "ファイルシステムの編集" @@ -1394,23 +1534,10 @@ msgstr "ファイルシステムの編集" msgid "Mount point" msgstr "マウントポイント" -#: src/components/storage/ProposalVolumes.jsx:308 -msgid "Details" -msgstr "詳細" - -#: src/components/storage/ProposalVolumes.jsx:309 -#: src/components/storage/VolumeForm.jsx:795 -msgid "Size" -msgstr "サイズ" - #: src/components/storage/ProposalVolumes.jsx:345 msgid "Table with mount points" msgstr "マウントポイントの一覧" -#: src/components/storage/ProposalVolumes.jsx:408 -msgid "File systems to create in your system" -msgstr "お使いのシステム内で作成するファイルシステム" - #: src/components/storage/VolumeForm.jsx:102 msgid "Select a value" msgstr "値の選択" @@ -1876,71 +2003,6 @@ msgstr "検索" msgid "Targets" msgstr "ターゲット" -#. TRANSLATORS: automatic actions to find space for installation in the target disk(s) -#: src/components/storage/space-policy-utils.jsx:45 -msgid "Delete current content" -msgstr "現在の内容を全て削除" - -#. TRANSLATORS: automatic actions to find space for installation in the target disk(s) -#: src/components/storage/space-policy-utils.jsx:49 -msgid "Shrink existing partitions" -msgstr "既存のパーティションの縮小" - -#. TRANSLATORS: automatic actions to find space for installation in the target disk(s) -#: src/components/storage/space-policy-utils.jsx:53 -msgid "Use available space" -msgstr "利用可能な領域を使用する" - -#: src/components/storage/space-policy-utils.jsx:65 -msgid "All partitions will be removed and any data in the disks will be lost." -msgstr "" -"ディスク内の全てのパーティションを削除します。これにより、ディスク内に存在す" -"るデータは全て失われます。" - -#: src/components/storage/space-policy-utils.jsx:68 -msgid "" -"The data is kept, but the current partitions will be resized as needed to " -"make enough space." -msgstr "" -"ディスク内のデータは保持しますが、十分な領域を確保するために既存のパーティ" -"ションのサイズ変更を行います。" - -#: src/components/storage/space-policy-utils.jsx:71 -msgid "" -"The data is kept and existing partitions will not be modified. Only the " -"space that is not assigned to any partition will be used." -msgstr "" -"ディスク内のデータは全て保持し、パーティションの変更も行いません。パーティ" -"ションに割り当てられていない空き領域のみを使用します。" - -#: src/components/storage/space-policy-utils.jsx:108 -msgid "Select a mechanism to make space" -msgstr "領域の確保方法を選択してください" - -#: src/components/storage/space-policy-utils.jsx:127 -#, c-format -msgid "deleting all content of the installation device" -msgid_plural "deleting all content of the %d selected disks" -msgstr[0] "選択した %d 個のディスクの全内容を削除します" - -#: src/components/storage/space-policy-utils.jsx:137 -#, c-format -msgid "shrinking partitions of the installation device" -msgid_plural "shrinking partitions of the %d selected disks" -msgstr[0] "選択した %d 個のディスクのパーティションを縮小します" - -#. TRANSLATORS: This is presented next to the label "Find space", so the whole sentence -#. would read as "Find space without modifying any partition". -#: src/components/storage/space-policy-utils.jsx:145 -msgid "without modifying any partition" -msgstr "パーティションの変更を行いません" - -#: src/components/storage/space-policy-utils.jsx:160 -#, c-format -msgid "This will only affect the installation device" -msgid_plural "This will affect the %d disks selected for installation" -msgstr[0] "この処理は、選択した %d 個のディスクにのみ影響します" - #: src/components/storage/utils.js:44 msgid "KiB" msgstr "KiB" @@ -2120,6 +2182,43 @@ msgstr "ユーザ" msgid "Root authentication" msgstr "root の認証" +#~ msgid "Devices will not be modified until installation starts." +#~ msgstr "インストールを開始するまではデバイスへの書き込みは行われません。" + +#~ msgid "File systems to create in your system" +#~ msgstr "お使いのシステム内で作成するファイルシステム" + +#~ msgid "" +#~ "Select how to make free space in the disks selected for allocating " +#~ "the file systems." +#~ msgstr "" +#~ "選択したディスク内にファイルシステムを割り当てるための領域確保方法を選択し" +#~ "てください。" + +#~ msgid "Space Policy" +#~ msgstr "領域ポリシー" + +#~ msgid "Select a mechanism to make space" +#~ msgstr "領域の確保方法を選択してください" + +#, c-format +#~ msgid "deleting all content of the installation device" +#~ msgid_plural "deleting all content of the %d selected disks" +#~ msgstr[0] "選択した %d 個のディスクの全内容を削除します" + +#, c-format +#~ msgid "shrinking partitions of the installation device" +#~ msgid_plural "shrinking partitions of the %d selected disks" +#~ msgstr[0] "選択した %d 個のディスクのパーティションを縮小します" + +#~ msgid "without modifying any partition" +#~ msgstr "パーティションの変更を行いません" + +#, c-format +#~ msgid "This will only affect the installation device" +#~ msgid_plural "This will affect the %d disks selected for installation" +#~ msgstr[0] "この処理は、選択した %d 個のディスクにのみ影響します" + #, c-format #~ msgid "Edit %s connection" #~ msgstr "接続 %s の編集" diff --git a/web/po/ka.po b/web/po/ka.po index b8f169b003..f01517eac0 100644 --- a/web/po/ka.po +++ b/web/po/ka.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-02-18 02:07+0000\n" +"POT-Creation-Date: 2024-02-25 02:07+0000\n" "PO-Revision-Date: 2024-02-17 05:42+0000\n" "Last-Translator: Temuri Doghonadze \n" "Language-Team: Georgian LVM " +"Volume Group for installation." +msgstr "" + +#: src/components/storage/ProposalFileSystemsSection.jsx:70 +msgid "File systems" +msgstr "" + +#: src/components/storage/ProposalPageMenu.jsx:40 +msgid "Manage and format" +msgstr "მართვა და დაფორმატება" + +#: src/components/storage/ProposalPageMenu.jsx:58 +msgid "Activate disks" +msgstr "დისკების გააქტიურება" + +#: src/components/storage/ProposalPageMenu.jsx:60 +msgid "zFCP" +msgstr "zFCP" + +#: src/components/storage/ProposalPageMenu.jsx:76 +msgid "Connect to iSCSI targets" +msgstr "" + +#: src/components/storage/ProposalPageMenu.jsx:78 +msgid "iSCSI" +msgstr "iSCSI" + #. TRANSLATORS: The word 'directly' is key here. For example, booting to the installer media and then choosing #. 'Boot from Hard Disk' from there will not work. Keep it sort (this is a hint in a form) but keep it clear. #. Do not translate 'abbr' and 'title', they are part of the HTML markup. -#: src/components/storage/ProposalSettingsSection.jsx:426 +#: src/components/storage/ProposalSettingsSection.jsx:86 msgid "" "The password will not be needed to boot and access the data if the TPM can verify the integrity of the " @@ -1243,41 +1262,167 @@ msgid "" "first run." msgstr "" -#: src/components/storage/ProposalSettingsSection.jsx:444 +#: src/components/storage/ProposalSettingsSection.jsx:104 msgid "Use the TPM to decrypt automatically on each boot" msgstr "" -#: src/components/storage/ProposalSettingsSection.jsx:515 +#: src/components/storage/ProposalSettingsSection.jsx:175 msgid "Change encryption settings" msgstr "" -#: src/components/storage/ProposalSettingsSection.jsx:520 -#: src/components/storage/ProposalSettingsSection.jsx:541 +#: src/components/storage/ProposalSettingsSection.jsx:180 +#: src/components/storage/ProposalSettingsSection.jsx:201 msgid "Encryption settings" msgstr "დაშიფვრის პარამეტრები" -#: src/components/storage/ProposalSettingsSection.jsx:534 +#: src/components/storage/ProposalSettingsSection.jsx:194 msgid "Use encryption" msgstr "დაშიფვრის გამოყენება" -#: src/components/storage/ProposalSettingsSection.jsx:621 +#: src/components/storage/ProposalSettingsSection.jsx:244 +msgid "Settings" +msgstr "მორგება" + +#: src/components/storage/ProposalSpacePolicySection.jsx:50 +msgid "Delete current content" +msgstr "" + +#: src/components/storage/ProposalSpacePolicySection.jsx:51 +msgid "All partitions will be removed and any data in the disks will be lost." +msgstr "" + +#: src/components/storage/ProposalSpacePolicySection.jsx:55 +msgid "Shrink existing partitions" +msgstr "" + +#: src/components/storage/ProposalSpacePolicySection.jsx:56 +msgid "The data is kept, but the current partitions will be resized as needed." +msgstr "" + +#: src/components/storage/ProposalSpacePolicySection.jsx:60 +msgid "Use available space" +msgstr "" + +#: src/components/storage/ProposalSpacePolicySection.jsx:61 msgid "" -"Select how to make free space in the disks selected for allocating the " -"file systems." +"The data is kept. Only the space not assigned to any partition will be used." msgstr "" -#. TRANSLATORS: To be completed with the rest of a sentence like "deleting all content" -#: src/components/storage/ProposalSettingsSection.jsx:627 -msgid "Find space" -msgstr "ადგილის პოვნა" +#: src/components/storage/ProposalSpacePolicySection.jsx:65 +#, fuzzy +msgid "Custom" +msgstr "მომხმარებლის მოწყობილობები" -#: src/components/storage/ProposalSettingsSection.jsx:631 -msgid "Space Policy" -msgstr "ადგილის პოლიტიკა" +#: src/components/storage/ProposalSpacePolicySection.jsx:66 +msgid "Select what to do with each partition." +msgstr "" -#: src/components/storage/ProposalSettingsSection.jsx:708 -msgid "Settings" -msgstr "მორგება" +#: src/components/storage/ProposalSpacePolicySection.jsx:72 +#, fuzzy +msgid "Used device" +msgstr "მომხმარებლის მოწყობილობები" + +#: src/components/storage/ProposalSpacePolicySection.jsx:73 +msgid "Current content" +msgstr "" + +#: src/components/storage/ProposalSpacePolicySection.jsx:74 +#: src/components/storage/ProposalVolumes.jsx:309 +#: src/components/storage/VolumeForm.jsx:795 +msgid "Size" +msgstr "ზომა" + +#: src/components/storage/ProposalSpacePolicySection.jsx:75 +#: src/components/storage/ProposalVolumes.jsx:308 +msgid "Details" +msgstr "დეტალები" + +#: src/components/storage/ProposalSpacePolicySection.jsx:76 +#, fuzzy +msgid "Action" +msgstr "ქმედებები" + +#. TRANSLATORS: %s is replaced by partition table type (e.g., GPT) +#: src/components/storage/ProposalSpacePolicySection.jsx:110 +#, fuzzy, c-format +msgid "%s partition table" +msgstr "დანაყოფი" + +#: src/components/storage/ProposalSpacePolicySection.jsx:121 +#, fuzzy +msgid "EFI system partition" +msgstr "დანაყოფი" + +#. TRANSLATORS: %s is replaced by a file system type (e.g., btrfs). +#: src/components/storage/ProposalSpacePolicySection.jsx:124 +#, c-format +msgid "%s file system" +msgstr "" + +#. TRANSLATORS: %s is replaced by a LVM volume group name (e.g., /dev/vg0). +#: src/components/storage/ProposalSpacePolicySection.jsx:131 +#, c-format +msgid "LVM physical volume of %s" +msgstr "" + +#. TRANSLATORS: %s is replaced by a RAID name (e.g., /dev/md0). +#: src/components/storage/ProposalSpacePolicySection.jsx:134 +#, fuzzy, c-format +msgid "Member of RAID %s" +msgstr "წევრები: %s" + +#: src/components/storage/ProposalSpacePolicySection.jsx:136 +msgid "Not identified" +msgstr "" + +#. TRANSLATORS: %s is replaced by a disk size (e.g., 20 GiB) +#: src/components/storage/ProposalSpacePolicySection.jsx:173 +#, c-format +msgid "%s unused" +msgstr "" + +#. TRANSLATORS: %s is replaced by a disk size (e.g., 2 GiB) +#: src/components/storage/ProposalSpacePolicySection.jsx:186 +#, c-format +msgid "Shrinkable by %s" +msgstr "" + +#. TRANSLATORS: %s is replaced by a device name (e.g., /dev/sda) +#: src/components/storage/ProposalSpacePolicySection.jsx:221 +#, c-format +msgid "Space action selector for %s" +msgstr "" + +#: src/components/storage/ProposalSpacePolicySection.jsx:224 +#: src/components/storage/ProposalVolumes.jsx:229 +#: src/components/storage/iscsi/NodesPresenter.jsx:77 +msgid "Delete" +msgstr "წაშლა" + +#: src/components/storage/ProposalSpacePolicySection.jsx:228 +msgid "Allow resize" +msgstr "" + +#: src/components/storage/ProposalSpacePolicySection.jsx:230 +msgid "Do not modify" +msgstr "" + +#: src/components/storage/ProposalSpacePolicySection.jsx:382 +msgid "Actions to find space" +msgstr "" + +#. TRANSLATORS: The storage "Find Space" section's title +#: src/components/storage/ProposalSpacePolicySection.jsx:452 +#, fuzzy +msgid "Find Space" +msgstr "ადგილის პოვნა" + +#. TRANSLATORS: The storage "Find space" sections's description +#: src/components/storage/ProposalSpacePolicySection.jsx:454 +msgid "" +"Allocating the file systems might need to find free space in the devices " +"listed below. Choose how to do it." +msgstr "" #. TRANSLATORS: header for a list of items #: src/components/storage/ProposalVolumes.jsx:59 @@ -1345,11 +1490,6 @@ msgstr "სწრაფი ასლებით" msgid "transactional" msgstr "ტრანზაქციული" -#: src/components/storage/ProposalVolumes.jsx:229 -#: src/components/storage/iscsi/NodesPresenter.jsx:77 -msgid "Delete" -msgstr "წაშლა" - #: src/components/storage/ProposalVolumes.jsx:275 msgid "Edit file system" msgstr "" @@ -1360,23 +1500,10 @@ msgstr "" msgid "Mount point" msgstr "მიმაგრების წერტილი" -#: src/components/storage/ProposalVolumes.jsx:308 -msgid "Details" -msgstr "დეტალები" - -#: src/components/storage/ProposalVolumes.jsx:309 -#: src/components/storage/VolumeForm.jsx:795 -msgid "Size" -msgstr "ზომა" - #: src/components/storage/ProposalVolumes.jsx:345 msgid "Table with mount points" msgstr "" -#: src/components/storage/ProposalVolumes.jsx:408 -msgid "File systems to create in your system" -msgstr "" - #: src/components/storage/VolumeForm.jsx:102 msgid "Select a value" msgstr "" @@ -1832,68 +1959,6 @@ msgstr "აღმოაჩინეთ" msgid "Targets" msgstr "სამიზნეები" -#. TRANSLATORS: automatic actions to find space for installation in the target disk(s) -#: src/components/storage/space-policy-utils.jsx:45 -msgid "Delete current content" -msgstr "" - -#. TRANSLATORS: automatic actions to find space for installation in the target disk(s) -#: src/components/storage/space-policy-utils.jsx:49 -msgid "Shrink existing partitions" -msgstr "" - -#. TRANSLATORS: automatic actions to find space for installation in the target disk(s) -#: src/components/storage/space-policy-utils.jsx:53 -msgid "Use available space" -msgstr "" - -#: src/components/storage/space-policy-utils.jsx:65 -msgid "All partitions will be removed and any data in the disks will be lost." -msgstr "" - -#: src/components/storage/space-policy-utils.jsx:68 -msgid "" -"The data is kept, but the current partitions will be resized as needed to " -"make enough space." -msgstr "" - -#: src/components/storage/space-policy-utils.jsx:71 -msgid "" -"The data is kept and existing partitions will not be modified. Only the " -"space that is not assigned to any partition will be used." -msgstr "" - -#: src/components/storage/space-policy-utils.jsx:108 -msgid "Select a mechanism to make space" -msgstr "" - -#: src/components/storage/space-policy-utils.jsx:127 -#, c-format -msgid "deleting all content of the installation device" -msgid_plural "deleting all content of the %d selected disks" -msgstr[0] "" -msgstr[1] "" - -#: src/components/storage/space-policy-utils.jsx:137 -#, c-format -msgid "shrinking partitions of the installation device" -msgid_plural "shrinking partitions of the %d selected disks" -msgstr[0] "" -msgstr[1] "" - -#. TRANSLATORS: This is presented next to the label "Find space", so the whole sentence -#. would read as "Find space without modifying any partition". -#: src/components/storage/space-policy-utils.jsx:145 -msgid "without modifying any partition" -msgstr "" - -#: src/components/storage/space-policy-utils.jsx:160 -#, c-format -msgid "This will only affect the installation device" -msgid_plural "This will affect the %d disks selected for installation" -msgstr[0] "" -msgstr[1] "" - #: src/components/storage/utils.js:44 msgid "KiB" msgstr "კიბ" @@ -2070,3 +2135,6 @@ msgstr "მომხმარებელი" #: src/components/users/UsersPage.jsx:34 msgid "Root authentication" msgstr "Root-ით ავთენტიკაცია" + +#~ msgid "Space Policy" +#~ msgstr "ადგილის პოლიტიკა" diff --git a/web/po/mk.po b/web/po/mk.po index 13a71dafc9..862b488ff9 100644 --- a/web/po/mk.po +++ b/web/po/mk.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-02-18 02:07+0000\n" +"POT-Creation-Date: 2024-02-25 02:07+0000\n" "PO-Revision-Date: 2023-12-31 20:39+0000\n" "Last-Translator: Kristijan Fremen Velkovski \n" "Language-Team: Macedonian LVM " +"Volume Group for installation." +msgstr "" + +#: src/components/storage/ProposalFileSystemsSection.jsx:70 +msgid "File systems" +msgstr "" + +#: src/components/storage/ProposalPageMenu.jsx:40 +msgid "Manage and format" +msgstr "" + +#: src/components/storage/ProposalPageMenu.jsx:58 +msgid "Activate disks" +msgstr "" + +#: src/components/storage/ProposalPageMenu.jsx:60 +msgid "zFCP" +msgstr "" + +#: src/components/storage/ProposalPageMenu.jsx:76 +msgid "Connect to iSCSI targets" +msgstr "" + +#: src/components/storage/ProposalPageMenu.jsx:78 +msgid "iSCSI" +msgstr "" + #. TRANSLATORS: The word 'directly' is key here. For example, booting to the installer media and then choosing #. 'Boot from Hard Disk' from there will not work. Keep it sort (this is a hint in a form) but keep it clear. #. Do not translate 'abbr' and 'title', they are part of the HTML markup. -#: src/components/storage/ProposalSettingsSection.jsx:426 +#: src/components/storage/ProposalSettingsSection.jsx:86 msgid "" "The password will not be needed to boot and access the data if the TPM can verify the integrity of the " @@ -1247,40 +1266,161 @@ msgid "" "first run." msgstr "" -#: src/components/storage/ProposalSettingsSection.jsx:444 +#: src/components/storage/ProposalSettingsSection.jsx:104 msgid "Use the TPM to decrypt automatically on each boot" msgstr "" -#: src/components/storage/ProposalSettingsSection.jsx:515 +#: src/components/storage/ProposalSettingsSection.jsx:175 msgid "Change encryption settings" msgstr "" -#: src/components/storage/ProposalSettingsSection.jsx:520 -#: src/components/storage/ProposalSettingsSection.jsx:541 +#: src/components/storage/ProposalSettingsSection.jsx:180 +#: src/components/storage/ProposalSettingsSection.jsx:201 msgid "Encryption settings" msgstr "" -#: src/components/storage/ProposalSettingsSection.jsx:534 +#: src/components/storage/ProposalSettingsSection.jsx:194 msgid "Use encryption" msgstr "" -#: src/components/storage/ProposalSettingsSection.jsx:621 +#: src/components/storage/ProposalSettingsSection.jsx:244 +msgid "Settings" +msgstr "" + +#: src/components/storage/ProposalSpacePolicySection.jsx:50 +msgid "Delete current content" +msgstr "" + +#: src/components/storage/ProposalSpacePolicySection.jsx:51 +msgid "All partitions will be removed and any data in the disks will be lost." +msgstr "" + +#: src/components/storage/ProposalSpacePolicySection.jsx:55 +msgid "Shrink existing partitions" +msgstr "" + +#: src/components/storage/ProposalSpacePolicySection.jsx:56 +msgid "The data is kept, but the current partitions will be resized as needed." +msgstr "" + +#: src/components/storage/ProposalSpacePolicySection.jsx:60 +msgid "Use available space" +msgstr "" + +#: src/components/storage/ProposalSpacePolicySection.jsx:61 msgid "" -"Select how to make free space in the disks selected for allocating the " -"file systems." +"The data is kept. Only the space not assigned to any partition will be used." msgstr "" -#. TRANSLATORS: To be completed with the rest of a sentence like "deleting all content" -#: src/components/storage/ProposalSettingsSection.jsx:627 -msgid "Find space" +#: src/components/storage/ProposalSpacePolicySection.jsx:65 +msgid "Custom" msgstr "" -#: src/components/storage/ProposalSettingsSection.jsx:631 -msgid "Space Policy" +#: src/components/storage/ProposalSpacePolicySection.jsx:66 +msgid "Select what to do with each partition." msgstr "" -#: src/components/storage/ProposalSettingsSection.jsx:708 -msgid "Settings" +#: src/components/storage/ProposalSpacePolicySection.jsx:72 +msgid "Used device" +msgstr "" + +#: src/components/storage/ProposalSpacePolicySection.jsx:73 +msgid "Current content" +msgstr "" + +#: src/components/storage/ProposalSpacePolicySection.jsx:74 +#: src/components/storage/ProposalVolumes.jsx:309 +#: src/components/storage/VolumeForm.jsx:795 +msgid "Size" +msgstr "" + +#: src/components/storage/ProposalSpacePolicySection.jsx:75 +#: src/components/storage/ProposalVolumes.jsx:308 +msgid "Details" +msgstr "" + +#: src/components/storage/ProposalSpacePolicySection.jsx:76 +msgid "Action" +msgstr "" + +#. TRANSLATORS: %s is replaced by partition table type (e.g., GPT) +#: src/components/storage/ProposalSpacePolicySection.jsx:110 +#, c-format +msgid "%s partition table" +msgstr "" + +#: src/components/storage/ProposalSpacePolicySection.jsx:121 +msgid "EFI system partition" +msgstr "" + +#. TRANSLATORS: %s is replaced by a file system type (e.g., btrfs). +#: src/components/storage/ProposalSpacePolicySection.jsx:124 +#, c-format +msgid "%s file system" +msgstr "" + +#. TRANSLATORS: %s is replaced by a LVM volume group name (e.g., /dev/vg0). +#: src/components/storage/ProposalSpacePolicySection.jsx:131 +#, c-format +msgid "LVM physical volume of %s" +msgstr "" + +#. TRANSLATORS: %s is replaced by a RAID name (e.g., /dev/md0). +#: src/components/storage/ProposalSpacePolicySection.jsx:134 +#, c-format +msgid "Member of RAID %s" +msgstr "" + +#: src/components/storage/ProposalSpacePolicySection.jsx:136 +msgid "Not identified" +msgstr "" + +#. TRANSLATORS: %s is replaced by a disk size (e.g., 20 GiB) +#: src/components/storage/ProposalSpacePolicySection.jsx:173 +#, c-format +msgid "%s unused" +msgstr "" + +#. TRANSLATORS: %s is replaced by a disk size (e.g., 2 GiB) +#: src/components/storage/ProposalSpacePolicySection.jsx:186 +#, c-format +msgid "Shrinkable by %s" +msgstr "" + +#. TRANSLATORS: %s is replaced by a device name (e.g., /dev/sda) +#: src/components/storage/ProposalSpacePolicySection.jsx:221 +#, c-format +msgid "Space action selector for %s" +msgstr "" + +#: src/components/storage/ProposalSpacePolicySection.jsx:224 +#: src/components/storage/ProposalVolumes.jsx:229 +#: src/components/storage/iscsi/NodesPresenter.jsx:77 +msgid "Delete" +msgstr "" + +#: src/components/storage/ProposalSpacePolicySection.jsx:228 +msgid "Allow resize" +msgstr "" + +#: src/components/storage/ProposalSpacePolicySection.jsx:230 +msgid "Do not modify" +msgstr "" + +#: src/components/storage/ProposalSpacePolicySection.jsx:382 +msgid "Actions to find space" +msgstr "" + +#. TRANSLATORS: The storage "Find Space" section's title +#: src/components/storage/ProposalSpacePolicySection.jsx:452 +msgid "Find Space" +msgstr "" + +#. TRANSLATORS: The storage "Find space" sections's description +#: src/components/storage/ProposalSpacePolicySection.jsx:454 +msgid "" +"Allocating the file systems might need to find free space in the devices " +"listed below. Choose how to do it." msgstr "" #. TRANSLATORS: header for a list of items @@ -1349,11 +1489,6 @@ msgstr "" msgid "transactional" msgstr "" -#: src/components/storage/ProposalVolumes.jsx:229 -#: src/components/storage/iscsi/NodesPresenter.jsx:77 -msgid "Delete" -msgstr "" - #: src/components/storage/ProposalVolumes.jsx:275 msgid "Edit file system" msgstr "" @@ -1364,23 +1499,10 @@ msgstr "" msgid "Mount point" msgstr "" -#: src/components/storage/ProposalVolumes.jsx:308 -msgid "Details" -msgstr "" - -#: src/components/storage/ProposalVolumes.jsx:309 -#: src/components/storage/VolumeForm.jsx:795 -msgid "Size" -msgstr "" - #: src/components/storage/ProposalVolumes.jsx:345 msgid "Table with mount points" msgstr "" -#: src/components/storage/ProposalVolumes.jsx:408 -msgid "File systems to create in your system" -msgstr "" - #: src/components/storage/VolumeForm.jsx:102 msgid "Select a value" msgstr "" @@ -1836,68 +1958,6 @@ msgstr "" msgid "Targets" msgstr "" -#. TRANSLATORS: automatic actions to find space for installation in the target disk(s) -#: src/components/storage/space-policy-utils.jsx:45 -msgid "Delete current content" -msgstr "" - -#. TRANSLATORS: automatic actions to find space for installation in the target disk(s) -#: src/components/storage/space-policy-utils.jsx:49 -msgid "Shrink existing partitions" -msgstr "" - -#. TRANSLATORS: automatic actions to find space for installation in the target disk(s) -#: src/components/storage/space-policy-utils.jsx:53 -msgid "Use available space" -msgstr "" - -#: src/components/storage/space-policy-utils.jsx:65 -msgid "All partitions will be removed and any data in the disks will be lost." -msgstr "" - -#: src/components/storage/space-policy-utils.jsx:68 -msgid "" -"The data is kept, but the current partitions will be resized as needed to " -"make enough space." -msgstr "" - -#: src/components/storage/space-policy-utils.jsx:71 -msgid "" -"The data is kept and existing partitions will not be modified. Only the " -"space that is not assigned to any partition will be used." -msgstr "" - -#: src/components/storage/space-policy-utils.jsx:108 -msgid "Select a mechanism to make space" -msgstr "" - -#: src/components/storage/space-policy-utils.jsx:127 -#, c-format -msgid "deleting all content of the installation device" -msgid_plural "deleting all content of the %d selected disks" -msgstr[0] "" -msgstr[1] "" - -#: src/components/storage/space-policy-utils.jsx:137 -#, c-format -msgid "shrinking partitions of the installation device" -msgid_plural "shrinking partitions of the %d selected disks" -msgstr[0] "" -msgstr[1] "" - -#. TRANSLATORS: This is presented next to the label "Find space", so the whole sentence -#. would read as "Find space without modifying any partition". -#: src/components/storage/space-policy-utils.jsx:145 -msgid "without modifying any partition" -msgstr "" - -#: src/components/storage/space-policy-utils.jsx:160 -#, c-format -msgid "This will only affect the installation device" -msgid_plural "This will affect the %d disks selected for installation" -msgstr[0] "" -msgstr[1] "" - #: src/components/storage/utils.js:44 msgid "KiB" msgstr "" diff --git a/web/po/nl.po b/web/po/nl.po index 2994d20e6e..838c726062 100644 --- a/web/po/nl.po +++ b/web/po/nl.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-02-18 02:07+0000\n" +"POT-Creation-Date: 2024-02-25 02:07+0000\n" "PO-Revision-Date: 2023-12-31 20:39+0000\n" "Last-Translator: anonymous \n" "Language-Team: Dutch LVM " +"Volume Group for installation." +msgstr "" + +#: src/components/storage/ProposalFileSystemsSection.jsx:70 +#, fuzzy +msgid "File systems" +msgstr "Bestandssysteem type" + +#: src/components/storage/ProposalPageMenu.jsx:40 +msgid "Manage and format" +msgstr "Beheer en formatteer" + +#: src/components/storage/ProposalPageMenu.jsx:58 +msgid "Activate disks" +msgstr "Activeer disks" + +#: src/components/storage/ProposalPageMenu.jsx:60 +msgid "zFCP" +msgstr "zFCP" + +#: src/components/storage/ProposalPageMenu.jsx:76 +msgid "Connect to iSCSI targets" +msgstr "Verbind met iSCSI doelen" + +#: src/components/storage/ProposalPageMenu.jsx:78 +msgid "iSCSI" +msgstr "iSCSI" + #. TRANSLATORS: The word 'directly' is key here. For example, booting to the installer media and then choosing #. 'Boot from Hard Disk' from there will not work. Keep it sort (this is a hint in a form) but keep it clear. #. Do not translate 'abbr' and 'title', they are part of the HTML markup. -#: src/components/storage/ProposalSettingsSection.jsx:426 +#: src/components/storage/ProposalSettingsSection.jsx:86 msgid "" "The password will not be needed to boot and access the data if the TPM can verify the integrity of the " @@ -1295,42 +1316,169 @@ msgid "" "first run." msgstr "" -#: src/components/storage/ProposalSettingsSection.jsx:444 +#: src/components/storage/ProposalSettingsSection.jsx:104 msgid "Use the TPM to decrypt automatically on each boot" msgstr "" -#: src/components/storage/ProposalSettingsSection.jsx:515 +#: src/components/storage/ProposalSettingsSection.jsx:175 #, fuzzy msgid "Change encryption settings" msgstr "Encryptie instellingen" -#: src/components/storage/ProposalSettingsSection.jsx:520 -#: src/components/storage/ProposalSettingsSection.jsx:541 +#: src/components/storage/ProposalSettingsSection.jsx:180 +#: src/components/storage/ProposalSettingsSection.jsx:201 msgid "Encryption settings" msgstr "Encryptie instellingen" -#: src/components/storage/ProposalSettingsSection.jsx:534 +#: src/components/storage/ProposalSettingsSection.jsx:194 msgid "Use encryption" msgstr "Gebruik encryptie" -#: src/components/storage/ProposalSettingsSection.jsx:621 +#: src/components/storage/ProposalSettingsSection.jsx:244 +msgid "Settings" +msgstr "Instellingen" + +#: src/components/storage/ProposalSpacePolicySection.jsx:50 +msgid "Delete current content" +msgstr "" + +#: src/components/storage/ProposalSpacePolicySection.jsx:51 +msgid "All partitions will be removed and any data in the disks will be lost." +msgstr "" + +#: src/components/storage/ProposalSpacePolicySection.jsx:55 +msgid "Shrink existing partitions" +msgstr "" + +#: src/components/storage/ProposalSpacePolicySection.jsx:56 +msgid "The data is kept, but the current partitions will be resized as needed." +msgstr "" + +#: src/components/storage/ProposalSpacePolicySection.jsx:60 +#, fuzzy +msgid "Use available space" +msgstr "Beschikbare apparaten" + +#: src/components/storage/ProposalSpacePolicySection.jsx:61 msgid "" -"Select how to make free space in the disks selected for allocating the " -"file systems." +"The data is kept. Only the space not assigned to any partition will be used." msgstr "" -#. TRANSLATORS: To be completed with the rest of a sentence like "deleting all content" -#: src/components/storage/ProposalSettingsSection.jsx:627 -msgid "Find space" +#: src/components/storage/ProposalSpacePolicySection.jsx:65 +#, fuzzy +msgid "Custom" +msgstr "Installatie apparaat" + +#: src/components/storage/ProposalSpacePolicySection.jsx:66 +msgid "Select what to do with each partition." msgstr "" -#: src/components/storage/ProposalSettingsSection.jsx:631 -msgid "Space Policy" +#: src/components/storage/ProposalSpacePolicySection.jsx:72 +#, fuzzy +msgid "Used device" +msgstr "Lees zFCP apparaten" + +#: src/components/storage/ProposalSpacePolicySection.jsx:73 +msgid "Current content" msgstr "" -#: src/components/storage/ProposalSettingsSection.jsx:708 -msgid "Settings" -msgstr "Instellingen" +#: src/components/storage/ProposalSpacePolicySection.jsx:74 +#: src/components/storage/ProposalVolumes.jsx:309 +#: src/components/storage/VolumeForm.jsx:795 +msgid "Size" +msgstr "Grootte" + +#: src/components/storage/ProposalSpacePolicySection.jsx:75 +#: src/components/storage/ProposalVolumes.jsx:308 +msgid "Details" +msgstr "Details" + +#: src/components/storage/ProposalSpacePolicySection.jsx:76 +#, fuzzy +msgid "Action" +msgstr "Acties" + +#. TRANSLATORS: %s is replaced by partition table type (e.g., GPT) +#: src/components/storage/ProposalSpacePolicySection.jsx:110 +#, fuzzy, c-format +msgid "%s partition table" +msgstr "partitie" + +#: src/components/storage/ProposalSpacePolicySection.jsx:121 +#, fuzzy +msgid "EFI system partition" +msgstr "partitie" + +#. TRANSLATORS: %s is replaced by a file system type (e.g., btrfs). +#: src/components/storage/ProposalSpacePolicySection.jsx:124 +#, fuzzy, c-format +msgid "%s file system" +msgstr "Voeg bestandssysteem toe" + +#. TRANSLATORS: %s is replaced by a LVM volume group name (e.g., /dev/vg0). +#: src/components/storage/ProposalSpacePolicySection.jsx:131 +#, c-format +msgid "LVM physical volume of %s" +msgstr "" + +#. TRANSLATORS: %s is replaced by a RAID name (e.g., /dev/md0). +#: src/components/storage/ProposalSpacePolicySection.jsx:134 +#, fuzzy, c-format +msgid "Member of RAID %s" +msgstr "Leden: %s" + +#: src/components/storage/ProposalSpacePolicySection.jsx:136 +msgid "Not identified" +msgstr "" + +#. TRANSLATORS: %s is replaced by a disk size (e.g., 20 GiB) +#: src/components/storage/ProposalSpacePolicySection.jsx:173 +#, c-format +msgid "%s unused" +msgstr "" + +#. TRANSLATORS: %s is replaced by a disk size (e.g., 2 GiB) +#: src/components/storage/ProposalSpacePolicySection.jsx:186 +#, c-format +msgid "Shrinkable by %s" +msgstr "" + +#. TRANSLATORS: %s is replaced by a device name (e.g., /dev/sda) +#: src/components/storage/ProposalSpacePolicySection.jsx:221 +#, c-format +msgid "Space action selector for %s" +msgstr "" + +#: src/components/storage/ProposalSpacePolicySection.jsx:224 +#: src/components/storage/ProposalVolumes.jsx:229 +#: src/components/storage/iscsi/NodesPresenter.jsx:77 +msgid "Delete" +msgstr "Verwijderen" + +#: src/components/storage/ProposalSpacePolicySection.jsx:228 +msgid "Allow resize" +msgstr "" + +#: src/components/storage/ProposalSpacePolicySection.jsx:230 +msgid "Do not modify" +msgstr "" + +#: src/components/storage/ProposalSpacePolicySection.jsx:382 +#, fuzzy +msgid "Actions to find space" +msgstr "Acties voor verbinding %s" + +#. TRANSLATORS: The storage "Find Space" section's title +#: src/components/storage/ProposalSpacePolicySection.jsx:452 +msgid "Find Space" +msgstr "" + +#. TRANSLATORS: The storage "Find space" sections's description +#: src/components/storage/ProposalSpacePolicySection.jsx:454 +msgid "" +"Allocating the file systems might need to find free space in the devices " +"listed below. Choose how to do it." +msgstr "" #. TRANSLATORS: header for a list of items #: src/components/storage/ProposalVolumes.jsx:59 @@ -1399,11 +1547,6 @@ msgstr "met snapshots" msgid "transactional" msgstr "Voer een actie uit" -#: src/components/storage/ProposalVolumes.jsx:229 -#: src/components/storage/iscsi/NodesPresenter.jsx:77 -msgid "Delete" -msgstr "Verwijderen" - #: src/components/storage/ProposalVolumes.jsx:275 msgid "Edit file system" msgstr "Wijzig bestandssysteem" @@ -1414,23 +1557,10 @@ msgstr "Wijzig bestandssysteem" msgid "Mount point" msgstr "Koppelpunt" -#: src/components/storage/ProposalVolumes.jsx:308 -msgid "Details" -msgstr "Details" - -#: src/components/storage/ProposalVolumes.jsx:309 -#: src/components/storage/VolumeForm.jsx:795 -msgid "Size" -msgstr "Grootte" - #: src/components/storage/ProposalVolumes.jsx:345 msgid "Table with mount points" msgstr "Tabel met koppelpunten" -#: src/components/storage/ProposalVolumes.jsx:408 -msgid "File systems to create in your system" -msgstr "Bestandssystemen die worden gemaakt in uw systeem" - #: src/components/storage/VolumeForm.jsx:102 #, fuzzy msgid "Select a value" @@ -1898,70 +2028,6 @@ msgstr "Detecteer" msgid "Targets" msgstr "Doelen" -#. TRANSLATORS: automatic actions to find space for installation in the target disk(s) -#: src/components/storage/space-policy-utils.jsx:45 -msgid "Delete current content" -msgstr "" - -#. TRANSLATORS: automatic actions to find space for installation in the target disk(s) -#: src/components/storage/space-policy-utils.jsx:49 -msgid "Shrink existing partitions" -msgstr "" - -#. TRANSLATORS: automatic actions to find space for installation in the target disk(s) -#: src/components/storage/space-policy-utils.jsx:53 -#, fuzzy -msgid "Use available space" -msgstr "Beschikbare apparaten" - -#: src/components/storage/space-policy-utils.jsx:65 -msgid "All partitions will be removed and any data in the disks will be lost." -msgstr "" - -#: src/components/storage/space-policy-utils.jsx:68 -msgid "" -"The data is kept, but the current partitions will be resized as needed to " -"make enough space." -msgstr "" - -#: src/components/storage/space-policy-utils.jsx:71 -msgid "" -"The data is kept and existing partitions will not be modified. Only the " -"space that is not assigned to any partition will be used." -msgstr "" - -#: src/components/storage/space-policy-utils.jsx:108 -msgid "Select a mechanism to make space" -msgstr "" - -#: src/components/storage/space-policy-utils.jsx:127 -#, c-format -msgid "deleting all content of the installation device" -msgid_plural "deleting all content of the %d selected disks" -msgstr[0] "" -msgstr[1] "" - -#: src/components/storage/space-policy-utils.jsx:137 -#, c-format -msgid "shrinking partitions of the installation device" -msgid_plural "shrinking partitions of the %d selected disks" -msgstr[0] "" -msgstr[1] "" - -#. TRANSLATORS: This is presented next to the label "Find space", so the whole sentence -#. would read as "Find space without modifying any partition". -#: src/components/storage/space-policy-utils.jsx:145 -#, fuzzy -msgid "without modifying any partition" -msgstr "%s met %d partities" - -#: src/components/storage/space-policy-utils.jsx:160 -#, c-format -msgid "This will only affect the installation device" -msgid_plural "This will affect the %d disks selected for installation" -msgstr[0] "" -msgstr[1] "" - #: src/components/storage/utils.js:44 msgid "KiB" msgstr "KiB" @@ -2145,6 +2211,16 @@ msgstr "Gebruiker" msgid "Root authentication" msgstr "Root authenticatie" +#~ msgid "Devices will not be modified until installation starts." +#~ msgstr "Apparaten worden niet gewijzigd tot de installatie start." + +#~ msgid "File systems to create in your system" +#~ msgstr "Bestandssystemen die worden gemaakt in uw systeem" + +#, fuzzy +#~ msgid "without modifying any partition" +#~ msgstr "%s met %d partities" + #, c-format #~ msgid "Edit %s connection" #~ msgstr "Wijzig %s verbinding" diff --git a/web/po/pt_BR.po b/web/po/pt_BR.po index 9c5a0189c4..02502adb73 100644 --- a/web/po/pt_BR.po +++ b/web/po/pt_BR.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-02-18 02:07+0000\n" +"POT-Creation-Date: 2024-02-25 02:07+0000\n" "PO-Revision-Date: 2023-12-31 20:39+0000\n" "Last-Translator: anonymous \n" "Language-Team: Portuguese (Brazil) LVM " +"Volume Group for installation." +msgstr "" + +#: src/components/storage/ProposalFileSystemsSection.jsx:70 +#, fuzzy +msgid "File systems" +msgstr "Tipo de sistema de arquivos" + +#: src/components/storage/ProposalPageMenu.jsx:40 +msgid "Manage and format" +msgstr "" + +#: src/components/storage/ProposalPageMenu.jsx:58 +msgid "Activate disks" +msgstr "" + +#: src/components/storage/ProposalPageMenu.jsx:60 +msgid "zFCP" +msgstr "zFCP" + +#: src/components/storage/ProposalPageMenu.jsx:76 +msgid "Connect to iSCSI targets" +msgstr "" + +#: src/components/storage/ProposalPageMenu.jsx:78 +msgid "iSCSI" +msgstr "iSCSI" + #. TRANSLATORS: The word 'directly' is key here. For example, booting to the installer media and then choosing #. 'Boot from Hard Disk' from there will not work. Keep it sort (this is a hint in a form) but keep it clear. #. Do not translate 'abbr' and 'title', they are part of the HTML markup. -#: src/components/storage/ProposalSettingsSection.jsx:426 +#: src/components/storage/ProposalSettingsSection.jsx:86 msgid "" "The password will not be needed to boot and access the data if the TPM can verify the integrity of the " @@ -1272,42 +1293,166 @@ msgid "" "first run." msgstr "" -#: src/components/storage/ProposalSettingsSection.jsx:444 +#: src/components/storage/ProposalSettingsSection.jsx:104 msgid "Use the TPM to decrypt automatically on each boot" msgstr "" -#: src/components/storage/ProposalSettingsSection.jsx:515 +#: src/components/storage/ProposalSettingsSection.jsx:175 #, fuzzy msgid "Change encryption settings" msgstr "Usar criptografia" -#: src/components/storage/ProposalSettingsSection.jsx:520 -#: src/components/storage/ProposalSettingsSection.jsx:541 +#: src/components/storage/ProposalSettingsSection.jsx:180 +#: src/components/storage/ProposalSettingsSection.jsx:201 msgid "Encryption settings" msgstr "" -#: src/components/storage/ProposalSettingsSection.jsx:534 +#: src/components/storage/ProposalSettingsSection.jsx:194 msgid "Use encryption" msgstr "Usar criptografia" -#: src/components/storage/ProposalSettingsSection.jsx:621 +#: src/components/storage/ProposalSettingsSection.jsx:244 +msgid "Settings" +msgstr "Configurações" + +#: src/components/storage/ProposalSpacePolicySection.jsx:50 +msgid "Delete current content" +msgstr "" + +#: src/components/storage/ProposalSpacePolicySection.jsx:51 +msgid "All partitions will be removed and any data in the disks will be lost." +msgstr "" + +#: src/components/storage/ProposalSpacePolicySection.jsx:55 +msgid "Shrink existing partitions" +msgstr "" + +#: src/components/storage/ProposalSpacePolicySection.jsx:56 +msgid "The data is kept, but the current partitions will be resized as needed." +msgstr "" + +#: src/components/storage/ProposalSpacePolicySection.jsx:60 +msgid "Use available space" +msgstr "" + +#: src/components/storage/ProposalSpacePolicySection.jsx:61 msgid "" -"Select how to make free space in the disks selected for allocating the " -"file systems." +"The data is kept. Only the space not assigned to any partition will be used." msgstr "" -#. TRANSLATORS: To be completed with the rest of a sentence like "deleting all content" -#: src/components/storage/ProposalSettingsSection.jsx:627 -msgid "Find space" +#: src/components/storage/ProposalSpacePolicySection.jsx:65 +msgid "Custom" msgstr "" -#: src/components/storage/ProposalSettingsSection.jsx:631 -msgid "Space Policy" +#: src/components/storage/ProposalSpacePolicySection.jsx:66 +msgid "Select what to do with each partition." msgstr "" -#: src/components/storage/ProposalSettingsSection.jsx:708 -msgid "Settings" -msgstr "Configurações" +#: src/components/storage/ProposalSpacePolicySection.jsx:72 +msgid "Used device" +msgstr "" + +#: src/components/storage/ProposalSpacePolicySection.jsx:73 +msgid "Current content" +msgstr "" + +#: src/components/storage/ProposalSpacePolicySection.jsx:74 +#: src/components/storage/ProposalVolumes.jsx:309 +#: src/components/storage/VolumeForm.jsx:795 +msgid "Size" +msgstr "Tamanho" + +#: src/components/storage/ProposalSpacePolicySection.jsx:75 +#: src/components/storage/ProposalVolumes.jsx:308 +msgid "Details" +msgstr "Detalhes" + +#: src/components/storage/ProposalSpacePolicySection.jsx:76 +#, fuzzy +msgid "Action" +msgstr "Ações" + +#. TRANSLATORS: %s is replaced by partition table type (e.g., GPT) +#: src/components/storage/ProposalSpacePolicySection.jsx:110 +#, fuzzy, c-format +msgid "%s partition table" +msgstr "partição" + +#: src/components/storage/ProposalSpacePolicySection.jsx:121 +#, fuzzy +msgid "EFI system partition" +msgstr "partição" + +#. TRANSLATORS: %s is replaced by a file system type (e.g., btrfs). +#: src/components/storage/ProposalSpacePolicySection.jsx:124 +#, fuzzy, c-format +msgid "%s file system" +msgstr "Adicionar sistema de arquivos" + +#. TRANSLATORS: %s is replaced by a LVM volume group name (e.g., /dev/vg0). +#: src/components/storage/ProposalSpacePolicySection.jsx:131 +#, c-format +msgid "LVM physical volume of %s" +msgstr "" + +#. TRANSLATORS: %s is replaced by a RAID name (e.g., /dev/md0). +#: src/components/storage/ProposalSpacePolicySection.jsx:134 +#, c-format +msgid "Member of RAID %s" +msgstr "" + +#: src/components/storage/ProposalSpacePolicySection.jsx:136 +msgid "Not identified" +msgstr "" + +#. TRANSLATORS: %s is replaced by a disk size (e.g., 20 GiB) +#: src/components/storage/ProposalSpacePolicySection.jsx:173 +#, c-format +msgid "%s unused" +msgstr "" + +#. TRANSLATORS: %s is replaced by a disk size (e.g., 2 GiB) +#: src/components/storage/ProposalSpacePolicySection.jsx:186 +#, c-format +msgid "Shrinkable by %s" +msgstr "" + +#. TRANSLATORS: %s is replaced by a device name (e.g., /dev/sda) +#: src/components/storage/ProposalSpacePolicySection.jsx:221 +#, c-format +msgid "Space action selector for %s" +msgstr "" + +#: src/components/storage/ProposalSpacePolicySection.jsx:224 +#: src/components/storage/ProposalVolumes.jsx:229 +#: src/components/storage/iscsi/NodesPresenter.jsx:77 +msgid "Delete" +msgstr "Excluir" + +#: src/components/storage/ProposalSpacePolicySection.jsx:228 +msgid "Allow resize" +msgstr "" + +#: src/components/storage/ProposalSpacePolicySection.jsx:230 +msgid "Do not modify" +msgstr "" + +#: src/components/storage/ProposalSpacePolicySection.jsx:382 +#, fuzzy +msgid "Actions to find space" +msgstr "Ações para a conexão %s" + +#. TRANSLATORS: The storage "Find Space" section's title +#: src/components/storage/ProposalSpacePolicySection.jsx:452 +msgid "Find Space" +msgstr "" + +#. TRANSLATORS: The storage "Find space" sections's description +#: src/components/storage/ProposalSpacePolicySection.jsx:454 +msgid "" +"Allocating the file systems might need to find free space in the devices " +"listed below. Choose how to do it." +msgstr "" #. TRANSLATORS: header for a list of items #: src/components/storage/ProposalVolumes.jsx:59 @@ -1375,11 +1520,6 @@ msgstr "com instantâneos" msgid "transactional" msgstr "transacional" -#: src/components/storage/ProposalVolumes.jsx:229 -#: src/components/storage/iscsi/NodesPresenter.jsx:77 -msgid "Delete" -msgstr "Excluir" - #: src/components/storage/ProposalVolumes.jsx:275 msgid "Edit file system" msgstr "Editar sistema de arquivos" @@ -1390,23 +1530,10 @@ msgstr "Editar sistema de arquivos" msgid "Mount point" msgstr "Ponto de montagem" -#: src/components/storage/ProposalVolumes.jsx:308 -msgid "Details" -msgstr "Detalhes" - -#: src/components/storage/ProposalVolumes.jsx:309 -#: src/components/storage/VolumeForm.jsx:795 -msgid "Size" -msgstr "Tamanho" - #: src/components/storage/ProposalVolumes.jsx:345 msgid "Table with mount points" msgstr "Tabela com pontos de montagem" -#: src/components/storage/ProposalVolumes.jsx:408 -msgid "File systems to create in your system" -msgstr "Sistemas de arquivos para criar em seu sistema" - #: src/components/storage/VolumeForm.jsx:102 #, fuzzy msgid "Select a value" @@ -1868,68 +1995,6 @@ msgstr "Discover" msgid "Targets" msgstr "Destinos" -#. TRANSLATORS: automatic actions to find space for installation in the target disk(s) -#: src/components/storage/space-policy-utils.jsx:45 -msgid "Delete current content" -msgstr "" - -#. TRANSLATORS: automatic actions to find space for installation in the target disk(s) -#: src/components/storage/space-policy-utils.jsx:49 -msgid "Shrink existing partitions" -msgstr "" - -#. TRANSLATORS: automatic actions to find space for installation in the target disk(s) -#: src/components/storage/space-policy-utils.jsx:53 -msgid "Use available space" -msgstr "" - -#: src/components/storage/space-policy-utils.jsx:65 -msgid "All partitions will be removed and any data in the disks will be lost." -msgstr "" - -#: src/components/storage/space-policy-utils.jsx:68 -msgid "" -"The data is kept, but the current partitions will be resized as needed to " -"make enough space." -msgstr "" - -#: src/components/storage/space-policy-utils.jsx:71 -msgid "" -"The data is kept and existing partitions will not be modified. Only the " -"space that is not assigned to any partition will be used." -msgstr "" - -#: src/components/storage/space-policy-utils.jsx:108 -msgid "Select a mechanism to make space" -msgstr "" - -#: src/components/storage/space-policy-utils.jsx:127 -#, c-format -msgid "deleting all content of the installation device" -msgid_plural "deleting all content of the %d selected disks" -msgstr[0] "" -msgstr[1] "" - -#: src/components/storage/space-policy-utils.jsx:137 -#, c-format -msgid "shrinking partitions of the installation device" -msgid_plural "shrinking partitions of the %d selected disks" -msgstr[0] "" -msgstr[1] "" - -#. TRANSLATORS: This is presented next to the label "Find space", so the whole sentence -#. would read as "Find space without modifying any partition". -#: src/components/storage/space-policy-utils.jsx:145 -msgid "without modifying any partition" -msgstr "" - -#: src/components/storage/space-policy-utils.jsx:160 -#, c-format -msgid "This will only affect the installation device" -msgid_plural "This will affect the %d disks selected for installation" -msgstr[0] "" -msgstr[1] "" - #: src/components/storage/utils.js:44 msgid "KiB" msgstr "KiB" @@ -2108,6 +2173,9 @@ msgstr "Usuário" msgid "Root authentication" msgstr "" +#~ msgid "File systems to create in your system" +#~ msgstr "Sistemas de arquivos para criar em seu sistema" + #, c-format #~ msgid "Edit %s connection" #~ msgstr "Editar conexão %s" diff --git a/web/po/ru.po b/web/po/ru.po index 71a0a07501..e525a627cf 100644 --- a/web/po/ru.po +++ b/web/po/ru.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-02-18 02:07+0000\n" +"POT-Creation-Date: 2024-02-25 02:07+0000\n" "PO-Revision-Date: 2023-12-31 20:39+0000\n" "Last-Translator: Milachew \n" "Language-Team: Russian LVM " +"Volume Group for installation." +msgstr "" + +#: src/components/storage/ProposalFileSystemsSection.jsx:70 +msgid "File systems" +msgstr "" + +#: src/components/storage/ProposalPageMenu.jsx:40 +msgid "Manage and format" +msgstr "" + +#: src/components/storage/ProposalPageMenu.jsx:58 +msgid "Activate disks" +msgstr "" + +#: src/components/storage/ProposalPageMenu.jsx:60 +msgid "zFCP" +msgstr "" + +#: src/components/storage/ProposalPageMenu.jsx:76 +msgid "Connect to iSCSI targets" +msgstr "" + +#: src/components/storage/ProposalPageMenu.jsx:78 +msgid "iSCSI" +msgstr "" + #. TRANSLATORS: The word 'directly' is key here. For example, booting to the installer media and then choosing #. 'Boot from Hard Disk' from there will not work. Keep it sort (this is a hint in a form) but keep it clear. #. Do not translate 'abbr' and 'title', they are part of the HTML markup. -#: src/components/storage/ProposalSettingsSection.jsx:426 +#: src/components/storage/ProposalSettingsSection.jsx:86 msgid "" "The password will not be needed to boot and access the data if the TPM can verify the integrity of the " @@ -1285,40 +1307,163 @@ msgid "" "first run." msgstr "" -#: src/components/storage/ProposalSettingsSection.jsx:444 +#: src/components/storage/ProposalSettingsSection.jsx:104 msgid "Use the TPM to decrypt automatically on each boot" msgstr "" -#: src/components/storage/ProposalSettingsSection.jsx:515 +#: src/components/storage/ProposalSettingsSection.jsx:175 msgid "Change encryption settings" msgstr "" -#: src/components/storage/ProposalSettingsSection.jsx:520 -#: src/components/storage/ProposalSettingsSection.jsx:541 +#: src/components/storage/ProposalSettingsSection.jsx:180 +#: src/components/storage/ProposalSettingsSection.jsx:201 msgid "Encryption settings" msgstr "" -#: src/components/storage/ProposalSettingsSection.jsx:534 +#: src/components/storage/ProposalSettingsSection.jsx:194 msgid "Use encryption" msgstr "" -#: src/components/storage/ProposalSettingsSection.jsx:621 +#: src/components/storage/ProposalSettingsSection.jsx:244 +msgid "Settings" +msgstr "" + +#: src/components/storage/ProposalSpacePolicySection.jsx:50 +msgid "Delete current content" +msgstr "" + +#: src/components/storage/ProposalSpacePolicySection.jsx:51 +msgid "All partitions will be removed and any data in the disks will be lost." +msgstr "" + +#: src/components/storage/ProposalSpacePolicySection.jsx:55 +msgid "Shrink existing partitions" +msgstr "" + +#: src/components/storage/ProposalSpacePolicySection.jsx:56 +msgid "The data is kept, but the current partitions will be resized as needed." +msgstr "" + +#: src/components/storage/ProposalSpacePolicySection.jsx:60 +msgid "Use available space" +msgstr "" + +#: src/components/storage/ProposalSpacePolicySection.jsx:61 msgid "" -"Select how to make free space in the disks selected for allocating the " -"file systems." +"The data is kept. Only the space not assigned to any partition will be used." msgstr "" -#. TRANSLATORS: To be completed with the rest of a sentence like "deleting all content" -#: src/components/storage/ProposalSettingsSection.jsx:627 -msgid "Find space" +#: src/components/storage/ProposalSpacePolicySection.jsx:65 +msgid "Custom" msgstr "" -#: src/components/storage/ProposalSettingsSection.jsx:631 -msgid "Space Policy" +#: src/components/storage/ProposalSpacePolicySection.jsx:66 +msgid "Select what to do with each partition." msgstr "" -#: src/components/storage/ProposalSettingsSection.jsx:708 -msgid "Settings" +#: src/components/storage/ProposalSpacePolicySection.jsx:72 +msgid "Used device" +msgstr "" + +#: src/components/storage/ProposalSpacePolicySection.jsx:73 +msgid "Current content" +msgstr "" + +#: src/components/storage/ProposalSpacePolicySection.jsx:74 +#: src/components/storage/ProposalVolumes.jsx:309 +#: src/components/storage/VolumeForm.jsx:795 +msgid "Size" +msgstr "" + +#: src/components/storage/ProposalSpacePolicySection.jsx:75 +#: src/components/storage/ProposalVolumes.jsx:308 +msgid "Details" +msgstr "" + +#: src/components/storage/ProposalSpacePolicySection.jsx:76 +#, fuzzy +msgid "Action" +msgstr "Действия" + +#. TRANSLATORS: %s is replaced by partition table type (e.g., GPT) +#: src/components/storage/ProposalSpacePolicySection.jsx:110 +#, c-format +msgid "%s partition table" +msgstr "" + +#: src/components/storage/ProposalSpacePolicySection.jsx:121 +msgid "EFI system partition" +msgstr "" + +#. TRANSLATORS: %s is replaced by a file system type (e.g., btrfs). +#: src/components/storage/ProposalSpacePolicySection.jsx:124 +#, c-format +msgid "%s file system" +msgstr "" + +#. TRANSLATORS: %s is replaced by a LVM volume group name (e.g., /dev/vg0). +#: src/components/storage/ProposalSpacePolicySection.jsx:131 +#, c-format +msgid "LVM physical volume of %s" +msgstr "" + +#. TRANSLATORS: %s is replaced by a RAID name (e.g., /dev/md0). +#: src/components/storage/ProposalSpacePolicySection.jsx:134 +#, c-format +msgid "Member of RAID %s" +msgstr "" + +#: src/components/storage/ProposalSpacePolicySection.jsx:136 +msgid "Not identified" +msgstr "" + +#. TRANSLATORS: %s is replaced by a disk size (e.g., 20 GiB) +#: src/components/storage/ProposalSpacePolicySection.jsx:173 +#, c-format +msgid "%s unused" +msgstr "" + +#. TRANSLATORS: %s is replaced by a disk size (e.g., 2 GiB) +#: src/components/storage/ProposalSpacePolicySection.jsx:186 +#, c-format +msgid "Shrinkable by %s" +msgstr "" + +#. TRANSLATORS: %s is replaced by a device name (e.g., /dev/sda) +#: src/components/storage/ProposalSpacePolicySection.jsx:221 +#, c-format +msgid "Space action selector for %s" +msgstr "" + +#: src/components/storage/ProposalSpacePolicySection.jsx:224 +#: src/components/storage/ProposalVolumes.jsx:229 +#: src/components/storage/iscsi/NodesPresenter.jsx:77 +msgid "Delete" +msgstr "" + +#: src/components/storage/ProposalSpacePolicySection.jsx:228 +msgid "Allow resize" +msgstr "" + +#: src/components/storage/ProposalSpacePolicySection.jsx:230 +msgid "Do not modify" +msgstr "" + +#: src/components/storage/ProposalSpacePolicySection.jsx:382 +#, fuzzy +msgid "Actions to find space" +msgstr "Действия для соединения %s" + +#. TRANSLATORS: The storage "Find Space" section's title +#: src/components/storage/ProposalSpacePolicySection.jsx:452 +msgid "Find Space" +msgstr "" + +#. TRANSLATORS: The storage "Find space" sections's description +#: src/components/storage/ProposalSpacePolicySection.jsx:454 +msgid "" +"Allocating the file systems might need to find free space in the devices " +"listed below. Choose how to do it." msgstr "" #. TRANSLATORS: header for a list of items @@ -1387,11 +1532,6 @@ msgstr "" msgid "transactional" msgstr "" -#: src/components/storage/ProposalVolumes.jsx:229 -#: src/components/storage/iscsi/NodesPresenter.jsx:77 -msgid "Delete" -msgstr "" - #: src/components/storage/ProposalVolumes.jsx:275 msgid "Edit file system" msgstr "" @@ -1402,23 +1542,10 @@ msgstr "" msgid "Mount point" msgstr "" -#: src/components/storage/ProposalVolumes.jsx:308 -msgid "Details" -msgstr "" - -#: src/components/storage/ProposalVolumes.jsx:309 -#: src/components/storage/VolumeForm.jsx:795 -msgid "Size" -msgstr "" - #: src/components/storage/ProposalVolumes.jsx:345 msgid "Table with mount points" msgstr "" -#: src/components/storage/ProposalVolumes.jsx:408 -msgid "File systems to create in your system" -msgstr "" - #: src/components/storage/VolumeForm.jsx:102 #, fuzzy msgid "Select a value" @@ -1877,71 +2004,6 @@ msgstr "" msgid "Targets" msgstr "" -#. TRANSLATORS: automatic actions to find space for installation in the target disk(s) -#: src/components/storage/space-policy-utils.jsx:45 -msgid "Delete current content" -msgstr "" - -#. TRANSLATORS: automatic actions to find space for installation in the target disk(s) -#: src/components/storage/space-policy-utils.jsx:49 -msgid "Shrink existing partitions" -msgstr "" - -#. TRANSLATORS: automatic actions to find space for installation in the target disk(s) -#: src/components/storage/space-policy-utils.jsx:53 -msgid "Use available space" -msgstr "" - -#: src/components/storage/space-policy-utils.jsx:65 -msgid "All partitions will be removed and any data in the disks will be lost." -msgstr "" - -#: src/components/storage/space-policy-utils.jsx:68 -msgid "" -"The data is kept, but the current partitions will be resized as needed to " -"make enough space." -msgstr "" - -#: src/components/storage/space-policy-utils.jsx:71 -msgid "" -"The data is kept and existing partitions will not be modified. Only the " -"space that is not assigned to any partition will be used." -msgstr "" - -#: src/components/storage/space-policy-utils.jsx:108 -msgid "Select a mechanism to make space" -msgstr "" - -#: src/components/storage/space-policy-utils.jsx:127 -#, c-format -msgid "deleting all content of the installation device" -msgid_plural "deleting all content of the %d selected disks" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" - -#: src/components/storage/space-policy-utils.jsx:137 -#, c-format -msgid "shrinking partitions of the installation device" -msgid_plural "shrinking partitions of the %d selected disks" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" - -#. TRANSLATORS: This is presented next to the label "Find space", so the whole sentence -#. would read as "Find space without modifying any partition". -#: src/components/storage/space-policy-utils.jsx:145 -msgid "without modifying any partition" -msgstr "" - -#: src/components/storage/space-policy-utils.jsx:160 -#, c-format -msgid "This will only affect the installation device" -msgid_plural "This will affect the %d disks selected for installation" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" - #: src/components/storage/utils.js:44 msgid "KiB" msgstr "" diff --git a/web/po/sv.po b/web/po/sv.po index b2b1d31de7..4cc1e63cdb 100644 --- a/web/po/sv.po +++ b/web/po/sv.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-02-18 02:07+0000\n" -"PO-Revision-Date: 2024-01-21 14:59+0000\n" +"POT-Creation-Date: 2024-02-25 02:07+0000\n" +"PO-Revision-Date: 2024-02-21 12:42+0000\n" "Last-Translator: Luna Jernberg \n" "Language-Team: Swedish \n" @@ -153,10 +153,9 @@ msgstr "" #: src/components/product/ProductPage.jsx:71 #: src/components/product/ProductPage.jsx:140 #: src/components/product/ProductPage.jsx:207 -#: src/components/storage/ProposalSettingsSection.jsx:172 -#: src/components/storage/ProposalSettingsSection.jsx:367 -#: src/components/storage/ProposalSettingsSection.jsx:551 -#: src/components/storage/ProposalSettingsSection.jsx:647 +#: src/components/storage/ProposalDeviceSection.jsx:169 +#: src/components/storage/ProposalDeviceSection.jsx:364 +#: src/components/storage/ProposalSettingsSection.jsx:211 #: src/components/storage/ProposalVolumes.jsx:148 #: src/components/storage/ProposalVolumes.jsx:283 #: src/components/storage/ZFCPPage.jsx:511 @@ -831,7 +830,7 @@ msgid "Software" msgstr "Programvara" #: src/components/overview/StorageSection.jsx:42 -#: src/components/storage/ProposalSettingsSection.jsx:132 +#: src/components/storage/ProposalDeviceSection.jsx:129 msgid "No device selected yet" msgstr "Ingen enhet vald ännu" @@ -870,7 +869,7 @@ msgstr "Undersöker lagringsenheter" #. TRANSLATORS: page title #. TRANSLATORS: page section title #: src/components/overview/StorageSection.jsx:208 -#: src/components/storage/ProposalPage.jsx:232 +#: src/components/storage/ProposalPage.jsx:239 msgid "Storage" msgstr "Lagring" @@ -998,9 +997,8 @@ msgid "No products available for selection" msgstr "Inga produkter tillgängliga för val" #: src/components/product/ProductSelector.jsx:42 -#, fuzzy msgid "Available products" -msgstr "Tillgängliga lokaler" +msgstr "Tillgängliga produkter" #: src/components/questions/GenericQuestion.jsx:35 #: src/components/questions/LuksActivationQuestion.jsx:60 @@ -1090,7 +1088,9 @@ msgstr "Kanal-ID" msgid "Status" msgstr "Status" +#. TRANSLATORS: The storage "Device" section's title #: src/components/storage/DASDTable.jsx:66 +#: src/components/storage/ProposalDeviceSection.jsx:423 msgid "Device" msgstr "Enhet" @@ -1166,7 +1166,7 @@ msgid "Storage iSCSI" msgstr "Lagring iSCSI" #. TRANSLATORS: show/hide toggle action, this is a clickable link -#: src/components/storage/ProposalActionsSection.jsx:71 +#: src/components/storage/ProposalActionsSection.jsx:70 #, c-format msgid "Hide %d subvolume action" msgid_plural "Hide %d subvolume actions" @@ -1174,72 +1174,55 @@ msgstr[0] "Dölj %d undervolym åtgärd" msgstr[1] "Dölj %d undervolymer åtgärder" #. TRANSLATORS: show/hide toggle action, this is a clickable link -#: src/components/storage/ProposalActionsSection.jsx:73 +#: src/components/storage/ProposalActionsSection.jsx:72 #, c-format msgid "Show %d subvolume action" msgid_plural "Show %d subvolume actions" msgstr[0] "Visa %d undervolym åtgärd" msgstr[1] "Visa %d undervolymer åtgärder" -#: src/components/storage/ProposalActionsSection.jsx:78 -msgid "Actions to create the file systems and to ensure the system boots." -msgstr "" -"Åtgärder för att skapa filsystemen och för att säkerställa att systemet " -"startar." - -#. TRANSLATORS: section title, list of planned actions for the selected device, -#. e.g. "delete partition A", "create partition B with filesystem C", ... -#: src/components/storage/ProposalActionsSection.jsx:126 +#. TRANSLATORS: The storage "Planned Actions" section's title. The +#. section shows a list of planned actions for the selected device, e.g. +#. "delete partition A", "create partition B with filesystem C", ... +#: src/components/storage/ProposalActionsSection.jsx:124 msgid "Planned Actions" msgstr "Planerade åtgärder" -#: src/components/storage/ProposalPage.jsx:211 -msgid "Devices will not be modified until installation starts." -msgstr "Enheter kommer inte att modifieras förrän installationen startar." - -#: src/components/storage/ProposalPageMenu.jsx:40 -msgid "Manage and format" -msgstr "Hantera och formatera" - -#: src/components/storage/ProposalPageMenu.jsx:58 -msgid "Activate disks" -msgstr "Aktivera diskar" - -#: src/components/storage/ProposalPageMenu.jsx:60 -msgid "zFCP" -msgstr "zFCP" - -#: src/components/storage/ProposalPageMenu.jsx:76 -msgid "Connect to iSCSI targets" -msgstr "Anslut till iSCSI mål" +#. TRANSLATORS: The storage "Planned Actions" section's description +#: src/components/storage/ProposalActionsSection.jsx:126 +#, fuzzy +msgid "Actions to create the file systems and to ensure the new system boots." +msgstr "" +"Åtgärder för att skapa filsystemen och för att säkerställa att systemet " +"startar." -#: src/components/storage/ProposalPageMenu.jsx:78 -msgid "iSCSI" -msgstr "iSCSI" +#: src/components/storage/ProposalDeviceSection.jsx:135 +msgid "Waiting for information about selected device" +msgstr "" -#: src/components/storage/ProposalSettingsSection.jsx:141 +#: src/components/storage/ProposalDeviceSection.jsx:138 msgid "Select the device for installing the system." msgstr "Välj enhet för installation av systemet." -#: src/components/storage/ProposalSettingsSection.jsx:146 -#: src/components/storage/ProposalSettingsSection.jsx:150 -#: src/components/storage/ProposalSettingsSection.jsx:248 +#: src/components/storage/ProposalDeviceSection.jsx:143 +#: src/components/storage/ProposalDeviceSection.jsx:147 +#: src/components/storage/ProposalDeviceSection.jsx:245 msgid "Installation device" msgstr "Installationsenhet" -#: src/components/storage/ProposalSettingsSection.jsx:156 +#: src/components/storage/ProposalDeviceSection.jsx:153 msgid "No devices found." msgstr "Inga enheter hittades." -#: src/components/storage/ProposalSettingsSection.jsx:245 +#: src/components/storage/ProposalDeviceSection.jsx:242 msgid "Devices for creating the volume group" msgstr "Enheter för att skapa volymgrupp" -#: src/components/storage/ProposalSettingsSection.jsx:254 +#: src/components/storage/ProposalDeviceSection.jsx:251 msgid "Custom devices" msgstr "Anpassade enheter" -#: src/components/storage/ProposalSettingsSection.jsx:318 +#: src/components/storage/ProposalDeviceSection.jsx:315 msgid "" "Configuration of the system volume group. All the file systems will be " "created in a logical volume of the system volume group." @@ -1247,27 +1230,64 @@ msgstr "" "Konfiguration av systemvolymgruppen. Alla filsystem kommer att skapas i en " "logisk volym av systemvolymgruppen." -#: src/components/storage/ProposalSettingsSection.jsx:324 +#: src/components/storage/ProposalDeviceSection.jsx:321 msgid "Configure the LVM settings" msgstr "Konfigurera LVM-inställningar" -#: src/components/storage/ProposalSettingsSection.jsx:329 -#: src/components/storage/ProposalSettingsSection.jsx:349 +#: src/components/storage/ProposalDeviceSection.jsx:326 +#: src/components/storage/ProposalDeviceSection.jsx:346 msgid "LVM settings" msgstr "LVM-inställningar" -#: src/components/storage/ProposalSettingsSection.jsx:342 +#: src/components/storage/ProposalDeviceSection.jsx:333 +msgid "Waiting for information about LVM" +msgstr "" + +#: src/components/storage/ProposalDeviceSection.jsx:339 msgid "Use logical volume management (LVM)" msgstr "Använd logisk volymhantering (LVM)" -#: src/components/storage/ProposalSettingsSection.jsx:350 +#: src/components/storage/ProposalDeviceSection.jsx:347 msgid "System Volume Group" msgstr "System volymgrupp" +#. TRANSLATORS: The storage "Device" sections's description. Do not +#. translate 'abbr' and 'title', they are part of the HTML markup. +#: src/components/storage/ProposalDeviceSection.jsx:414 +msgid "" +"Select the main disk or LVM " +"Volume Group for installation." +msgstr "" + +#: src/components/storage/ProposalFileSystemsSection.jsx:70 +#, fuzzy +msgid "File systems" +msgstr "Filsystem typ" + +#: src/components/storage/ProposalPageMenu.jsx:40 +msgid "Manage and format" +msgstr "Hantera och formatera" + +#: src/components/storage/ProposalPageMenu.jsx:58 +msgid "Activate disks" +msgstr "Aktivera diskar" + +#: src/components/storage/ProposalPageMenu.jsx:60 +msgid "zFCP" +msgstr "zFCP" + +#: src/components/storage/ProposalPageMenu.jsx:76 +msgid "Connect to iSCSI targets" +msgstr "Anslut till iSCSI mål" + +#: src/components/storage/ProposalPageMenu.jsx:78 +msgid "iSCSI" +msgstr "iSCSI" + #. TRANSLATORS: The word 'directly' is key here. For example, booting to the installer media and then choosing #. 'Boot from Hard Disk' from there will not work. Keep it sort (this is a hint in a form) but keep it clear. #. Do not translate 'abbr' and 'title', they are part of the HTML markup. -#: src/components/storage/ProposalSettingsSection.jsx:426 +#: src/components/storage/ProposalSettingsSection.jsx:86 msgid "" "The password will not be needed to boot and access the data if the TPM can verify the integrity of the " @@ -1279,43 +1299,168 @@ msgstr "" "integritet. TPM-försegling kräver att det nya systemet startas upp direkt " "vid första körningen." -#: src/components/storage/ProposalSettingsSection.jsx:444 +#: src/components/storage/ProposalSettingsSection.jsx:104 msgid "Use the TPM to decrypt automatically on each boot" msgstr "Använd TPM för att dekryptera automatiskt vid varje uppstart" -#: src/components/storage/ProposalSettingsSection.jsx:515 +#: src/components/storage/ProposalSettingsSection.jsx:175 msgid "Change encryption settings" msgstr "Ändra krypteringsinställningar" -#: src/components/storage/ProposalSettingsSection.jsx:520 -#: src/components/storage/ProposalSettingsSection.jsx:541 +#: src/components/storage/ProposalSettingsSection.jsx:180 +#: src/components/storage/ProposalSettingsSection.jsx:201 msgid "Encryption settings" msgstr "Krypteringsinställningar" -#: src/components/storage/ProposalSettingsSection.jsx:534 +#: src/components/storage/ProposalSettingsSection.jsx:194 msgid "Use encryption" msgstr "Använd kryptering" -#: src/components/storage/ProposalSettingsSection.jsx:621 +#: src/components/storage/ProposalSettingsSection.jsx:244 +msgid "Settings" +msgstr "Inställningar" + +#: src/components/storage/ProposalSpacePolicySection.jsx:50 +msgid "Delete current content" +msgstr "Radera nuvarande innehåll" + +#: src/components/storage/ProposalSpacePolicySection.jsx:51 +msgid "All partitions will be removed and any data in the disks will be lost." +msgstr "" +"Alla partitioner kommer att tas bort och all data på diskarna kommer att gå " +"förlorad." + +#: src/components/storage/ProposalSpacePolicySection.jsx:55 +msgid "Shrink existing partitions" +msgstr "Krymp existerande partitioner" + +#: src/components/storage/ProposalSpacePolicySection.jsx:56 +msgid "The data is kept, but the current partitions will be resized as needed." +msgstr "" +"Data bevaras, men storleken på de aktuella partitionerna kommer att ändras " +"efter behov." + +#: src/components/storage/ProposalSpacePolicySection.jsx:60 +msgid "Use available space" +msgstr "Använd tillgängligt utrymme" + +#: src/components/storage/ProposalSpacePolicySection.jsx:61 msgid "" -"Select how to make free space in the disks selected for allocating the " -"file systems." +"The data is kept. Only the space not assigned to any partition will be used." msgstr "" -"Välj hur du gör ledigt utrymme på de diskar som valts för tilldelning av " -"filsystemen." +"Data bevaras. Endast det utrymme som inte är tilldelat någon partition " +"kommer att användas." -#. TRANSLATORS: To be completed with the rest of a sentence like "deleting all content" -#: src/components/storage/ProposalSettingsSection.jsx:627 -msgid "Find space" -msgstr "Hitta utrymme" +#: src/components/storage/ProposalSpacePolicySection.jsx:65 +msgid "Custom" +msgstr "Anpassad" -#: src/components/storage/ProposalSettingsSection.jsx:631 -msgid "Space Policy" -msgstr "Utrymmespolicy" +#: src/components/storage/ProposalSpacePolicySection.jsx:66 +msgid "Select what to do with each partition." +msgstr "Välj vad som ska göras med varje partition." -#: src/components/storage/ProposalSettingsSection.jsx:708 -msgid "Settings" -msgstr "Inställningar" +#: src/components/storage/ProposalSpacePolicySection.jsx:72 +msgid "Used device" +msgstr "Använda enheter" + +#: src/components/storage/ProposalSpacePolicySection.jsx:73 +msgid "Current content" +msgstr "Nuvarande innehåll" + +#: src/components/storage/ProposalSpacePolicySection.jsx:74 +#: src/components/storage/ProposalVolumes.jsx:309 +#: src/components/storage/VolumeForm.jsx:795 +msgid "Size" +msgstr "Storlek" + +#: src/components/storage/ProposalSpacePolicySection.jsx:75 +#: src/components/storage/ProposalVolumes.jsx:308 +msgid "Details" +msgstr "Detaljer" + +#: src/components/storage/ProposalSpacePolicySection.jsx:76 +msgid "Action" +msgstr "Åtgärd" + +#. TRANSLATORS: %s is replaced by partition table type (e.g., GPT) +#: src/components/storage/ProposalSpacePolicySection.jsx:110 +#, c-format +msgid "%s partition table" +msgstr "%s partitionstabell" + +#: src/components/storage/ProposalSpacePolicySection.jsx:121 +msgid "EFI system partition" +msgstr "EFI-systempartition" + +#. TRANSLATORS: %s is replaced by a file system type (e.g., btrfs). +#: src/components/storage/ProposalSpacePolicySection.jsx:124 +#, c-format +msgid "%s file system" +msgstr "%s filsystem" + +#. TRANSLATORS: %s is replaced by a LVM volume group name (e.g., /dev/vg0). +#: src/components/storage/ProposalSpacePolicySection.jsx:131 +#, c-format +msgid "LVM physical volume of %s" +msgstr "LVM fysisk volym av %s" + +#. TRANSLATORS: %s is replaced by a RAID name (e.g., /dev/md0). +#: src/components/storage/ProposalSpacePolicySection.jsx:134 +#, c-format +msgid "Member of RAID %s" +msgstr "Medlem av RAID %s" + +#: src/components/storage/ProposalSpacePolicySection.jsx:136 +msgid "Not identified" +msgstr "Inte identifierad" + +#. TRANSLATORS: %s is replaced by a disk size (e.g., 20 GiB) +#: src/components/storage/ProposalSpacePolicySection.jsx:173 +#, c-format +msgid "%s unused" +msgstr "%s oanvänt" + +#. TRANSLATORS: %s is replaced by a disk size (e.g., 2 GiB) +#: src/components/storage/ProposalSpacePolicySection.jsx:186 +#, c-format +msgid "Shrinkable by %s" +msgstr "Krympbar med %s" + +#. TRANSLATORS: %s is replaced by a device name (e.g., /dev/sda) +#: src/components/storage/ProposalSpacePolicySection.jsx:221 +#, c-format +msgid "Space action selector for %s" +msgstr "Platsåtgärdsväljare för %s" + +#: src/components/storage/ProposalSpacePolicySection.jsx:224 +#: src/components/storage/ProposalVolumes.jsx:229 +#: src/components/storage/iscsi/NodesPresenter.jsx:77 +msgid "Delete" +msgstr "Ta bort" + +#: src/components/storage/ProposalSpacePolicySection.jsx:228 +msgid "Allow resize" +msgstr "Tillåt storleksändring" + +#: src/components/storage/ProposalSpacePolicySection.jsx:230 +msgid "Do not modify" +msgstr "Modifiera inte" + +#: src/components/storage/ProposalSpacePolicySection.jsx:382 +msgid "Actions to find space" +msgstr "Åtgärder för att hitta utrymme" + +#. TRANSLATORS: The storage "Find Space" section's title +#: src/components/storage/ProposalSpacePolicySection.jsx:452 +msgid "Find Space" +msgstr "Hitta utrymme" + +#. TRANSLATORS: The storage "Find space" sections's description +#: src/components/storage/ProposalSpacePolicySection.jsx:454 +msgid "" +"Allocating the file systems might need to find free space in the devices " +"listed below. Choose how to do it." +msgstr "" #. TRANSLATORS: header for a list of items #: src/components/storage/ProposalVolumes.jsx:59 @@ -1383,11 +1528,6 @@ msgstr "med ögonblicksavbilder" msgid "transactional" msgstr "transaktionell" -#: src/components/storage/ProposalVolumes.jsx:229 -#: src/components/storage/iscsi/NodesPresenter.jsx:77 -msgid "Delete" -msgstr "Ta bort" - #: src/components/storage/ProposalVolumes.jsx:275 msgid "Edit file system" msgstr "Redigera filsystem" @@ -1398,23 +1538,10 @@ msgstr "Redigera filsystem" msgid "Mount point" msgstr "Monteringspunkt" -#: src/components/storage/ProposalVolumes.jsx:308 -msgid "Details" -msgstr "Detaljer" - -#: src/components/storage/ProposalVolumes.jsx:309 -#: src/components/storage/VolumeForm.jsx:795 -msgid "Size" -msgstr "Storlek" - #: src/components/storage/ProposalVolumes.jsx:345 msgid "Table with mount points" msgstr "Tabell med monteringspunkter" -#: src/components/storage/ProposalVolumes.jsx:408 -msgid "File systems to create in your system" -msgstr "Filsystem att skapa i ditt system" - #: src/components/storage/VolumeForm.jsx:102 msgid "Select a value" msgstr "Välj ett värde" @@ -1880,74 +2007,6 @@ msgstr "Upptäck" msgid "Targets" msgstr "Mål" -#. TRANSLATORS: automatic actions to find space for installation in the target disk(s) -#: src/components/storage/space-policy-utils.jsx:45 -msgid "Delete current content" -msgstr "Radera nuvarande innehåll" - -#. TRANSLATORS: automatic actions to find space for installation in the target disk(s) -#: src/components/storage/space-policy-utils.jsx:49 -msgid "Shrink existing partitions" -msgstr "Krymp existerande partitioner" - -#. TRANSLATORS: automatic actions to find space for installation in the target disk(s) -#: src/components/storage/space-policy-utils.jsx:53 -msgid "Use available space" -msgstr "Använd tillgängligt utrymme" - -#: src/components/storage/space-policy-utils.jsx:65 -msgid "All partitions will be removed and any data in the disks will be lost." -msgstr "" -"Alla partitioner kommer att tas bort och all data på diskarna kommer att gå " -"förlorad." - -#: src/components/storage/space-policy-utils.jsx:68 -msgid "" -"The data is kept, but the current partitions will be resized as needed to " -"make enough space." -msgstr "" -"Data bevaras, men storleken på de aktuella partitionerna kommer att ändras " -"efter behov för att göra tillräckligt med utrymme." - -#: src/components/storage/space-policy-utils.jsx:71 -msgid "" -"The data is kept and existing partitions will not be modified. Only the " -"space that is not assigned to any partition will be used." -msgstr "" -"Data bevaras och befintliga partitioner kommer inte att ändras. Endast det " -"utrymme som inte är tilldelat någon partition kommer att användas." - -#: src/components/storage/space-policy-utils.jsx:108 -msgid "Select a mechanism to make space" -msgstr "Välj en mekanism för att skapa utrymme" - -#: src/components/storage/space-policy-utils.jsx:127 -#, c-format -msgid "deleting all content of the installation device" -msgid_plural "deleting all content of the %d selected disks" -msgstr[0] "radera allt innehåll på installationsenhet" -msgstr[1] "tar bort allt innehåll på de %d valda diskarna" - -#: src/components/storage/space-policy-utils.jsx:137 -#, c-format -msgid "shrinking partitions of the installation device" -msgid_plural "shrinking partitions of the %d selected disks" -msgstr[0] "krymper partitioner på installationsenhet" -msgstr[1] "krymper partitioner på %d valda diskarna" - -#. TRANSLATORS: This is presented next to the label "Find space", so the whole sentence -#. would read as "Find space without modifying any partition". -#: src/components/storage/space-policy-utils.jsx:145 -msgid "without modifying any partition" -msgstr "utan att modifiera någon partition" - -#: src/components/storage/space-policy-utils.jsx:160 -#, c-format -msgid "This will only affect the installation device" -msgid_plural "This will affect the %d disks selected for installation" -msgstr[0] "Detta påverkar bara installationsenheten" -msgstr[1] "Detta kommer att påverka %d diskarna som valts för installation" - #: src/components/storage/utils.js:44 msgid "KiB" msgstr "KiB" @@ -2129,6 +2188,46 @@ msgstr "Användare" msgid "Root authentication" msgstr "Rootautentisering" +#~ msgid "Devices will not be modified until installation starts." +#~ msgstr "Enheter kommer inte att modifieras förrän installationen startar." + +#~ msgid "File systems to create in your system" +#~ msgstr "Filsystem att skapa i ditt system" + +#~ msgid "" +#~ "Select how to make free space in the disks selected for allocating " +#~ "the file systems." +#~ msgstr "" +#~ "Välj hur du gör ledigt utrymme på de diskar som valts för tilldelning av " +#~ "filsystemen." + +#~ msgid "Space Policy" +#~ msgstr "Utrymmespolicy" + +#~ msgid "Select a mechanism to make space" +#~ msgstr "Välj en mekanism för att skapa utrymme" + +#, c-format +#~ msgid "deleting all content of the installation device" +#~ msgid_plural "deleting all content of the %d selected disks" +#~ msgstr[0] "radera allt innehåll på installationsenhet" +#~ msgstr[1] "tar bort allt innehåll på de %d valda diskarna" + +#, c-format +#~ msgid "shrinking partitions of the installation device" +#~ msgid_plural "shrinking partitions of the %d selected disks" +#~ msgstr[0] "krymper partitioner på installationsenhet" +#~ msgstr[1] "krymper partitioner på %d valda diskarna" + +#~ msgid "without modifying any partition" +#~ msgstr "utan att modifiera någon partition" + +#, c-format +#~ msgid "This will only affect the installation device" +#~ msgid_plural "This will affect the %d disks selected for installation" +#~ msgstr[0] "Detta påverkar bara installationsenheten" +#~ msgstr[1] "Detta kommer att påverka %d diskarna som valts för installation" + #, c-format #~ msgid "Edit %s connection" #~ msgstr "Redigera %s anslutning" diff --git a/web/po/uk.po b/web/po/uk.po index 188a8101be..6c640512e5 100644 --- a/web/po/uk.po +++ b/web/po/uk.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-02-18 02:07+0000\n" +"POT-Creation-Date: 2024-02-25 02:07+0000\n" "PO-Revision-Date: 2023-12-31 20:39+0000\n" "Last-Translator: Milachew \n" "Language-Team: Ukrainian LVM " +"Volume Group for installation." +msgstr "" + +#: src/components/storage/ProposalFileSystemsSection.jsx:70 +msgid "File systems" +msgstr "" + +#: src/components/storage/ProposalPageMenu.jsx:40 +msgid "Manage and format" +msgstr "" + +#: src/components/storage/ProposalPageMenu.jsx:58 +msgid "Activate disks" +msgstr "" + +#: src/components/storage/ProposalPageMenu.jsx:60 +msgid "zFCP" +msgstr "" + +#: src/components/storage/ProposalPageMenu.jsx:76 +msgid "Connect to iSCSI targets" +msgstr "" + +#: src/components/storage/ProposalPageMenu.jsx:78 +msgid "iSCSI" +msgstr "" + #. TRANSLATORS: The word 'directly' is key here. For example, booting to the installer media and then choosing #. 'Boot from Hard Disk' from there will not work. Keep it sort (this is a hint in a form) but keep it clear. #. Do not translate 'abbr' and 'title', they are part of the HTML markup. -#: src/components/storage/ProposalSettingsSection.jsx:426 +#: src/components/storage/ProposalSettingsSection.jsx:86 msgid "" "The password will not be needed to boot and access the data if the TPM can verify the integrity of the " @@ -1247,40 +1266,161 @@ msgid "" "first run." msgstr "" -#: src/components/storage/ProposalSettingsSection.jsx:444 +#: src/components/storage/ProposalSettingsSection.jsx:104 msgid "Use the TPM to decrypt automatically on each boot" msgstr "" -#: src/components/storage/ProposalSettingsSection.jsx:515 +#: src/components/storage/ProposalSettingsSection.jsx:175 msgid "Change encryption settings" msgstr "" -#: src/components/storage/ProposalSettingsSection.jsx:520 -#: src/components/storage/ProposalSettingsSection.jsx:541 +#: src/components/storage/ProposalSettingsSection.jsx:180 +#: src/components/storage/ProposalSettingsSection.jsx:201 msgid "Encryption settings" msgstr "" -#: src/components/storage/ProposalSettingsSection.jsx:534 +#: src/components/storage/ProposalSettingsSection.jsx:194 msgid "Use encryption" msgstr "" -#: src/components/storage/ProposalSettingsSection.jsx:621 +#: src/components/storage/ProposalSettingsSection.jsx:244 +msgid "Settings" +msgstr "" + +#: src/components/storage/ProposalSpacePolicySection.jsx:50 +msgid "Delete current content" +msgstr "" + +#: src/components/storage/ProposalSpacePolicySection.jsx:51 +msgid "All partitions will be removed and any data in the disks will be lost." +msgstr "" + +#: src/components/storage/ProposalSpacePolicySection.jsx:55 +msgid "Shrink existing partitions" +msgstr "" + +#: src/components/storage/ProposalSpacePolicySection.jsx:56 +msgid "The data is kept, but the current partitions will be resized as needed." +msgstr "" + +#: src/components/storage/ProposalSpacePolicySection.jsx:60 +msgid "Use available space" +msgstr "" + +#: src/components/storage/ProposalSpacePolicySection.jsx:61 msgid "" -"Select how to make free space in the disks selected for allocating the " -"file systems." +"The data is kept. Only the space not assigned to any partition will be used." msgstr "" -#. TRANSLATORS: To be completed with the rest of a sentence like "deleting all content" -#: src/components/storage/ProposalSettingsSection.jsx:627 -msgid "Find space" +#: src/components/storage/ProposalSpacePolicySection.jsx:65 +msgid "Custom" msgstr "" -#: src/components/storage/ProposalSettingsSection.jsx:631 -msgid "Space Policy" +#: src/components/storage/ProposalSpacePolicySection.jsx:66 +msgid "Select what to do with each partition." msgstr "" -#: src/components/storage/ProposalSettingsSection.jsx:708 -msgid "Settings" +#: src/components/storage/ProposalSpacePolicySection.jsx:72 +msgid "Used device" +msgstr "" + +#: src/components/storage/ProposalSpacePolicySection.jsx:73 +msgid "Current content" +msgstr "" + +#: src/components/storage/ProposalSpacePolicySection.jsx:74 +#: src/components/storage/ProposalVolumes.jsx:309 +#: src/components/storage/VolumeForm.jsx:795 +msgid "Size" +msgstr "" + +#: src/components/storage/ProposalSpacePolicySection.jsx:75 +#: src/components/storage/ProposalVolumes.jsx:308 +msgid "Details" +msgstr "" + +#: src/components/storage/ProposalSpacePolicySection.jsx:76 +msgid "Action" +msgstr "" + +#. TRANSLATORS: %s is replaced by partition table type (e.g., GPT) +#: src/components/storage/ProposalSpacePolicySection.jsx:110 +#, c-format +msgid "%s partition table" +msgstr "" + +#: src/components/storage/ProposalSpacePolicySection.jsx:121 +msgid "EFI system partition" +msgstr "" + +#. TRANSLATORS: %s is replaced by a file system type (e.g., btrfs). +#: src/components/storage/ProposalSpacePolicySection.jsx:124 +#, c-format +msgid "%s file system" +msgstr "" + +#. TRANSLATORS: %s is replaced by a LVM volume group name (e.g., /dev/vg0). +#: src/components/storage/ProposalSpacePolicySection.jsx:131 +#, c-format +msgid "LVM physical volume of %s" +msgstr "" + +#. TRANSLATORS: %s is replaced by a RAID name (e.g., /dev/md0). +#: src/components/storage/ProposalSpacePolicySection.jsx:134 +#, c-format +msgid "Member of RAID %s" +msgstr "" + +#: src/components/storage/ProposalSpacePolicySection.jsx:136 +msgid "Not identified" +msgstr "" + +#. TRANSLATORS: %s is replaced by a disk size (e.g., 20 GiB) +#: src/components/storage/ProposalSpacePolicySection.jsx:173 +#, c-format +msgid "%s unused" +msgstr "" + +#. TRANSLATORS: %s is replaced by a disk size (e.g., 2 GiB) +#: src/components/storage/ProposalSpacePolicySection.jsx:186 +#, c-format +msgid "Shrinkable by %s" +msgstr "" + +#. TRANSLATORS: %s is replaced by a device name (e.g., /dev/sda) +#: src/components/storage/ProposalSpacePolicySection.jsx:221 +#, c-format +msgid "Space action selector for %s" +msgstr "" + +#: src/components/storage/ProposalSpacePolicySection.jsx:224 +#: src/components/storage/ProposalVolumes.jsx:229 +#: src/components/storage/iscsi/NodesPresenter.jsx:77 +msgid "Delete" +msgstr "" + +#: src/components/storage/ProposalSpacePolicySection.jsx:228 +msgid "Allow resize" +msgstr "" + +#: src/components/storage/ProposalSpacePolicySection.jsx:230 +msgid "Do not modify" +msgstr "" + +#: src/components/storage/ProposalSpacePolicySection.jsx:382 +msgid "Actions to find space" +msgstr "" + +#. TRANSLATORS: The storage "Find Space" section's title +#: src/components/storage/ProposalSpacePolicySection.jsx:452 +msgid "Find Space" +msgstr "" + +#. TRANSLATORS: The storage "Find space" sections's description +#: src/components/storage/ProposalSpacePolicySection.jsx:454 +msgid "" +"Allocating the file systems might need to find free space in the devices " +"listed below. Choose how to do it." msgstr "" #. TRANSLATORS: header for a list of items @@ -1349,11 +1489,6 @@ msgstr "" msgid "transactional" msgstr "" -#: src/components/storage/ProposalVolumes.jsx:229 -#: src/components/storage/iscsi/NodesPresenter.jsx:77 -msgid "Delete" -msgstr "" - #: src/components/storage/ProposalVolumes.jsx:275 msgid "Edit file system" msgstr "" @@ -1364,23 +1499,10 @@ msgstr "" msgid "Mount point" msgstr "" -#: src/components/storage/ProposalVolumes.jsx:308 -msgid "Details" -msgstr "" - -#: src/components/storage/ProposalVolumes.jsx:309 -#: src/components/storage/VolumeForm.jsx:795 -msgid "Size" -msgstr "" - #: src/components/storage/ProposalVolumes.jsx:345 msgid "Table with mount points" msgstr "" -#: src/components/storage/ProposalVolumes.jsx:408 -msgid "File systems to create in your system" -msgstr "" - #: src/components/storage/VolumeForm.jsx:102 msgid "Select a value" msgstr "" @@ -1836,71 +1958,6 @@ msgstr "" msgid "Targets" msgstr "" -#. TRANSLATORS: automatic actions to find space for installation in the target disk(s) -#: src/components/storage/space-policy-utils.jsx:45 -msgid "Delete current content" -msgstr "" - -#. TRANSLATORS: automatic actions to find space for installation in the target disk(s) -#: src/components/storage/space-policy-utils.jsx:49 -msgid "Shrink existing partitions" -msgstr "" - -#. TRANSLATORS: automatic actions to find space for installation in the target disk(s) -#: src/components/storage/space-policy-utils.jsx:53 -msgid "Use available space" -msgstr "" - -#: src/components/storage/space-policy-utils.jsx:65 -msgid "All partitions will be removed and any data in the disks will be lost." -msgstr "" - -#: src/components/storage/space-policy-utils.jsx:68 -msgid "" -"The data is kept, but the current partitions will be resized as needed to " -"make enough space." -msgstr "" - -#: src/components/storage/space-policy-utils.jsx:71 -msgid "" -"The data is kept and existing partitions will not be modified. Only the " -"space that is not assigned to any partition will be used." -msgstr "" - -#: src/components/storage/space-policy-utils.jsx:108 -msgid "Select a mechanism to make space" -msgstr "" - -#: src/components/storage/space-policy-utils.jsx:127 -#, c-format -msgid "deleting all content of the installation device" -msgid_plural "deleting all content of the %d selected disks" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" - -#: src/components/storage/space-policy-utils.jsx:137 -#, c-format -msgid "shrinking partitions of the installation device" -msgid_plural "shrinking partitions of the %d selected disks" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" - -#. TRANSLATORS: This is presented next to the label "Find space", so the whole sentence -#. would read as "Find space without modifying any partition". -#: src/components/storage/space-policy-utils.jsx:145 -msgid "without modifying any partition" -msgstr "" - -#: src/components/storage/space-policy-utils.jsx:160 -#, c-format -msgid "This will only affect the installation device" -msgid_plural "This will affect the %d disks selected for installation" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" - #: src/components/storage/utils.js:44 msgid "KiB" msgstr "" From 30568cffebe05964011a7382e0ed0ce1dff991f6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Imobach=20Gonz=C3=A1lez=20Sosa?= Date: Sun, 25 Feb 2024 22:17:47 +0000 Subject: [PATCH 18/48] rust: add --nocapture to tarpaulin --- .github/workflows/ci-rust.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci-rust.yml b/.github/workflows/ci-rust.yml index 41c3a6eaa3..2b8418a622 100644 --- a/.github/workflows/ci-rust.yml +++ b/.github/workflows/ci-rust.yml @@ -95,7 +95,7 @@ jobs: run: cargo-binstall --no-confirm cargo-tarpaulin - name: Run the tests - run: cargo tarpaulin --out xml + run: cargo tarpaulin --out xml -- --nocapture # send the code coverage for the Rust part to the coveralls.io - name: Coveralls GitHub Action From 92e1009beaaa12c5dc58d137393e39d9f047325a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Imobach=20Gonz=C3=A1lez=20Sosa?= Date: Mon, 26 Feb 2024 07:01:27 +0000 Subject: [PATCH 19/48] rust: improve error handling --- .../agama-dbus-server/src/agama-web-server.rs | 41 +++++++++++++++---- rust/agama-dbus-server/src/web.rs | 20 ++++++--- rust/agama-lib/src/progress.rs | 17 ++++---- 3 files changed, 56 insertions(+), 22 deletions(-) diff --git a/rust/agama-dbus-server/src/agama-web-server.rs b/rust/agama-dbus-server/src/agama-web-server.rs index 7f4f2ee969..81f4c5b243 100644 --- a/rust/agama-dbus-server/src/agama-web-server.rs +++ b/rust/agama-dbus-server/src/agama-web-server.rs @@ -1,3 +1,5 @@ +use std::process::{ExitCode, Termination}; + use agama_dbus_server::web::{self, run_monitor}; use clap::{Parser, Subcommand}; use tokio::sync::broadcast::channel; @@ -27,7 +29,7 @@ struct Cli { } /// Start serving the API. -async fn serve_command(address: &str) { +async fn serve_command(address: &str) -> anyhow::Result<()> { let journald = tracing_journald::layer().expect("could not connect to journald"); tracing_subscriber::registry().with(journald).init(); @@ -36,26 +38,51 @@ async fn serve_command(address: &str) { .unwrap_or_else(|_| panic!("could not listen on {}", address)); let (tx, _) = channel(16); - run_monitor(tx.clone()).await; + run_monitor(tx.clone()).await?; let config = web::ServiceConfig::load().unwrap(); let service = web::service(config, tx); axum::serve(listener, service) .await .expect("could not mount app on listener"); + Ok(()) } /// Display the API documentation in OpenAPI format. -fn openapi_command() { +fn openapi_command() -> anyhow::Result<()> { println!("{}", web::ApiDoc::openapi().to_pretty_json().unwrap()); + Ok(()) } -#[tokio::main] -async fn main() { - let cli = Cli::parse(); - +async fn run_command(cli: Cli) -> anyhow::Result<()> { match cli.command { Commands::Serve { address } => serve_command(&address).await, Commands::Openapi => openapi_command(), } } + +/// Represents the result of execution. +pub enum CliResult { + /// Successful execution. + Ok = 0, + /// Something went wrong. + Error = 1, +} + +impl Termination for CliResult { + fn report(self) -> ExitCode { + ExitCode::from(self as u8) + } +} + +#[tokio::main] +async fn main() -> CliResult { + let cli = Cli::parse(); + + if let Err(error) = run_command(cli).await { + eprintln!("{:?}", error); + return CliResult::Error; + } + + CliResult::Ok +} diff --git a/rust/agama-dbus-server/src/web.rs b/rust/agama-dbus-server/src/web.rs index 5c6116e22d..7cbb1ec6b8 100644 --- a/rust/agama-dbus-server/src/web.rs +++ b/rust/agama-dbus-server/src/web.rs @@ -14,7 +14,7 @@ mod service; mod state; mod ws; -use agama_lib::{connection, progress::ProgressMonitor}; +use agama_lib::{connection, error::ServiceError, progress::ProgressMonitor}; pub use auth::generate_token; pub use config::ServiceConfig; pub use docs::ApiDoc; @@ -29,7 +29,7 @@ use self::progress::EventsProgressPresenter; /// Returns a service that implements the web-based Agama API. /// /// * `config`: service configuration. -/// * `dbus`: D-Bus connection. +/// * `events`: D-Bus connection. pub fn service(config: ServiceConfig, events: EventsSender) -> Router { MainServiceBuilder::new(events.clone()) .add_service("/l10n", l10n_service(events)) @@ -37,11 +37,19 @@ pub fn service(config: ServiceConfig, events: EventsSender) -> Router { .build() } -pub async fn run_monitor(events: EventsSender) { +/// Starts monitoring the D-Bus service progress. +/// +/// The events are sent to the `events` channel. +/// +/// * `events`: channel to send the events to. +pub async fn run_monitor(events: EventsSender) -> Result<(), ServiceError> { let presenter = EventsProgressPresenter::new(events); - let connection = connection().await.unwrap(); - let mut monitor = ProgressMonitor::new(connection).await.unwrap(); + let connection = connection().await?; + let mut monitor = ProgressMonitor::new(connection).await?; tokio::spawn(async move { - _ = monitor.run(presenter).await; + if let Err(error) = monitor.run(presenter).await { + eprintln!("Could not monitor the D-Bus server: {}", error); + } }); + Ok(()) } diff --git a/rust/agama-lib/src/progress.rs b/rust/agama-lib/src/progress.rs index 44bd6e0787..b79db61195 100644 --- a/rust/agama-lib/src/progress.rs +++ b/rust/agama-lib/src/progress.rs @@ -112,22 +112,21 @@ impl<'a> ProgressMonitor<'a> { /// Runs the monitor until the current operation finishes. pub async fn run(&mut self, mut presenter: impl ProgressPresenter) -> Result<(), ServiceError> { - presenter.start(&self.main_progress().await).await; + presenter.start(&self.main_progress().await?).await; let mut changes = self.build_stream().await; while let Some(stream) = changes.next().await { match stream { ("/org/opensuse/Agama/Manager1", _) => { - let progress = self.main_progress().await; + let progress = self.main_progress().await?; if progress.finished { presenter.finish().await; return Ok(()); - } else { - presenter.update_main(&progress).await; } + presenter.update_main(&progress).await; } ("/org/opensuse/Agama/Software1", _) => { - let progress = &self.detail_progress().await; + let progress = &self.detail_progress().await?; presenter.update_detail(progress).await; } _ => eprintln!("Unknown"), @@ -138,13 +137,13 @@ impl<'a> ProgressMonitor<'a> { } /// Proxy that reports the progress. - async fn main_progress(&self) -> Progress { - Progress::from_proxy(&self.manager_proxy).await.unwrap() + async fn main_progress(&self) -> Result { + Ok(Progress::from_proxy(&self.manager_proxy).await?) } /// Proxy that reports the progress detail. - async fn detail_progress(&self) -> Progress { - Progress::from_proxy(&self.software_proxy).await.unwrap() + async fn detail_progress(&self) -> Result { + Ok(Progress::from_proxy(&self.software_proxy).await?) } /// Builds an stream of progress changes. From a889f1e26192331648ea950777649a5f46f9aff7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Imobach=20Gonz=C3=A1lez=20Sosa?= Date: Mon, 26 Feb 2024 07:02:01 +0000 Subject: [PATCH 20/48] rust: initialize the locale of the locale service --- rust/agama-dbus-server/src/agama-web-server.rs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/rust/agama-dbus-server/src/agama-web-server.rs b/rust/agama-dbus-server/src/agama-web-server.rs index 81f4c5b243..1398f3f1c7 100644 --- a/rust/agama-dbus-server/src/agama-web-server.rs +++ b/rust/agama-dbus-server/src/agama-web-server.rs @@ -1,6 +1,9 @@ use std::process::{ExitCode, Termination}; -use agama_dbus_server::web::{self, run_monitor}; +use agama_dbus_server::{ + l10n::helpers, + web::{self, run_monitor}, +}; use clap::{Parser, Subcommand}; use tokio::sync::broadcast::channel; use tracing_subscriber::prelude::*; @@ -78,6 +81,7 @@ impl Termination for CliResult { #[tokio::main] async fn main() -> CliResult { let cli = Cli::parse(); + _ = helpers::init_locale(); if let Err(error) = run_command(cli).await { eprintln!("{:?}", error); From 0e68acfc6295f07c466ee9e3730d0124c587d3e8 Mon Sep 17 00:00:00 2001 From: Josef Reidinger Date: Mon, 26 Feb 2024 09:45:25 +0100 Subject: [PATCH 21/48] fix rendering issue --- web/src/components/storage/VolumeForm.jsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/web/src/components/storage/VolumeForm.jsx b/web/src/components/storage/VolumeForm.jsx index 8bee1a2742..b93f3bae11 100644 --- a/web/src/components/storage/VolumeForm.jsx +++ b/web/src/components/storage/VolumeForm.jsx @@ -706,7 +706,7 @@ export default function VolumeForm({ id, volume: currentVolume, templates = [], if (!Object.keys(errors).length) onSubmit(volume); }; - const { fsType, snapshots } = state.formData; + const { fsType } = state.formData; const ShowMountPointSelector = () => ( From f7e637b879412d7f787225fa03dda76f3f9effa3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Imobach=20Gonz=C3=A1lez=20Sosa?= Date: Mon, 26 Feb 2024 10:19:26 +0000 Subject: [PATCH 22/48] rust: adapt the code to do not rely on systemd during tests --- .github/workflows/ci-rust.yml | 5 ++++- rust/agama-dbus-server/src/l10n.rs | 10 +++++----- rust/agama-dbus-server/src/l10n/locale.rs | 2 +- rust/agama-locale-data/src/lib.rs | 3 +-- rust/share/bin/README.md | 8 ++++++++ rust/share/bin/localectl | 14 ++++++++++++++ 6 files changed, 33 insertions(+), 9 deletions(-) create mode 100644 rust/share/bin/README.md create mode 100755 rust/share/bin/localectl diff --git a/.github/workflows/ci-rust.yml b/.github/workflows/ci-rust.yml index 2b8418a622..ffc9857543 100644 --- a/.github/workflows/ci-rust.yml +++ b/.github/workflows/ci-rust.yml @@ -76,6 +76,7 @@ jobs: pam-devel python-langtable-data timezone + xkeyboard-config - name: Install Rust toolchains run: rustup toolchain install stable @@ -92,7 +93,9 @@ jobs: tool: cargo-binstall - name: Install Tarpaulin (for code coverage) - run: cargo-binstall --no-confirm cargo-tarpaulin + run: | + echo "$PWD/share/bin" >> $GITHUB_PATH + cargo-binstall --no-confirm cargo-tarpaulin - name: Run the tests run: cargo tarpaulin --out xml -- --nocapture diff --git a/rust/agama-dbus-server/src/l10n.rs b/rust/agama-dbus-server/src/l10n.rs index e7bb10a7e9..d4b060de56 100644 --- a/rust/agama-dbus-server/src/l10n.rs +++ b/rust/agama-dbus-server/src/l10n.rs @@ -192,18 +192,18 @@ impl Locale { let mut locales_db = LocalesDatabase::new(); locales_db.read(&locale)?; - let default_locale = if locales_db.exists(locale.as_str()) { - ui_locale.to_string() - } else { + let mut default_locale = ui_locale.to_string(); + if !locales_db.exists(locale.as_str()) { // TODO: handle the case where the database is empty (not expected!) - locales_db.entries().get(0).unwrap().code.to_string() + default_locale = locales_db.entries().first().unwrap().code.to_string(); }; let mut timezones_db = TimezonesDatabase::new(); timezones_db.read(&ui_locale.language)?; + let mut default_timezone = DEFAULT_TIMEZONE.to_string(); if !timezones_db.exists(&default_timezone) { - default_timezone = timezones_db.entries().get(0).unwrap().code.to_string(); + default_timezone = timezones_db.entries().first().unwrap().code.to_string(); }; let mut keymaps_db = KeymapsDatabase::new(); diff --git a/rust/agama-dbus-server/src/l10n/locale.rs b/rust/agama-dbus-server/src/l10n/locale.rs index fadcf9b71b..e75d6f1e17 100644 --- a/rust/agama-dbus-server/src/l10n/locale.rs +++ b/rust/agama-dbus-server/src/l10n/locale.rs @@ -36,7 +36,7 @@ impl LocalesDatabase { /// /// * `ui_language`: language to translate the descriptions (e.g., "en"). pub fn read(&mut self, ui_language: &str) -> Result<(), Error> { - let result = Command::new("/usr/bin/localectl") + let result = Command::new("localectl") .args(["list-locales"]) .output() .context("Failed to get the list of locales")?; diff --git a/rust/agama-locale-data/src/lib.rs b/rust/agama-locale-data/src/lib.rs index 096d29f358..fad38cbe70 100644 --- a/rust/agama-locale-data/src/lib.rs +++ b/rust/agama-locale-data/src/lib.rs @@ -51,8 +51,7 @@ pub fn get_xkeyboards() -> anyhow::Result { /// assert!(key_maps.contains(&us)); /// ``` pub fn get_localectl_keymaps() -> anyhow::Result> { - const BINARY: &str = "/usr/bin/localectl"; - let output = Command::new(BINARY) + let output = Command::new("localectl") .arg("list-keymaps") .output() .context("failed to execute localectl list-maps")? diff --git a/rust/share/bin/README.md b/rust/share/bin/README.md new file mode 100644 index 0000000000..7c6ea621db --- /dev/null +++ b/rust/share/bin/README.md @@ -0,0 +1,8 @@ +This directory contains commands that replaces real ones during CI testing. The reason is that these +commands might not work in the CI environment (e.g., systemd related commands). + +To use these "binaries" in the tests, just set the right PATH: + +``` +PATH=$PWD/share/bin:$PATH cargo test +``` diff --git a/rust/share/bin/localectl b/rust/share/bin/localectl new file mode 100755 index 0000000000..b95d23c924 --- /dev/null +++ b/rust/share/bin/localectl @@ -0,0 +1,14 @@ +#!/usr/bin/sh + +case "$1" in +"list-locales") + echo "en_US.UTF-8" + ;; +"list-keymaps") + echo "us" + ;; +*) + echo "unknown action" + exit 1 + ;; +esac From b7484cd581e54c248037b12e258091e43f5698ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Imobach=20Gonz=C3=A1lez=20Sosa?= Date: Mon, 26 Feb 2024 10:42:15 +0000 Subject: [PATCH 23/48] rust: openapi fixes --- rust/agama-dbus-server/src/l10n.rs | 1 + rust/agama-dbus-server/src/l10n/keyboard.rs | 4 +++- rust/agama-dbus-server/src/l10n/web.rs | 20 +++++++++++++++----- rust/agama-dbus-server/src/web/docs.rs | 4 +++- 4 files changed, 22 insertions(+), 7 deletions(-) diff --git a/rust/agama-dbus-server/src/l10n.rs b/rust/agama-dbus-server/src/l10n.rs index d4b060de56..c713993671 100644 --- a/rust/agama-dbus-server/src/l10n.rs +++ b/rust/agama-dbus-server/src/l10n.rs @@ -7,6 +7,7 @@ pub mod web; use crate::error::Error; use agama_locale_data::{KeymapId, LocaleCode}; use anyhow::Context; +pub use keyboard::Keymap; use keyboard::KeymapsDatabase; pub use locale::LocaleEntry; use locale::LocalesDatabase; diff --git a/rust/agama-dbus-server/src/l10n/keyboard.rs b/rust/agama-dbus-server/src/l10n/keyboard.rs index d5447e066d..aec68657e6 100644 --- a/rust/agama-dbus-server/src/l10n/keyboard.rs +++ b/rust/agama-dbus-server/src/l10n/keyboard.rs @@ -4,9 +4,11 @@ use serde::Serialize; use std::collections::HashMap; // Minimal representation of a keymap -#[derive(Clone, Debug, Serialize)] +#[derive(Clone, Debug, Serialize, utoipa::ToSchema)] pub struct Keymap { + /// Keymap identifier (e.g., "us") pub id: KeymapId, + /// Keymap description description: String, } diff --git a/rust/agama-dbus-server/src/l10n/web.rs b/rust/agama-dbus-server/src/l10n/web.rs index d5ba71e4b5..0ea4de86f7 100644 --- a/rust/agama-dbus-server/src/l10n/web.rs +++ b/rust/agama-dbus-server/src/l10n/web.rs @@ -70,7 +70,7 @@ pub struct LocalesResponse { locales: Vec, } -#[utoipa::path(get, path = "/locales", responses( +#[utoipa::path(get, path = "/l10n/locales", responses( (status = 200, description = "List of known locales", body = LocalesResponse) ))] async fn locales(State(state): State) -> Json { @@ -79,11 +79,15 @@ async fn locales(State(state): State) -> Json { Json(LocalesResponse { locales }) } -#[derive(Serialize, Deserialize)] -struct LocaleConfig { +#[derive(Serialize, Deserialize, utoipa::ToSchema)] +pub struct LocaleConfig { + /// Locales to install in the target system locales: Option>, + /// Keymap for the target system keymap: Option, + /// Timezone for the target system timezone: Option, + /// User-interface locale. It is actually not related to the `locales` property. ui_locale: Option, } @@ -92,7 +96,7 @@ pub struct TimezonesResponse { timezones: Vec, } -#[utoipa::path(get, path = "/timezones", responses( +#[utoipa::path(get, path = "/l10n/timezones", responses( (status = 200, description = "List of known timezones", body = TimezonesResponse) ))] async fn timezones(State(state): State) -> Json { @@ -106,7 +110,7 @@ pub struct KeymapsResponse { keymaps: Vec, } -#[utoipa::path(get, path = "/keymaps", responses( +#[utoipa::path(get, path = "/l10n/keymaps", responses( (status = 200, description = "List of known keymaps", body = KeymapsResponse) ))] async fn keymaps(State(state): State) -> Json { @@ -115,6 +119,9 @@ async fn keymaps(State(state): State) -> Json { Json(KeymapsResponse { keymaps }) } +#[utoipa::path(put, path = "/l10n/config", responses( + (status = 200, description = "Set the locale configuration", body = LocaleConfig) +))] async fn set_config( State(state): State, Json(value): Json, @@ -157,6 +164,9 @@ async fn set_config( Ok(Json(())) } +#[utoipa::path(get, path = "/l10n/config", responses( + (status = 200, description = "Localization configuration", body = LocaleConfig) +))] async fn get_config(State(state): State) -> Json { let data = state.locale.read().unwrap(); Json(LocaleConfig { diff --git a/rust/agama-dbus-server/src/web/docs.rs b/rust/agama-dbus-server/src/web/docs.rs index fd87be616b..b575745084 100644 --- a/rust/agama-dbus-server/src/web/docs.rs +++ b/rust/agama-dbus-server/src/web/docs.rs @@ -7,7 +7,9 @@ use utoipa::OpenApi; components( schemas(super::http::PingResponse), schemas(crate::l10n::web::LocalesResponse), - schemas(crate::l10n::LocaleEntry) + schemas(crate::l10n::LocaleEntry), + schemas(crate::l10n::web::LocaleConfig), + schemas(crate::l10n::Keymap) ) )] pub struct ApiDoc; From 8932fe1a9f9dfcaec0fb9e7693d1680e8ae2c4e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Imobach=20Gonz=C3=A1lez=20Sosa?= Date: Mon, 26 Feb 2024 10:48:00 +0000 Subject: [PATCH 24/48] rust: flatten HTTP responses * Given that we are not adding any other metadata, there is not need to use an object but an array. --- rust/agama-dbus-server/src/l10n.rs | 1 + rust/agama-dbus-server/src/l10n/timezone.rs | 2 +- rust/agama-dbus-server/src/l10n/web.rs | 33 ++++++--------------- rust/agama-dbus-server/src/web/docs.rs | 4 +-- 4 files changed, 13 insertions(+), 27 deletions(-) diff --git a/rust/agama-dbus-server/src/l10n.rs b/rust/agama-dbus-server/src/l10n.rs index c713993671..a5ebb08fe9 100644 --- a/rust/agama-dbus-server/src/l10n.rs +++ b/rust/agama-dbus-server/src/l10n.rs @@ -12,6 +12,7 @@ use keyboard::KeymapsDatabase; pub use locale::LocaleEntry; use locale::LocalesDatabase; use std::process::Command; +pub use timezone::TimezoneEntry; use timezone::TimezonesDatabase; use zbus::{dbus_interface, Connection}; diff --git a/rust/agama-dbus-server/src/l10n/timezone.rs b/rust/agama-dbus-server/src/l10n/timezone.rs index 2ba507aca0..f1547903f7 100644 --- a/rust/agama-dbus-server/src/l10n/timezone.rs +++ b/rust/agama-dbus-server/src/l10n/timezone.rs @@ -7,7 +7,7 @@ use serde::Serialize; use std::collections::HashMap; /// Represents a timezone, including each part as localized. -#[derive(Clone, Debug, Serialize)] +#[derive(Clone, Debug, Serialize, utoipa::ToSchema)] pub struct TimezoneEntry { /// Timezone identifier (e.g. "Atlantic/Canary"). pub code: String, diff --git a/rust/agama-dbus-server/src/l10n/web.rs b/rust/agama-dbus-server/src/l10n/web.rs index 0ea4de86f7..568cfb8160 100644 --- a/rust/agama-dbus-server/src/l10n/web.rs +++ b/rust/agama-dbus-server/src/l10n/web.rs @@ -65,18 +65,13 @@ pub fn l10n_service(events: EventsSender) -> Router { .with_state(state) } -#[derive(Debug, Serialize, utoipa::ToSchema)] -pub struct LocalesResponse { - locales: Vec, -} - #[utoipa::path(get, path = "/l10n/locales", responses( - (status = 200, description = "List of known locales", body = LocalesResponse) + (status = 200, description = "List of known locales", body = Vec) ))] -async fn locales(State(state): State) -> Json { +async fn locales(State(state): State) -> Json> { let data = state.locale.read().unwrap(); let locales = data.locales_db.entries().to_vec(); - Json(LocalesResponse { locales }) + Json(locales) } #[derive(Serialize, Deserialize, utoipa::ToSchema)] @@ -91,32 +86,22 @@ pub struct LocaleConfig { ui_locale: Option, } -#[derive(Debug, Serialize, utoipa::ToSchema)] -pub struct TimezonesResponse { - timezones: Vec, -} - #[utoipa::path(get, path = "/l10n/timezones", responses( - (status = 200, description = "List of known timezones", body = TimezonesResponse) + (status = 200, description = "List of known timezones") ))] -async fn timezones(State(state): State) -> Json { +async fn timezones(State(state): State) -> Json> { let data = state.locale.read().unwrap(); let timezones = data.timezones_db.entries().to_vec(); - Json(TimezonesResponse { timezones }) -} - -#[derive(Debug, Serialize, utoipa::ToSchema)] -pub struct KeymapsResponse { - keymaps: Vec, + Json(timezones) } #[utoipa::path(get, path = "/l10n/keymaps", responses( - (status = 200, description = "List of known keymaps", body = KeymapsResponse) + (status = 200, description = "List of known keymaps", body = Vec) ))] -async fn keymaps(State(state): State) -> Json { +async fn keymaps(State(state): State) -> Json> { let data = state.locale.read().unwrap(); let keymaps = data.keymaps_db.entries().to_vec(); - Json(KeymapsResponse { keymaps }) + Json(keymaps) } #[utoipa::path(put, path = "/l10n/config", responses( diff --git a/rust/agama-dbus-server/src/web/docs.rs b/rust/agama-dbus-server/src/web/docs.rs index b575745084..58a1de6aed 100644 --- a/rust/agama-dbus-server/src/web/docs.rs +++ b/rust/agama-dbus-server/src/web/docs.rs @@ -6,10 +6,10 @@ use utoipa::OpenApi; paths(super::http::ping, crate::l10n::web::locales), components( schemas(super::http::PingResponse), - schemas(crate::l10n::web::LocalesResponse), schemas(crate::l10n::LocaleEntry), schemas(crate::l10n::web::LocaleConfig), - schemas(crate::l10n::Keymap) + schemas(crate::l10n::Keymap), + schemas(crate::l10n::TimezoneEntry) ) )] pub struct ApiDoc; From 36072de613fd1452f648ae6f53ae8fe2dd41581b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Imobach=20Gonz=C3=A1lez=20Sosa?= Date: Mon, 26 Feb 2024 11:06:16 +0000 Subject: [PATCH 25/48] rust: reduce the size of the /locales response --- rust/Cargo.lock | 109 ++++++++++++++++++++-- rust/agama-dbus-server/Cargo.toml | 1 + rust/agama-dbus-server/src/l10n/locale.rs | 3 + 3 files changed, 107 insertions(+), 6 deletions(-) diff --git a/rust/Cargo.lock b/rust/Cargo.lock index 5e55fbc73e..8bef766f82 100644 --- a/rust/Cargo.lock +++ b/rust/Cargo.lock @@ -66,6 +66,7 @@ dependencies = [ "regex", "serde", "serde_json", + "serde_with", "serde_yaml", "simplelog", "systemd-journal-logger", @@ -678,6 +679,7 @@ dependencies = [ "android-tzdata", "iana-time-zone", "num-traits", + "serde", "windows-targets 0.52.0", ] @@ -741,7 +743,7 @@ dependencies = [ "anstream", "anstyle", "clap_lex", - "strsim", + "strsim 0.11.0", "terminal_size", ] @@ -919,6 +921,41 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "darling" +version = "0.20.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "54e36fcd13ed84ffdfda6f5be89b31287cbb80c439841fe69e04841435464391" +dependencies = [ + "darling_core", + "darling_macro", +] + +[[package]] +name = "darling_core" +version = "0.20.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c2cf1c23a687a1feeb728783b993c4e1ad83d99f351801977dd809b48d0a70f" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim 0.10.0", + "syn 2.0.48", +] + +[[package]] +name = "darling_macro" +version = "0.20.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a668eda54683121533a393014d8692171709ff57a7d61f187b6e782719f8933f" +dependencies = [ + "darling_core", + "quote", + "syn 2.0.48", +] + [[package]] name = "data-encoding" version = "2.5.0" @@ -932,6 +969,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8eb30d70a07a3b04884d2677f06bec33509dc67ca60d92949e5535352d3191dc" dependencies = [ "powerfmt", + "serde", ] [[package]] @@ -1269,13 +1307,19 @@ dependencies = [ "futures-sink", "futures-util", "http", - "indexmap", + "indexmap 2.1.0", "slab", "tokio", "tokio-util", "tracing", ] +[[package]] +name = "hashbrown" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" + [[package]] name = "hashbrown" version = "0.13.2" @@ -1443,6 +1487,12 @@ dependencies = [ "cc", ] +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + [[package]] name = "idna" version = "0.5.0" @@ -1453,6 +1503,17 @@ dependencies = [ "unicode-normalization", ] +[[package]] +name = "indexmap" +version = "1.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" +dependencies = [ + "autocfg", + "hashbrown 0.12.3", + "serde", +] + [[package]] name = "indexmap" version = "2.1.0" @@ -2575,13 +2636,43 @@ dependencies = [ "serde", ] +[[package]] +name = "serde_with" +version = "3.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15d167997bd841ec232f5b2b8e0e26606df2e7caa4c31b95ea9ca52b200bd270" +dependencies = [ + "base64 0.21.7", + "chrono", + "hex", + "indexmap 1.9.3", + "indexmap 2.1.0", + "serde", + "serde_derive", + "serde_json", + "serde_with_macros", + "time", +] + +[[package]] +name = "serde_with_macros" +version = "3.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "865f9743393e638991566a8b7a479043c2c8da94a33e0a31f18214c9cae0a64d" +dependencies = [ + "darling", + "proc-macro2", + "quote", + "syn 2.0.48", +] + [[package]] name = "serde_yaml" version = "0.9.27" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3cc7a1570e38322cfe4154732e5110f887ea57e22b76f4bfd32b5bdd3368666c" dependencies = [ - "indexmap", + "indexmap 2.1.0", "itoa", "ryu", "serde", @@ -2710,6 +2801,12 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" +[[package]] +name = "strsim" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" + [[package]] name = "strsim" version = "0.11.0" @@ -2977,7 +3074,7 @@ version = "0.19.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" dependencies = [ - "indexmap", + "indexmap 2.1.0", "toml_datetime", "winnow 0.5.28", ] @@ -2988,7 +3085,7 @@ version = "0.22.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2c1b5fd4128cc8d3e0cb74d4ed9a9cc7c7284becd4df68f5f940e1ad123606f6" dependencies = [ - "indexmap", + "indexmap 2.1.0", "serde", "serde_spanned", "toml_datetime", @@ -3239,7 +3336,7 @@ version = "4.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "272ebdfbc99111033031d2f10e018836056e4d2c8e2acda76450ec7974269fa7" dependencies = [ - "indexmap", + "indexmap 2.1.0", "serde", "serde_json", "utoipa-gen", diff --git a/rust/agama-dbus-server/Cargo.toml b/rust/agama-dbus-server/Cargo.toml index 7ebc2906e7..25cc8ccba5 100644 --- a/rust/agama-dbus-server/Cargo.toml +++ b/rust/agama-dbus-server/Cargo.toml @@ -47,6 +47,7 @@ chrono = { version = "0.4.34", default-features = false, features = [ "clock", ] } pam = "0.8.0" +serde_with = "3.6.1" [[bin]] name = "agama-dbus-server" diff --git a/rust/agama-dbus-server/src/l10n/locale.rs b/rust/agama-dbus-server/src/l10n/locale.rs index e75d6f1e17..630c844144 100644 --- a/rust/agama-dbus-server/src/l10n/locale.rs +++ b/rust/agama-dbus-server/src/l10n/locale.rs @@ -4,12 +4,15 @@ use crate::error::Error; use agama_locale_data::{InvalidLocaleCode, LocaleCode}; use anyhow::Context; use serde::Serialize; +use serde_with::{serde_as, DisplayFromStr}; use std::process::Command; /// Represents a locale, including the localized language and territory. +#[serde_as] #[derive(Debug, Serialize, Clone, utoipa::ToSchema)] pub struct LocaleEntry { /// The locale code (e.g., "es_ES.UTF-8"). + #[serde_as(as = "DisplayFromStr")] pub code: LocaleCode, /// Localized language name (e.g., "Spanish", "Español", etc.) pub language: String, From 0beff2dcda014ab7a10cee1236849b0695b0420b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Imobach=20Gonz=C3=A1lez=20Sosa?= Date: Mon, 26 Feb 2024 11:22:51 +0000 Subject: [PATCH 26/48] rust: fix l10n web tests --- rust/agama-dbus-server/src/l10n/web.rs | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/rust/agama-dbus-server/src/l10n/web.rs b/rust/agama-dbus-server/src/l10n/web.rs index 568cfb8160..258721ebfb 100644 --- a/rust/agama-dbus-server/src/l10n/web.rs +++ b/rust/agama-dbus-server/src/l10n/web.rs @@ -184,7 +184,7 @@ mod tests { let state = build_state(); let response = super::locales(axum::extract::State(state)).await; let default = LocaleCode::default(); - let found = response.locales.iter().find(|l| l.code == default); + let found = response.iter().find(|l| l.code == default); assert!(found.is_some()); } @@ -193,7 +193,7 @@ mod tests { let state = build_state(); let response = super::keymaps(axum::extract::State(state)).await; let english: KeymapId = "us".parse().unwrap(); - let found = response.keymaps.iter().find(|k| k.id == english); + let found = response.iter().find(|k| k.id == english); assert!(found.is_some()); } @@ -201,10 +201,7 @@ mod tests { async fn test_timezones() { let state = build_state(); let response = super::timezones(axum::extract::State(state)).await; - let found = response - .timezones - .iter() - .find(|t| t.code == "Atlantic/Canary"); + let found = response.iter().find(|t| t.code == "Atlantic/Canary"); assert!(found.is_some()); } } From be21451da1dc241451ac8b97d31ca228381a2b09 Mon Sep 17 00:00:00 2001 From: Josef Reidinger Date: Mon, 26 Feb 2024 16:50:45 +0100 Subject: [PATCH 27/48] adapt tests --- .../components/storage/VolumeForm.test.jsx | 35 ++++++++++++++----- 1 file changed, 26 insertions(+), 9 deletions(-) diff --git a/web/src/components/storage/VolumeForm.test.jsx b/web/src/components/storage/VolumeForm.test.jsx index 94a47f5d98..29a1b9b24d 100644 --- a/web/src/components/storage/VolumeForm.test.jsx +++ b/web/src/components/storage/VolumeForm.test.jsx @@ -95,12 +95,12 @@ beforeEach(() => { }); it("renders a control for displaying/selecting the file system type", async () => { - const { user } = plainRender(); + // use home which is not snapshotted + const { user } = plainRender(); const fsTypeButton = screen.getByRole("button", { name: "File system type" }); await user.click(fsTypeButton); - screen.getByRole("option", { name: /Btrfs with snapshots/ }); - screen.getByRole("option", { name: "Btrfs" }); + screen.getByRole("option", { name: "XFS" }); screen.getByRole("option", { name: "Ext4" }); }); @@ -117,6 +117,24 @@ it("does not render the file system control if there is only one option", async ); }); +it("renders the file system control for root mount point without snapshots", async () => { + const { user } = plainRender(); + + const fsTypeButton = screen.getByRole("button", { name: "File system type" }); + await user.click(fsTypeButton); + screen.getByRole("option", { name: "Btrfs" }); + screen.getByRole("option", { name: "Ext4" }); +}); + +it("does not render the file system control for root mount point with btrfs with snapshots", async () => { + plainRender(); + + await screen.findByText("Btrfs"); + await waitFor(() => ( + expect(screen.queryByRole("button", { name: "File system type" })).not.toBeInTheDocument()) + ); +}); + it("renders controls for setting the desired size", () => { plainRender(); @@ -179,17 +197,16 @@ it("calls the onSubmit callback with resulting volume when the form is submitted await user.type(maxSizeInput, "25"); await user.selectOptions(maxSizeUnitSelector, maxSizeGiBUnit); - const fsTypeButton = screen.getByRole("button", { name: "File system type" }); - await user.click(fsTypeButton); - const ext4Button = screen.getByRole("option", { name: "Ext4" }); - await user.click(ext4Button); + // root is with btrfs and snapshots, so it is not possible to select it + await screen.findByText("Btrfs"); + await waitFor(() => ( + expect(screen.queryByRole("button", { name: "File system type" })).not.toBeInTheDocument()) + ); await user.click(submitForm); expect(onSubmitFn).toHaveBeenCalledWith({ ...volumes.root, - fsType: "Ext4", - snapshots: false, minSize: parseToBytes("10 GiB"), maxSize: parseToBytes("25 GiB") }); From a37391b47ac18178886e791b79adcb967d550c40 Mon Sep 17 00:00:00 2001 From: Josef Reidinger Date: Mon, 26 Feb 2024 17:00:44 +0100 Subject: [PATCH 28/48] apply suggestion from code review --- .../storage/ProposalSettingsSection.jsx | 26 ++++++++++--------- 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/web/src/components/storage/ProposalSettingsSection.jsx b/web/src/components/storage/ProposalSettingsSection.jsx index 4695b29005..7e9323b4d3 100644 --- a/web/src/components/storage/ProposalSettingsSection.jsx +++ b/web/src/components/storage/ProposalSettingsSection.jsx @@ -478,10 +478,13 @@ const SnapshotsField = ({ onChange({ value: checked, settings }); }; - if (rootVolume.outline.snapshotsConfigurable) { + const configurableSnapshots = rootVolume.outline.snapshotsConfigurable; + const forcedSnapshots = !configurableSnapshots && rootVolume.fsType === "Btrfs" && rootVolume.snapshots; + + const SnapshotsToggle = () => { const explanation = _("Uses btrfs for the root file system allowing to boot to a previous version of the system after configuration changes or software upgrades."); return ( -
+ <> {explanation}
-
- ); - } else if (rootVolume.fsType === "Btrfs" && rootVolume.snapshots) { - return ( -
- {_("Btrfs snapshots required by product.")} -
+ ); - } else { // strange situation, should not happen - return undefined; - } + }; + + return ( +
+ + } /> +
+ ); }; /** From fb89fad95b7d23ad4d41f93a7d8b22fec6deb39e Mon Sep 17 00:00:00 2001 From: Josef Reidinger Date: Mon, 26 Feb 2024 21:21:03 +0100 Subject: [PATCH 29/48] Update web/src/components/storage/VolumeForm.test.jsx MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: David Díaz <1691872+dgdavid@users.noreply.github.com> --- web/src/components/storage/VolumeForm.test.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/src/components/storage/VolumeForm.test.jsx b/web/src/components/storage/VolumeForm.test.jsx index 29a1b9b24d..a3ca147f48 100644 --- a/web/src/components/storage/VolumeForm.test.jsx +++ b/web/src/components/storage/VolumeForm.test.jsx @@ -95,7 +95,7 @@ beforeEach(() => { }); it("renders a control for displaying/selecting the file system type", async () => { - // use home which is not snapshotted + // use home which is not using snapshots const { user } = plainRender(); const fsTypeButton = screen.getByRole("button", { name: "File system type" }); From 5270464d521cc93e12d99b06dd4ff23c1311c2f7 Mon Sep 17 00:00:00 2001 From: Josef Reidinger Date: Mon, 26 Feb 2024 21:53:15 +0100 Subject: [PATCH 30/48] more review fixes --- web/src/components/storage/ProposalSettingsSection.jsx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/web/src/components/storage/ProposalSettingsSection.jsx b/web/src/components/storage/ProposalSettingsSection.jsx index c301ce91ed..15d052dae5 100644 --- a/web/src/components/storage/ProposalSettingsSection.jsx +++ b/web/src/components/storage/ProposalSettingsSection.jsx @@ -139,14 +139,14 @@ const SnapshotsField = ({ const switchState = (_, checked) => { setIsChecked(checked); - onChange({ value: checked, settings }); + onChange({ active: checked, settings }); }; const configurableSnapshots = rootVolume.outline.snapshotsConfigurable; const forcedSnapshots = !configurableSnapshots && rootVolume.fsType === "Btrfs" && rootVolume.snapshots; const SnapshotsToggle = () => { - const explanation = _("Uses btrfs for the root file system allowing to boot to a previous version of the system after configuration changes or software upgrades."); + const explanation = _("Uses Btrfs for the root file system allowing to boot to a previous version of the system after configuration changes or software upgrades."); return ( <> { + const changeBtrfsSnapshots = ({ active, settings }) => { const rootVolume = settings.volumes.find((i) => i.mountPath === "/"); - if (value) { + if (active) { rootVolume.fsType = "Btrfs"; rootVolume.snapshots = true; } else { From f4d996af0596f6d2c887423eb471b895b83c0d77 Mon Sep 17 00:00:00 2001 From: Josef Reidinger Date: Mon, 26 Feb 2024 21:53:20 +0100 Subject: [PATCH 31/48] changes --- web/package/cockpit-agama.changes | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/web/package/cockpit-agama.changes b/web/package/cockpit-agama.changes index a28b65bab7..792f22ff75 100644 --- a/web/package/cockpit-agama.changes +++ b/web/package/cockpit-agama.changes @@ -1,3 +1,10 @@ +------------------------------------------------------------------- +Mon Feb 26 20:46:45 UTC 2024 - Josef Reidinger + +- Remove fs type option "Btrfs with snapshots" and create instead + global option that affects only root volume + (gh#openSUSE/agama#1039) + ------------------------------------------------------------------- Thu Feb 22 14:05:56 UTC 2024 - David Diaz From c7414ca1299e6108f2c9dc05ea0137a926ceceb5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Imobach=20Gonz=C3=A1lez=20Sosa?= Date: Tue, 27 Feb 2024 06:42:10 +0000 Subject: [PATCH 32/48] rust: localectl mock includes the whole output --- rust/share/bin/localectl | 17 +- rust/share/localectl-list-keymaps.txt | 612 ++++++++++++++++++++++++++ rust/share/localectl-list-locale.txt | 0 rust/share/localectl-list-locales.txt | 151 +++++++ 4 files changed, 767 insertions(+), 13 deletions(-) create mode 100644 rust/share/localectl-list-keymaps.txt create mode 100644 rust/share/localectl-list-locale.txt create mode 100644 rust/share/localectl-list-locales.txt diff --git a/rust/share/bin/localectl b/rust/share/bin/localectl index b95d23c924..21f4ce9dbe 100755 --- a/rust/share/bin/localectl +++ b/rust/share/bin/localectl @@ -1,14 +1,5 @@ -#!/usr/bin/sh +#!/usr/bin/env sh -case "$1" in -"list-locales") - echo "en_US.UTF-8" - ;; -"list-keymaps") - echo "us" - ;; -*) - echo "unknown action" - exit 1 - ;; -esac +SCRIPT=$(readlink -f "$0") +DATADIR=$(dirname "$SCRIPT")/.. +cat $DATADIR/localectl-$1.txt diff --git a/rust/share/localectl-list-keymaps.txt b/rust/share/localectl-list-keymaps.txt new file mode 100644 index 0000000000..a68870b4ea --- /dev/null +++ b/rust/share/localectl-list-keymaps.txt @@ -0,0 +1,612 @@ +3l +ANSI-dvorak +Pl02 +adnw +al +al-plisi +amiga-de +amiga-us +apple-a1048-sv +apple-a1243-sv +apple-a1243-sv-fn-reverse +apple-internal-0x0253-sv +apple-internal-0x0253-sv-fn-reverse +applkey +ara +at +at-mac +at-nodeadkeys +atari-de +atari-se +atari-uk-falcon +atari-us +az +azerty +ba +ba-alternatequotes +ba-unicode +ba-unicodeus +ba-us +backspace +bashkir +be +be-iso-alternate +be-latin1 +be-nodeadkeys +be-oss +be-oss_latin9 +be-wang +bg-cp1251 +bg-cp855 +bg_bds-cp1251 +bg_bds-utf8 +bg_pho-cp1251 +bg_pho-utf8 +bone +br +br-abnt +br-abnt-alt +br-abnt2 +br-abnt2-old +br-dvorak +br-latin1-abnt2 +br-latin1-us +br-nativo +br-nativo-epo +br-nativo-us +br-nodeadkeys +br-thinkpad +by +by-cp1251 +by-latin +bywin-cp1251 +ca +ca-eng +ca-fr-dvorak +ca-fr-legacy +ca-multix +carpalx +carpalx-full +cf +ch +ch-de_mac +ch-de_nodeadkeys +ch-fr +ch-fr_mac +ch-fr_nodeadkeys +ch-legacy +chinese +cm +cm-azerty +cm-dvorak +cm-french +cm-mmuock +cm-qwerty +cn +cn-altgr-pinyin +cn-latin1 +croat +ctrl +cz +cz-bksl +cz-cp1250 +cz-dvorak-ucw +cz-lat2 +cz-lat2-prog +cz-lat2-us +cz-qwerty +cz-qwerty-mac +cz-qwerty_bksl +cz-rus +cz-us-qwertz +cz-winkeys +cz-winkeys-qwerty +de +de-T3 +de-deadacute +de-deadgraveacute +de-deadtilde +de-dsb +de-dsb_qwertz +de-dvorak +de-e1 +de-e2 +de-latin1 +de-latin1-nodeadkeys +de-mac +de-mac_nodeadkeys +de-mobii +de-neo +de-nodeadkeys +de-qwerty +de-ro +de-ro_nodeadkeys +de-tr +de-us +de_CH-latin1 +de_alt_UTF-8 +defkeymap +defkeymap_V1.0 +dk +dk-dvorak +dk-latin1 +dk-mac +dk-mac_nodeadkeys +dk-nodeadkeys +dk-winkeys +dvorak +dvorak-ca-fr +dvorak-de +dvorak-es +dvorak-fr +dvorak-l +dvorak-la +dvorak-no +dvorak-programmer +dvorak-r +dvorak-ru +dvorak-sv-a1 +dvorak-sv-a5 +dvorak-uk +dvorak-ukp +dz +dz-azerty-deadkeys +dz-qwerty-gb-deadkeys +dz-qwerty-us-deadkeys +ee +ee-dvorak +ee-nodeadkeys +ee-us +emacs +emacs2 +en +en-latin9 +epo +epo-legacy +es +es-ast +es-cat +es-cp850 +es-deadtilde +es-dvorak +es-nodeadkeys +es-olpc +es-winkeys +et +et-nodeadkeys +euro +euro1 +euro2 +fa +fi +fi-classic +fi-kotoistus +fi-mac +fi-nodeadkeys +fi-smi +fi-winkeys +fo +fo-nodeadkeys +fr +fr-afnor +fr-azerty +fr-bepo +fr-bepo-latin9 +fr-bepo_afnor +fr-bepo_latin9 +fr-bre +fr-dvorak +fr-latin1 +fr-latin9 +fr-latin9_nodeadkeys +fr-mac +fr-nodeadkeys +fr-oci +fr-oss +fr-oss_latin9 +fr-oss_nodeadkeys +fr-pc +fr-us +fr_CH +fr_CH-latin1 +gb +gb-colemak +gb-colemak_dh +gb-dvorak +gb-dvorakukp +gb-extd +gb-gla +gb-intl +gb-mac +gb-mac_intl +gb-pl +ge +ge-ergonomic +ge-mess +ge-ru +gh +gh-akan +gh-avn +gh-ewe +gh-fula +gh-ga +gh-generic +gh-gillbt +gh-hausa +gr +gr-pc +hr +hr-alternatequotes +hr-unicode +hr-unicodeus +hr-us +hu +hu-101_qwerty_comma_dead +hu-101_qwerty_comma_nodead +hu-101_qwerty_dot_dead +hu-101_qwerty_dot_nodead +hu-101_qwertz_comma_dead +hu-101_qwertz_comma_nodead +hu-101_qwertz_dot_dead +hu-101_qwertz_dot_nodead +hu-102_qwerty_comma_dead +hu-102_qwerty_comma_nodead +hu-102_qwerty_dot_dead +hu-102_qwerty_dot_nodead +hu-102_qwertz_comma_dead +hu-102_qwertz_comma_nodead +hu-102_qwertz_dot_dead +hu-102_qwertz_dot_nodead +hu-nodeadkeys +hu-qwerty +hu-standard +hu101 +id +ie +ie-CloGaelach +ie-UnicodeExpert +ie-ogam_is434 +il +il-heb +il-phonetic +il-si2 +in-eng +in-iipa +iq-ku +iq-ku_alt +iq-ku_ara +iq-ku_f +ir +ir-ku +ir-ku_alt +ir-ku_ara +ir-ku_f +is +is-dvorak +is-latin1 +is-latin1-us +is-mac +is-mac_legacy +it +it-fur +it-geo +it-ibm +it-intl +it-mac +it-nodeadkeys +it-scn +it-us +it-winkeys +it2 +jp +jp-OADG109A +jp-dvorak +jp-kana86 +jp106 +kazakh +ke +ke-kik +keypad +khmer +koy +kr +kr-kr104 +ky_alt_sh-UTF-8 +kyrgyz +kz-latin +la-latin1 +latam +latam-colemak +latam-deadtilde +latam-dvorak +latam-nodeadkeys +lk-us +lt +lt-ibm +lt-lekp +lt-lekpa +lt-ratise +lt-sgs +lt-std +lt-us +lt.baltic +lt.l4 +lt.std +lv +lv-adapted +lv-apostrophe +lv-ergonomic +lv-fkey +lv-modern +lv-tilde +ma-french +ma-rif +mac-Pl02 +mac-be +mac-br-abnt2 +mac-cz-us-qwertz +mac-de-latin1 +mac-de-latin1-nodeadkeys +mac-de_CH +mac-dk-latin1 +mac-dvorak +mac-es +mac-euro +mac-euro2 +mac-fi-latin1 +mac-fr +mac-fr-legacy +mac-fr_CH-latin1 +mac-gr +mac-hu +mac-it +mac-jp106 +mac-no-latin1 +mac-pl +mac-pt-latin1 +mac-ru1 +mac-se +mac-template +mac-uk +mac-us +md +md-gag +me +me-latinalternatequotes +me-latinunicode +me-latinunicodeyz +me-latinyz +mk +mk-cp1251 +mk-utf +mk0 +ml +ml-fr-oss +ml-us-intl +ml-us-mac +mm +mm-mnw +mm-shn +mod-dh-ansi-us +mod-dh-ansi-us-awing +mod-dh-ansi-us-fatz +mod-dh-ansi-us-fatz-wide +mod-dh-ansi-us-wide +mod-dh-iso-uk +mod-dh-iso-uk-wide +mod-dh-iso-us +mod-dh-iso-us-wide +mod-dh-matrix-us +mt +mt-alt-gb +mt-alt-us +mt-us +neo +neoqwertz +ng +ng-hausa +ng-igbo +ng-yoruba +nl +nl-mac +nl-std +nl-us +nl2 +no +no-colemak +no-colemak_dh +no-colemak_dh_wide +no-dvorak +no-latin1 +no-mac +no-mac_nodeadkeys +no-nodeadkeys +no-smi +no-smi_nodeadkeys +no-winkeys +nz +nz-mao +pc110 +ph +ph-capewell-dvorak +ph-capewell-qwerf2k6 +ph-colemak +ph-dvorak +pl +pl-csb +pl-dvorak +pl-dvorak_altquotes +pl-dvorak_quotes +pl-dvp +pl-legacy +pl-qwertz +pl-szl +pl1 +pl2 +pl3 +pl4 +pt +pt-latin1 +pt-latin9 +pt-mac +pt-mac_nodeadkeys +pt-nativo +pt-nativo-epo +pt-nativo-us +pt-nodeadkeys +ro +ro-latin2 +ro-std +ro-winkeys +ro_std +ro_win +rs-latin +rs-latinalternatequotes +rs-latinunicode +rs-latinunicodeyz +rs-latinyz +ru +ru-cp1251 +ru-cv_latin +ru-ms +ru-ruchey_en +ru-yawerty +ru1 +ru1_win-utf +ru2 +ru3 +ru4 +ru_win +ruwin_alt-CP1251 +ruwin_alt-KOI8-R +ruwin_alt-UTF-8 +ruwin_alt_sh-UTF-8 +ruwin_cplk-CP1251 +ruwin_cplk-KOI8-R +ruwin_cplk-UTF-8 +ruwin_ct_sh-CP1251 +ruwin_ct_sh-KOI8-R +ruwin_ct_sh-UTF-8 +ruwin_ctrl-CP1251 +ruwin_ctrl-KOI8-R +ruwin_ctrl-UTF-8 +se +se-dvorak +se-fi-ir209 +se-fi-lat6 +se-ir209 +se-lat6 +se-latin1 +se-mac +se-nodeadkeys +se-smi +se-svdvorak +se-us +se-us_dvorak +sg +sg-latin1 +sg-latin1-lk450 +si +si-alternatequotes +si-us +sk +sk-bksl +sk-prog-qwerty +sk-prog-qwertz +sk-qwerty +sk-qwerty_bksl +sk-qwertz +slovene +sr-cy +sr-latin +sun-pl +sun-pl-altgraph +sundvorak +sunkeymap +sunt4-es +sunt4-fi-latin1 +sunt4-no-latin1 +sunt5-cz-us +sunt5-de-latin1 +sunt5-es +sunt5-fi-latin1 +sunt5-fr-latin1 +sunt5-ru +sunt5-uk +sunt5-us-cz +sunt6-uk +sv-latin1 +sy-ku +sy-ku_alt +sy-ku_f +taiwanese +tj_alt-UTF8 +tm +tm-alt +tr +tr-alt +tr-e +tr-f +tr-intl +tr-ku +tr-ku_alt +tr-ku_f +tr_f-latin5 +tr_q-latin5 +tralt +trf +trq +ttwin_alt-UTF-8 +ttwin_cplk-UTF-8 +ttwin_ct_sh-UTF-8 +ttwin_ctrl-UTF-8 +tw +tw-indigenous +tw-saisiyat +ua +ua-cp1251 +ua-crh +ua-crh_alt +ua-crh_f +ua-utf +ua-utf-ws +ua-ws +uk +unicode +us +us-acentos +us-acentos-old +us-alt-intl +us-altgr-intl +us-colemak +us-colemak_dh +us-colemak_dh_iso +us-colemak_dh_ortho +us-colemak_dh_wide +us-colemak_dh_wide_iso +us-dvorak +us-dvorak-alt-intl +us-dvorak-classic +us-dvorak-intl +us-dvorak-l +us-dvorak-mac +us-dvorak-r +us-dvp +us-euro +us-haw +us-hbs +us-intl +us-mac +us-norman +us-olpc2 +us-symbolic +us-workman +us-workman-intl +us1 +uz-latin +vn +vn-fr +vn-us +wangbe +wangbe2 +windowkeys diff --git a/rust/share/localectl-list-locale.txt b/rust/share/localectl-list-locale.txt new file mode 100644 index 0000000000..e69de29bb2 diff --git a/rust/share/localectl-list-locales.txt b/rust/share/localectl-list-locales.txt new file mode 100644 index 0000000000..a3da6481d4 --- /dev/null +++ b/rust/share/localectl-list-locales.txt @@ -0,0 +1,151 @@ +C.UTF-8 +aa_DJ.UTF-8 +af_ZA.UTF-8 +an_ES.UTF-8 +ar_AE.UTF-8 +ar_BH.UTF-8 +ar_DZ.UTF-8 +ar_EG.UTF-8 +ar_IQ.UTF-8 +ar_JO.UTF-8 +ar_KW.UTF-8 +ar_LB.UTF-8 +ar_LY.UTF-8 +ar_MA.UTF-8 +ar_OM.UTF-8 +ar_QA.UTF-8 +ar_SA.UTF-8 +ar_SD.UTF-8 +ar_SY.UTF-8 +ar_TN.UTF-8 +ar_YE.UTF-8 +ast_ES.UTF-8 +be_BY.UTF-8 +bg_BG.UTF-8 +bhb_IN.UTF-8 +br_FR.UTF-8 +bs_BA.UTF-8 +ca_AD.UTF-8 +ca_ES.UTF-8 +ca_FR.UTF-8 +ca_IT.UTF-8 +cs_CZ.UTF-8 +cy_GB.UTF-8 +da_DK.UTF-8 +de_AT.UTF-8 +de_BE.UTF-8 +de_CH.UTF-8 +de_DE.UTF-8 +de_IT.UTF-8 +de_LI.UTF-8 +de_LU.UTF-8 +el_CY.UTF-8 +el_GR.UTF-8 +en_AU.UTF-8 +en_BW.UTF-8 +en_CA.UTF-8 +en_DK.UTF-8 +en_GB.UTF-8 +en_HK.UTF-8 +en_IE.UTF-8 +en_NZ.UTF-8 +en_PH.UTF-8 +en_SC.UTF-8 +en_SG.UTF-8 +en_US.UTF-8 +en_ZA.UTF-8 +en_ZW.UTF-8 +es_AR.UTF-8 +es_BO.UTF-8 +es_CL.UTF-8 +es_CO.UTF-8 +es_CR.UTF-8 +es_DO.UTF-8 +es_EC.UTF-8 +es_ES.UTF-8 +es_GT.UTF-8 +es_HN.UTF-8 +es_MX.UTF-8 +es_NI.UTF-8 +es_PA.UTF-8 +es_PE.UTF-8 +es_PR.UTF-8 +es_PY.UTF-8 +es_SV.UTF-8 +es_US.UTF-8 +es_UY.UTF-8 +es_VE.UTF-8 +et_EE.UTF-8 +eu_ES.UTF-8 +fi_FI.UTF-8 +fo_FO.UTF-8 +fr_BE.UTF-8 +fr_CA.UTF-8 +fr_CH.UTF-8 +fr_FR.UTF-8 +fr_LU.UTF-8 +ga_IE.UTF-8 +gd_GB.UTF-8 +gl_ES.UTF-8 +gv_GB.UTF-8 +he_IL.UTF-8 +hr_HR.UTF-8 +hsb_DE.UTF-8 +hu_HU.UTF-8 +id_ID.UTF-8 +is_IS.UTF-8 +it_CH.UTF-8 +it_IT.UTF-8 +ja_JP.UTF-8 +ka_GE.UTF-8 +kk_KZ.UTF-8 +kl_GL.UTF-8 +ko_KR.UTF-8 +ku_TR.UTF-8 +kw_GB.UTF-8 +lg_UG.UTF-8 +lt_LT.UTF-8 +lv_LV.UTF-8 +mg_MG.UTF-8 +mi_NZ.UTF-8 +mk_MK.UTF-8 +ms_MY.UTF-8 +mt_MT.UTF-8 +nb_NO.UTF-8 +nl_BE.UTF-8 +nl_NL.UTF-8 +nn_NO.UTF-8 +no_NO.UTF-8 +oc_FR.UTF-8 +om_KE.UTF-8 +pl_PL.UTF-8 +pt_BR.UTF-8 +pt_PT.UTF-8 +ro_RO.UTF-8 +ru_RU.UTF-8 +ru_UA.UTF-8 +sk_SK.UTF-8 +sl_SI.UTF-8 +so_DJ.UTF-8 +so_KE.UTF-8 +so_SO.UTF-8 +sq_AL.UTF-8 +st_ZA.UTF-8 +sv_FI.UTF-8 +sv_SE.UTF-8 +tcy_IN.UTF-8 +tg_TJ.UTF-8 +th_TH.UTF-8 +tl_PH.UTF-8 +tr_CY.UTF-8 +tr_TR.UTF-8 +uk_UA.UTF-8 +uz_UZ.UTF-8 +wa_BE.UTF-8 +xh_ZA.UTF-8 +yi_US.UTF-8 +zh_CN.UTF-8 +zh_HK.UTF-8 +zh_SG.UTF-8 +zh_TW.UTF-8 +zu_ZA.UTF-8 From 6a42f8af537d3ea9bebd10be6e9a98e47fce9d25 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Imobach=20Gonz=C3=A1lez=20Sosa?= Date: Tue, 27 Feb 2024 09:36:37 +0000 Subject: [PATCH 33/48] rust: update from code review --- rust/agama-dbus-server/src/l10n/web.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rust/agama-dbus-server/src/l10n/web.rs b/rust/agama-dbus-server/src/l10n/web.rs index 258721ebfb..1f84f4d437 100644 --- a/rust/agama-dbus-server/src/l10n/web.rs +++ b/rust/agama-dbus-server/src/l10n/web.rs @@ -28,7 +28,7 @@ pub enum LocaleError { #[error("Invalid keymap: {0}")] InvalidKeymap(#[from] InvalidKeymap), #[error("Cannot translate: {0}")] - CannotTranslate(#[from] Error), + OtherError(#[from] Error), } impl IntoResponse for LocaleError { From f638f2a50a6fd0ce97be781cf643b3450b0d3f7d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ladislav=20Slez=C3=A1k?= Date: Tue, 27 Feb 2024 13:18:10 +0100 Subject: [PATCH 34/48] agama-web-server: accept both IPv6 and IPv4 connections --- rust/agama-dbus-server/src/agama-web-server.rs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/rust/agama-dbus-server/src/agama-web-server.rs b/rust/agama-dbus-server/src/agama-web-server.rs index 1398f3f1c7..d8a16fc565 100644 --- a/rust/agama-dbus-server/src/agama-web-server.rs +++ b/rust/agama-dbus-server/src/agama-web-server.rs @@ -13,8 +13,9 @@ use utoipa::OpenApi; enum Commands { /// Start the API server. Serve { - /// Address to listen on (default: "0.0.0.0:3000") - #[arg(long, default_value = "0.0.0.0:3000")] + // Address to listen on (":::3000" listens for both IPv6 and IPv4 + // connections unless manually disabled in /proc/sys/net/ipv6/bindv6only) + #[arg(long, default_value = ":::3000")] address: String, }, /// Display the API documentation in OpenAPI format. From f08203bb9389c73f0efc1b774f8d127d387d4103 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20D=C3=ADaz?= <1691872+dgdavid@users.noreply.github.com> Date: Tue, 27 Feb 2024 14:00:19 +0000 Subject: [PATCH 35/48] Disable cspell in test file The test contain a lot of suggestion that will not pass the spell checker. It make sense to disable it for the whole file in this case. --- web/src/components/users/utils.test.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/web/src/components/users/utils.test.js b/web/src/components/users/utils.test.js index 0b188a4537..1049e3b171 100644 --- a/web/src/components/users/utils.test.js +++ b/web/src/components/users/utils.test.js @@ -19,6 +19,8 @@ * find current contact information at www.suse.com. */ +/* cspell:disable */ + import { suggestUsernames } from "./utils"; describe('suggestUsernames', () => { From bcbf3210a1bcedd54b5d2cf94aefeb16a7ed6c6a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Imobach=20Gonz=C3=A1lez=20Sosa?= Date: Mon, 26 Feb 2024 17:18:16 +0000 Subject: [PATCH 36/48] service: rename rubygem-agama to rubygem-agama-yast --- service/{agama.gemspec => agama-yast.gemspec} | 6 +++--- service/package/gem2rpm.yml | 1 + .../{rubygem-agama.changes => rubygem-agama-yast.changes} | 0 3 files changed, 4 insertions(+), 3 deletions(-) rename service/{agama.gemspec => agama-yast.gemspec} (93%) rename service/package/{rubygem-agama.changes => rubygem-agama-yast.changes} (100%) diff --git a/service/agama.gemspec b/service/agama-yast.gemspec similarity index 93% rename from service/agama.gemspec rename to service/agama-yast.gemspec index 62dbdba14f..b1d50c280d 100644 --- a/service/agama.gemspec +++ b/service/agama-yast.gemspec @@ -21,7 +21,7 @@ # find current contact information at www.suse.com. Gem::Specification.new do |spec| - spec.name = "agama" + spec.name = "agama-yast" # in a git checkout? if File.exist?(File.join(__dir__, "../.git")) @@ -33,8 +33,8 @@ Gem::Specification.new do |spec| spec.version = "99.yupdate" end - spec.summary = "Agama Installer Service" - spec.description = "System service for Agama, an experimental YaST-based installer." + spec.summary = "YaST integration service for Agama" + spec.description = "D-Bus service exposing some YaST features that are useful for Agama." spec.author = "YaST Team" spec.email = "yast-devel@opensuse.org" spec.homepage = "https://github.com/openSUSE/agama" diff --git a/service/package/gem2rpm.yml b/service/package/gem2rpm.yml index 142916e9d2..fef1bc79db 100644 --- a/service/package/gem2rpm.yml +++ b/service/package/gem2rpm.yml @@ -23,6 +23,7 @@ :preamble: |- # Override build.rpm, see also https://github.com/openSUSE/obs-build/blob/master/configs/ %global rb_build_versions %{rb_default_ruby} + Provides: agama-yast BuildRequires: dbus-1-common Requires: dbus-1-common Requires: suseconnect-ruby-bindings diff --git a/service/package/rubygem-agama.changes b/service/package/rubygem-agama-yast.changes similarity index 100% rename from service/package/rubygem-agama.changes rename to service/package/rubygem-agama-yast.changes From 383262780212feeb07e7634b3f68e3d41642bfab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Imobach=20Gonz=C3=A1lez=20Sosa?= Date: Mon, 26 Feb 2024 15:19:54 +0000 Subject: [PATCH 37/48] rust: rename agama-dbus-server to agama-server --- rust/Cargo.toml | 2 +- rust/{agama-dbus-server => agama-server}/Cargo.toml | 0 .../share/server-example.yaml | 0 .../src/agama-dbus-server.rs | 0 .../src/agama-web-server.rs | 0 rust/{agama-dbus-server => agama-server}/src/error.rs | 0 rust/{agama-dbus-server => agama-server}/src/l10n.rs | 0 rust/{agama-dbus-server => agama-server}/src/l10n/helpers.rs | 0 rust/{agama-dbus-server => agama-server}/src/l10n/keyboard.rs | 0 rust/{agama-dbus-server => agama-server}/src/l10n/locale.rs | 0 rust/{agama-dbus-server => agama-server}/src/l10n/timezone.rs | 0 rust/{agama-dbus-server => agama-server}/src/l10n/web.rs | 0 rust/{agama-dbus-server => agama-server}/src/lib.rs | 0 rust/{agama-dbus-server => agama-server}/src/network.rs | 0 .../{agama-dbus-server => agama-server}/src/network/action.rs | 0 .../src/network/adapter.rs | 0 rust/{agama-dbus-server => agama-server}/src/network/dbus.rs | 0 .../src/network/dbus/interfaces.rs | 0 .../src/network/dbus/interfaces/common.rs | 0 .../src/network/dbus/interfaces/connection_configs.rs | 0 .../src/network/dbus/interfaces/connections.rs | 0 .../src/network/dbus/interfaces/devices.rs | 0 .../src/network/dbus/interfaces/ip_config.rs | 0 .../src/network/dbus/service.rs | 0 .../src/network/dbus/tree.rs | 0 rust/{agama-dbus-server => agama-server}/src/network/error.rs | 0 rust/{agama-dbus-server => agama-server}/src/network/model.rs | 0 .../src/network/model/builder.rs | 0 rust/{agama-dbus-server => agama-server}/src/network/nm.rs | 0 .../src/network/nm/adapter.rs | 0 .../src/network/nm/client.rs | 0 .../src/network/nm/dbus.rs | 0 .../src/network/nm/error.rs | 0 .../src/network/nm/model.rs | 0 .../src/network/nm/proxies.rs | 0 .../{agama-dbus-server => agama-server}/src/network/system.rs | 0 rust/{agama-dbus-server => agama-server}/src/questions.rs | 0 .../src/questions/answers.rs | 0 rust/{agama-dbus-server => agama-server}/src/web.rs | 0 rust/{agama-dbus-server => agama-server}/src/web/auth.rs | 0 rust/{agama-dbus-server => agama-server}/src/web/config.rs | 0 rust/{agama-dbus-server => agama-server}/src/web/docs.rs | 0 rust/{agama-dbus-server => agama-server}/src/web/event.rs | 0 rust/{agama-dbus-server => agama-server}/src/web/http.rs | 0 rust/{agama-dbus-server => agama-server}/src/web/progress.rs | 0 rust/{agama-dbus-server => agama-server}/src/web/service.rs | 0 rust/{agama-dbus-server => agama-server}/src/web/state.rs | 0 rust/{agama-dbus-server => agama-server}/src/web/ws.rs | 0 rust/{agama-dbus-server => agama-server}/tests/common/mod.rs | 0 rust/{agama-dbus-server => agama-server}/tests/l10n.rs | 0 rust/{agama-dbus-server => agama-server}/tests/network.rs | 0 rust/{agama-dbus-server => agama-server}/tests/service.rs | 0 rust/package/_service | 4 ++-- 53 files changed, 3 insertions(+), 3 deletions(-) rename rust/{agama-dbus-server => agama-server}/Cargo.toml (100%) rename rust/{agama-dbus-server => agama-server}/share/server-example.yaml (100%) rename rust/{agama-dbus-server => agama-server}/src/agama-dbus-server.rs (100%) rename rust/{agama-dbus-server => agama-server}/src/agama-web-server.rs (100%) rename rust/{agama-dbus-server => agama-server}/src/error.rs (100%) rename rust/{agama-dbus-server => agama-server}/src/l10n.rs (100%) rename rust/{agama-dbus-server => agama-server}/src/l10n/helpers.rs (100%) rename rust/{agama-dbus-server => agama-server}/src/l10n/keyboard.rs (100%) rename rust/{agama-dbus-server => agama-server}/src/l10n/locale.rs (100%) rename rust/{agama-dbus-server => agama-server}/src/l10n/timezone.rs (100%) rename rust/{agama-dbus-server => agama-server}/src/l10n/web.rs (100%) rename rust/{agama-dbus-server => agama-server}/src/lib.rs (100%) rename rust/{agama-dbus-server => agama-server}/src/network.rs (100%) rename rust/{agama-dbus-server => agama-server}/src/network/action.rs (100%) rename rust/{agama-dbus-server => agama-server}/src/network/adapter.rs (100%) rename rust/{agama-dbus-server => agama-server}/src/network/dbus.rs (100%) rename rust/{agama-dbus-server => agama-server}/src/network/dbus/interfaces.rs (100%) rename rust/{agama-dbus-server => agama-server}/src/network/dbus/interfaces/common.rs (100%) rename rust/{agama-dbus-server => agama-server}/src/network/dbus/interfaces/connection_configs.rs (100%) rename rust/{agama-dbus-server => agama-server}/src/network/dbus/interfaces/connections.rs (100%) rename rust/{agama-dbus-server => agama-server}/src/network/dbus/interfaces/devices.rs (100%) rename rust/{agama-dbus-server => agama-server}/src/network/dbus/interfaces/ip_config.rs (100%) rename rust/{agama-dbus-server => agama-server}/src/network/dbus/service.rs (100%) rename rust/{agama-dbus-server => agama-server}/src/network/dbus/tree.rs (100%) rename rust/{agama-dbus-server => agama-server}/src/network/error.rs (100%) rename rust/{agama-dbus-server => agama-server}/src/network/model.rs (100%) rename rust/{agama-dbus-server => agama-server}/src/network/model/builder.rs (100%) rename rust/{agama-dbus-server => agama-server}/src/network/nm.rs (100%) rename rust/{agama-dbus-server => agama-server}/src/network/nm/adapter.rs (100%) rename rust/{agama-dbus-server => agama-server}/src/network/nm/client.rs (100%) rename rust/{agama-dbus-server => agama-server}/src/network/nm/dbus.rs (100%) rename rust/{agama-dbus-server => agama-server}/src/network/nm/error.rs (100%) rename rust/{agama-dbus-server => agama-server}/src/network/nm/model.rs (100%) rename rust/{agama-dbus-server => agama-server}/src/network/nm/proxies.rs (100%) rename rust/{agama-dbus-server => agama-server}/src/network/system.rs (100%) rename rust/{agama-dbus-server => agama-server}/src/questions.rs (100%) rename rust/{agama-dbus-server => agama-server}/src/questions/answers.rs (100%) rename rust/{agama-dbus-server => agama-server}/src/web.rs (100%) rename rust/{agama-dbus-server => agama-server}/src/web/auth.rs (100%) rename rust/{agama-dbus-server => agama-server}/src/web/config.rs (100%) rename rust/{agama-dbus-server => agama-server}/src/web/docs.rs (100%) rename rust/{agama-dbus-server => agama-server}/src/web/event.rs (100%) rename rust/{agama-dbus-server => agama-server}/src/web/http.rs (100%) rename rust/{agama-dbus-server => agama-server}/src/web/progress.rs (100%) rename rust/{agama-dbus-server => agama-server}/src/web/service.rs (100%) rename rust/{agama-dbus-server => agama-server}/src/web/state.rs (100%) rename rust/{agama-dbus-server => agama-server}/src/web/ws.rs (100%) rename rust/{agama-dbus-server => agama-server}/tests/common/mod.rs (100%) rename rust/{agama-dbus-server => agama-server}/tests/l10n.rs (100%) rename rust/{agama-dbus-server => agama-server}/tests/network.rs (100%) rename rust/{agama-dbus-server => agama-server}/tests/service.rs (100%) diff --git a/rust/Cargo.toml b/rust/Cargo.toml index 36ab33dc58..6885b0b788 100644 --- a/rust/Cargo.toml +++ b/rust/Cargo.toml @@ -1,7 +1,7 @@ [workspace] members = [ "agama-cli", - "agama-dbus-server", + "agama-server", "agama-derive", "agama-lib", "agama-locale-data", diff --git a/rust/agama-dbus-server/Cargo.toml b/rust/agama-server/Cargo.toml similarity index 100% rename from rust/agama-dbus-server/Cargo.toml rename to rust/agama-server/Cargo.toml diff --git a/rust/agama-dbus-server/share/server-example.yaml b/rust/agama-server/share/server-example.yaml similarity index 100% rename from rust/agama-dbus-server/share/server-example.yaml rename to rust/agama-server/share/server-example.yaml diff --git a/rust/agama-dbus-server/src/agama-dbus-server.rs b/rust/agama-server/src/agama-dbus-server.rs similarity index 100% rename from rust/agama-dbus-server/src/agama-dbus-server.rs rename to rust/agama-server/src/agama-dbus-server.rs diff --git a/rust/agama-dbus-server/src/agama-web-server.rs b/rust/agama-server/src/agama-web-server.rs similarity index 100% rename from rust/agama-dbus-server/src/agama-web-server.rs rename to rust/agama-server/src/agama-web-server.rs diff --git a/rust/agama-dbus-server/src/error.rs b/rust/agama-server/src/error.rs similarity index 100% rename from rust/agama-dbus-server/src/error.rs rename to rust/agama-server/src/error.rs diff --git a/rust/agama-dbus-server/src/l10n.rs b/rust/agama-server/src/l10n.rs similarity index 100% rename from rust/agama-dbus-server/src/l10n.rs rename to rust/agama-server/src/l10n.rs diff --git a/rust/agama-dbus-server/src/l10n/helpers.rs b/rust/agama-server/src/l10n/helpers.rs similarity index 100% rename from rust/agama-dbus-server/src/l10n/helpers.rs rename to rust/agama-server/src/l10n/helpers.rs diff --git a/rust/agama-dbus-server/src/l10n/keyboard.rs b/rust/agama-server/src/l10n/keyboard.rs similarity index 100% rename from rust/agama-dbus-server/src/l10n/keyboard.rs rename to rust/agama-server/src/l10n/keyboard.rs diff --git a/rust/agama-dbus-server/src/l10n/locale.rs b/rust/agama-server/src/l10n/locale.rs similarity index 100% rename from rust/agama-dbus-server/src/l10n/locale.rs rename to rust/agama-server/src/l10n/locale.rs diff --git a/rust/agama-dbus-server/src/l10n/timezone.rs b/rust/agama-server/src/l10n/timezone.rs similarity index 100% rename from rust/agama-dbus-server/src/l10n/timezone.rs rename to rust/agama-server/src/l10n/timezone.rs diff --git a/rust/agama-dbus-server/src/l10n/web.rs b/rust/agama-server/src/l10n/web.rs similarity index 100% rename from rust/agama-dbus-server/src/l10n/web.rs rename to rust/agama-server/src/l10n/web.rs diff --git a/rust/agama-dbus-server/src/lib.rs b/rust/agama-server/src/lib.rs similarity index 100% rename from rust/agama-dbus-server/src/lib.rs rename to rust/agama-server/src/lib.rs diff --git a/rust/agama-dbus-server/src/network.rs b/rust/agama-server/src/network.rs similarity index 100% rename from rust/agama-dbus-server/src/network.rs rename to rust/agama-server/src/network.rs diff --git a/rust/agama-dbus-server/src/network/action.rs b/rust/agama-server/src/network/action.rs similarity index 100% rename from rust/agama-dbus-server/src/network/action.rs rename to rust/agama-server/src/network/action.rs diff --git a/rust/agama-dbus-server/src/network/adapter.rs b/rust/agama-server/src/network/adapter.rs similarity index 100% rename from rust/agama-dbus-server/src/network/adapter.rs rename to rust/agama-server/src/network/adapter.rs diff --git a/rust/agama-dbus-server/src/network/dbus.rs b/rust/agama-server/src/network/dbus.rs similarity index 100% rename from rust/agama-dbus-server/src/network/dbus.rs rename to rust/agama-server/src/network/dbus.rs diff --git a/rust/agama-dbus-server/src/network/dbus/interfaces.rs b/rust/agama-server/src/network/dbus/interfaces.rs similarity index 100% rename from rust/agama-dbus-server/src/network/dbus/interfaces.rs rename to rust/agama-server/src/network/dbus/interfaces.rs diff --git a/rust/agama-dbus-server/src/network/dbus/interfaces/common.rs b/rust/agama-server/src/network/dbus/interfaces/common.rs similarity index 100% rename from rust/agama-dbus-server/src/network/dbus/interfaces/common.rs rename to rust/agama-server/src/network/dbus/interfaces/common.rs diff --git a/rust/agama-dbus-server/src/network/dbus/interfaces/connection_configs.rs b/rust/agama-server/src/network/dbus/interfaces/connection_configs.rs similarity index 100% rename from rust/agama-dbus-server/src/network/dbus/interfaces/connection_configs.rs rename to rust/agama-server/src/network/dbus/interfaces/connection_configs.rs diff --git a/rust/agama-dbus-server/src/network/dbus/interfaces/connections.rs b/rust/agama-server/src/network/dbus/interfaces/connections.rs similarity index 100% rename from rust/agama-dbus-server/src/network/dbus/interfaces/connections.rs rename to rust/agama-server/src/network/dbus/interfaces/connections.rs diff --git a/rust/agama-dbus-server/src/network/dbus/interfaces/devices.rs b/rust/agama-server/src/network/dbus/interfaces/devices.rs similarity index 100% rename from rust/agama-dbus-server/src/network/dbus/interfaces/devices.rs rename to rust/agama-server/src/network/dbus/interfaces/devices.rs diff --git a/rust/agama-dbus-server/src/network/dbus/interfaces/ip_config.rs b/rust/agama-server/src/network/dbus/interfaces/ip_config.rs similarity index 100% rename from rust/agama-dbus-server/src/network/dbus/interfaces/ip_config.rs rename to rust/agama-server/src/network/dbus/interfaces/ip_config.rs diff --git a/rust/agama-dbus-server/src/network/dbus/service.rs b/rust/agama-server/src/network/dbus/service.rs similarity index 100% rename from rust/agama-dbus-server/src/network/dbus/service.rs rename to rust/agama-server/src/network/dbus/service.rs diff --git a/rust/agama-dbus-server/src/network/dbus/tree.rs b/rust/agama-server/src/network/dbus/tree.rs similarity index 100% rename from rust/agama-dbus-server/src/network/dbus/tree.rs rename to rust/agama-server/src/network/dbus/tree.rs diff --git a/rust/agama-dbus-server/src/network/error.rs b/rust/agama-server/src/network/error.rs similarity index 100% rename from rust/agama-dbus-server/src/network/error.rs rename to rust/agama-server/src/network/error.rs diff --git a/rust/agama-dbus-server/src/network/model.rs b/rust/agama-server/src/network/model.rs similarity index 100% rename from rust/agama-dbus-server/src/network/model.rs rename to rust/agama-server/src/network/model.rs diff --git a/rust/agama-dbus-server/src/network/model/builder.rs b/rust/agama-server/src/network/model/builder.rs similarity index 100% rename from rust/agama-dbus-server/src/network/model/builder.rs rename to rust/agama-server/src/network/model/builder.rs diff --git a/rust/agama-dbus-server/src/network/nm.rs b/rust/agama-server/src/network/nm.rs similarity index 100% rename from rust/agama-dbus-server/src/network/nm.rs rename to rust/agama-server/src/network/nm.rs diff --git a/rust/agama-dbus-server/src/network/nm/adapter.rs b/rust/agama-server/src/network/nm/adapter.rs similarity index 100% rename from rust/agama-dbus-server/src/network/nm/adapter.rs rename to rust/agama-server/src/network/nm/adapter.rs diff --git a/rust/agama-dbus-server/src/network/nm/client.rs b/rust/agama-server/src/network/nm/client.rs similarity index 100% rename from rust/agama-dbus-server/src/network/nm/client.rs rename to rust/agama-server/src/network/nm/client.rs diff --git a/rust/agama-dbus-server/src/network/nm/dbus.rs b/rust/agama-server/src/network/nm/dbus.rs similarity index 100% rename from rust/agama-dbus-server/src/network/nm/dbus.rs rename to rust/agama-server/src/network/nm/dbus.rs diff --git a/rust/agama-dbus-server/src/network/nm/error.rs b/rust/agama-server/src/network/nm/error.rs similarity index 100% rename from rust/agama-dbus-server/src/network/nm/error.rs rename to rust/agama-server/src/network/nm/error.rs diff --git a/rust/agama-dbus-server/src/network/nm/model.rs b/rust/agama-server/src/network/nm/model.rs similarity index 100% rename from rust/agama-dbus-server/src/network/nm/model.rs rename to rust/agama-server/src/network/nm/model.rs diff --git a/rust/agama-dbus-server/src/network/nm/proxies.rs b/rust/agama-server/src/network/nm/proxies.rs similarity index 100% rename from rust/agama-dbus-server/src/network/nm/proxies.rs rename to rust/agama-server/src/network/nm/proxies.rs diff --git a/rust/agama-dbus-server/src/network/system.rs b/rust/agama-server/src/network/system.rs similarity index 100% rename from rust/agama-dbus-server/src/network/system.rs rename to rust/agama-server/src/network/system.rs diff --git a/rust/agama-dbus-server/src/questions.rs b/rust/agama-server/src/questions.rs similarity index 100% rename from rust/agama-dbus-server/src/questions.rs rename to rust/agama-server/src/questions.rs diff --git a/rust/agama-dbus-server/src/questions/answers.rs b/rust/agama-server/src/questions/answers.rs similarity index 100% rename from rust/agama-dbus-server/src/questions/answers.rs rename to rust/agama-server/src/questions/answers.rs diff --git a/rust/agama-dbus-server/src/web.rs b/rust/agama-server/src/web.rs similarity index 100% rename from rust/agama-dbus-server/src/web.rs rename to rust/agama-server/src/web.rs diff --git a/rust/agama-dbus-server/src/web/auth.rs b/rust/agama-server/src/web/auth.rs similarity index 100% rename from rust/agama-dbus-server/src/web/auth.rs rename to rust/agama-server/src/web/auth.rs diff --git a/rust/agama-dbus-server/src/web/config.rs b/rust/agama-server/src/web/config.rs similarity index 100% rename from rust/agama-dbus-server/src/web/config.rs rename to rust/agama-server/src/web/config.rs diff --git a/rust/agama-dbus-server/src/web/docs.rs b/rust/agama-server/src/web/docs.rs similarity index 100% rename from rust/agama-dbus-server/src/web/docs.rs rename to rust/agama-server/src/web/docs.rs diff --git a/rust/agama-dbus-server/src/web/event.rs b/rust/agama-server/src/web/event.rs similarity index 100% rename from rust/agama-dbus-server/src/web/event.rs rename to rust/agama-server/src/web/event.rs diff --git a/rust/agama-dbus-server/src/web/http.rs b/rust/agama-server/src/web/http.rs similarity index 100% rename from rust/agama-dbus-server/src/web/http.rs rename to rust/agama-server/src/web/http.rs diff --git a/rust/agama-dbus-server/src/web/progress.rs b/rust/agama-server/src/web/progress.rs similarity index 100% rename from rust/agama-dbus-server/src/web/progress.rs rename to rust/agama-server/src/web/progress.rs diff --git a/rust/agama-dbus-server/src/web/service.rs b/rust/agama-server/src/web/service.rs similarity index 100% rename from rust/agama-dbus-server/src/web/service.rs rename to rust/agama-server/src/web/service.rs diff --git a/rust/agama-dbus-server/src/web/state.rs b/rust/agama-server/src/web/state.rs similarity index 100% rename from rust/agama-dbus-server/src/web/state.rs rename to rust/agama-server/src/web/state.rs diff --git a/rust/agama-dbus-server/src/web/ws.rs b/rust/agama-server/src/web/ws.rs similarity index 100% rename from rust/agama-dbus-server/src/web/ws.rs rename to rust/agama-server/src/web/ws.rs diff --git a/rust/agama-dbus-server/tests/common/mod.rs b/rust/agama-server/tests/common/mod.rs similarity index 100% rename from rust/agama-dbus-server/tests/common/mod.rs rename to rust/agama-server/tests/common/mod.rs diff --git a/rust/agama-dbus-server/tests/l10n.rs b/rust/agama-server/tests/l10n.rs similarity index 100% rename from rust/agama-dbus-server/tests/l10n.rs rename to rust/agama-server/tests/l10n.rs diff --git a/rust/agama-dbus-server/tests/network.rs b/rust/agama-server/tests/network.rs similarity index 100% rename from rust/agama-dbus-server/tests/network.rs rename to rust/agama-server/tests/network.rs diff --git a/rust/agama-dbus-server/tests/service.rs b/rust/agama-server/tests/service.rs similarity index 100% rename from rust/agama-dbus-server/tests/service.rs rename to rust/agama-server/tests/service.rs diff --git a/rust/package/_service b/rust/package/_service index 74597e457b..04b7d36141 100644 --- a/rust/package/_service +++ b/rust/package/_service @@ -7,8 +7,8 @@ master rust enable - package/agama-cli.changes - package/agama-cli.spec + package/agama.changes + package/agama.spec agama/rust From 14ed20265920013a402ffc2cbb553fe603f65e20 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Imobach=20Gonz=C3=A1lez=20Sosa?= Date: Mon, 26 Feb 2024 16:06:23 +0000 Subject: [PATCH 38/48] rust: reorganize the packaging --- .../{agama-cli.changes => agama.changes} | 0 rust/package/{agama-cli.spec => agama.spec} | 51 ++++++++----------- 2 files changed, 22 insertions(+), 29 deletions(-) rename rust/package/{agama-cli.changes => agama.changes} (100%) rename rust/package/{agama-cli.spec => agama.spec} (80%) diff --git a/rust/package/agama-cli.changes b/rust/package/agama.changes similarity index 100% rename from rust/package/agama-cli.changes rename to rust/package/agama.changes diff --git a/rust/package/agama-cli.spec b/rust/package/agama.spec similarity index 80% rename from rust/package/agama-cli.spec rename to rust/package/agama.spec index b180f26aa7..418b94e034 100644 --- a/rust/package/agama-cli.spec +++ b/rust/package/agama.spec @@ -15,11 +15,11 @@ # Please submit bugfixes or comments via http://bugs.opensuse.org/ # -Name: agama-cli +Name: agama # This will be set by osc services, that will run after this. Version: 0 Release: 0 -Summary: Agama command line interface +Summary: Agama Installer # If you know the license, put it's SPDX string here. # Alternately, you can use cargo lock2rpmprovides to help generate this. License: GPL-2.0-only @@ -30,49 +30,42 @@ BuildRequires: cargo-packaging BuildRequires: pkgconfig(openssl) # used in tests for dbus service BuildRequires: python-langtable-data -BuildRequires: timezone BuildRequires: dbus-1-common +Requires: dbus-1-common # required by agama-dbus-server integration tests BuildRequires: dbus-1-daemon BuildRequires: clang-devel BuildRequires: pkgconfig(pam) +# required by autoinstallation Requires: jsonnet Requires: lshw # required by "agama logs store" Requires: bzip2 Requires: tar # required for translating the keyboards descriptions +BuildRequires: xkeyboard-config-lang Requires: xkeyboard-config-lang # required for getting the list of timezones Requires: timezone +BuildRequires: timezone +# dependency on the YaST part of Agama +Requires: agama-yast %description -Command line program to interact with the agama service. - -%package -n agama-dbus-server -# This will be set by osc services, that will run after this. -Version: 0 -Release: 0 -Summary: Agama Rust D-Bus service -License: GPL-2.0-only -Url: https://github.com/opensuse/agama -Requires: python-langtable-data -Requires: dbus-1-common +Agama is a service-based Linux installer. It is composed of an HTTP-based API, +a web user interface, a command-line interface and a D-Bus service which exposes +part of the YaST libraries. -%description -n agama-dbus-server -D-Bus service for agama project. It provides localization, networking and questions services. - -%package -n agama-web-server +%package -n agama-cli # This will be set by osc services, that will run after this. Version: 0 Release: 0 -Summary: Agama web server +Summary: Agama command-line interface License: GPL-2.0-only Url: https://github.com/opensuse/agama -Requires: agama-dbus-server -%description -n agama-web-server -Agama project web server. It provides a web-based API to Agama. +%description -n agama-cli +Command line program to interact with the Agama installer. %prep %autosetup -a1 -n agama @@ -95,23 +88,23 @@ install -m 0644 --target-directory=%{buildroot}%{_datadir}/dbus-1/agama-services %check +PATH=$PWD/share/bin:$PATH %ifarch aarch64 /usr/bin/cargo auditable test -j1 --offline --no-fail-fast %else +echo $PATH %{cargo_test} %endif %files -%{_bindir}/agama -%dir %{_datadir}/agama-cli -%{_datadir}/agama-cli/profile.schema.json - -%files -n agama-dbus-server %{_bindir}/agama-dbus-server +%{_bindir}/agama-web-server %{_datadir}/dbus-1/agama-services %{_pam_vendordir}/agama -%files -n agama-web-server -%{_bindir}/agama-web-server +%files -n agama-cli +%{_bindir}/agama +%dir %{_datadir}/agama-cli +%{_datadir}/agama-cli/profile.schema.json %changelog From 10def5c139534a3d9f8981d22d7eec5c0fe94619 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Imobach=20Gonz=C3=A1lez=20Sosa?= Date: Tue, 27 Feb 2024 11:33:07 +0000 Subject: [PATCH 39/48] rust: re-enable LocalesDatabase tests --- rust/agama-server/src/l10n/locale.rs | 2 -- 1 file changed, 2 deletions(-) diff --git a/rust/agama-server/src/l10n/locale.rs b/rust/agama-server/src/l10n/locale.rs index 630c844144..65d76ec1e4 100644 --- a/rust/agama-server/src/l10n/locale.rs +++ b/rust/agama-server/src/l10n/locale.rs @@ -117,7 +117,6 @@ mod tests { use super::LocalesDatabase; use agama_locale_data::LocaleCode; - #[ignore] #[test] fn test_read_locales() { let mut db = LocalesDatabase::new(); @@ -129,7 +128,6 @@ mod tests { assert_eq!(&found.territory, "Spanien"); } - #[ignore] #[test] fn test_locale_exists() { let mut db = LocalesDatabase::new(); From 6480258386864a30736326b43c16a116d4f7317c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Imobach=20Gonz=C3=A1lez=20Sosa?= Date: Tue, 27 Feb 2024 11:38:33 +0000 Subject: [PATCH 40/48] rust: avoid warning messages when compiling mod.rs * See https://users.rust-lang.org/t/invalid-dead-code-warning-for-submodule-in-integration-test/80259. --- rust/agama-server/tests/l10n.rs | 2 +- rust/agama-server/tests/network.rs | 2 +- rust/agama-server/tests/service.rs | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/rust/agama-server/tests/l10n.rs b/rust/agama-server/tests/l10n.rs index 6ad7e352a0..f2d0291c29 100644 --- a/rust/agama-server/tests/l10n.rs +++ b/rust/agama-server/tests/l10n.rs @@ -1,4 +1,4 @@ -mod common; +pub mod common; use agama_dbus_server::l10n::web::l10n_service; use axum::{ diff --git a/rust/agama-server/tests/network.rs b/rust/agama-server/tests/network.rs index 2261746325..ed4b0037b2 100644 --- a/rust/agama-server/tests/network.rs +++ b/rust/agama-server/tests/network.rs @@ -1,4 +1,4 @@ -mod common; +pub mod common; use self::common::{async_retry, DBusServer}; use agama_dbus_server::network::{ diff --git a/rust/agama-server/tests/service.rs b/rust/agama-server/tests/service.rs index aac1b2922b..6179484be8 100644 --- a/rust/agama-server/tests/service.rs +++ b/rust/agama-server/tests/service.rs @@ -1,4 +1,4 @@ -mod common; +pub mod common; use agama_dbus_server::{ service, From 325bc6fc7a93d59290d51d86bd6ff2aebad03fe6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Imobach=20Gonz=C3=A1lez=20Sosa?= Date: Tue, 27 Feb 2024 14:03:38 +0000 Subject: [PATCH 41/48] Update Copyright headers --- rust/package/agama.spec | 4 ++-- service/agama-yast.gemspec | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/rust/package/agama.spec b/rust/package/agama.spec index 418b94e034..926ab05b07 100644 --- a/rust/package/agama.spec +++ b/rust/package/agama.spec @@ -1,7 +1,7 @@ # -# spec file for package agama-cli +# spec file for package agama # -# Copyright (c) 2023 SUSE LINUX GmbH, Nuernberg, Germany. +# Copyright (c) 2023-2024 SUSE LLC # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed diff --git a/service/agama-yast.gemspec b/service/agama-yast.gemspec index b1d50c280d..d93dfdd3fd 100644 --- a/service/agama-yast.gemspec +++ b/service/agama-yast.gemspec @@ -1,7 +1,7 @@ # frozen_string_literal: true # -# Copyright (c) [2022] SUSE LLC +# Copyright (c) 2022-2024 SUSE LLC # # All Rights Reserved. # From ac16e4ecb5c396981c05f41ae65cebb31be1a6d7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Imobach=20Gonz=C3=A1lez=20Sosa?= Date: Tue, 27 Feb 2024 15:43:44 +0000 Subject: [PATCH 42/48] Adapt GitHub Actions to the new package names --- .github/workflows/obs-release.yml | 2 +- .github/workflows/obs-service-shared.yml | 4 ++-- .github/workflows/obs-staging-rust.yml | 2 +- .github/workflows/obs-staging-service.yml | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/obs-release.yml b/.github/workflows/obs-release.yml index c31034c5fd..77d1f0049a 100644 --- a/.github/workflows/obs-release.yml +++ b/.github/workflows/obs-release.yml @@ -20,7 +20,7 @@ jobs: with: install_packages: obs-service-cargo_audit obs-service-cargo_vendor project_name: systemsmanagement:Agama:Devel - package_name: agama-cli + package_name: agama update_web: uses: ./.github/workflows/obs-staging-shared.yml diff --git a/.github/workflows/obs-service-shared.yml b/.github/workflows/obs-service-shared.yml index ab99479bc4..a7f4871fd0 100644 --- a/.github/workflows/obs-service-shared.yml +++ b/.github/workflows/obs-service-shared.yml @@ -62,7 +62,7 @@ jobs: OBS_USER: ${{ secrets.OBS_USER }} OBS_PASSWORD: ${{ secrets.OBS_PASSWORD }} - - name: Commit the rubygem-agama package to ${{ inputs.project_name }} + - name: Commit the rubygem-agama-yast package to ${{ inputs.project_name }} run: rake osc:commit working-directory: ./service env: @@ -71,7 +71,7 @@ jobs: SKIP_OSC_BUILD: 1 OBS_PROJECT: ${{ inputs.project_name }} - - name: Submit the rubygem-agama package + - name: Submit the rubygem-agama-yast package # only when a tag has been pushed if: ${{ github.ref_type == 'tag' }} # the package has been comitted in the previous step, just submit it diff --git a/.github/workflows/obs-staging-rust.yml b/.github/workflows/obs-staging-rust.yml index b83f6759f7..0e804b3c2f 100644 --- a/.github/workflows/obs-staging-rust.yml +++ b/.github/workflows/obs-staging-rust.yml @@ -17,4 +17,4 @@ jobs: with: install_packages: obs-service-cargo_audit obs-service-cargo_vendor project_name: systemsmanagement:Agama:Staging - package_name: agama-cli + package_name: agama diff --git a/.github/workflows/obs-staging-service.yml b/.github/workflows/obs-staging-service.yml index 5d3cb47bf5..342f2e38f0 100644 --- a/.github/workflows/obs-staging-service.yml +++ b/.github/workflows/obs-staging-service.yml @@ -1,4 +1,4 @@ -name: Submit rubygem-agama +name: Submit rubygem-agama-yast on: # runs on pushes targeting the default branch From 7aff6f282d312fb21edd5c3e65a36c0473fd7242 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Imobach=20Gonz=C3=A1lez=20Sosa?= Date: Tue, 27 Feb 2024 15:46:09 +0000 Subject: [PATCH 43/48] Update documentation with new package names --- PACKAGING.md | 20 +++++++++++--------- README.md | 12 ++++++------ setup-services.sh | 2 +- 3 files changed, 18 insertions(+), 16 deletions(-) diff --git a/PACKAGING.md b/PACKAGING.md index 58cee4ee62..60314c10ec 100644 --- a/PACKAGING.md +++ b/PACKAGING.md @@ -23,10 +23,11 @@ The Agama packages are available in two OBS projects: You can find more details the automatic OBS synchronization in the [obs_integration.md](doc/obs_integration.md) file. -The process to build each package is slightly different depending on the technology we are using. -While the Ruby-based one (`rubygem-agama`) is built as any other YaST package, the web UI -(`cockpit-agama`) and the CLI (`agama-cli`) rely on [OBS source -services](https://openbuildservice.org/help/manuals/obs-user-guide/cha.obs.source_service.html). +The process to build each package is slightly different depending on the +technology we are using. While the Ruby-based one (`rubygem-agama-yast`) is +built as any other YaST package, Agama server (`agama`), the CLI (`agama-cli`), +and the web UI (`cockpit-agama`) rely on +[OBS source services](https://openbuildservice.org/help/manuals/obs-user-guide/cha.obs.source_service.html). ## Versioning Policy @@ -71,8 +72,8 @@ for manual update. ### Service You can check the current package in -[systemsmanagement:Agama:Staging/rubygem-agama]( -https://build.opensuse.org/package/show/systemsmanagement:Agama:Staging/rubygem-agama). +[systemsmanagement:Agama:Staging/rubygem-agama-yast]( +https://build.opensuse.org/package/show/systemsmanagement:Agama:Staging/rubygem-agama-yast). Use `rake` to update the package in OBS as you would do with any other YaST package: @@ -108,10 +109,11 @@ respect such a tag. (e.g. `2.1+42`). You can read more about the overall approach of this package in the following article: [Git work flows in the upcoming 2.7 release](https://openbuildservice.org/2016/04/08/new_git_in_27/). -### Command-line Interface +### Server and command-line Interface -The current package is [systemsmanagement:Agama:Staging/agama-cli]( -https://build.opensuse.org/package/show/systemsmanagement:Agama:Staging/agama-cli). +The current package is [systemsmanagement:Agama:Staging/agama]( +https://build.opensuse.org/package/show/systemsmanagement:Agama:Staging/agama), +which includes `agama` and `agama-cli` as a subpackage. To manually update the package in the build service, run the following commands: diff --git a/README.md b/README.md index 970385403e..6fd9ba799c 100644 --- a/README.md +++ b/README.md @@ -18,14 +18,14 @@ **[OBS systemsmanagement:Agama:Staging](https://build.opensuse.org/project/show/systemsmanagement:Agama:Staging)** -[![Submit agama-cli](https://github.com/openSUSE/agama/actions/workflows/obs-staging-rust.yml/badge.svg)](https://github.com/openSUSE/agama/actions/workflows/obs-staging-rust.yml) +[![Submit agama](https://github.com/openSUSE/agama/actions/workflows/obs-staging-rust.yml/badge.svg)](https://github.com/openSUSE/agama/actions/workflows/obs-staging-rust.yml) [![Submit cockpit-agama](https://github.com/openSUSE/agama/actions/workflows/obs-staging-web.yml/badge.svg)](https://github.com/openSUSE/agama/actions/workflows/obs-staging-web.yml) -[![Submit rubygem-agama](https://github.com/openSUSE/agama/actions/workflows/obs-staging-service.yml/badge.svg)](https://github.com/openSUSE/agama/actions/workflows/obs-staging-service.yml) +[![Submit rubygem-agama-yast](https://github.com/openSUSE/agama/actions/workflows/obs-staging-service.yml/badge.svg)](https://github.com/openSUSE/agama/actions/workflows/obs-staging-service.yml) [![Submit cockpit-agama-playwright](https://github.com/openSUSE/agama/actions/workflows/obs-staging-playwright.yml/badge.svg)](https://github.com/openSUSE/agama/actions/workflows/obs-staging-playwright.yml) -[![OBS Staging/agama-cli](https://img.shields.io/obs/systemsmanagement:Agama:Staging/agama-cli/openSUSE_Tumbleweed/x86_64?label=Package%20agama-cli)](https://build.opensuse.org/package/show/systemsmanagement:Agama:Staging/agama-cli) +[![OBS Staging/agama](https://img.shields.io/obs/systemsmanagement:Agama:Staging/agama/openSUSE_Tumbleweed/x86_64?label=Package%20agama)](https://build.opensuse.org/package/show/systemsmanagement:Agama:Staging/agama) [![OBS Staging/cockpit-agama](https://img.shields.io/obs/systemsmanagement:Agama:Staging/cockpit-agama/openSUSE_Tumbleweed/x86_64?label=Package%20cockpit-agama)](https://build.opensuse.org/package/show/systemsmanagement:Agama:Staging/cockpit-agama) -[![OBS Staging/rubygem-agama](https://img.shields.io/obs/systemsmanagement:Agama:Staging/rubygem-agama/openSUSE_Tumbleweed/x86_64?label=Package%20rubygem-agama)](https://build.opensuse.org/package/show/systemsmanagement:Agama:Staging/rubygem-agama) +[![OBS Staging/rubygem-agama-yast](https://img.shields.io/obs/systemsmanagement:Agama:Staging/rubygem-agama-yast/openSUSE_Tumbleweed/x86_64?label=Package%20rubygem-agama-yast)](https://build.opensuse.org/package/show/systemsmanagement:Agama:Staging/rubygem-agama-yast) [![OBS Staging/agama-products-opensuse](https://img.shields.io/obs/systemsmanagement%3AAgama%3AStaging/agama-products-opensuse/openSUSE_Tumbleweed/x86_64?label=Package%20agama-products-opensuse)](https://build.opensuse.org/package/show/systemsmanagement:Agama:Staging/agama-products-opensuse) [![OBS Staging/cockpit-agama-playwright](https://img.shields.io/obs/systemsmanagement:Agama:Staging/cockpit-agama-playwright/openSUSE_Tumbleweed/x86_64?label=Package%20cockpit-agama-playwright)](https://build.opensuse.org/package/show/systemsmanagement:Agama:Staging/cockpit-agama-playwright) [![OBS Staging/agama-live](https://img.shields.io/obs/systemsmanagement:Agama:Staging/agama-live:openSUSE/images/x86_64?label=Live%20ISO)](https://build.opensuse.org/package/show/systemsmanagement:Agama:Staging/agama-live) @@ -35,9 +35,9 @@ ![GitHub tag (latest SemVer)](https://img.shields.io/github/v/tag/openSUSE/agama?label=Version&sort=semver) [![Release](https://github.com/openSUSE/agama/actions/workflows/obs-release.yml/badge.svg)](https://github.com/openSUSE/agama/actions/workflows/obs-release.yml) -[![OBS Devel/agama-cli](https://img.shields.io/obs/systemsmanagement:Agama:Devel/agama-cli/openSUSE_Tumbleweed/x86_64?label=Package%20agama-cli)](https://build.opensuse.org/package/show/systemsmanagement:Agama:Devel/agama-cli) +[![OBS Devel/agama](https://img.shields.io/obs/systemsmanagement:Agama:Devel/agama/openSUSE_Tumbleweed/x86_64?label=Package%20agama)](https://build.opensuse.org/package/show/systemsmanagement:Agama:Devel/agama) [![OBS Devel/cockpit-agama](https://img.shields.io/obs/systemsmanagement:Agama:Devel/cockpit-agama/openSUSE_Tumbleweed/x86_64?label=Package%20cockpit-agama)](https://build.opensuse.org/package/show/systemsmanagement:Agama:Devel/cockpit-agama) -[![OBS Devel/rubygem-agama](https://img.shields.io/obs/systemsmanagement:Agama:Devel/rubygem-agama/openSUSE_Tumbleweed/x86_64?label=Package%20rubygem-agama)](https://build.opensuse.org/package/show/systemsmanagement:Agama:Devel/rubygem-agama) +[![OBS Devel/rubygem-agama-yast](https://img.shields.io/obs/systemsmanagement:Agama:Devel/rubygem-agama-yast/openSUSE_Tumbleweed/x86_64?label=Package%20rubygem-agama-yast)](https://build.opensuse.org/package/show/systemsmanagement:Agama:Devel/rubygem-agama-yast) [![OBS Devel/agama-live](https://img.shields.io/obs/systemsmanagement:Agama:Devel/agama-live:openSUSE/images/x86_64?label=Live%20ISO)](https://build.opensuse.org/package/show/systemsmanagement:Agama:Devel/agama-live) # Agama: A Service-based Linux Installer diff --git a/setup-services.sh b/setup-services.sh index 4f54260ce4..ee647418d1 100755 --- a/setup-services.sh +++ b/setup-services.sh @@ -121,7 +121,7 @@ fi # Only install cargo if it is not available (avoid conflicts with rustup) which cargo || $SUDO zypper --non-interactive install cargo -# Packages required by Rust code (see ./rust/package/agama-cli.spec) +# Packages required by Rust code (see ./rust/package/agama.spec) $SUDO zypper --non-interactive install \ bzip2 \ clang-devel \ From f15e694f2a9dec52aa0c23096d7334b62f9d11c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Imobach=20Gonz=C3=A1lez=20Sosa?= Date: Tue, 27 Feb 2024 16:03:18 +0000 Subject: [PATCH 44/48] Update changes files --- rust/package/agama.changes | 8 ++++++++ service/package/rubygem-agama-yast.changes | 6 ++++++ 2 files changed, 14 insertions(+) diff --git a/rust/package/agama.changes b/rust/package/agama.changes index ef6dccebab..656cd074eb 100644 --- a/rust/package/agama.changes +++ b/rust/package/agama.changes @@ -1,3 +1,11 @@ +------------------------------------------------------------------- +Tue Feb 27 15:55:28 UTC 2024 - Imobach Gonzalez Sosa + +- Reorganize RPM packages (gh#openSUSE/agama#1056): + * agama is now the main package and it contains agama-dbus-server + and agama-web-server. + * agama-cli is a subpackage. + ------------------------------------------------------------------- Wed Feb 7 11:49:02 UTC 2024 - Imobach Gonzalez Sosa diff --git a/service/package/rubygem-agama-yast.changes b/service/package/rubygem-agama-yast.changes index 8c07ea0b36..5f51032451 100644 --- a/service/package/rubygem-agama-yast.changes +++ b/service/package/rubygem-agama-yast.changes @@ -1,3 +1,9 @@ +------------------------------------------------------------------- +Tue Feb 27 15:53:46 UTC 2024 - Imobach Gonzalez Sosa + +- Rename the gem to agama-yast and the package to + rubygem-agama-yast (gh#openSUSE/agama#1056). + ------------------------------------------------------------------- Tue Feb 20 13:15:15 UTC 2024 - José Iván López González From 71c12520462492cebcc42d227938cad95b6143f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Imobach=20Gonz=C3=A1lez=20Sosa?= Date: Tue, 27 Feb 2024 16:05:11 +0000 Subject: [PATCH 45/48] Add a conflict with the agama-dbus-server package --- rust/package/agama.spec | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/rust/package/agama.spec b/rust/package/agama.spec index 926ab05b07..51edf53679 100644 --- a/rust/package/agama.spec +++ b/rust/package/agama.spec @@ -26,6 +26,7 @@ License: GPL-2.0-only Url: https://github.com/opensuse/agama Source0: agama.tar Source1: vendor.tar.zst + BuildRequires: cargo-packaging BuildRequires: pkgconfig(openssl) # used in tests for dbus service @@ -51,6 +52,9 @@ BuildRequires: timezone # dependency on the YaST part of Agama Requires: agama-yast +# conflicts with the old packages +Conflicts: agama-dbus-server + %description Agama is a service-based Linux installer. It is composed of an HTTP-based API, a web user interface, a command-line interface and a D-Bus service which exposes From fbd8d01564887f179a442847d0b309635e5f6fbf Mon Sep 17 00:00:00 2001 From: Josef Reidinger Date: Tue, 27 Feb 2024 17:38:01 +0100 Subject: [PATCH 46/48] compare fs case insensitive and introduce util for it --- .../storage/ProposalSettingsSection.jsx | 5 +++-- web/src/components/storage/utils.js | 15 +++++++++++++++ web/src/components/storage/utils.test.js | 16 +++++++++++++++- 3 files changed, 33 insertions(+), 3 deletions(-) diff --git a/web/src/components/storage/ProposalSettingsSection.jsx b/web/src/components/storage/ProposalSettingsSection.jsx index 15d052dae5..1ce78674db 100644 --- a/web/src/components/storage/ProposalSettingsSection.jsx +++ b/web/src/components/storage/ProposalSettingsSection.jsx @@ -26,6 +26,7 @@ import { _ } from "~/i18n"; import { If, PasswordAndConfirmationInput, Section, Popup } from "~/components/core"; import { Icon } from "~/components/layout"; import { noop } from "~/utils"; +import { hasFS } from "~/components/storage/utils"; /** * @typedef {import ("~/client/storage").ProposalManager.ProposalSettings} ProposalSettings @@ -129,7 +130,7 @@ const SnapshotsField = ({ }) => { const rootVolume = (settings.volumes || []).find((i) => i.mountPath === "/"); - const initialChecked = rootVolume !== undefined && rootVolume.fsType === "Btrfs" && rootVolume.snapshots; + const initialChecked = rootVolume !== undefined && hasFS(rootVolume, "Btrfs") && rootVolume.snapshots; const [isChecked, setIsChecked] = useState(initialChecked); // no root volume is probably some error or still loading @@ -143,7 +144,7 @@ const SnapshotsField = ({ }; const configurableSnapshots = rootVolume.outline.snapshotsConfigurable; - const forcedSnapshots = !configurableSnapshots && rootVolume.fsType === "Btrfs" && rootVolume.snapshots; + const forcedSnapshots = !configurableSnapshots && hasFS(rootVolume, "Btrfs") && rootVolume.snapshots; const SnapshotsToggle = () => { const explanation = _("Uses Btrfs for the root file system allowing to boot to a previous version of the system after configuration changes or software upgrades."); diff --git a/web/src/components/storage/utils.js b/web/src/components/storage/utils.js index 3f4d7d77e5..49eec4c115 100644 --- a/web/src/components/storage/utils.js +++ b/web/src/components/storage/utils.js @@ -135,6 +135,20 @@ const deviceLabel = (device) => { return size ? `${name}, ${deviceSize(size)}` : name; }; +/** + * Checks if volume uses given fs. This method works same as in backend + * case insensitive. + * + * @param {import(~/clients/storage).Volume} volume + * @param {string} fs filesystem name to check + * @returns {boolean} true when volume uses given fs + */ +const hasFS = (volume, fs) => { + const volFS = volume.fsType; + + return volFS.toLowerCase() === fs.toLocaleLowerCase(); +}; + export { DEFAULT_SIZE_UNIT, SIZE_METHODS, @@ -143,4 +157,5 @@ export { deviceSize, parseToBytes, splitSize, + hasFS }; diff --git a/web/src/components/storage/utils.test.js b/web/src/components/storage/utils.test.js index 5c65c3475b..39ee35e2de 100644 --- a/web/src/components/storage/utils.test.js +++ b/web/src/components/storage/utils.test.js @@ -19,7 +19,7 @@ * find current contact information at www.suse.com. */ -import { deviceSize, deviceLabel, parseToBytes, splitSize } from "./utils"; +import { deviceSize, deviceLabel, parseToBytes, splitSize, hasFS } from "./utils"; describe("deviceSize", () => { it("returns the size with units", () => { @@ -86,3 +86,17 @@ describe("splitSize", () => { expect(splitSize("")).toEqual({ size: undefined, unit: undefined }); }); }); + +describe("hasFS", () => { + it("returns true if volume has given filesystem", () => { + expect(hasFS({ fsType: "Btrfs" }, "Btrfs")).toBe(true); + }); + + it("returns true if volume has given filesystem regarding different case", () => { + expect(hasFS({ fsType: "btrfs" }, "Btrfs")).toBe(true); + }); + + it("returns false if volume has different filesystem", () => { + expect(hasFS({ fsType: "Btrfs" }, "EXT4")).toBe(false); + }); +}); From 6d9e302342aaa3379342ef9f7002742dc888596a Mon Sep 17 00:00:00 2001 From: Josef Reidinger Date: Tue, 27 Feb 2024 17:43:51 +0100 Subject: [PATCH 47/48] Apply suggestions from code review MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: David Díaz <1691872+dgdavid@users.noreply.github.com> --- web/src/components/storage/utils.js | 2 +- web/src/components/storage/utils.test.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/web/src/components/storage/utils.js b/web/src/components/storage/utils.js index 49eec4c115..621e5194dc 100644 --- a/web/src/components/storage/utils.js +++ b/web/src/components/storage/utils.js @@ -140,7 +140,7 @@ const deviceLabel = (device) => { * case insensitive. * * @param {import(~/clients/storage).Volume} volume - * @param {string} fs filesystem name to check + * @param {string} fs - Filesystem name to check. * @returns {boolean} true when volume uses given fs */ const hasFS = (volume, fs) => { diff --git a/web/src/components/storage/utils.test.js b/web/src/components/storage/utils.test.js index 39ee35e2de..052e69bbf7 100644 --- a/web/src/components/storage/utils.test.js +++ b/web/src/components/storage/utils.test.js @@ -96,7 +96,7 @@ describe("hasFS", () => { expect(hasFS({ fsType: "btrfs" }, "Btrfs")).toBe(true); }); - it("returns false if volume has different filesystem", () => { + it("returns false if volume has different filesystem", () => { expect(hasFS({ fsType: "Btrfs" }, "EXT4")).toBe(false); }); }); From 3bbfbb24249a9aa4923bae5f781be6c0a09d900f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Imobach=20Gonz=C3=A1lez=20Sosa?= Date: Wed, 28 Feb 2024 16:45:45 +0000 Subject: [PATCH 48/48] Update from code review Co-authored-by: Josef Reidinger --- PACKAGING.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PACKAGING.md b/PACKAGING.md index 60314c10ec..08fb248b25 100644 --- a/PACKAGING.md +++ b/PACKAGING.md @@ -109,7 +109,7 @@ respect such a tag. (e.g. `2.1+42`). You can read more about the overall approach of this package in the following article: [Git work flows in the upcoming 2.7 release](https://openbuildservice.org/2016/04/08/new_git_in_27/). -### Server and command-line Interface +### Server and Command-line Interface The current package is [systemsmanagement:Agama:Staging/agama]( https://build.opensuse.org/package/show/systemsmanagement:Agama:Staging/agama),