From 8283034f4c616a2527600eeccc6b0c7e43264998 Mon Sep 17 00:00:00 2001 From: Georges Basile Stavracas Neto Date: Sat, 10 May 2025 23:46:23 -0300 Subject: [PATCH 01/53] Post-branching version bump --- NEWS | 6 ++++++ meson.build | 6 +++--- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/NEWS b/NEWS index 02650b129a..5b611fdcfa 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,9 @@ +Changes in 1.17.0 +~~~~~~~~~~~~~~~~~~ +Released: not yet + +... + Changes in 1.16.1 ~~~~~~~~~~~~~~~~~~ Released: 2025-05-10 diff --git a/meson.build b/meson.build index 25afdd3168..187d04ca57 100644 --- a/meson.build +++ b/meson.build @@ -4,7 +4,7 @@ project( 'flatpak', 'c', - version : '1.16.1', + version : '1.17.0', default_options: [ 'warning_level=2', ], @@ -12,8 +12,8 @@ project( ) flatpak_major_version = 1 -flatpak_minor_version = 16 -flatpak_micro_version = 1 +flatpak_minor_version = 17 +flatpak_micro_version = 0 flatpak_extra_version = '' flatpak_interface_age = 0 From 66b038e14809bc973d46e8078a070dc32e894903 Mon Sep 17 00:00:00 2001 From: Georges Basile Stavracas Neto Date: Sat, 10 May 2025 23:54:21 -0300 Subject: [PATCH 02/53] Update SECURITY.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1.16.x is the latest stable release, and ≤ 1.15 is unsupported. --- SECURITY.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/SECURITY.md b/SECURITY.md index 2d4315dc35..a4d861e0d6 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -13,11 +13,11 @@ please check | Version | Supported | Status | -------- | ------------------ | -------------------------------------------------------------- | -| 1.15.x | :hammer: | Development branch, releases may include non-security changes | -| 1.14.x | :white_check_mark: | Stable branch, recommended for use in distributions | -| ≤ 1.13.x | :x: | Older branches, no longer supported | +| 1.17.x | :hammer: | Development branch, releases may include non-security changes | +| 1.16.x | :white_check_mark: | Stable branch, recommended for use in distributions | +| ≤ 1.15.x | :x: | Older branches, no longer supported | -The latest stable branch (currently 1.14.x) is the highest priority for +The latest stable branch (currently 1.16.x) is the highest priority for security fixes. If a security vulnerability is reported under embargo, having new releases for older stable branches will not always be treated as a blocker for From 0152272d6caf2622536fad8869573a76001a493b Mon Sep 17 00:00:00 2001 From: Michael Catanzaro Date: Tue, 24 Jun 2025 16:36:50 -0500 Subject: [PATCH 03/53] doc: update documentation of flatpak-spawn --watch-bus The current documentation is misleading, and confused multiple experienced developers for the past two years. Fixes #5501 --- doc/flatpak-spawn.xml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/doc/flatpak-spawn.xml b/doc/flatpak-spawn.xml index 6c8613f364..e31e08805e 100644 --- a/doc/flatpak-spawn.xml +++ b/doc/flatpak-spawn.xml @@ -99,7 +99,9 @@ - Make the spawned command exit if the caller disappears from the session bus + Make the spawned command exit when flatpak-spawn + itself exits; notably, this occurs when its connection to the + session bus is closed. From cd80e843435df5ce70d9a2b6710098135ceb9085 Mon Sep 17 00:00:00 2001 From: Martin Schwenke Date: Sun, 20 Jul 2025 15:30:10 +1000 Subject: [PATCH 04/53] session-helper: Avoid a memory leak Apply the fix suggested more than a year ago in: https://github.com/flatpak/flatpak/issues/5821#issuecomment-2121673464 Signed-off-by: Martin Schwenke Fixes: https://github.com/flatpak/flatpak/issues/5821 --- session-helper/flatpak-session-helper.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/session-helper/flatpak-session-helper.c b/session-helper/flatpak-session-helper.c index 31e9438437..7cbb5050c5 100644 --- a/session-helper/flatpak-session-helper.c +++ b/session-helper/flatpak-session-helper.c @@ -215,7 +215,7 @@ handle_host_command (FlatpakDevelopment *object, gsize i, j, n_fds, n_envs; const gint *fds; g_autofree FdMapEntry *fd_map = NULL; - gchar **env; + g_auto(GStrv) env = NULL; gint32 max_fd; if (*arg_cwd_path == 0) From 98726a70ee23d8a551e59da8e27629d1f25420c4 Mon Sep 17 00:00:00 2001 From: Ryan Brue Date: Tue, 29 Jul 2025 13:06:36 -0500 Subject: [PATCH 05/53] CONTRIBUTING: Remove mention of Autotools Autotools support was removed as of commit 8e63eda, remove mention of the Autotools support in the CONTRIBUTING file Signed-off-by: Ryan Brue --- CONTRIBUTING.md | 17 ----------------- 1 file changed, 17 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index d00ccc941c..2b932c9fe8 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -41,23 +41,6 @@ meson test -C _build sudo meson install -C _build ``` -## Building with Autotools - -Older branches of Flatpak used GNU Autotools. See -https://github.com/flatpak/flatpak/blob/flatpak-1.14.x/CONTRIBUTING.md -for more details of that build system. - -The Autotools build system is likely to be removed from a future version -of Flatpak, leaving Meson as the only build system supported. - -Newer releases of Flatpak do not include Autotools-generated files in -the source archive. If it is necessary to build these releases with -Autotools for some reason, the build system must be set up by running: - - ./autogen.sh - -before proceeding as if for any other Autotools project. - ## How to run a specified set of tests Sometimes you don't want to run the whole test suite but just one you're From 51452a7bf55fa644989b7375c3f78d2adeb085e9 Mon Sep 17 00:00:00 2001 From: yu shuoqi Date: Wed, 6 Aug 2025 18:26:51 +0800 Subject: [PATCH 06/53] list, uninstall: Add simple output to two commands Closes: https://github.com/flatpak/flatpak/issues/6197 --- app/flatpak-builtins-document-list.c | 9 ++++++++- app/flatpak-builtins-uninstall.c | 6 ++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/app/flatpak-builtins-document-list.c b/app/flatpak-builtins-document-list.c index c8c29ec56e..dd1b63da63 100644 --- a/app/flatpak-builtins-document-list.c +++ b/app/flatpak-builtins-document-list.c @@ -67,6 +67,7 @@ print_documents (const char *app_id, g_autoptr(FlatpakTablePrinter) printer = NULL; g_autofree char *mountpoint = NULL; gboolean need_perms = FALSE; + gboolean found_documents_to_print = FALSE; int i; if (columns[0].name == NULL) @@ -148,11 +149,17 @@ print_documents (const char *app_id, } flatpak_table_printer_finish_row (printer); + found_documents_to_print = TRUE; just_perms = TRUE; } while (have_perms && g_variant_iter_next (iter2, "{&s^a&s}", &app_id2, &perms)); } - + if (!found_documents_to_print) + { + g_print (_("No documents found\n")); + return TRUE; + } + flatpak_table_printer_print (printer); return TRUE; diff --git a/app/flatpak-builtins-uninstall.c b/app/flatpak-builtins-uninstall.c index c7e83a7b58..e1ec8743f1 100644 --- a/app/flatpak-builtins-uninstall.c +++ b/app/flatpak-builtins-uninstall.c @@ -561,6 +561,7 @@ flatpak_builtin_uninstall (int argc, char **argv, GCancellable *cancellable, GEr g_autoptr(GFileEnumerator) enumerator = NULL; g_autofree char *path = g_build_filename (g_get_home_dir (), ".var", "app", NULL); g_autoptr(GFile) app_dir = g_file_new_for_path (path); + gboolean found_data_to_delete = FALSE; enumerator = g_file_enumerate_children (app_dir, G_FILE_ATTRIBUTE_STANDARD_NAME "," G_FILE_ATTRIBUTE_STANDARD_TYPE, @@ -588,9 +589,14 @@ flatpak_builtin_uninstall (int argc, char **argv, GCancellable *cancellable, GEr if (ref) continue; + found_data_to_delete = TRUE; + if (!flatpak_delete_data (opt_yes, g_file_info_get_name (info), error)) return FALSE; } + + if (!found_data_to_delete) + g_print (_("No app data to delete\n")); } return TRUE; From b5f9d6e18a6c5ad54b85691a48c1b3140154faae Mon Sep 17 00:00:00 2001 From: taoky Date: Fri, 4 Jul 2025 23:59:07 +0800 Subject: [PATCH 07/53] run: Add directory forwarding support Use document portal's AddFull interface to forward dirs to sandboxed apps. Requires version 4 of AddFull. Closes: #4799 --- common/flatpak-run.c | 100 +++++++++++++++++++++++++++++++++---------- 1 file changed, 77 insertions(+), 23 deletions(-) diff --git a/common/flatpak-run.c b/common/flatpak-run.c index db136d8c5c..a64e689403 100644 --- a/common/flatpak-run.c +++ b/common/flatpak-run.c @@ -76,6 +76,16 @@ G_DEFINE_AUTOPTR_CLEANUP_FUNC (AutoFlatpakSessionHelper, g_object_unref) typedef XdpDbusDocuments AutoXdpDbusDocuments; G_DEFINE_AUTOPTR_CLEANUP_FUNC (AutoXdpDbusDocuments, g_object_unref) +/* flags enum for org.freedesktop.portal.Documents.AddFull */ +typedef enum { + DOCUMENT_ADD_FLAGS_REUSE_EXISTING = (1 << 0), + DOCUMENT_ADD_FLAGS_PERSISTENT = (1 << 1), + DOCUMENT_ADD_FLAGS_AS_NEEDED_BY_APP = (1 << 2), + DOCUMENT_ADD_FLAGS_DIRECTORY = (1 << 3), + + DOCUMENT_ADD_FLAGS_FLAGS_ALL = ((1 << 4) - 1) +} DocumentAddFullFlags; + static int flatpak_extension_compare_by_path (gconstpointer _a, gconstpointer _b) @@ -2431,6 +2441,9 @@ forward_file (XdpDbusDocuments *documents, GError **error) { int fd, fd_id; + struct stat stbuf; + guint portal_version; + gboolean is_dir = FALSE; g_autofree char *doc_id = NULL; g_autoptr(GUnixFDList) fd_list = NULL; const char *perms[] = { "read", "write", NULL }; @@ -2441,33 +2454,74 @@ forward_file (XdpDbusDocuments *documents, fd_list = g_unix_fd_list_new (); fd_id = g_unix_fd_list_append (fd_list, fd, error); + if (fstat (fd, &stbuf) == 0 && S_ISDIR (stbuf.st_mode)) + is_dir = TRUE; close (fd); - if (!xdp_dbus_documents_call_add_sync (documents, - g_variant_new ("h", fd_id), - TRUE, /* reuse */ - FALSE, /* not persistent */ - fd_list, - &doc_id, - NULL, - NULL, - error)) - { - if (error) - g_dbus_error_strip_remote_error (*error); - return FALSE; - } + portal_version = xdp_dbus_documents_get_version (documents); + if (portal_version < 4 && is_dir) + return flatpak_fail (error, _("Directory forwarding needs version 4 of the document portal (have version %d)"), portal_version); + + if (portal_version >= 2) + { + guint flags = DOCUMENT_ADD_FLAGS_REUSE_EXISTING; + g_auto(GStrv) doc_ids = NULL; + + if (is_dir) + flags |= DOCUMENT_ADD_FLAGS_DIRECTORY; + + if (!xdp_dbus_documents_call_add_full_sync (documents, + g_variant_new_fixed_array (G_VARIANT_TYPE_HANDLE, &fd_id, 1, sizeof (gint32)), + flags, + app_id, + perms, + fd_list, + &doc_ids, + NULL, + NULL, + NULL, + error)) + { + if (error) + g_dbus_error_strip_remote_error (*error); + return FALSE; + } - if (!xdp_dbus_documents_call_grant_permissions_sync (documents, - doc_id, - app_id, - perms, - NULL, - error)) + /* doc_ids should have value when xdp_dbus_documents_call_add_full_sync succeeds. */ + g_assert (doc_ids && doc_ids[0]); + doc_id = g_strdup (doc_ids[0]); + } + else { - if (error) - g_dbus_error_strip_remote_error (*error); - return FALSE; + /* Fallback to plain org.freedesktop.portal.Documents.Add and + org.freedesktop.portal.Documents.GrantPermissions if interface version is older. + This does not support directory export. */ + if (!xdp_dbus_documents_call_add_sync (documents, + g_variant_new ("h", fd_id), + TRUE, /* reuse */ + FALSE, /* not persistent */ + fd_list, + &doc_id, + NULL, + NULL, + error)) + { + if (error) + g_dbus_error_strip_remote_error (*error); + return FALSE; + } + + if (!xdp_dbus_documents_call_grant_permissions_sync (documents, + doc_id, + app_id, + perms, + NULL, + error)) + { + if (error) + g_dbus_error_strip_remote_error (*error); + return FALSE; + } } *out_doc_id = g_steal_pointer (&doc_id); From 786df5b09bddab89cfd1d4016c2381b5eeeb0834 Mon Sep 17 00:00:00 2001 From: Sebastian Wick Date: Tue, 19 Aug 2025 21:45:24 +0200 Subject: [PATCH 08/53] ci: Work around AppArmor userns restriction breaking bwrap CI currently skips a lot of tests. This is due to AppArmor restricting user namespacing to specific executables with a profile. We however build bwrap ourselves and that makes it hard to have a profile for it. Let's just turn the restriction off entirely. --- .github/workflows/check.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index 6c80135c7c..21f2c89bff 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -49,6 +49,10 @@ jobs: head -v -n-0 /etc/apt/sources.list.d/* || : # Workaround for https://github.com/orgs/community/discussions/120966 sudo rm -f /etc/apt/sources.list.d/microsoft-prod.list + # Workaround for apparmor breaking bwrap by disabling unpriv userns + sudo sysctl -w kernel.apparmor_restrict_unprivileged_userns=0 + sudo systemctl reload apparmor + # Dependencies sudo apt-get update sudo apt-get install -y libglib2.0-dev attr gettext bison dbus gtk-doc-tools \ libfuse3-dev ostree libostree-dev libarchive-dev libzstd-dev libcap-dev libattr1-dev libdw-dev libelf-dev python3-pyparsing \ From 7333c307a6d79133e5cd02efb1d2c6c5cb2a5501 Mon Sep 17 00:00:00 2001 From: filmsi Date: Wed, 13 Aug 2025 12:46:35 +0200 Subject: [PATCH 09/53] i18n: Update sl.po (Slovenian) With this change flatpak is now fully localized into Slovenian. --- po/sl.po | 1379 ++++++++++++++++++++++++++++-------------------------- 1 file changed, 722 insertions(+), 657 deletions(-) diff --git a/po/sl.po b/po/sl.po index ae9987a083..a229661d26 100644 --- a/po/sl.po +++ b/po/sl.po @@ -2,22 +2,22 @@ # Copyright (C) 2022 flatpak's COPYRIGHT HOLDER # This file is distributed under the same license as the flatpak package. # -# Martin , 2022-2024. +# Martin , 2022-2025. # msgid "" msgstr "" "Project-Id-Version: flatpak main\n" "Report-Msgid-Bugs-To: https://github.com/flatpak/flatpak/issues\n" -"POT-Creation-Date: 2025-05-08 13:08-0300\n" -"PO-Revision-Date: 2025-01-07 00:22+0100\n" +"POT-Creation-Date: 2025-08-13 03:26+0000\n" +"PO-Revision-Date: 2025-08-13 12:42+0200\n" "Last-Translator: Martin Srebotnjak \n" "Language-Team: Slovenian GNOME Translation Team \n" "Language: sl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=4; plural=(n%100==1 ? 1 : n%100==2 ? 2 : n%100==3 || " -"n%100==4 ? 3 : 0) ;\n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 1 : n%100==2 ? 2 : n%100==3 || n" +"%100==4 ? 3 : 0) ;\n" "X-Generator: Poedit 2.2.1\n" #: app/flatpak-builtins-build-bundle.c:58 @@ -135,7 +135,7 @@ msgstr "Navesti morate MESTO, IME-DATOTEKE in IME" #: app/flatpak-builtins-build-init.c:217 app/flatpak-builtins-build-sign.c:76 #: app/flatpak-builtins-document-export.c:112 #: app/flatpak-builtins-document-info.c:75 -#: app/flatpak-builtins-document-list.c:182 +#: app/flatpak-builtins-document-list.c:189 #: app/flatpak-builtins-document-unexport.c:70 #: app/flatpak-builtins-history.c:480 app/flatpak-builtins-info.c:130 #: app/flatpak-builtins-install.c:148 app/flatpak-builtins-install.c:217 @@ -192,7 +192,7 @@ msgstr "Naj bo cilj samo za branje" #: app/flatpak-builtins-build.c:51 msgid "Add bind mount" -msgstr "" +msgstr "Dodaj priklop za navezavo" #: app/flatpak-builtins-build.c:51 msgid "DEST=SRC" @@ -251,15 +251,14 @@ msgstr "metapodatki neveljavni, niti aplikacija niti izvajalna datoteka" #: app/flatpak-builtins-build.c:392 #, c-format msgid "No extension point matching %s in %s" -msgstr "" +msgstr "Ni razširitvene točke, ki bi se ujemala z %s (v %s)" #: app/flatpak-builtins-build.c:568 #, c-format msgid "Missing '=' in bind mount option '%s'" -msgstr "" +msgstr "Manjka »=« v možnosti bind mount »%s«" -#: app/flatpak-builtins-build.c:609 common/flatpak-run.c:3599 -#, c-format +#: app/flatpak-builtins-build.c:609 common/flatpak-run.c:3653 msgid "Unable to start app" msgstr "Aplikacije ni mogoče zagnati" @@ -373,17 +372,18 @@ msgstr "DST-REPO [DST-REF...] - Naredite novo objavo iz obstoječih objav" #: app/flatpak-builtins-build-commit-from.c:285 msgid "DST-REPO must be specified" -msgstr "" +msgstr "CILJ-SKLAD je treba navesti" #: app/flatpak-builtins-build-commit-from.c:293 msgid "" "If --src-repo is not specified, exactly one destination ref must be specified" -msgstr "" +msgstr "Če --src-repo ni določen, je treba natančno določiti eno ciljno ref" #: app/flatpak-builtins-build-commit-from.c:296 msgid "" "If --src-ref is specified, exactly one destination ref must be specified" msgstr "" +"Če je določen --src-ref, je treba natančno določiti natanko eno ciljno ref" #: app/flatpak-builtins-build-commit-from.c:299 msgid "Either --src-repo or --src-ref must be specified" @@ -407,7 +407,7 @@ msgstr "Ni mogoče razčleniti »%s«" #: app/flatpak-builtins-build-commit-from.c:498 msgid "Can't commit from partial source commit" -msgstr "" +msgstr "Ni mogoče objaviti iz delne objave izvorne kode" #: app/flatpak-builtins-build-commit-from.c:503 #, c-format @@ -420,7 +420,7 @@ msgstr "Ciljna arhitektura izvoza (mora biti združljiva z gostiteljem)" #: app/flatpak-builtins-build-export.c:63 msgid "Commit runtime (/usr), not /app" -msgstr "" +msgstr "Objavi izvršilno (/usr), ne /app" #: app/flatpak-builtins-build-export.c:66 msgid "Use alternative directory for the files" @@ -447,6 +447,7 @@ msgstr "Izključene datoteke za vključitev" #: app/flatpak-builtins-build-export.c:74 msgid "Mark build as end-of-life, to be replaced with the given ID" msgstr "" +"Označi gradnjo kot zastarelo, ki jo je treba nadomestiti z danim ID-jem" #: app/flatpak-builtins-build-export.c:74 #: app/flatpak-builtins-document-list.c:47 app/flatpak-cli-transaction.c:1424 @@ -455,7 +456,7 @@ msgstr "ID" #: app/flatpak-builtins-build-export.c:76 msgid "Override the timestamp of the commit" -msgstr "" +msgstr "Preglasi časovni žig objave" #: app/flatpak-builtins-build-export.c:77 #: app/flatpak-builtins-build-update-repo.c:75 @@ -472,33 +473,34 @@ msgstr "OPOZORILO: Napaka pri izvajanju desktop-file-validate: %s\n" #: app/flatpak-builtins-build-export.c:480 #, c-format msgid "WARNING: Error reading from desktop-file-validate: %s\n" -msgstr "" +msgstr "OPOZORILO: Napaka pri branju iz desktop-file-validate: %s\n" #: app/flatpak-builtins-build-export.c:486 #, c-format msgid "WARNING: Failed to validate desktop file %s: %s\n" -msgstr "" +msgstr "OPOZORILO: Preverjanje veljavnosti namizne datoteke %s: %s\n" #: app/flatpak-builtins-build-export.c:513 #, c-format msgid "WARNING: Can't find Exec key in %s: %s\n" -msgstr "" +msgstr "OPOZORILO: Ključa Exec ni mogoče najti v %s: %s\n" #: app/flatpak-builtins-build-export.c:521 #: app/flatpak-builtins-build-export.c:614 #, c-format msgid "WARNING: Binary not found for Exec line in %s: %s\n" -msgstr "" +msgstr "OPOZORILO: binarne ni bilo mogoče najti za vrstico Exec v %s: %s\n" #: app/flatpak-builtins-build-export.c:529 #, c-format msgid "WARNING: Icon not matching app id in %s: %s\n" -msgstr "" +msgstr "OPOZORILO: Ikona se ne ujema z ID-jem aplikacije v %s: %s\n" #: app/flatpak-builtins-build-export.c:552 #, c-format msgid "WARNING: Icon referenced in desktop file but not exported: %s\n" msgstr "" +"OPOZORILO: v namizni datoteki je sklic na ikono, vendar ni izvožena: %s\n" #: app/flatpak-builtins-build-export.c:719 #, c-format @@ -511,7 +513,6 @@ msgid "Unable to find basename in %s, specify a name explicitly" msgstr "Ni mogoče najti osnovnega imena v %s, izrecno navedite ime" #: app/flatpak-builtins-build-export.c:746 -#, c-format msgid "No slashes allowed in extra data name" msgstr "V dodatnem imenu podatkov niso dovoljene poševnice" @@ -521,9 +522,8 @@ msgid "Invalid format for sha256 checksum: '%s'" msgstr "Neveljavna oblika za kontrolno vsoto sha256: »%s«" #: app/flatpak-builtins-build-export.c:768 -#, c-format msgid "Extra data sizes of zero not supported" -msgstr "" +msgstr "Dodatne velikosti podatkov ničle niso podprte" #: app/flatpak-builtins-build-export.c:830 msgid "" @@ -571,7 +571,6 @@ msgid "Content Written: %u\n" msgstr "Zapisane vsebine: %u\n" #: app/flatpak-builtins-build-export.c:1171 -#, c-format msgid "Content Bytes Written:" msgstr "Zapisano bajtov vsebine:" @@ -602,7 +601,7 @@ msgstr "Dodatne informacije o podatkih" #: app/flatpak-builtins-build-finish.c:56 app/flatpak-builtins-build-init.c:63 msgid "Add extension point info" -msgstr "" +msgstr "Dodaj podatke o razširitveni točki" #: app/flatpak-builtins-build-finish.c:56 app/flatpak-builtins-build-init.c:63 msgid "NAME=VARIABLE[=VALUE]" @@ -610,7 +609,7 @@ msgstr "IME=SPREMENLJIVKA[=VREDNOST]" #: app/flatpak-builtins-build-finish.c:57 msgid "Remove extension point info" -msgstr "" +msgstr "Odstrani podatke o razširitveni točki" #: app/flatpak-builtins-build-finish.c:57 #: app/flatpak-builtins-build-update-repo.c:79 app/flatpak-builtins-info.c:58 @@ -621,7 +620,7 @@ msgstr "IME" #: app/flatpak-builtins-build-finish.c:58 msgid "Set extension priority (only for extensions)" -msgstr "" +msgstr "Nastavite prednosti razširitve (samo za razširitve)" #: app/flatpak-builtins-build-finish.c:58 msgid "VALUE" @@ -637,7 +636,7 @@ msgstr "SDK" #: app/flatpak-builtins-build-finish.c:60 msgid "Change the runtime used for the app" -msgstr "" +msgstr "Spremeni izvršilno datoteko, uporabljeno za aplikacijo" #: app/flatpak-builtins-build-finish.c:60 app/flatpak-builtins-build-init.c:54 #: app/flatpak-builtins-list.c:51 app/flatpak-builtins-remote-ls.c:57 @@ -673,9 +672,8 @@ msgid "Exporting %s\n" msgstr "Izvažanje %s\n" #: app/flatpak-builtins-build-finish.c:439 -#, c-format msgid "More than one executable found\n" -msgstr "" +msgstr "Najdenih več kot ena izvršljiva datoteka\n" #: app/flatpak-builtins-build-finish.c:450 #, c-format @@ -683,9 +681,8 @@ msgid "Using %s as command\n" msgstr "Uporaba %s kot ukaza\n" #: app/flatpak-builtins-build-finish.c:455 -#, c-format msgid "No executable found\n" -msgstr "" +msgstr "Ni mogoče najti izvršljive datoteke\n" #: app/flatpak-builtins-build-finish.c:510 #, c-format @@ -720,7 +717,7 @@ msgstr "" #: app/flatpak-builtins-build-init.c:461 #, c-format msgid "Invalid extension name %s" -msgstr "" +msgstr "Neveljavno ime razširitve %s" #: app/flatpak-builtins-build-finish.c:645 msgid "DIRECTORY - Finalize a build directory" @@ -737,26 +734,25 @@ msgid "Build directory %s already finalized" msgstr "Mapa gradnje %s je že dokončana" #: app/flatpak-builtins-build-finish.c:701 -#, c-format msgid "Please review the exported files and the metadata\n" msgstr "Preglejte izvožene datoteke in metapodatke\n" #: app/flatpak-builtins-build-import-bundle.c:46 msgid "Override the ref used for the imported bundle" -msgstr "" +msgstr "Preglasi sklic, ki se uporablja za uvoženi sveženj" #: app/flatpak-builtins-build-import-bundle.c:46 msgid "REF" -msgstr "" +msgstr "REF" #: app/flatpak-builtins-build-import-bundle.c:47 msgid "Import oci image instead of flatpak bundle" -msgstr "" +msgstr "Uvozi sliko oci namesto svežnja flatpak" #: app/flatpak-builtins-build-import-bundle.c:86 #, c-format msgid "Ref '%s' not found in registry" -msgstr "" +msgstr "Sklic »%s« ni v registru" #: app/flatpak-builtins-build-import-bundle.c:95 msgid "Multiple images in registry, specify a ref with --ref" @@ -770,7 +766,7 @@ msgstr "Uvažanje %s (%s)\n" #: app/flatpak-builtins-build-import-bundle.c:181 msgid "LOCATION FILENAME - Import a file bundle into a local repository" -msgstr "" +msgstr "MESTO IMEDATOTEKE - Uvozi sveženj datotek v krajevno skladišče" #: app/flatpak-builtins-build-import-bundle.c:188 msgid "LOCATION and FILENAME must be specified" @@ -779,19 +775,19 @@ msgstr "Navesti morata MESTO in IMEDATOTEKE" #: app/flatpak-builtins-build-init.c:53 app/flatpak-builtins-info.c:55 #: app/flatpak-builtins-run.c:66 msgid "Arch to use" -msgstr "" +msgstr "Arh za uporabo" #: app/flatpak-builtins-build-init.c:54 msgid "Initialize var from named runtime" -msgstr "" +msgstr "Inicializacija var iz imenovanega izvajalnika" #: app/flatpak-builtins-build-init.c:55 msgid "Initialize apps from named app" -msgstr "" +msgstr "Inicializacija aplikacij iz imenovane aplikacije" #: app/flatpak-builtins-build-init.c:55 msgid "APP" -msgstr "" +msgstr "PROG" #: app/flatpak-builtins-build-init.c:56 msgid "Specify version for --base" @@ -803,27 +799,27 @@ msgstr "RAZLIČICA" #: app/flatpak-builtins-build-init.c:57 msgid "Include this base extension" -msgstr "" +msgstr "Vključi to osnovno razširitev" #: app/flatpak-builtins-build-init.c:57 app/flatpak-builtins-build-init.c:62 msgid "EXTENSION" -msgstr "" +msgstr "RAZŠIRITEV" #: app/flatpak-builtins-build-init.c:58 msgid "Extension tag to use if building extension" -msgstr "" +msgstr "Razširitvena značka za uporabo ob gradnji razširitve" #: app/flatpak-builtins-build-init.c:58 msgid "EXTENSION_TAG" -msgstr "" +msgstr "ZNAČKA_RAZŠIRITVE" #: app/flatpak-builtins-build-init.c:59 msgid "Initialize /usr with a writable copy of the sdk" -msgstr "" +msgstr "Inicializirae /usr z zapisljivo kopijo sdk" #: app/flatpak-builtins-build-init.c:60 msgid "Specify the build type (app, runtime, extension)" -msgstr "" +msgstr "Določite vrsto gradnje (aplikacija, izv. program, razširitev)" #: app/flatpak-builtins-build-init.c:60 msgid "TYPE" @@ -852,31 +848,32 @@ msgstr "Ponovno inicializiraj sdk/var" #: app/flatpak-builtins-build-init.c:118 #, c-format msgid "Requested extension %s/%s/%s is only partially installed" -msgstr "" +msgstr "Zahtevana razširitev %s/%s/%s je samo delno nameščena" #: app/flatpak-builtins-build-init.c:147 #, c-format msgid "Requested extension %s/%s/%s not installed" -msgstr "" +msgstr "Zahtevana razširitev %s/%s/%s ni nameščena" #: app/flatpak-builtins-build-init.c:207 msgid "" "DIRECTORY APPNAME SDK RUNTIME [BRANCH] - Initialize a directory for building" -msgstr "" +msgstr "MAPA IMEPROGRAMA SDK IZVAJALNA [VEJA] - Inicializacija mape za gradnjo" #: app/flatpak-builtins-build-init.c:214 msgid "RUNTIME must be specified" -msgstr "" +msgstr "IZVAJALNO je treba določiti" #: app/flatpak-builtins-build-init.c:235 #, c-format msgid "'%s' is not a valid build type name, use app, runtime or extension" msgstr "" +"»%s« ni veljavno ime vrste gradnje, uporabite app, runtime ali extension" #: app/flatpak-builtins-build-init.c:241 app/flatpak-builtins-override.c:79 #, c-format msgid "'%s' is not a valid application name: %s" -msgstr "" +msgstr "»%s« ni veljavno ime aplikacije: %s" #: app/flatpak-builtins-build-init.c:295 #, c-format @@ -886,17 +883,17 @@ msgstr "Mapa gradnje je %s že inicializirana" #: app/flatpak-builtins-build-sign.c:42 app/flatpak-builtins-install.c:66 #: app/flatpak-builtins-remote-info.c:54 msgid "Arch to install for" -msgstr "" +msgstr "Arh za nameščanje" #: app/flatpak-builtins-build-sign.c:43 app/flatpak-builtins-create-usb.c:48 #: app/flatpak-builtins-install.c:73 app/flatpak-builtins-remote-info.c:56 #: app/flatpak-builtins-uninstall.c:58 app/flatpak-builtins-update.c:64 msgid "Look for runtime with the specified name" -msgstr "" +msgstr "Poiščite izvajalno datoteko z navedenim imenom" #: app/flatpak-builtins-build-sign.c:66 msgid "LOCATION [ID [BRANCH]] - Sign an application or runtime" -msgstr "" +msgstr "MESTO [ID [VEJA]] - Podpišite aplikacijo ali izvajalno datoteko" #: app/flatpak-builtins-build-sign.c:73 #: app/flatpak-builtins-build-update-repo.c:499 @@ -969,10 +966,12 @@ msgid "" "Permanently deploy collection ID to client remote configurations, only for " "sideload support" msgstr "" +"Trajno uvedi ID zbirke v oddaljene prilagoditve odjemalca, samo za podporo " +"nalaganja z naprave" #: app/flatpak-builtins-build-update-repo.c:78 msgid "Permanently deploy collection ID to client remote configurations" -msgstr "" +msgstr "Trajno uvedi ID-ja zbirke v oddaljene prilagoditve odjemalca" #: app/flatpak-builtins-build-update-repo.c:79 msgid "Name of authenticator for this repository" @@ -1036,6 +1035,7 @@ msgstr "Obreži, vendar ne odstrani ničesar" #: app/flatpak-builtins-build-update-repo.c:93 msgid "Only traverse DEPTH parents for each commit (default: -1=infinite)" msgstr "" +"Samo prečkaj GLOBINO nadrejenih za vsako objavo (privzeto: -1=neskončno)" #: app/flatpak-builtins-build-update-repo.c:93 msgid "DEPTH" @@ -1054,24 +1054,22 @@ msgstr "Tvorjenje delte: %s (%.10s-%.10s)\n" #: app/flatpak-builtins-build-update-repo.c:233 #, c-format msgid "Failed to generate delta %s (%.10s): " -msgstr "" +msgstr "Ni uspelo ustvariti delte %s (%.10s): " #: app/flatpak-builtins-build-update-repo.c:236 #, c-format msgid "Failed to generate delta %s (%.10s-%.10s): " -msgstr "" +msgstr "Ni uspelo ustvariti delte %s (%.10s-%.10s): " #: app/flatpak-builtins-build-update-repo.c:492 msgid "LOCATION - Update repository metadata" -msgstr "" +msgstr "MESTO - Posodobi metapodatke skladišča" #: app/flatpak-builtins-build-update-repo.c:609 -#, c-format msgid "Updating appstream branch\n" -msgstr "" +msgstr "Posodabljanje vaje v appstream\n" #: app/flatpak-builtins-build-update-repo.c:638 -#, c-format msgid "Updating summary\n" msgstr "Posodabljanje povzetka\n" @@ -1081,7 +1079,6 @@ msgid "Total objects: %u\n" msgstr "Skupaj predmetov: %u\n" #: app/flatpak-builtins-build-update-repo.c:666 -#, c-format msgid "No unreachable objects\n" msgstr "Ni nedosegljivih predmetov\n" @@ -1096,11 +1093,11 @@ msgstr "Seznam priilagoditvenih ključev in vrednosti" #: app/flatpak-builtins-config.c:42 msgid "Get configuration for KEY" -msgstr "" +msgstr "Pridobi prilagoditev za KLJUČ" #: app/flatpak-builtins-config.c:43 msgid "Set configuration for KEY to VALUE" -msgstr "" +msgstr "Nastavi prilagoditev za KLJUČ na VREDNOST" #: app/flatpak-builtins-config.c:44 msgid "Unset configuration for KEY" @@ -1135,7 +1132,7 @@ msgstr "Preveč argumentov za --get" #: app/flatpak-builtins-config.c:302 msgid "You must specify KEY and VALUE" -msgstr "" +msgstr "Navesti morate KLJUČ in VREDNOST" #: app/flatpak-builtins-config.c:304 msgid "Too many arguments for --set" @@ -1147,7 +1144,7 @@ msgstr "Preveč argumentov za --unset" #: app/flatpak-builtins-config.c:347 msgid "[KEY [VALUE]] - Manage configuration" -msgstr "" +msgstr "[KLJUČ [VREDNOST]] - Upravljanje prilagoditve" #: app/flatpak-builtins-config.c:358 msgid "Can only use one of --list, --get, --set or --unset" @@ -1161,11 +1158,11 @@ msgstr "Določiti morate enega od --list, --get, --set ali --unset" #: app/flatpak-builtins-remote-info.c:57 app/flatpak-builtins-uninstall.c:59 #: app/flatpak-builtins-update.c:65 msgid "Look for app with the specified name" -msgstr "" +msgstr "Poiščite aplikacijo z navedenim imenom" #: app/flatpak-builtins-create-usb.c:46 msgid "Arch to copy" -msgstr "" +msgstr "Arh za kopiranje" #: app/flatpak-builtins-create-usb.c:47 msgid "DEST" @@ -1181,11 +1178,13 @@ msgid "" "Warning: Related ref ‘%s’ is partially installed. Use --allow-partial to " "suppress this message.\n" msgstr "" +"Opozorilo: Sorodna ref »%s« je delno nameščena. Uporabite --allow-partial, " +"da zatrete to sporočilo.\n" #: app/flatpak-builtins-create-usb.c:158 #, c-format msgid "Warning: Omitting related ref ‘%s’ because it is not installed.\n" -msgstr "" +msgstr "Opozorilo: izpuščanje povezane ref. »%s«, ker ni nameščeno.\n" #: app/flatpak-builtins-create-usb.c:175 #, c-format @@ -1193,11 +1192,14 @@ msgid "" "Warning: Omitting related ref ‘%s’ because its remote ‘%s’ does not have a " "collection ID set.\n" msgstr "" +"Opozorilo: izpuščanje povezane ref »%s«, ker njen oddaljeni »%s« nima " +"nastavljenega ID zbirke.\n" #: app/flatpak-builtins-create-usb.c:187 #, c-format msgid "Warning: Omitting related ref ‘%s’ because it's extra-data.\n" msgstr "" +"Opozorilo: izpuščanje povezane ref. »%s«, ker gre za dodatne podatke.\n" #: app/flatpak-builtins-create-usb.c:262 app/flatpak-builtins-create-usb.c:637 #, c-format @@ -1228,12 +1230,12 @@ msgstr "Določiti je treba MOUNT-PATH in REF" #: app/flatpak-builtins-create-usb.c:607 #, c-format msgid "Ref ‘%s’ found in multiple installations: %s. You must specify one." -msgstr "" +msgstr "Ref »%s« je moč najti v več namestitvah: %s. Navesti morate eno." #: app/flatpak-builtins-create-usb.c:620 #, c-format msgid "Refs must all be in the same installation (found in %s and %s)." -msgstr "" +msgstr "Vsi ref morajo biti v isti namestitvi (najdeno v %s in %s)." #: app/flatpak-builtins-create-usb.c:670 #, c-format @@ -1248,16 +1250,22 @@ msgstr "" #, c-format msgid "Installed ref ‘%s’ is extra-data, and cannot be distributed offline" msgstr "" +"Nameščeni ref »%s« je dodatni podatek in ga ni mogoče distribuirati brez " +"povezave" #: app/flatpak-builtins-create-usb.c:721 #, c-format msgid "Warning: Couldn't update repo metadata for remote ‘%s’: %s\n" msgstr "" +"Opozorilo: metapodatkov skladišča za oddaljeni »%s« ni bilo mogoče " +"posodobiti: %s\n" #: app/flatpak-builtins-create-usb.c:751 #, c-format msgid "Warning: Couldn't update appstream data for remote ‘%s’ arch ‘%s’: %s\n" msgstr "" +"Opozorilo: ni bilo mogoče posodobiti podatkov appstream za oddaljeni »%s« " +"arh. »%s«: %s\n" #. Print a warning if both appstream and appstream2 are missing #: app/flatpak-builtins-create-usb.c:784 @@ -1265,56 +1273,58 @@ msgstr "" msgid "" "Warning: Couldn't find appstream data for remote ‘%s’ arch ‘%s’: %s; %s\n" msgstr "" +"Opozorilo: ni bilo mogoče najti podatkov appstream za oddaljeni »%s« arh. " +"»%s«: %s; %s\n" #. Appstream2 is only for efficiency, so just print a debug message #: app/flatpak-builtins-create-usb.c:790 #, c-format msgid "Couldn't find appstream2 data for remote ‘%s’ arch ‘%s’: %s\n" -msgstr "" +msgstr "Podatkov appstream2 za oddaljeni »%s « arh. %s ni možno najti: %s\n" #: app/flatpak-builtins-document-export.c:62 msgid "Create a unique document reference" -msgstr "" +msgstr "Ustvari enolično referenco dokumenta" #: app/flatpak-builtins-document-export.c:63 msgid "Make the document transient for the current session" -msgstr "" +msgstr "Naredi dokument prehoden za trenutno sejo" #: app/flatpak-builtins-document-export.c:64 msgid "Don't require the file to exist already" -msgstr "" +msgstr "Ne zahtevaj, da datoteka že obstaja" #: app/flatpak-builtins-document-export.c:65 msgid "Give the app read permissions" -msgstr "" +msgstr "Dodeli aplikaciji pravice za branje" #: app/flatpak-builtins-document-export.c:66 msgid "Give the app write permissions" -msgstr "" +msgstr "Dodeli aplikaciji pravice za pisanje" #: app/flatpak-builtins-document-export.c:67 msgid "Give the app delete permissions" -msgstr "" +msgstr "Dodeli aplikaciji pravice za brisanje" #: app/flatpak-builtins-document-export.c:68 msgid "Give the app permissions to grant further permissions" -msgstr "" +msgstr "Dodeli aplikaciji pravice za za podeljevanje dodatnih pravic" #: app/flatpak-builtins-document-export.c:69 msgid "Revoke read permissions of the app" -msgstr "" +msgstr "Prekliči dovoljenja za branje aplikaciji" #: app/flatpak-builtins-document-export.c:70 msgid "Revoke write permissions of the app" -msgstr "" +msgstr "Prekliči dovoljenja za pisanje aplikaciji" #: app/flatpak-builtins-document-export.c:71 msgid "Revoke delete permissions of the app" -msgstr "" +msgstr "Prekliči dovoljenja za brisanje aplikaciji" #: app/flatpak-builtins-document-export.c:72 msgid "Revoke the permission to grant further permissions" -msgstr "" +msgstr "Prekliči dovoljenja za dodelitev dodatnih dovoljenj" #: app/flatpak-builtins-document-export.c:73 msgid "Add permissions for this app" @@ -1322,11 +1332,11 @@ msgstr "Dodaj dovoljenja za ta program" #: app/flatpak-builtins-document-export.c:73 msgid "APPID" -msgstr "" +msgstr "APPID" #: app/flatpak-builtins-document-export.c:100 msgid "FILE - Export a file to apps" -msgstr "" +msgstr "DATOTEKA – Izvozite datoteko v aplikacije" #: app/flatpak-builtins-document-export.c:109 #: app/flatpak-builtins-document-info.c:72 @@ -1336,11 +1346,10 @@ msgstr "DATOTEKA mora biti navedena" #: app/flatpak-builtins-document-info.c:63 msgid "FILE - Get information about an exported file" -msgstr "" +msgstr "DATOTEKA – Pridobite informacije o izvoženi datoteki" #: app/flatpak-builtins-document-info.c:100 #: app/flatpak-builtins-document-unexport.c:92 -#, c-format msgid "Not exported\n" msgstr "Ni izvoženo\n" @@ -1393,11 +1402,15 @@ msgstr "Dovoljenja" #: app/flatpak-builtins-document-list.c:51 msgid "Show permissions for applications" -msgstr "" +msgstr "Pokaži dovoljenja za aplikacije" + +#: app/flatpak-builtins-document-list.c:159 +msgid "No documents found\n" +msgstr "Ni najdenih dokumentov\n" -#: app/flatpak-builtins-document-list.c:171 +#: app/flatpak-builtins-document-list.c:178 msgid "[APPID] - List exported files" -msgstr "" +msgstr "[IDAPL] - Izpiši seznam izvoženih datotek" #: app/flatpak-builtins-document-unexport.c:43 msgid "Specify the document ID" @@ -1405,29 +1418,31 @@ msgstr "Navedite ID dokumenta" #: app/flatpak-builtins-document-unexport.c:58 msgid "FILE - Unexport a file to apps" -msgstr "" +msgstr "DATOTEKA – Prekličite izvoz datoteke v aplikacije" #: app/flatpak-builtins-enter.c:88 msgid "INSTANCE COMMAND [ARGUMENT…] - Run a command inside a running sandbox" -msgstr "" +msgstr "POJAVITEV UKAZ [ARGUMENT...] - Zaženite ukaz v zagnanem peskovniku" #: app/flatpak-builtins-enter.c:111 msgid "INSTANCE and COMMAND must be specified" -msgstr "" +msgstr "PRIMEREK in UKAZ morata biti določena" #: app/flatpak-builtins-enter.c:138 #, c-format msgid "%s is neither a pid nor an application or instance ID" -msgstr "" +msgstr "%s ni niti pid niti ID aplikacije ali primerka" #: app/flatpak-builtins-enter.c:144 msgid "entering not supported (need unprivileged user namespaces, or sudo -E)" msgstr "" +"vnašanje ni podprto (potrebujete uporabniški imenski prostor brez " +"privilegijev ali sudo -E)" #: app/flatpak-builtins-enter.c:145 #, c-format msgid "No such pid %s" -msgstr "" +msgstr "Ni takšnih pid %s" #: app/flatpak-builtins-enter.c:158 msgid "Can't read cwd" @@ -1445,7 +1460,7 @@ msgstr "Neveljaven imenski prostor %s za pid %d" #: app/flatpak-builtins-enter.c:202 #, c-format msgid "Invalid %s namespace for self" -msgstr "" +msgstr "Neveljaven imenski prostor %s za sebe" #: app/flatpak-builtins-enter.c:216 #, c-format @@ -1455,6 +1470,7 @@ msgstr "Ni mogoče odpreti imenskega prostora %s: %s" #: app/flatpak-builtins-enter.c:226 msgid "entering not supported (need unprivileged user namespaces)" msgstr "" +"vnos ni podprt (potrebujete neprivilegirane uporabniške imenske prostore)" #: app/flatpak-builtins-enter.c:227 #, c-format @@ -1559,7 +1575,7 @@ msgstr "Oddaljeno" #: app/flatpak-builtins-history.c:64 msgid "Show the remote" -msgstr "" +msgstr "Pokaži oddaljeni" #: app/flatpak-builtins-history.c:65 app/flatpak-builtins-ps.c:53 #: app/flatpak-builtins-remote-ls.c:74 @@ -1620,19 +1636,17 @@ msgstr "Odpiranje dnevnika ni uspelo: %s" #: app/flatpak-builtins-history.c:151 #, c-format msgid "Failed to add match to journal: %s" -msgstr "" +msgstr "Dodajanje ujemanja v dnevnik ni uspelo: %s" #: app/flatpak-builtins-history.c:469 msgid " - Show history" msgstr " - Pokaži zgodovino" #: app/flatpak-builtins-history.c:488 -#, c-format msgid "Failed to parse the --since option" msgstr "Spodletelo razčlenjevanje možnosti --since" #: app/flatpak-builtins-history.c:499 -#, c-format msgid "Failed to parse the --until option" msgstr "Spodletelo razčlenjevanje možnosti --until" @@ -1650,7 +1664,7 @@ msgstr "Pokaži določene sistemske namestitve" #: app/flatpak-builtins-info.c:59 app/flatpak-builtins-remote-info.c:59 msgid "Show ref" -msgstr "" +msgstr "Pokaži ref" #: app/flatpak-builtins-info.c:60 app/flatpak-builtins-remote-info.c:60 msgid "Show commit" @@ -1670,7 +1684,7 @@ msgstr "Pokaži metapodatke" #: app/flatpak-builtins-info.c:64 app/flatpak-builtins-remote-info.c:63 msgid "Show runtime" -msgstr "" +msgstr "Pokaži izvajalnik" #: app/flatpak-builtins-info.c:65 app/flatpak-builtins-remote-info.c:64 msgid "Show sdk" @@ -1682,7 +1696,7 @@ msgstr "Pokaži dovoljenja" #: app/flatpak-builtins-info.c:67 msgid "Query file access" -msgstr "" +msgstr "Dostop do datoteke poizvedbe" #: app/flatpak-builtins-info.c:67 app/flatpak-builtins-install.c:80 #: app/flatpak-builtins-install.c:86 app/flatpak-builtins-run.c:90 @@ -1693,7 +1707,7 @@ msgstr "POT" #: app/flatpak-builtins-info.c:68 msgid "Show extensions" -msgstr "" +msgstr "Pokaži razširitve" #: app/flatpak-builtins-info.c:69 msgid "Show location" @@ -1701,7 +1715,7 @@ msgstr "Pokaži mesto" #: app/flatpak-builtins-info.c:116 msgid "NAME [BRANCH] - Get info about an installed app or runtime" -msgstr "" +msgstr "IME [VEJA] - Informacije o nameščeni aplikaciji ali izvajalniku" #: app/flatpak-builtins-info.c:123 app/flatpak-builtins-remote-add.c:312 #: app/flatpak-builtins-remote-delete.c:63 @@ -1710,12 +1724,11 @@ msgstr "IME mora biti navedeno" #: app/flatpak-builtins-info.c:196 msgid "ref not present in origin" -msgstr "" +msgstr "ref ni prisoten v izvoru" #: app/flatpak-builtins-info.c:211 app/flatpak-builtins-remote-info.c:217 -#, c-format msgid "Warning: Commit has no flatpak metadata\n" -msgstr "" +msgstr "Opozorilo: objava nima metapodatkov flatpak\n" #: app/flatpak-builtins-info.c:217 app/flatpak-builtins-info.c:259 #: app/flatpak-builtins-info.c:455 app/flatpak-builtins-info.c:513 @@ -1831,7 +1844,7 @@ msgstr "Konec življenjske dobe:" #: app/flatpak-builtins-remote-info.c:265 #: app/flatpak-builtins-remote-info.c:313 msgid "End-of-life-rebase:" -msgstr "" +msgstr "Preosnovanje ob koncu življenjske dobe:" #: app/flatpak-builtins-info.c:254 app/flatpak-builtins-info.c:317 msgid "Subdirectories:" @@ -1861,23 +1874,23 @@ msgstr "neznano" #: app/flatpak-builtins-install.c:67 msgid "Don't pull, only install from local cache" -msgstr "" +msgstr "Ne povleci, le namesti iz krajevnega predpomnilnika" #: app/flatpak-builtins-install.c:68 app/flatpak-builtins-update.c:60 msgid "Don't deploy, only download to local cache" -msgstr "" +msgstr "Ne uvajaj, samo prejmi v krajevni predpomnilnik" #: app/flatpak-builtins-install.c:69 msgid "Don't install related refs" -msgstr "" +msgstr "Ne nameščaj povezanih ref" #: app/flatpak-builtins-install.c:70 app/flatpak-builtins-update.c:62 msgid "Don't verify/install runtime dependencies" -msgstr "" +msgstr "Ne preverjaj/namesti odvisnosti izvajalnikov" #: app/flatpak-builtins-install.c:71 msgid "Don't automatically pin explicit installs" -msgstr "" +msgstr "Ne pripni samodejno eksplicitnih namestitev" #: app/flatpak-builtins-install.c:72 app/flatpak-builtins-update.c:63 msgid "Don't use static deltas" @@ -1885,24 +1898,26 @@ msgstr "Ne uporabljaj statičnih delt" #: app/flatpak-builtins-install.c:75 msgid "Additionally install the SDK used to build the given refs" -msgstr "" +msgstr "Poleg tega namesti SDK, ki se uporablja za izdelavo danih referenc" #: app/flatpak-builtins-install.c:76 msgid "" "Additionally install the debug info for the given refs and their dependencies" msgstr "" +"Poleg tega namesti informacije o odpravljanju napak za dane reference in " +"njihove odvisnosti" #: app/flatpak-builtins-install.c:77 msgid "Assume LOCATION is a .flatpak single-file bundle" -msgstr "" +msgstr "Predpostavi, da je MESTO enodatotečni sveženj .flatpak" #: app/flatpak-builtins-install.c:78 msgid "Assume LOCATION is a .flatpakref application description" -msgstr "" +msgstr "Predpostavi, da je MESTO opis aplikacije .flatpakref" #: app/flatpak-builtins-install.c:79 msgid "Check bundle signatures with GPG key from FILE (- for stdin)" -msgstr "" +msgstr "Preverite podpise svežnja s ključem GPG iz DATOTEKE (- za stdin)" #: app/flatpak-builtins-install.c:80 msgid "Only install this subpath" @@ -1929,15 +1944,15 @@ msgstr "Posodobi namestitev, če je že nameščena" #. Translators: A sideload is when you install from a local USB drive rather than the Internet. #: app/flatpak-builtins-install.c:86 app/flatpak-builtins-update.c:71 msgid "Use this local repo for sideloads" -msgstr "" +msgstr "Uporabi to krajevno skladišče za nalaganje z naprave" #: app/flatpak-builtins-install.c:145 msgid "Bundle filename must be specified" -msgstr "" +msgstr "Določiti je treba ime datoteke svežnja" #: app/flatpak-builtins-install.c:155 msgid "Remote bundles are not supported" -msgstr "" +msgstr "Oddaljeni svežnji niso podprti" #: app/flatpak-builtins-install.c:214 msgid "Filename or uri must be specified" @@ -1945,21 +1960,20 @@ msgstr "Navesti je treba ime datoteke ali uri" #: app/flatpak-builtins-install.c:296 msgid "[LOCATION/REMOTE] [REF…] - Install applications or runtimes" -msgstr "" +msgstr "[MESTO/ODDALJENI] [REF...] - Namestite aplikacije ali izvajalnike" #: app/flatpak-builtins-install.c:322 msgid "At least one REF must be specified" -msgstr "" +msgstr "Določiti je treba vsaj en REF" #: app/flatpak-builtins-install.c:336 -#, c-format msgid "Looking for matches…\n" msgstr "Iskanje zadetkov ...\n" #: app/flatpak-builtins-install.c:457 #, c-format msgid "No remote refs found for ‘%s’" -msgstr "" +msgstr "Ni najdenih oddaljenih ref za »%s«" #: app/flatpak-builtins-install.c:533 app/flatpak-builtins-uninstall.c:405 #: common/flatpak-ref-utils.c:689 common/flatpak-ref-utils.c:1595 @@ -1989,7 +2003,7 @@ msgstr "%s se ne izvaja" #: app/flatpak-builtins-kill.c:82 msgid "INSTANCE - Stop a running application" -msgstr "" +msgstr "POJAVITEV – Zaustavi zagnano aplikacijo" #: app/flatpak-builtins-kill.c:90 app/flatpak-builtins-ps.c:254 msgid "Extra arguments given" @@ -1997,7 +2011,7 @@ msgstr "Podani dodatni argumenti" #: app/flatpak-builtins-kill.c:96 msgid "Must specify the app to kill" -msgstr "" +msgstr "Navesti morate aplikacijo za uboj" #: app/flatpak-builtins-list.c:46 msgid "Show extra information" @@ -2005,23 +2019,23 @@ msgstr "Pokaži dodatne podrobnosti" #: app/flatpak-builtins-list.c:47 msgid "List installed runtimes" -msgstr "" +msgstr "Izpiši seznam nameščenih izvajalnikov" #: app/flatpak-builtins-list.c:48 msgid "List installed applications" -msgstr "" +msgstr "Izpiši seznam nameščenih aplikacij" #: app/flatpak-builtins-list.c:49 msgid "Arch to show" -msgstr "" +msgstr "Arh. za prikaz" #: app/flatpak-builtins-list.c:50 app/flatpak-builtins-remote-ls.c:56 msgid "List all refs (including locale/debug)" -msgstr "" +msgstr "Izpiši vse ref (vključno s področnimi/razhroščevalnimi)" #: app/flatpak-builtins-list.c:51 app/flatpak-builtins-remote-ls.c:57 msgid "List all applications using RUNTIME" -msgstr "" +msgstr "Izpiši seznam vseh aplikacij, ki uporabljajo IZVAJALNIK" #: app/flatpak-builtins-list.c:57 app/flatpak-builtins-remote-list.c:49 #: app/flatpak-builtins-remote-ls.c:66 app/flatpak-builtins-search.c:42 @@ -2065,11 +2079,11 @@ msgstr "Izvajalni program" #: app/flatpak-builtins-list.c:63 msgid "Show the used runtime" -msgstr "" +msgstr "Pokaži uporabljeni izvajalnik" #: app/flatpak-builtins-list.c:64 app/flatpak-builtins-remote-ls.c:72 msgid "Show the origin remote" -msgstr "" +msgstr "Pokaži izvornega oddaljenega" #: app/flatpak-builtins-list.c:65 msgid "Show the installation" @@ -2112,7 +2126,7 @@ msgstr "Pokaži možnosti" #: app/flatpak-builtins-list.c:178 #, c-format msgid "Unable to load details of %s: %s" -msgstr "" +msgstr "Podrobnosti o %s ni mogoče naložiti: %s" #: app/flatpak-builtins-list.c:188 #, c-format @@ -2121,19 +2135,19 @@ msgstr "Trenutne različice %s ni mogoče pregledati: %s" #: app/flatpak-builtins-list.c:406 msgid " - List installed apps and/or runtimes" -msgstr "" +msgstr " - seznam nameščenih aplikacij in/ali izvajalnikov" #: app/flatpak-builtins-make-current.c:38 msgid "Arch to make current for" -msgstr "" +msgstr "Arh., za katero želite izdelati sodobnika" #: app/flatpak-builtins-make-current.c:58 msgid "APP BRANCH - Make branch of application current" -msgstr "" +msgstr "APL VEJA - Naj bo veja aplikacije sodobna" #: app/flatpak-builtins-make-current.c:69 app/flatpak-builtins-run.c:158 msgid "APP must be specified" -msgstr "" +msgstr "Določiti je treba APP" #: app/flatpak-builtins-make-current.c:84 msgid "BRANCH must be specified" @@ -2142,7 +2156,7 @@ msgstr "VEJA mora biti določena" #: app/flatpak-builtins-make-current.c:97 #, c-format msgid "App %s branch %s is not installed" -msgstr "" +msgstr "Aplikacija %s veja %s ni nameščena" #: app/flatpak-builtins-mask.c:42 msgid "Remove matching masks" @@ -2152,32 +2166,32 @@ msgstr "Odstrani ujemajoče maske" msgid "" "[PATTERN…] - disable updates and automatic installation matching patterns" msgstr "" +"[VZOREC...] - onemogoči posodobitve in samodejne namestitve z ujemajočim " +"vzorcem" #: app/flatpak-builtins-mask.c:73 -#, c-format msgid "No masked patterns\n" msgstr "Ni maskiranih vzorcev\n" #: app/flatpak-builtins-mask.c:78 -#, c-format msgid "Masked patterns:\n" msgstr "Maskirani vzorci:\n" #: app/flatpak-builtins-override.c:42 msgid "Remove existing overrides" -msgstr "" +msgstr "Odstrani obstoječe preglasitve" #: app/flatpak-builtins-override.c:43 msgid "Show existing overrides" -msgstr "" +msgstr "Pokaži obstoječe preglasitve" #: app/flatpak-builtins-override.c:59 msgid "[APP] - Override settings [for application]" -msgstr "" +msgstr "[APL] - Preglasi nastavitve [za aplikacijo]" #: app/flatpak-builtins-permission-list.c:140 msgid "[TABLE] [ID] - List permissions" -msgstr "" +msgstr "[TABELA] [ID] - Izpiši dovoljenja" #: app/flatpak-builtins-permission-list.c:176 #: app/flatpak-builtins-permission-show.c:139 @@ -2201,7 +2215,7 @@ msgstr "Podatki" #: app/flatpak-builtins-permission-remove.c:120 msgid "TABLE ID [APP_ID] - Remove item from permission store" -msgstr "" +msgstr "TABELA ID [APL_ID] - Odstrani element iz shrambe dovoljenj" #: app/flatpak-builtins-permission-remove.c:129 #: app/flatpak-builtins-permission-set.c:120 @@ -2214,7 +2228,7 @@ msgstr "Ponastavi vsa dovoljenja" #: app/flatpak-builtins-permission-reset.c:144 msgid "APP_ID - Reset permissions for an app" -msgstr "" +msgstr "PROG_ID – Ponastavi dovoljenja za aplikacijo" #: app/flatpak-builtins-permission-reset.c:153 #: app/flatpak-builtins-permission-show.c:121 @@ -2223,7 +2237,7 @@ msgstr "Napačno število argumentov" #: app/flatpak-builtins-permission-set.c:42 msgid "Associate DATA with the entry" -msgstr "" +msgstr "Poveži PODATKE z vnosom" #: app/flatpak-builtins-permission-set.c:42 msgid "DATA" @@ -2231,32 +2245,32 @@ msgstr "PODATKI" #: app/flatpak-builtins-permission-set.c:111 msgid "TABLE ID APP_ID [PERMISSION...] - Set permissions" -msgstr "" +msgstr "TABELA ID APL_ID [DOVOLJENEJE…] - Nastavite dovoljenja" #: app/flatpak-builtins-permission-set.c:132 #, c-format msgid "Failed to parse '%s' as GVariant: " -msgstr "" +msgstr "Razčlenjevanje »%s« kot GVariant ni uspelo: " #: app/flatpak-builtins-permission-show.c:112 msgid "APP_ID - Show permissions for an app" -msgstr "" +msgstr "APL_ID – Pokaži dovoljenja za aplikacijo" #: app/flatpak-builtins-pin.c:44 msgid "Remove matching pins" -msgstr "" +msgstr "Odstrani ujemajoče se pripete" #: app/flatpak-builtins-pin.c:56 msgid "[PATTERN…] - disable automatic removal of runtimes matching patterns" msgstr "" +"[VZOREC...] - onemogočite samodejno odstranjevanje ujemajočih vzorcev " +"izvajalnikov" #: app/flatpak-builtins-pin.c:75 -#, c-format msgid "No pinned patterns\n" msgstr "Brez pripetih vzorcev\n" #: app/flatpak-builtins-pin.c:80 -#, c-format msgid "Pinned patterns:\n" msgstr "Pripeti vzorci:\n" @@ -2270,19 +2284,19 @@ msgstr "Prikaži ID primerka" #: app/flatpak-builtins-ps.c:48 app/flatpak-builtins-run.c:86 msgid "PID" -msgstr "" +msgstr "PID" #: app/flatpak-builtins-ps.c:48 msgid "Show the PID of the wrapper process" -msgstr "" +msgstr "Pokaži PID procesa ovoja" #: app/flatpak-builtins-ps.c:49 msgid "Child-PID" -msgstr "" +msgstr "PID-podrejenega" #: app/flatpak-builtins-ps.c:49 msgid "Show the PID of the sandbox process" -msgstr "" +msgstr "Pokaži PID procesa peskovnika" #: app/flatpak-builtins-ps.c:52 app/flatpak-builtins-search.c:46 msgid "Show the application branch" @@ -2294,23 +2308,23 @@ msgstr "Pokaži objavo programa" #: app/flatpak-builtins-ps.c:54 msgid "Show the runtime ID" -msgstr "" +msgstr "Pokaži ID izvajalnika" #: app/flatpak-builtins-ps.c:55 msgid "R.-Branch" -msgstr "" +msgstr "R.-veja" #: app/flatpak-builtins-ps.c:55 msgid "Show the runtime branch" -msgstr "" +msgstr "Pokaži vejo izvajalnika" #: app/flatpak-builtins-ps.c:56 msgid "R.-Commit" -msgstr "" +msgstr "R.-objava" #: app/flatpak-builtins-ps.c:56 msgid "Show the runtime commit" -msgstr "" +msgstr "Pokaži objavo izvajalnika" #: app/flatpak-builtins-ps.c:57 msgid "Active" @@ -2330,15 +2344,15 @@ msgstr "Pokaži, ali je aplikacija v ozadju" #: app/flatpak-builtins-ps.c:244 msgid " - Enumerate running sandboxes" -msgstr "" +msgstr " - Oštevilči peskovnike v teku" #: app/flatpak-builtins-remote-add.c:65 msgid "Do nothing if the provided remote exists" -msgstr "" +msgstr "Ne stori ničesar, če obstaja podani oddaljeni" #: app/flatpak-builtins-remote-add.c:66 msgid "LOCATION specifies a configuration file, not the repo location" -msgstr "" +msgstr "MESTO določa prilagoditveno datoteko, ne mesto skladišča" #: app/flatpak-builtins-remote-add.c:71 app/flatpak-builtins-remote-modify.c:77 msgid "Disable GPG verification" @@ -2346,15 +2360,15 @@ msgstr "Onemogoči preverjanje GPG" #: app/flatpak-builtins-remote-add.c:72 app/flatpak-builtins-remote-modify.c:78 msgid "Mark the remote as don't enumerate" -msgstr "" +msgstr "Označi oddaljeni kot ne šteti" #: app/flatpak-builtins-remote-add.c:73 app/flatpak-builtins-remote-modify.c:79 msgid "Mark the remote as don't use for deps" -msgstr "" +msgstr "Označi oddaljeni kot ne uporabljen za odvisne" #: app/flatpak-builtins-remote-add.c:74 app/flatpak-builtins-remote-modify.c:80 msgid "Set priority (default 1, higher is more prioritized)" -msgstr "" +msgstr "Nastavite prednost (privzeto 1, višje je bolj prednostno)" #: app/flatpak-builtins-remote-add.c:74 app/flatpak-builtins-remote-modify.c:80 msgid "PRIORITY" @@ -2362,7 +2376,7 @@ msgstr "PREDNOST" #: app/flatpak-builtins-remote-add.c:75 msgid "The named subset to use for this remote" -msgstr "" +msgstr "Imenovani podnabor, ki ga želite uporabiti za to oddaljeno" #: app/flatpak-builtins-remote-add.c:75 app/flatpak-builtins-remote-modify.c:70 msgid "SUBSET" @@ -2370,39 +2384,39 @@ msgstr "PODMNOŽICA" #: app/flatpak-builtins-remote-add.c:76 app/flatpak-builtins-remote-modify.c:81 msgid "A nice name to use for this remote" -msgstr "" +msgstr "Lepo ime, ki ga lahko uporabite za tega oddaljenega" #: app/flatpak-builtins-remote-add.c:77 app/flatpak-builtins-remote-modify.c:82 msgid "A one-line comment for this remote" -msgstr "" +msgstr "Enovrstični komentar za oddaljeni" #: app/flatpak-builtins-remote-add.c:78 app/flatpak-builtins-remote-modify.c:83 msgid "A full-paragraph description for this remote" -msgstr "" +msgstr "Opis polnega odstavka za ta oddaljeni" #: app/flatpak-builtins-remote-add.c:79 app/flatpak-builtins-remote-modify.c:84 msgid "URL for a website for this remote" -msgstr "" +msgstr "URL za spletno mesto za ta oddaljeni" #: app/flatpak-builtins-remote-add.c:80 app/flatpak-builtins-remote-modify.c:85 msgid "URL for an icon for this remote" -msgstr "" +msgstr "URL za ikono za ta oddaljeni" #: app/flatpak-builtins-remote-add.c:81 app/flatpak-builtins-remote-modify.c:86 msgid "Default branch to use for this remote" -msgstr "" +msgstr "Privzeta veja za uporabo za ta oddaljeni" #: app/flatpak-builtins-remote-add.c:83 app/flatpak-builtins-remote-modify.c:88 msgid "Import GPG key from FILE (- for stdin)" -msgstr "" +msgstr "Uvozi ključ GPG iz DATOTEKE (- za stdin)" #: app/flatpak-builtins-remote-add.c:84 app/flatpak-builtins-remote-modify.c:90 msgid "Set path to local filter FILE" -msgstr "" +msgstr "Nastavite pot do krajevne filtrirne DATOTEKE" #: app/flatpak-builtins-remote-add.c:85 app/flatpak-builtins-remote-modify.c:91 msgid "Disable the remote" -msgstr "" +msgstr "Onemogočite oddaljenega" #: app/flatpak-builtins-remote-add.c:86 app/flatpak-builtins-remote-modify.c:92 msgid "Name of authenticator" @@ -2414,11 +2428,11 @@ msgstr "Samodejno namesti avtentifikator" #: app/flatpak-builtins-remote-add.c:89 app/flatpak-builtins-remote-modify.c:95 msgid "Don't autoinstall authenticator" -msgstr "" +msgstr "Ne namesti samodejno preverjevalnika pristnosti" #: app/flatpak-builtins-remote-add.c:90 app/flatpak-builtins-remote-modify.c:97 msgid "Don't follow the redirect set in the summary file" -msgstr "" +msgstr "Ne sledi preusmeritvi, določeni v datoteki povzetka" #: app/flatpak-builtins-remote-add.c:256 app/flatpak-builtins-remote-add.c:263 #, c-format @@ -2432,7 +2446,7 @@ msgstr "Datoteke %s ni mogoče naložiti: %s\n" #: app/flatpak-builtins-remote-add.c:299 msgid "NAME LOCATION - Add a remote repository" -msgstr "" +msgstr "IME MESTO - Dodajate oddaljeno skladišče" #: app/flatpak-builtins-remote-add.c:326 msgid "GPG verification is required if collections are enabled" @@ -2441,7 +2455,7 @@ msgstr "Preverjanje GPG je potrebno, če so zbirke omogočene" #: app/flatpak-builtins-remote-add.c:388 #, c-format msgid "Remote %s already exists" -msgstr "" +msgstr "Oddaljeni %s že obstaja" #: app/flatpak-builtins-remote-add.c:400 #: app/flatpak-builtins-remote-modify.c:332 @@ -2456,7 +2470,7 @@ msgstr "Opozorilo: dodatnih metapodatkov za »%s« ni možno posodobiti: %s\n" #: app/flatpak-builtins-remote-delete.c:39 msgid "Remove remote even if in use" -msgstr "" +msgstr "Odstrani oddaljeno, tudi če je v uporabi" #: app/flatpak-builtins-remote-delete.c:53 msgid "NAME - Delete a remote repository" @@ -2465,7 +2479,7 @@ msgstr "IME - Izbriši oddaljeno skladišče" #: app/flatpak-builtins-remote-delete.c:100 #, c-format msgid "The following refs are installed from remote '%s':" -msgstr "" +msgstr "Iz oddaljenega »%s« so nameščeni naslednji ref:" #: app/flatpak-builtins-remote-delete.c:101 msgid "Remove them?" @@ -2474,42 +2488,43 @@ msgstr "Ali jih želite odstraniti?" #: app/flatpak-builtins-remote-delete.c:103 #, c-format msgid "Can't remove remote '%s' with installed refs" -msgstr "" +msgstr "Oddaljenega »%s« z nameščenimi ref ni mogoče odstraniti" #: app/flatpak-builtins-remote-info.c:55 msgid "Commit to show info for" -msgstr "" +msgstr "Objavi za prikaz informacij za" #: app/flatpak-builtins-remote-info.c:58 msgid "Display log" -msgstr "" +msgstr "Prikaži zapisnik" #: app/flatpak-builtins-remote-info.c:61 msgid "Show parent" -msgstr "" +msgstr "Pokaži nadrejene" #: app/flatpak-builtins-remote-info.c:65 app/flatpak-builtins-remote-ls.c:59 msgid "Use local caches even if they are stale" -msgstr "" +msgstr "Uporabi krajevne predpomnilnike, tudi če so neosveženi" #. Translators: A sideload is when you install from a local USB drive rather than the Internet. #: app/flatpak-builtins-remote-info.c:67 app/flatpak-builtins-remote-ls.c:61 msgid "Only list refs available as sideloads" -msgstr "" +msgstr "Izpiši samo seznam ref na voljo kot nalaganje z naprave" #: app/flatpak-builtins-remote-info.c:114 msgid "" " REMOTE REF - Show information about an application or runtime in a remote" msgstr "" +" DALJINSKO REF – Pokaži informacije o aplikaciji ali izvajalniku v daljinskem" #: app/flatpak-builtins-remote-info.c:125 msgid "REMOTE and REF must be specified" -msgstr "" +msgstr "ODDALJENI in REF morata biti določena" #: app/flatpak-builtins-remote-info.c:247 #: app/flatpak-builtins-remote-info.c:282 msgid "Download:" -msgstr "" +msgstr "Prejmi:" #: app/flatpak-builtins-remote-info.c:267 #: app/flatpak-builtins-remote-info.c:325 @@ -2518,7 +2533,7 @@ msgstr "Zgodovina:" #: app/flatpak-builtins-remote-info.c:348 msgid " Commit:" -msgstr "" +msgstr "Objavi:" #: app/flatpak-builtins-remote-info.c:349 msgid " Subject:" @@ -2535,11 +2550,11 @@ msgstr "Opozorilo: objava %s nima metapodatkov flatpak\n" #: app/flatpak-builtins-remote-list.c:42 msgid "Show remote details" -msgstr "" +msgstr "Pokaži podrobnosti oddaljenega" #: app/flatpak-builtins-remote-list.c:43 msgid "Show disabled remotes" -msgstr "" +msgstr "Pokaži onemogočene oddaljene" #: app/flatpak-builtins-remote-list.c:50 msgid "Title" @@ -2615,27 +2630,27 @@ msgstr " - Seznam oddaljenih skladišč" #: app/flatpak-builtins-remote-ls.c:51 msgid "Show arches and branches" -msgstr "" +msgstr "Pokaži arh. in veje" #: app/flatpak-builtins-remote-ls.c:52 msgid "Show only runtimes" -msgstr "" +msgstr "Pokaži samo izvajalne programe" #: app/flatpak-builtins-remote-ls.c:53 msgid "Show only apps" -msgstr "" +msgstr "Pokaži le programe-aplikacije" #: app/flatpak-builtins-remote-ls.c:54 msgid "Show only those where updates are available" -msgstr "" +msgstr "Pokaži samo tiste, za katere so na voljo posodobitve" #: app/flatpak-builtins-remote-ls.c:55 msgid "Limit to this arch (* for all)" -msgstr "" +msgstr "Omeji na to arhitekturo (* za vse)" #: app/flatpak-builtins-remote-ls.c:75 msgid "Show the runtime" -msgstr "" +msgstr "Pokaži izvajalno dat." #: app/flatpak-builtins-remote-ls.c:77 msgid "Download size" @@ -2647,7 +2662,7 @@ msgstr "Pokaži velikost prejemanja" #: app/flatpak-builtins-remote-ls.c:389 msgid " [REMOTE or URI] - Show available runtimes and applications" -msgstr "" +msgstr " [ODDALJENI ali URI] - Pokaži razpoložljive izvajalnike in aplikacije" #: app/flatpak-builtins-remote-modify.c:66 msgid "Enable GPG verification" @@ -2655,11 +2670,11 @@ msgstr "Omogoči preverjanje GPG" #: app/flatpak-builtins-remote-modify.c:67 msgid "Mark the remote as enumerate" -msgstr "" +msgstr "Označite oddaljenega kot štetega" #: app/flatpak-builtins-remote-modify.c:68 msgid "Mark the remote as used for dependencies" -msgstr "" +msgstr "Označite oddaljenega kot uporabljenega za odvisnosti" #: app/flatpak-builtins-remote-modify.c:69 msgid "Set a new url" @@ -2667,15 +2682,15 @@ msgstr "Nastavite nova URL" #: app/flatpak-builtins-remote-modify.c:70 msgid "Set a new subset to use" -msgstr "" +msgstr "Nastavite nov podnabor za uporabo" #: app/flatpak-builtins-remote-modify.c:71 msgid "Enable the remote" -msgstr "" +msgstr "Omogočite oddaljenega" #: app/flatpak-builtins-remote-modify.c:72 msgid "Update extra metadata from the summary file" -msgstr "" +msgstr "Posodobit dodatne metapodatke iz datoteke povzetka" #: app/flatpak-builtins-remote-modify.c:89 msgid "Disable local filter" @@ -2683,34 +2698,34 @@ msgstr "Onemogoči krajevni filter" #: app/flatpak-builtins-remote-modify.c:93 msgid "Authenticator options" -msgstr "" +msgstr "Možnosti preverjalnika pristnosti" #: app/flatpak-builtins-remote-modify.c:96 msgid "Follow the redirect set in the summary file" -msgstr "" +msgstr "Sledi preusmeritvi, določeni v datoteki povzetka" #: app/flatpak-builtins-remote-modify.c:298 msgid "NAME - Modify a remote repository" -msgstr "" +msgstr "IME – Spremenite oddaljeno skladišče" #: app/flatpak-builtins-remote-modify.c:308 msgid "Remote NAME must be specified" -msgstr "" +msgstr "Določiti je treba oddaljeno IME" #: app/flatpak-builtins-remote-modify.c:319 #, c-format msgid "Updating extra metadata from remote summary for %s\n" -msgstr "" +msgstr "Posodabljanje dodatnih metapodatkov iz oddaljenega povzetka za %s\n" #: app/flatpak-builtins-remote-modify.c:322 #, c-format msgid "Error updating extra metadata for '%s': %s\n" -msgstr "" +msgstr "Napaka pri posodabljanju dodatnih metapodatkov za »%s«: %s\n" #: app/flatpak-builtins-remote-modify.c:323 #, c-format msgid "Could not update extra metadata for %s" -msgstr "" +msgstr "Dodatnih metapodatkov za »%s« ni možno posodobiti" #: app/flatpak-builtins-repair.c:43 msgid "Don't make any changes" @@ -2718,7 +2733,7 @@ msgstr "Ne opravi nobene spremembe" #: app/flatpak-builtins-repair.c:44 msgid "Reinstall all refs" -msgstr "" +msgstr "Ponovno namesti vse ref" #: app/flatpak-builtins-repair.c:68 #, c-format @@ -2738,27 +2753,27 @@ msgstr "%s, brisanje predmeta\n" #: app/flatpak-builtins-repair.c:146 #, c-format msgid "Can't load object %s: %s\n" -msgstr "" +msgstr "Ni mogoče naložiti predmeta %s: %s\n" #: app/flatpak-builtins-repair.c:228 #, c-format msgid "Commit invalid %s: %s\n" -msgstr "" +msgstr "Neveljavna objava %s: %s\n" #: app/flatpak-builtins-repair.c:231 #, c-format msgid "Deleting invalid commit %s: %s\n" -msgstr "" +msgstr "Brisanje neveljavne objave %s: %s\n" #: app/flatpak-builtins-repair.c:261 #, c-format msgid "Commit should be marked partial: %s\n" -msgstr "" +msgstr "Objava mora biti označena kot delna: %s\n" #: app/flatpak-builtins-repair.c:264 #, c-format msgid "Marking commit as partial: %s\n" -msgstr "" +msgstr "Označevanje objave kot delne: %s\n" #: app/flatpak-builtins-repair.c:293 #, c-format @@ -2772,17 +2787,17 @@ msgstr "Napaka pri ponovni namestitvi %s: %s\n" #: app/flatpak-builtins-repair.c:327 msgid "- Repair a flatpak installation" -msgstr "" +msgstr "- Popravi namestitev flatpak" #: app/flatpak-builtins-repair.c:406 #, c-format msgid "Removing non-deployed ref %s…\n" -msgstr "" +msgstr "Odstranjevanje neuveljavljenega ref %s ...\n" #: app/flatpak-builtins-repair.c:411 #, c-format msgid "Skipping non-deployed ref %s…\n" -msgstr "" +msgstr "Preskakovanje neuveljavljenega ref %s ...\n" #: app/flatpak-builtins-repair.c:429 #, c-format @@ -2790,74 +2805,68 @@ msgid "[%d/%d] Verifying %s…\n" msgstr "[%d/%d] Preverjanje %s ...\n" #: app/flatpak-builtins-repair.c:435 -#, c-format msgid "Dry run: " -msgstr "" +msgstr "Suh zagon: " #: app/flatpak-builtins-repair.c:440 #, c-format msgid "Deleting ref %s due to missing objects\n" -msgstr "" +msgstr "Brisanje ref %s zaradi manjkajočih predmetov\n" #: app/flatpak-builtins-repair.c:444 #, c-format msgid "Deleting ref %s due to invalid objects\n" -msgstr "" +msgstr "Brisanje res %s zaradi neveljavnih predmetov\n" #: app/flatpak-builtins-repair.c:448 #, c-format msgid "Deleting ref %s due to %d\n" -msgstr "" +msgstr "Brisanje ref %s zaradi %d\n" #: app/flatpak-builtins-repair.c:464 -#, c-format msgid "Checking remotes...\n" -msgstr "" +msgstr "Preverjanje oddaljenih …\n" #: app/flatpak-builtins-repair.c:482 #, c-format msgid "Remote %s for ref %s is missing\n" -msgstr "" +msgstr "Oddaljeni %s za ref %s manjka\n" #: app/flatpak-builtins-repair.c:484 #, c-format msgid "Remote %s for ref %s is disabled\n" -msgstr "" +msgstr "Daljinski %s za ref %s je onemogočen\n" #: app/flatpak-builtins-repair.c:490 -#, c-format msgid "Pruning objects\n" -msgstr "" +msgstr "Obrezovanje predmetov\n" #: app/flatpak-builtins-repair.c:498 -#, c-format msgid "Erasing .removed\n" msgstr "Brisanje .removed\n" #: app/flatpak-builtins-repair.c:523 -#, c-format msgid "Reinstalling refs\n" -msgstr "" +msgstr "Ponovna namestitev ref\n" #: app/flatpak-builtins-repair.c:525 -#, c-format msgid "Reinstalling removed refs\n" -msgstr "" +msgstr "Ponovno nameščanje odstranjenih ref.\n" #: app/flatpak-builtins-repair.c:550 #, c-format msgid "While removing appstream for %s: " -msgstr "" +msgstr "Med odstranjevanjem appstream za %s: " #: app/flatpak-builtins-repair.c:557 #, c-format msgid "While deploying appstream for %s: " -msgstr "" +msgstr "Med uvajanjem appstream za %s: " #: app/flatpak-builtins-repo.c:105 #, c-format msgid "Repo mode: %s\n" -msgstr "" +msgstr "NNačin skladišča: %s\n" #: app/flatpak-builtins-repo.c:112 #, c-format @@ -2875,7 +2884,6 @@ msgid "false" msgstr "ni resnično" #: app/flatpak-builtins-repo.c:120 -#, c-format msgid "Subsummaries: " msgstr "Podpovzetki: " @@ -2932,7 +2940,7 @@ msgstr "URL preusmeritve: %s\n" #: app/flatpak-builtins-repo.c:165 #, c-format msgid "Deploy collection ID: %s\n" -msgstr "" +msgstr "Uvedi ID zbirke: %s\n" #: app/flatpak-builtins-repo.c:168 #, c-format @@ -2947,12 +2955,12 @@ msgstr "Namestitev preverjevalnika: %s\n" #: app/flatpak-builtins-repo.c:179 #, c-format msgid "GPG key hash: %s\n" -msgstr "" +msgstr "Razpršitev ključa GPG: %s\n" #: app/flatpak-builtins-repo.c:183 #, c-format msgid "%zd summary branches\n" -msgstr "" +msgstr "%zd povzetka vej\n" #: app/flatpak-builtins-repo.c:335 msgid "Installed" @@ -2992,11 +3000,11 @@ msgstr "Pokaži objave za podružnico" #: app/flatpak-builtins-repo.c:713 msgid "Print information about the repo subsets" -msgstr "" +msgstr "Natisni informacije o podskupinah skladišč" #: app/flatpak-builtins-repo.c:714 msgid "Limit information to subsets with this prefix" -msgstr "" +msgstr "Omeji informacije na podskupine s to predpono" #: app/flatpak-builtins-repo.c:729 msgid "LOCATION - Repository maintenance" @@ -3016,39 +3024,39 @@ msgstr "Veja za uporabo" #: app/flatpak-builtins-run.c:70 msgid "Use development runtime" -msgstr "" +msgstr "Uporabi razvojni izvajalnik" #: app/flatpak-builtins-run.c:71 msgid "Runtime to use" -msgstr "" +msgstr "Izvajalnik za uporabo" #: app/flatpak-builtins-run.c:72 msgid "Runtime version to use" -msgstr "" +msgstr "Različica izvajalnika, ki jo želite uporabiti" #: app/flatpak-builtins-run.c:75 msgid "Log accessibility bus calls" -msgstr "" +msgstr "Beleži klice vodila za dostopnost" #: app/flatpak-builtins-run.c:76 msgid "Don't proxy accessibility bus calls" -msgstr "" +msgstr "Ne preusmerjaj klicev vodila za dostopnost" #: app/flatpak-builtins-run.c:77 msgid "Proxy accessibility bus calls (default except when sandboxed)" -msgstr "" +msgstr "Posreduj klice vodila za dostopnost (privzeto, razen v peskovniku)" #: app/flatpak-builtins-run.c:78 msgid "Don't proxy session bus calls" -msgstr "" +msgstr "Ne posreduj klicev vodila seje" #: app/flatpak-builtins-run.c:79 msgid "Proxy session bus calls (default except when sandboxed)" -msgstr "" +msgstr "Posredni klici vodila seje (privzeto, razen v peskovniku)" #: app/flatpak-builtins-run.c:80 msgid "Don't start portals" -msgstr "" +msgstr "Ne zaženi portalov" #: app/flatpak-builtins-run.c:81 msgid "Enable file forwarding" @@ -3060,15 +3068,15 @@ msgstr "Zaženi določeno objavo" #: app/flatpak-builtins-run.c:83 msgid "Use specified runtime commit" -msgstr "" +msgstr "Uporabi navedeno objavo izvajalne datoteke" #: app/flatpak-builtins-run.c:84 msgid "Run completely sandboxed" -msgstr "" +msgstr "Zaženi povsem v peskovniku" #: app/flatpak-builtins-run.c:86 msgid "Use PID as parent pid for sharing namespaces" -msgstr "" +msgstr "Uporabi PID kot nadrejeni pid za skupno rabo imenskih prostorov" #: app/flatpak-builtins-run.c:87 msgid "Make processes visible in parent namespace" @@ -3076,44 +3084,44 @@ msgstr "Naredi procese vidne nadrejenemu imenskemu prostoru" #: app/flatpak-builtins-run.c:88 msgid "Share process ID namespace with parent" -msgstr "" +msgstr "Delite imenski prostor ID-ja procesa z nadrejenim" #: app/flatpak-builtins-run.c:89 msgid "Write the instance ID to the given file descriptor" -msgstr "" +msgstr "Zapišite ID primerka v dani opisnik datoteke" #: app/flatpak-builtins-run.c:90 msgid "Use PATH instead of the app's /app" -msgstr "" +msgstr "Uporaba POT namesto /app od aplikacije" #: app/flatpak-builtins-run.c:91 msgid "Use PATH instead of the runtime's /usr" -msgstr "" +msgstr "Uporabite POT namesto /usr izvajalne" #: app/flatpak-builtins-run.c:117 msgid "APP [ARGUMENT…] - Run an app" -msgstr "" +msgstr "APL [ARGUMENT...] - Zaženite aplikacijo" #: app/flatpak-builtins-run.c:268 #, c-format msgid "runtime/%s/%s/%s not installed" -msgstr "" +msgstr "runtime/%s/%s/%s ni nameščen" #: app/flatpak-builtins-search.c:36 msgid "Arch to search for" -msgstr "" +msgstr "Arh za iskanje" #: app/flatpak-builtins-search.c:47 msgid "Remotes" -msgstr "" +msgstr "Oddaljeni" #: app/flatpak-builtins-search.c:47 msgid "Show the remotes" -msgstr "" +msgstr "Pokažite oddaljene" #: app/flatpak-builtins-search.c:242 msgid "TEXT - Search remote apps/runtimes for text" -msgstr "" +msgstr "BESEDILO – Išči besedilo po oddaljenih aplikacijah/izvajalnikih" #: app/flatpak-builtins-search.c:253 msgid "TEXT must be specified" @@ -3125,15 +3133,15 @@ msgstr "Ni zadetkov" #: app/flatpak-builtins-uninstall.c:54 msgid "Arch to uninstall" -msgstr "" +msgstr "Arh, ki jo želite odstraniti" #: app/flatpak-builtins-uninstall.c:55 msgid "Keep ref in local repository" -msgstr "" +msgstr "Ohrani ref v krajevnem skladišču" #: app/flatpak-builtins-uninstall.c:56 msgid "Don't uninstall related refs" -msgstr "" +msgstr "Ne odstrani povezanih ref." #: app/flatpak-builtins-uninstall.c:57 msgid "Remove files even if running" @@ -3149,7 +3157,7 @@ msgstr "Odstrani neuporabljeno" #: app/flatpak-builtins-uninstall.c:62 msgid "Delete app data" -msgstr "" +msgstr "Izbriši podatke aplikacije" #: app/flatpak-builtins-uninstall.c:141 #, c-format @@ -3160,11 +3168,14 @@ msgstr "Ali želite izbrisati podatke za %s?" #, c-format msgid "Info: applications using the extension %s%s%s branch %s%s%s:\n" msgstr "" +"Informacije: aplikacije, ki uporabljajo razširitev %s%s%s veje %s%s%s:\n" #: app/flatpak-builtins-uninstall.c:223 #, c-format msgid "Info: applications using the runtime %s%s%s branch %s%s%s:\n" msgstr "" +"Informacije: Aplikacije, ki uporabljajo izvajalno datoteko %s%s%s veje %s%s" +"%s:\n" #: app/flatpak-builtins-uninstall.c:238 msgid "Really remove?" @@ -3172,19 +3183,19 @@ msgstr "Ali res želite odstraniti?" #: app/flatpak-builtins-uninstall.c:255 msgid "[REF…] - Uninstall applications or runtimes" -msgstr "" +msgstr "[REF...] - Posodabljanje aplikacij ali izvajalnih datotek" #: app/flatpak-builtins-uninstall.c:264 msgid "Must specify at least one REF, --unused, --all or --delete-data" -msgstr "" +msgstr "Določititi morate vsaj en REF, --unused, --all ali --delete-data" #: app/flatpak-builtins-uninstall.c:267 msgid "Must not specify REFs when using --all" -msgstr "" +msgstr "Ni dovoljeno določati REF pri uporabi --all" #: app/flatpak-builtins-uninstall.c:270 msgid "Must not specify REFs when using --unused" -msgstr "" +msgstr "Ni dovoljeno določati REF pri uporabi --unused" #: app/flatpak-builtins-uninstall.c:336 #, c-format @@ -3193,26 +3204,28 @@ msgid "" "These runtimes in installation '%s' are pinned and won't be removed; see " "flatpak-pin(1):\n" msgstr "" +"\n" +"Ti izvajalniki v namestitvi »%s« so pripeti in ne bodo odstranjeni; glejte " +"flatpak-pin(1):\n" #: app/flatpak-builtins-uninstall.c:370 -#, c-format msgid "Nothing unused to uninstall\n" msgstr "Nič neuporabljenega ni za odstranitev\n" #: app/flatpak-builtins-uninstall.c:444 #, c-format msgid "No installed refs found for ‘%s’" -msgstr "" +msgstr "Za »%s« ni bilo najdenih nameščenih ref." #: app/flatpak-builtins-uninstall.c:447 #, c-format msgid " with arch ‘%s’" -msgstr "" +msgstr "z arh. »%s«" #: app/flatpak-builtins-uninstall.c:449 #, c-format msgid " with branch ‘%s’" -msgstr "" +msgstr "z vejo »%s«" #: app/flatpak-builtins-uninstall.c:456 #, c-format @@ -3220,17 +3233,20 @@ msgid "Warning: %s is not installed\n" msgstr "Opozorilo: %s ni nameščen\n" #: app/flatpak-builtins-uninstall.c:490 -#, c-format msgid "None of the specified refs are installed" -msgstr "" +msgstr "Nobena od navedenih ref. ni nameščena" + +#: app/flatpak-builtins-uninstall.c:599 +msgid "No app data to delete\n" +msgstr "Ni podatkov o aplikaciji za brisanje\n" #: app/flatpak-builtins-update.c:56 msgid "Arch to update for" -msgstr "" +msgstr "Arh. za posodobitev" #: app/flatpak-builtins-update.c:57 msgid "Commit to deploy" -msgstr "" +msgstr "Objava za uvajanje" #: app/flatpak-builtins-update.c:58 msgid "Remove old files even if running" @@ -3238,15 +3254,15 @@ msgstr "Odstrani stare datoteke, tudi če se izvajajo" #: app/flatpak-builtins-update.c:59 msgid "Don't pull, only update from local cache" -msgstr "" +msgstr "Ne povleci, samo posodobi z krajevnega predpomnilnika" #: app/flatpak-builtins-update.c:61 msgid "Don't update related refs" -msgstr "" +msgstr "Ne posodabljaj povezanih ref" #: app/flatpak-builtins-update.c:66 msgid "Update appstream for remote" -msgstr "" +msgstr "Posodobi appstream za oddaljeni" #: app/flatpak-builtins-update.c:67 msgid "Only update this subpath" @@ -3254,14 +3270,13 @@ msgstr "Posodobi le to podpot" #: app/flatpak-builtins-update.c:90 msgid "[REF…] - Update applications or runtimes" -msgstr "" +msgstr "[REF...] - Posodobite aplikacije ali izvajalnike" #: app/flatpak-builtins-update.c:121 msgid "With --commit, only one REF may be specified" -msgstr "" +msgstr "S --commit se lahko določi le en REF" #: app/flatpak-builtins-update.c:162 -#, c-format msgid "Looking for updates…\n" msgstr "Iskanje posodobitev ...\n" @@ -3271,14 +3286,13 @@ msgid "Unable to update %s: %s\n" msgstr "Ni mogoče posodobiti %s: %s\n" #: app/flatpak-builtins-update.c:274 -#, c-format msgid "Nothing to do.\n" msgstr "Nič ni za storiti.\n" #: app/flatpak-builtins-utils.c:342 #, c-format msgid "Remote ‘%s’ found in multiple installations:" -msgstr "" +msgstr "Oddaljeni »%s« najden v več namestitvah:" #: app/flatpak-builtins-utils.c:343 app/flatpak-builtins-utils.c:434 #: app/flatpak-builtins-utils.c:526 app/flatpak-builtins-utils.c:528 @@ -3290,6 +3304,7 @@ msgstr "Katero želite uporabiti (0 za prekinitev)?" #, c-format msgid "No remote chosen to resolve ‘%s’ which exists in multiple installations" msgstr "" +"Noben oddaljeni ni izbran za razreševanje %s, ki obstaja v več namestitvah" #: app/flatpak-builtins-utils.c:354 #, c-format @@ -3297,11 +3312,13 @@ msgid "" "Remote \"%s\" not found\n" "Hint: Use flatpak remote-add to add a remote" msgstr "" +"Oddaljeni »%s« ni najden\n" +"Namig: Za dodajanje oddaljenega uporabite flatpak remote-add" #: app/flatpak-builtins-utils.c:360 #, c-format msgid "Remote \"%s\" not found in the %s installation" -msgstr "" +msgstr "Oddaljeni »%s« ni najden v namestitvi %s" #. default to yes on Enter #: app/flatpak-builtins-utils.c:422 @@ -3310,53 +3327,54 @@ msgid "" "Found ref ‘%s’ in remote ‘%s’ (%s).\n" "Use this ref?" msgstr "" +"Najden ref »%s« v oddaljenem »%s« (%s).\n" +"Ali želite uporabiti ta ref?" #: app/flatpak-builtins-utils.c:426 app/flatpak-builtins-utils.c:436 #: app/flatpak-builtins-utils.c:510 app/flatpak-builtins-utils.c:531 #, c-format msgid "No ref chosen to resolve matches for ‘%s’" -msgstr "" +msgstr "Noben ref ni izbran za razrešitev ujemanja za »%s«" #: app/flatpak-builtins-utils.c:432 #, c-format msgid "Similar refs found for ‘%s’ in remote ‘%s’ (%s):" -msgstr "" +msgstr "Podobni ref za »%s« najdeni v oddaljenem »%s« (%s):" #. default to yes on Enter #: app/flatpak-builtins-utils.c:506 #, c-format msgid "Found installed ref ‘%s’ (%s). Is this correct?" -msgstr "" +msgstr "Najden nameščeni ref »%s« (%s). Ali je to pravilno?" #: app/flatpak-builtins-utils.c:522 -#, c-format msgid "All of the above" msgstr "Vse zgoraj navedeno" #: app/flatpak-builtins-utils.c:523 #, c-format msgid "Similar installed refs found for ‘%s’:" -msgstr "" +msgstr "Podobni nameščeni ref najdeni za »%s«:" #: app/flatpak-builtins-utils.c:581 #, c-format msgid "Remotes found with refs similar to ‘%s’:" -msgstr "" +msgstr "Oddaljeni, najdeni z ref, podobnimi »%s«:" #: app/flatpak-builtins-utils.c:584 #, c-format msgid "No remote chosen to resolve matches for ‘%s’" -msgstr "" +msgstr "Za razrešitev ujemanja za »%s« ni izbran noben oddaljeni" #: app/flatpak-builtins-utils.c:680 app/flatpak-builtins-utils.c:683 #, c-format msgid "Updating appstream data for user remote %s" -msgstr "" +msgstr "Posodabljanje podatkov appstream za uporabniški oddaljeni %s" #: app/flatpak-builtins-utils.c:690 app/flatpak-builtins-utils.c:693 #, c-format msgid "Updating appstream data for remote %s" -msgstr "" +msgstr "Posodabljanje podatkov appstream za oddaljeni %s" #: app/flatpak-builtins-utils.c:701 app/flatpak-builtins-utils.c:703 msgid "Error updating" @@ -3409,11 +3427,12 @@ msgstr "Pokaži razpoložljive stolpce" #: app/flatpak-builtins-utils.c:915 msgid "Append :s[tart], :m[iddle], :e[nd] or :f[ull] to change ellipsization" msgstr "" +"Dodatajte :s[tart], :m[iddle], :e[nd] ali :f[ull] za spremembo elipsizacije" #: app/flatpak-cli-transaction.c:96 app/flatpak-cli-transaction.c:102 #, c-format msgid "Required runtime for %s (%s) found in remote %s\n" -msgstr "" +msgstr "Zahtevani izvajalnik za %s (%s) najden v oddaljenem %s\n" #: app/flatpak-cli-transaction.c:104 msgid "Do you want to install it?" @@ -3422,7 +3441,7 @@ msgstr "Ali ga želite namestiti?" #: app/flatpak-cli-transaction.c:110 #, c-format msgid "Required runtime for %s (%s) found in remotes:" -msgstr "" +msgstr "Zahtevani izvajalnik za %s (%s) najden v oddaljenih:" #: app/flatpak-cli-transaction.c:112 msgid "Which do you want to install (0 to abort)?" @@ -3431,7 +3450,7 @@ msgstr "Katero želite namestiti (0 za prekinitev)?" #: app/flatpak-cli-transaction.c:132 #, c-format msgid "Configuring %s as new remote '%s'\n" -msgstr "" +msgstr "Prilagajanje %s kot novega oddaljenega »%s«\n" #. default to yes on Enter #: app/flatpak-cli-transaction.c:139 @@ -3441,6 +3460,9 @@ msgid "" "applications.\n" "Should the remote be kept for future installations?" msgstr "" +"Oddaljeni »%s«, na katerega se sklicuje »%s« na mestu %s vsebuje dodatne " +"aplikacije.\n" +"Ali je treba oddaljenega hraniti za prihodnje namestitve?" #. default to yes on Enter #: app/flatpak-cli-transaction.c:147 @@ -3450,6 +3472,9 @@ msgid "" " %s\n" "Configure this as new remote '%s'" msgstr "" +"Aplikacija %s je odvisna od izvjalnikov od:\n" +" %s\n" +"Prilagodi jo kot novega oddaljenega »%s«" #: app/flatpak-cli-transaction.c:411 msgid "Installing…" @@ -3481,7 +3506,7 @@ msgstr "Odstranjevanje %d/%d ..." #: app/flatpak-cli-transaction.c:493 app/flatpak-quiet-transaction.c:161 #, c-format msgid "Info: %s was skipped" -msgstr "" +msgstr "Informacije: %s je bil preskočen" #: app/flatpak-cli-transaction.c:516 #, c-format @@ -3544,17 +3569,17 @@ msgstr "Posodobitev %s%s%s ni uspela: " #: app/flatpak-cli-transaction.c:581 #, c-format msgid "Failed to install bundle %s%s%s: " -msgstr "" +msgstr "Namestitev svežnja %s%s%s ni uspela: " #: app/flatpak-cli-transaction.c:588 #, c-format msgid "Failed to uninstall %s%s%s: " -msgstr "" +msgstr "Odstranitev %s%s%s ni uspela: " #: app/flatpak-cli-transaction.c:639 #, c-format msgid "Authentication required for remote '%s'\n" -msgstr "" +msgstr "Preverjanje pristnosti je potrebno za oddaljeni »%s«\n" #: app/flatpak-cli-transaction.c:640 msgid "Open browser?" @@ -3563,7 +3588,7 @@ msgstr "Želite odpreti brskalnik?" #: app/flatpak-cli-transaction.c:696 #, c-format msgid "Login required remote %s (realm %s)\n" -msgstr "" +msgstr "Prijava je potrebna za oddaljeni %s (območje %s)\n" #: app/flatpak-cli-transaction.c:701 msgid "Password" @@ -3574,9 +3599,12 @@ msgstr "Geslo" #, c-format msgid "" "\n" -"Info: (pinned) runtime %s%s%s branch %s%s%s is end-of-life, in favor of " -"%s%s%s branch %s%s%s\n" +"Info: (pinned) runtime %s%s%s branch %s%s%s is end-of-life, in favor of %s%s" +"%s branch %s%s%s\n" msgstr "" +"\n" +"Informacije: (pripeti) izvajalnik %s%s%s veje %s%s%s je dosegel konec " +"življenjske dobe, v korist %s%s%s veje %s%s%s\n" #: app/flatpak-cli-transaction.c:762 #, c-format @@ -3585,14 +3613,20 @@ msgid "" "Info: runtime %s%s%s branch %s%s%s is end-of-life, in favor of %s%s%s branch " "%s%s%s\n" msgstr "" +"\n" +"Informacije: izvajalnik %s%s%s veje %s%s%s je dosegel konec življenjske " +"dobe, v korist %s%s%s veje %s%s%s\n" #: app/flatpak-cli-transaction.c:765 #, c-format msgid "" "\n" -"Info: app %s%s%s branch %s%s%s is end-of-life, in favor of %s%s%s branch " -"%s%s%s\n" +"Info: app %s%s%s branch %s%s%s is end-of-life, in favor of %s%s%s branch %s%s" +"%s\n" msgstr "" +"\n" +"Informacije: aplikacija %s%s%s veje %s%s%s je dosegla konec življenjske " +"dobe, v korist %s%s%s veje %s%s%s\n" #. Only runtimes can be pinned #: app/flatpak-cli-transaction.c:777 @@ -3601,6 +3635,9 @@ msgid "" "\n" "Info: (pinned) runtime %s%s%s branch %s%s%s is end-of-life, with reason:\n" msgstr "" +"\n" +"Informacije: (pripeti) izvajalnik %s%s%s veje %s%s%s je dosegel konec " +"življenjske dobe, razlog:\n" #: app/flatpak-cli-transaction.c:783 #, c-format @@ -3608,6 +3645,9 @@ msgid "" "\n" "Info: runtime %s%s%s branch %s%s%s is end-of-life, with reason:\n" msgstr "" +"\n" +"Informacije: izvajalnik %s%s%s veje %s%s%s je dosegel konec življenjske " +"dobe, razlog:\n" #: app/flatpak-cli-transaction.c:786 #, c-format @@ -3615,30 +3655,30 @@ msgid "" "\n" "Info: app %s%s%s branch %s%s%s is end-of-life, with reason:\n" msgstr "" +"\n" +"Informacije: aplikacija %s%s%s veje %s%s%s je dosegla konec življenjske " +"dobe, razlog:\n" #: app/flatpak-cli-transaction.c:960 -#, c-format msgid "Info: applications using this extension:\n" -msgstr "" +msgstr "Informacije: Aplikacije, ki uporabljajo to razširitev:\n" #: app/flatpak-cli-transaction.c:962 -#, c-format msgid "Info: applications using this runtime:\n" -msgstr "" +msgstr "Informacije: Aplikacije, ki uporabljajo ta izvajalni program:\n" #: app/flatpak-cli-transaction.c:981 msgid "Replace?" -msgstr "" +msgstr "Ali želite zamenjati?" #: app/flatpak-cli-transaction.c:984 app/flatpak-quiet-transaction.c:247 -#, c-format msgid "Updating to rebased version\n" -msgstr "" +msgstr "Posodabljanje v preosnovano različico\n" #: app/flatpak-cli-transaction.c:1008 #, c-format msgid "Failed to rebase %s to %s: " -msgstr "" +msgstr "Ni bilo mogoče preosnovati %s na %s: " #: app/flatpak-cli-transaction.c:1274 #, c-format @@ -3657,7 +3697,7 @@ msgstr "Opozorilo: " #. translators: This is short for operation, the title of a one-char column #: app/flatpak-cli-transaction.c:1439 msgid "Op" -msgstr "" +msgstr "Op" #. Avoid resizing the download column too much, #. * by making the title as long as typical content @@ -3668,16 +3708,16 @@ msgstr "delno" #: app/flatpak-cli-transaction.c:1531 msgid "Proceed with these changes to the user installation?" -msgstr "" +msgstr "Ali želite nadaljevati s temi spremembami uporabniške namestitve?" #: app/flatpak-cli-transaction.c:1533 msgid "Proceed with these changes to the system installation?" -msgstr "" +msgstr "Ali želite nadaljevati s temi spremembami sistemske namestitve?" #: app/flatpak-cli-transaction.c:1535 #, c-format msgid "Proceed with these changes to the %s?" -msgstr "" +msgstr "Ali želite nadaljevati s temi spremembami %s?" #: app/flatpak-cli-transaction.c:1707 msgid "Changes complete." @@ -3712,27 +3752,27 @@ msgstr "Namestite aplikacijo ali izvajalnik" #: app/flatpak-main.c:78 msgid "Update an installed application or runtime" -msgstr "" +msgstr "Posodobite nameščeno aplikacijo ali izvajalno datoteko" #: app/flatpak-main.c:81 msgid "Uninstall an installed application or runtime" -msgstr "" +msgstr "Odstranite nameščeno aplikacijo ali izvajalno datoteko" #: app/flatpak-main.c:84 msgid "Mask out updates and automatic installation" -msgstr "" +msgstr "Prikrivaj posodobitve in samodejno nameščanje" #: app/flatpak-main.c:85 msgid "Pin a runtime to prevent automatic removal" -msgstr "" +msgstr "Pripnite izvajalnik, da preprečite samodejno odstranjevanje" #: app/flatpak-main.c:86 msgid "List installed apps and/or runtimes" -msgstr "" +msgstr "Izpiši seznam nameščenih aplikacij in/ali izvajalnikov" #: app/flatpak-main.c:87 msgid "Show info for installed app or runtime" -msgstr "" +msgstr "Pokaži informacije za nameščeno aplikacijo ali izvajalnik" #: app/flatpak-main.c:88 msgid "Show history" @@ -3748,7 +3788,7 @@ msgstr "Popravi namestitev flatpak" #: app/flatpak-main.c:91 msgid "Put applications or runtimes onto removable media" -msgstr "" +msgstr "Postavi aplikacije ali izvajalnik na izmenljive medije" #. translators: please keep the leading newline and space #: app/flatpak-main.c:94 @@ -3756,10 +3796,12 @@ msgid "" "\n" " Find applications and runtimes" msgstr "" +"\n" +"Poiščite aplikacije in izvajalnike" #: app/flatpak-main.c:95 msgid "Search for remote apps/runtimes" -msgstr "" +msgstr "Iskanje oddaljenih aplikacij/izvajalnikov" #. translators: please keep the leading newline and space #: app/flatpak-main.c:98 @@ -3767,14 +3809,16 @@ msgid "" "\n" " Manage running applications" msgstr "" +"\n" +"Upravljaj aplikacije v izvajanju" #: app/flatpak-main.c:99 msgid "Run an application" -msgstr "" +msgstr "Zaženite aplikacijo" #: app/flatpak-main.c:100 msgid "Override permissions for an application" -msgstr "" +msgstr "Preglasi dovoljenja za program" #: app/flatpak-main.c:101 msgid "Specify default version to run" @@ -3782,11 +3826,11 @@ msgstr "Navedite privzeto različico, ki jo želite zagnati" #: app/flatpak-main.c:102 msgid "Enter the namespace of a running application" -msgstr "" +msgstr "Vnesite imenski prostor za program v izvajanju" #: app/flatpak-main.c:103 msgid "Enumerate running applications" -msgstr "" +msgstr "Oštevilči izvajajoče se aplikacije" #: app/flatpak-main.c:104 msgid "Stop a running application" @@ -3807,11 +3851,11 @@ msgstr "Seznam izvoženih datotek" #: app/flatpak-main.c:109 msgid "Grant an application access to a specific file" -msgstr "" +msgstr "Odobrite dostop aplikaciji do določene datoteke" #: app/flatpak-main.c:110 msgid "Revoke access to a specific file" -msgstr "" +msgstr "Prekliči dostop do določene datoteke" #: app/flatpak-main.c:111 msgid "Show information about a specific file" @@ -3828,11 +3872,11 @@ msgstr "" #: app/flatpak-main.c:116 msgid "List permissions" -msgstr "" +msgstr "Izpiši dovoljenja" #: app/flatpak-main.c:117 msgid "Remove item from permission store" -msgstr "" +msgstr "Odstrani element iz shrambe dovoljenj" #: app/flatpak-main.c:119 msgid "Set permissions" @@ -3840,11 +3884,11 @@ msgstr "Nastavi dovoljenja" #: app/flatpak-main.c:120 msgid "Show app permissions" -msgstr "" +msgstr "Pokaži dovoljenja za aplikacijo" #: app/flatpak-main.c:121 msgid "Reset app permissions" -msgstr "" +msgstr "Ponastavi dovoljenja za aplikacije" #. translators: please keep the leading newline and space #: app/flatpak-main.c:124 @@ -3852,10 +3896,12 @@ msgid "" "\n" " Manage remote repositories" msgstr "" +"\n" +" Upravljaj oddaljena skladišča" #: app/flatpak-main.c:125 msgid "List all configured remotes" -msgstr "" +msgstr "Izpiši seznam vseh nastavljenih oddaljenih" #: app/flatpak-main.c:126 msgid "Add a new remote repository (by URL)" @@ -3863,19 +3909,19 @@ msgstr "Dodajte novo oddaljeno skladišče (po URL-ju)" #: app/flatpak-main.c:127 msgid "Modify properties of a configured remote" -msgstr "" +msgstr "Spremenite lastnosti prilagojenega oddaljenega" #: app/flatpak-main.c:128 msgid "Delete a configured remote" -msgstr "" +msgstr "Izbrišite nastavljeni oddaljeni" #: app/flatpak-main.c:130 msgid "List contents of a configured remote" -msgstr "" +msgstr "Izpišite seznam nastavljenega oddaljenega" #: app/flatpak-main.c:131 msgid "Show information about a remote app or runtime" -msgstr "" +msgstr "Pokaži informacije o aplikaciji ali izvajalniku oddaljenega" #. translators: please keep the leading newline and space #: app/flatpak-main.c:134 @@ -3883,42 +3929,44 @@ msgid "" "\n" " Build applications" msgstr "" +"\n" +"Gradi aplikacije" #: app/flatpak-main.c:135 msgid "Initialize a directory for building" -msgstr "" +msgstr "Inicializiraj mapo za gradnjo" #: app/flatpak-main.c:136 msgid "Run a build command inside the build dir" -msgstr "" +msgstr "Zaženite ukaz za gradnjo znotraj mape za gradnjo" #: app/flatpak-main.c:137 msgid "Finish a build dir for export" -msgstr "" +msgstr "Dokončajte mapo gradnje za izvoz" #: app/flatpak-main.c:138 msgid "Export a build dir to a repository" -msgstr "" +msgstr "Izvozite mapo gradnje v skladišče" #: app/flatpak-main.c:139 msgid "Create a bundle file from a ref in a local repository" -msgstr "" +msgstr "Ustvarjanje datoteke svežnja iz sklica ref v krajevnem skladišču" #: app/flatpak-main.c:140 msgid "Import a bundle file" -msgstr "" +msgstr "Uvozite datoteko svežnja" #: app/flatpak-main.c:141 msgid "Sign an application or runtime" -msgstr "" +msgstr "Podpišite program ali izvajalno datoteko" #: app/flatpak-main.c:142 msgid "Update the summary file in a repository" -msgstr "" +msgstr "Posodobite datoteko povzetka v skladišču" #: app/flatpak-main.c:143 msgid "Create new commit based on existing ref" -msgstr "" +msgstr "Ustvarite novo objavo na podlagi obstoječe ref" #: app/flatpak-main.c:144 msgid "Show information about a repo" @@ -3926,11 +3974,11 @@ msgstr "Pokaži podatke o skladišču" #: app/flatpak-main.c:161 msgid "Show debug information, -vv for more detail" -msgstr "" +msgstr "Pokaži informacije za odpravljanje napak, -vv za več podrobnosti" #: app/flatpak-main.c:162 msgid "Show OSTree debug information" -msgstr "" +msgstr "Pokaži informacije za odpravljanje napak OSTree" #: app/flatpak-main.c:168 msgid "Print version information and exit" @@ -3938,39 +3986,39 @@ msgstr "Izpiši podatke o različici in končaj" #: app/flatpak-main.c:169 msgid "Print default arch and exit" -msgstr "" +msgstr "Izpiši privzeto arh in končaj" #: app/flatpak-main.c:170 msgid "Print supported arches and exit" -msgstr "" +msgstr "Izpiši podprte arh in končaj" #: app/flatpak-main.c:171 msgid "Print active gl drivers and exit" -msgstr "" +msgstr "Izpiši aktivne gonilnike GL in končaj" #: app/flatpak-main.c:172 msgid "Print paths for system installations and exit" -msgstr "" +msgstr "Izpiši poti za sistemske namestitve in končaj" #: app/flatpak-main.c:173 msgid "Print the updated environment needed to run flatpaks" -msgstr "" +msgstr "Izpiši posodobljeno okolje, potrebno za zagon flatpaks" #: app/flatpak-main.c:174 msgid "Only include the system installation with --print-updated-env" -msgstr "" +msgstr "Vključi samo sistemsko namestitev s --print-updated-env" #: app/flatpak-main.c:179 msgid "Work on the user installation" -msgstr "" +msgstr "Delo na uporabniški namestitvi" #: app/flatpak-main.c:180 msgid "Work on the system-wide installation (default)" -msgstr "" +msgstr "Delo na vse-sistemski namestitvi (privzeto)" #: app/flatpak-main.c:181 msgid "Work on a non-default system-wide installation" -msgstr "" +msgstr "Delo na ne privzeti vse-sistemski namestitvi" #: app/flatpak-main.c:211 msgid "Builtin Commands:" @@ -3983,6 +4031,9 @@ msgid "" "XDG_DATA_DIRS environment variable, so applications installed by Flatpak may " "not appear on your desktop until the session is restarted." msgstr "" +"Upoštevajte, da mape %s niso v poti iskanja, ki jo določa spremenljivka " +"okolja XDG_DATA_DIRS, zato se aplikacije, ki jih namesti Flatpak, morda ne " +"bodo pojavile na namizju, dokler se seja ne bo znova zagnala." #: app/flatpak-main.c:311 #, c-format @@ -3991,17 +4042,23 @@ msgid "" "XDG_DATA_DIRS environment variable, so applications installed by Flatpak may " "not appear on your desktop until the session is restarted." msgstr "" +"Upoštevajte, da mapa %s ni v poti iskanja, ki jo določa spremenljivka okolja " +"XDG_DATA_DIRS, zato se aplikacije, ki jih namesti Flatpak, morda ne bodo " +"pojavile na namizju, dokler se seja ne bo znova zagnala." #: app/flatpak-main.c:380 msgid "" "Refusing to operate under sudo with --user. Omit sudo to operate on the user " "installation, or use a root shell to operate on the root user's installation." msgstr "" +"Zavračanje delovanja pod sudo z --user. Izpustite sudo za delovanje na " +"uporabniški namestitvi ali uporabite korensko lupino za delovanje na " +"namestitvi korenskega uporabnika." #: app/flatpak-main.c:452 msgid "" "Multiple installations specified for a command that works on one installation" -msgstr "" +msgstr "Več namestitev, določenih za ukaz, ki deluje na eni namestitvi" #: app/flatpak-main.c:503 app/flatpak-main.c:690 #, c-format @@ -4044,42 +4101,42 @@ msgstr "Odstranjevanje %s\n" #: app/flatpak-quiet-transaction.c:107 #, c-format msgid "Warning: Failed to install %s: %s\n" -msgstr "" +msgstr "Opozorilo: Namestitev %s ni uspela: %s\n" #: app/flatpak-quiet-transaction.c:110 #, c-format msgid "Error: Failed to install %s: %s\n" -msgstr "" +msgstr "Napaka: namestitev %s ni uspela: %s\n" #: app/flatpak-quiet-transaction.c:116 #, c-format msgid "Warning: Failed to update %s: %s\n" -msgstr "" +msgstr "Opozorilo: Ni mogoče posodobiti %s: %s\n" #: app/flatpak-quiet-transaction.c:119 #, c-format msgid "Error: Failed to update %s: %s\n" -msgstr "" +msgstr "Napaka: Neuspešna posodobitev %s: %s\n" #: app/flatpak-quiet-transaction.c:125 #, c-format msgid "Warning: Failed to install bundle %s: %s\n" -msgstr "" +msgstr "Opozorilo: Ni bilo mogoče namestiti svežnja %s: %s\n" #: app/flatpak-quiet-transaction.c:128 #, c-format msgid "Error: Failed to install bundle %s: %s\n" -msgstr "" +msgstr "Napaka: Namestitev svežnja %s ni uspela: %s\n" #: app/flatpak-quiet-transaction.c:134 #, c-format msgid "Warning: Failed to uninstall %s: %s\n" -msgstr "" +msgstr "Opozorilo: Odstranitev %s ni uspela: %s\n" #: app/flatpak-quiet-transaction.c:137 #, c-format msgid "Error: Failed to uninstall %s: %s\n" -msgstr "" +msgstr "Napaka: Odstranitev %s ni uspela: %s\n" #: app/flatpak-quiet-transaction.c:166 common/flatpak-dir.c:10535 #, c-format @@ -4098,7 +4155,7 @@ msgstr "%s ni nameščen" #: app/flatpak-quiet-transaction.c:170 #, c-format msgid "%s needs a later flatpak version" -msgstr "" +msgstr "%s potrebuje novejšo različico flatpak" #: app/flatpak-quiet-transaction.c:172 msgid "Not enough disk space to complete this operation" @@ -4107,63 +4164,63 @@ msgstr "Za dokončanje te operacije ni dovolj prostora na disku" #: app/flatpak-quiet-transaction.c:239 #, c-format msgid "Info: %s is end-of-life, in favor of %s\n" -msgstr "" +msgstr "Informacije: %s je dosegla konec življenjske dobe, v korist %s\n" #: app/flatpak-quiet-transaction.c:241 #, c-format msgid "Info: %s is end-of-life, with reason: %s\n" -msgstr "" +msgstr "Informacije: %s je dosegla konec življenjske dobe, z razlogom: %s\n" #: app/flatpak-quiet-transaction.c:251 #, c-format msgid "Failed to rebase %s to %s: %s\n" -msgstr "" +msgstr "Ni bilo mogoče preosnovati %s na %s: %s\n" #: common/flatpak-auth.c:58 #, c-format msgid "No authenticator configured for remote `%s`" -msgstr "" +msgstr "Ni avtentikatorja, nastavljenega za oddaljeni »%s«" #: common/flatpak-context.c:206 #, c-format msgid "Unknown share type %s, valid types are: %s" -msgstr "" +msgstr "Neznana vrsta skupne rabe %s, veljavne vrste so: %s" #: common/flatpak-context.c:241 #, c-format msgid "Unknown policy type %s, valid types are: %s" -msgstr "" +msgstr "Neznana vrsta pravil %s, veljavne vrste so: %s" #: common/flatpak-context.c:279 #, c-format msgid "Invalid dbus name %s" -msgstr "" +msgstr "Neveljavno ime dbus-a %s" #: common/flatpak-context.c:292 #, c-format msgid "Unknown socket type %s, valid types are: %s" -msgstr "" +msgstr "Neznana vrsta vtičnice %s, veljavne vrste so: %s" #: common/flatpak-context.c:321 #, c-format msgid "Unknown device type %s, valid types are: %s" -msgstr "" +msgstr "Neznana vrsta naprave %s, veljavne vrste so: %s" #: common/flatpak-context.c:349 #, c-format msgid "Unknown feature type %s, valid types are: %s" -msgstr "" +msgstr "Neznana vrsta funkcije %s, veljavne vrste so: %s" #: common/flatpak-context.c:964 #, c-format msgid "Filesystem location \"%s\" contains \"..\"" -msgstr "" +msgstr "Mesto datotečnega sistema »%s« vsebuje »..«" #: common/flatpak-context.c:1002 -#, c-format msgid "" "--filesystem=/ is not available, use --filesystem=host for a similar result" msgstr "" +"--filesystem=/ ni na voljo, uporabite --filesystem=host za podoben rezultat" #: common/flatpak-context.c:1036 #, c-format @@ -4171,11 +4228,13 @@ msgid "" "Unknown filesystem location %s, valid locations are: host, host-os, host-" "etc, home, xdg-*[/…], ~/dir, /dir" msgstr "" +"Neznano mesto datotečnega sistema %s, veljavna mesta so: host, host-os, host-" +"etc, home, xdg-*[/…], ~/dir, /dir" #: common/flatpak-context.c:1324 #, c-format msgid "Invalid env format %s" -msgstr "" +msgstr "Neveljavna oblika env %s" #: common/flatpak-context.c:1412 #, c-format @@ -4183,28 +4242,25 @@ msgid "Environment variable name must not contain '=': %s" msgstr "Ime spremenljivke okolja ne sme vsebovati »=«: %s" #: common/flatpak-context.c:1540 common/flatpak-context.c:1548 -#, c-format msgid "--add-policy arguments must be in the form SUBSYSTEM.KEY=VALUE" -msgstr "" +msgstr "Argumenti --add-policy morajo biti v obliki PODSISTEM.KLJUČ=VREDNOST" #: common/flatpak-context.c:1555 -#, c-format msgid "--add-policy values can't start with \"!\"" -msgstr "" +msgstr "Vrednosti --add-policy se ne morejo začeti z »!«" #: common/flatpak-context.c:1580 common/flatpak-context.c:1588 -#, c-format msgid "--remove-policy arguments must be in the form SUBSYSTEM.KEY=VALUE" msgstr "" +"Argumenti --remove-policy morajo biti v obliki PODSISTEM.KLJUČ=VREDNOST" #: common/flatpak-context.c:1595 -#, c-format msgid "--remove-policy values can't start with \"!\"" -msgstr "" +msgstr "Vrednosti --remove-policy se ne morejo začeti z »!«" #: common/flatpak-context.c:1670 msgid "Share with host" -msgstr "" +msgstr "Skupna raba z gostiteljem" #: common/flatpak-context.c:1670 common/flatpak-context.c:1671 msgid "SHARE" @@ -4212,11 +4268,11 @@ msgstr "DELI" #: common/flatpak-context.c:1671 msgid "Unshare with host" -msgstr "" +msgstr "Preklic skupne rabe z gostiteljem" #: common/flatpak-context.c:1672 msgid "Expose socket to app" -msgstr "" +msgstr "Razkrij vtičnico aplikaciji" #: common/flatpak-context.c:1672 common/flatpak-context.c:1673 msgid "SOCKET" @@ -4224,11 +4280,11 @@ msgstr "VTIČNICA" #: common/flatpak-context.c:1673 msgid "Don't expose socket to app" -msgstr "" +msgstr "Ne razkrij vtičnice aplikaciji" #: common/flatpak-context.c:1674 msgid "Expose device to app" -msgstr "" +msgstr "Razkrij napravo aplikaciji" #: common/flatpak-context.c:1674 common/flatpak-context.c:1675 msgid "DEVICE" @@ -4236,7 +4292,7 @@ msgstr "NAPRAVA" #: common/flatpak-context.c:1675 msgid "Don't expose device to app" -msgstr "" +msgstr "Naprave ne razkrij aplikaciji" #: common/flatpak-context.c:1676 msgid "Allow feature" @@ -4252,7 +4308,7 @@ msgstr "Ne dovoli funkcije" #: common/flatpak-context.c:1678 msgid "Expose filesystem to app (:ro for read-only)" -msgstr "" +msgstr "Razrkij datotečni sistem aplikaciji (:ro samo za branje)" #: common/flatpak-context.c:1678 msgid "FILESYSTEM[:ro]" @@ -4260,7 +4316,7 @@ msgstr "DATOTEČNISISTEM[:RO]" #: common/flatpak-context.c:1679 msgid "Don't expose filesystem to app" -msgstr "" +msgstr "Ne razkrij datotečnega sistema aplikaciji" #: common/flatpak-context.c:1679 msgid "FILESYSTEM" @@ -4303,47 +4359,47 @@ msgstr "DBUS_IME" #: common/flatpak-context.c:1684 msgid "Allow app to talk to name on the session bus" -msgstr "" +msgstr "Dovoli aplikaciji, da govori z imenom na vodilu seje" #: common/flatpak-context.c:1685 msgid "Don't allow app to talk to name on the session bus" -msgstr "" +msgstr "Ne dovoli aplikaciji, da govori z imenom na vodilu seje" #: common/flatpak-context.c:1686 msgid "Allow app to own name on the system bus" -msgstr "" +msgstr "Dovoli aplikaciji, da ima lastno ime v sistemskem vodilu" #: common/flatpak-context.c:1687 msgid "Allow app to talk to name on the system bus" -msgstr "" +msgstr "Dovoli aplikaciji, da govori z imenom na sistemskem vodilu" #: common/flatpak-context.c:1688 msgid "Don't allow app to talk to name on the system bus" -msgstr "" +msgstr "Ne dovoli aplikaciji, da govori z imenom na sistemskem vodilu" #: common/flatpak-context.c:1689 msgid "Allow app to own name on the a11y bus" -msgstr "" +msgstr "Dovoli aplikaciji, da ima lastno ime na sistemskem vodilu" #: common/flatpak-context.c:1690 msgid "Add generic policy option" -msgstr "" +msgstr "Dodaja možnostisplošnega pravilnika" #: common/flatpak-context.c:1690 common/flatpak-context.c:1691 msgid "SUBSYSTEM.KEY=VALUE" -msgstr "" +msgstr "PODSISTEM.KLJUČ=VREDNOST" #: common/flatpak-context.c:1691 msgid "Remove generic policy option" -msgstr "" +msgstr "Odstrani možnost splošnega pravilnika" #: common/flatpak-context.c:1692 msgid "Add USB device to enumerables" -msgstr "" +msgstr "Dodaj napravo USB med oštevičene" #: common/flatpak-context.c:1692 common/flatpak-context.c:1693 msgid "VENDOR_ID:PRODUCT_ID" -msgstr "" +msgstr "ID_PROIZVAJALCA:ID_IZDELKA" #: common/flatpak-context.c:1693 msgid "Add USB device to hidden list" @@ -4351,15 +4407,15 @@ msgstr "Dodaj napravo USB na skriti seznam" #: common/flatpak-context.c:1694 msgid "A list of USB devices that are enumerable" -msgstr "" +msgstr "Seznam naprav USB, ki jih je mogoče našteti" #: common/flatpak-context.c:1694 msgid "LIST" -msgstr "" +msgstr "SEZNAM" #: common/flatpak-context.c:1695 msgid "File containing a list of USB devices to make enumerable" -msgstr "" +msgstr "Datoteka, ki vsebuje seznam naprav USB, ki jih je mogoče našteti" #: common/flatpak-context.c:1695 common/flatpak-context.c:1696 msgid "FILENAME" @@ -4367,12 +4423,12 @@ msgstr "IMEDATOTEKE" #: common/flatpak-context.c:1696 msgid "Persist home directory subpath" -msgstr "" +msgstr "Vztrajaj pri podpoti domačega mape" #. This is not needed/used anymore, so hidden, but we accept it for backwards compat #: common/flatpak-context.c:1698 msgid "Don't require a running session (no cgroups creation)" -msgstr "" +msgstr "Ni potrebno izvajati seje (brez ustvarjanja cgroups)" #: common/flatpak-context.c:2817 #, c-format @@ -4382,7 +4438,7 @@ msgstr "Brez zamenjave »%s« s tmpfs: %s" #: common/flatpak-context.c:2825 #, c-format msgid "Not sharing \"%s\" with sandbox: %s" -msgstr "" +msgstr "Ni skupne rabe »%s« s peskovnikom: %s" #. Even if the error is one that we would normally silence, like #. * the path not existing, it seems reasonable to make more of a fuss @@ -4396,52 +4452,52 @@ msgstr "Dostop do domače mape ni dovoljen: %s" #: common/flatpak-context.c:3150 #, c-format msgid "Unable to provide a temporary home directory in the sandbox: %s" -msgstr "" +msgstr "Ni mogoče zagotoviti začasne domače mape v peskovniku: %s" #: common/flatpak-dir.c:425 #, c-format msgid "Configured collection ID ‘%s’ not in summary file" -msgstr "" +msgstr "Prilagojeni ID zbirke »%s« ni v datoteki povzetka" #: common/flatpak-dir.c:563 #, c-format msgid "Unable to load summary from remote %s: %s" -msgstr "" +msgstr "Ni mogoče naložiti povzetka iz oddaljenega %s: %s" #: common/flatpak-dir.c:712 common/flatpak-dir.c:784 #, c-format msgid "No such ref '%s' in remote %s" -msgstr "" +msgstr "Ni takšnega ref »%s« v oddaljenem %s" #: common/flatpak-dir.c:769 common/flatpak-dir.c:906 common/flatpak-dir.c:935 #: common/flatpak-dir.c:947 #, c-format msgid "No entry for %s in remote %s summary flatpak cache" -msgstr "" +msgstr "Ni vnosa za %s v oddaljenem %s predpomnilniku povzetka flatpak " #: common/flatpak-dir.c:924 #, c-format msgid "No summary or Flatpak cache available for remote %s" -msgstr "" +msgstr "Za oddaljeni %s ni na voljo povzetka ali predpomnilnika Flatpak" #: common/flatpak-dir.c:952 #, c-format msgid "Missing xa.data in summary for remote %s" -msgstr "" +msgstr "Manjkajo xa.data v povzetku za oddaljeni %s" #: common/flatpak-dir.c:958 common/flatpak-dir.c:1375 #, c-format msgid "Unsupported summary version %d for remote %s" -msgstr "" +msgstr "Nepodprta različica povzetka %d za oddaljeni %s" #: common/flatpak-dir.c:1045 msgid "Remote OCI index has no registry uri" -msgstr "" +msgstr "OddaljenI indeks OCI nima uri registra" #: common/flatpak-dir.c:1114 #, c-format msgid "Couldn't find ref %s in remote %s" -msgstr "" +msgstr "Ni možno najti ref %s v oddaljenem %s" #: common/flatpak-dir.c:1131 common/flatpak-dir.c:6044 #: common/flatpak-oci-registry.c:3493 common/flatpak-oci-registry.c:3498 @@ -4451,28 +4507,29 @@ msgstr "Slika ni manifest" #: common/flatpak-dir.c:1152 common/flatpak-dir.c:1225 #, c-format msgid "Commit has no requested ref ‘%s’ in ref binding metadata" -msgstr "" +msgstr "Objava nima zahtevanega ref »%s« v navezanih metapodatkih" #: common/flatpak-dir.c:1256 #, c-format msgid "Configured collection ID ‘%s’ not in binding metadata" -msgstr "" +msgstr "Prilagojeni ID zbirke »%s« ni v navezanih metapodatkih" #: common/flatpak-dir.c:1292 common/flatpak-dir.c:5032 #: common/flatpak-dir.c:5953 common/flatpak-dir.c:6021 #, c-format msgid "Couldn't find latest checksum for ref %s in remote %s" -msgstr "" +msgstr "Najnovejše kontrolne vsote za ref %s v oddaljenem %s ni možno najti" #: common/flatpak-dir.c:1345 common/flatpak-dir.c:1381 #, c-format msgid "No entry for %s in remote %s summary flatpak sparse cache" msgstr "" +"Ni vnosa za %s v oddaljenem %s s povzetki flatpak redkega predpomnilnika" #: common/flatpak-dir.c:1970 #, c-format msgid "Commit metadata for %s not matching expected metadata" -msgstr "" +msgstr "Metapodatki objave za %s se ne ujemajo s pričakovanimi metapodatki" #: common/flatpak-dir.c:2235 msgid "Unable to connect to system bus" @@ -4490,17 +4547,17 @@ msgstr "Namestitev sistema (%s)" #: common/flatpak-dir.c:2883 #, c-format msgid "No overrides found for %s" -msgstr "" +msgstr "Ni preglasitev za %s" #: common/flatpak-dir.c:3036 #, c-format msgid "%s (commit %s) not installed" -msgstr "" +msgstr "%s (objava %s) - ni nameščeno" #: common/flatpak-dir.c:4059 #, c-format msgid "Error parsing system flatpakrepo file for %s: %s" -msgstr "" +msgstr "Napaka pri razčlenjevanju sistemske datoteke flatpakrepo za %s: %s" #: common/flatpak-dir.c:4134 #, c-format @@ -4510,45 +4567,48 @@ msgstr "Med odpiranjem skladišča %s: " #: common/flatpak-dir.c:4395 #, c-format msgid "The config key %s is not set" -msgstr "" +msgstr "Prilagoditveni ključ %s ni nastavljen" #: common/flatpak-dir.c:4528 #, c-format msgid "No current %s pattern matching %s" -msgstr "" +msgstr "Ni trenutnega vzorca %s, ki se ujema s/z %s" #: common/flatpak-dir.c:4810 msgid "No appstream commit to deploy" -msgstr "" +msgstr "Ni objave appstream za uvajanje" #: common/flatpak-dir.c:5328 common/flatpak-dir.c:6378 #: common/flatpak-dir.c:9971 common/flatpak-dir.c:10677 msgid "Can't pull from untrusted non-gpg verified remote" msgstr "" +"Ni mogoče potegniti iz zaupanja ne vrednega ne-GPG preverjenega oddaljenega" #: common/flatpak-dir.c:5740 common/flatpak-dir.c:5777 msgid "Extra data not supported for non-gpg-verified local system installs" msgstr "" +"Dodatni podatki niso podprti za ne-GPG-preverjene krajevne sistemske " +"namestitve" #: common/flatpak-dir.c:5806 #, c-format msgid "Invalid checksum for extra data uri %s" -msgstr "" +msgstr "Neveljavna kontrolna vsota za uri dodatnih podatkov %s" #: common/flatpak-dir.c:5811 #, c-format msgid "Empty name for extra data uri %s" -msgstr "" +msgstr "Prazno ime za uri dodatnih podatkov %s" #: common/flatpak-dir.c:5818 #, c-format msgid "Unsupported extra data uri %s" -msgstr "" +msgstr "Nepodprti uri dodatnih podatkov %s" #: common/flatpak-dir.c:5832 #, c-format msgid "Failed to load local extra-data %s: %s" -msgstr "" +msgstr "Nalaganje krajevnih dodatnih podatkov (extra-data) %s ni uspelo: %s" #: common/flatpak-dir.c:5835 #, c-format @@ -4574,30 +4634,31 @@ msgstr "Neveljavna kontrolna vsota za dodatne podatke %s" #: common/flatpak-dir.c:10555 #, c-format msgid "%s commit %s already installed" -msgstr "" +msgstr "%s (objava %s) - že nameščeno" #: common/flatpak-dir.c:6208 common/flatpak-dir.c:6461 #, c-format msgid "While pulling %s from remote %s: " -msgstr "" +msgstr "Med potegom %s iz oddaljenega %s: " #: common/flatpak-dir.c:6402 common/flatpak-repo-utils.c:3906 msgid "GPG signatures found, but none are in trusted keyring" msgstr "" +"Podpisi GPG najdeni, vendar nobeden ni v zaupanja vredni zbirki ključev" #: common/flatpak-dir.c:6419 #, c-format msgid "Commit for ‘%s’ has no ref binding" -msgstr "" +msgstr "Objava za »%s« nima zavezujočega ref" #: common/flatpak-dir.c:6424 #, c-format msgid "Commit for ‘%s’ is not in expected bound refs: %s" -msgstr "" +msgstr "Objava »%s« nima pričakovanih vezanih ref: %s" #: common/flatpak-dir.c:6600 msgid "Only applications can be made current" -msgstr "" +msgstr "Samo aplikacije se lahko naredijo kot osvežene" #: common/flatpak-dir.c:7304 msgid "Not enough memory" @@ -4618,7 +4679,7 @@ msgstr "Neveljavna datoteka mimetype XML" #: common/flatpak-dir.c:7604 #, c-format msgid "D-Bus service file '%s' has wrong name" -msgstr "" +msgstr "Servisna datoteka vodika D-Bus »%s« ima napačno ime" #: common/flatpak-dir.c:7759 #, c-format @@ -4632,7 +4693,7 @@ msgstr "Med pridobivanjem ločenih metapodatkov: " #: common/flatpak-dir.c:8231 common/flatpak-dir.c:8236 #: common/flatpak-dir.c:8240 msgid "Extra data missing in detached metadata" -msgstr "" +msgstr "Dodatni podatki, ki manjkajo v odklopljenih metapodatkih" #: common/flatpak-dir.c:8244 msgid "While creating extradir: " @@ -4654,28 +4715,27 @@ msgstr "Med pisanjem dodatne podatkovne datoteke »%s«: " #: common/flatpak-dir.c:8315 #, c-format msgid "Extra data %s missing in detached metadata" -msgstr "" +msgstr "Dodatni podatki %s manjkajo v odklopljenih metapodatkih" #: common/flatpak-dir.c:8413 -#, fuzzy, c-format msgid "Unable to get runtime key from metadata" -msgstr "Uporabi alternativno datoteko za metapodatke" +msgstr "Iz metapodatkov ni mogoče pridobiti ključa izvajalnika" #: common/flatpak-dir.c:8526 #, c-format msgid "apply_extra script failed, exit status %d" -msgstr "" +msgstr "Skript apply_extra je spodletel, stanje izhoda %d" #. Translators: The placeholder is for an app ref. #: common/flatpak-dir.c:8693 #, c-format msgid "Installing %s is not allowed by the policy set by your administrator" -msgstr "" +msgstr "Namestitve %s ne dovolijo pravila, ki jih je določil skrbnik" #: common/flatpak-dir.c:8792 #, c-format msgid "While trying to resolve ref %s: " -msgstr "" +msgstr "Med poskusom razreševanja ref %s: " #: common/flatpak-dir.c:8804 #, c-format @@ -4684,7 +4744,7 @@ msgstr "%s ni na voljo" #: common/flatpak-dir.c:8823 msgid "Can't create deploy directory" -msgstr "" +msgstr "Ni mogoče ustvariti mape uvajanja" #: common/flatpak-dir.c:8831 #, c-format @@ -4694,49 +4754,49 @@ msgstr "Branje objave %s je spodletelo: " #: common/flatpak-dir.c:8852 #, c-format msgid "While trying to checkout %s into %s: " -msgstr "" +msgstr "Med poskusom prevzema %s v %s: " #: common/flatpak-dir.c:8871 msgid "While trying to checkout metadata subpath: " -msgstr "" +msgstr "Med poskusom prevzema podpoti metapodatkov: " #: common/flatpak-dir.c:8903 #, c-format msgid "While trying to checkout subpath ‘%s’: " -msgstr "" +msgstr "Med poskusom prevzema podpoti »%s«: " #: common/flatpak-dir.c:8913 msgid "While trying to remove existing extra dir: " -msgstr "" +msgstr "Med poskusom odstranjevanja obstoječe dodatne mape: " #: common/flatpak-dir.c:8924 msgid "While trying to apply extra data: " -msgstr "" +msgstr "Med poskusom uveljavitve dodatnih podatkov: " #: common/flatpak-dir.c:8951 #, c-format msgid "Invalid commit ref %s: " -msgstr "" +msgstr "Neveljavna objava ref %s: " #: common/flatpak-dir.c:8959 common/flatpak-dir.c:8971 #, c-format msgid "Deployed ref %s does not match commit (%s)" -msgstr "" +msgstr "Uvedeni ref %s se ne ujema z objavo (%s)" #: common/flatpak-dir.c:8965 #, c-format msgid "Deployed ref %s branch does not match commit (%s)" -msgstr "" +msgstr "Veja uvedenega ref %s se ne ujema z objavo (%s)" #: common/flatpak-dir.c:9226 common/flatpak-installation.c:1912 #, c-format msgid "%s branch %s already installed" -msgstr "" +msgstr "%s veje %s - že nameščeno" #: common/flatpak-dir.c:10075 #, c-format msgid "Could not unmount revokefs-fuse filesystem at %s: " -msgstr "" +msgstr "Ni bilo mogoče odklopiti datotečnega sistema revokefs-fuse na %s: " #: common/flatpak-dir.c:10362 #, c-format @@ -4744,33 +4804,32 @@ msgid "This version of %s is already installed" msgstr "Ta različica %s je že nameščena" #: common/flatpak-dir.c:10369 -#, c-format msgid "Can't change remote during bundle install" -msgstr "" +msgstr "Med namestitvijo svežnja ni mogoče spreminjati oddaljenega" #: common/flatpak-dir.c:10630 msgid "Can't update to a specific commit without root permissions" -msgstr "" +msgstr "Brez korenskih dovoljenj ni mogoče posodobiti na določeno objavo" #: common/flatpak-dir.c:10910 #, c-format msgid "Can't remove %s, it is needed for: %s" -msgstr "" +msgstr "Ni mogoče odstraniti %s, potrebna je za: %s" #: common/flatpak-dir.c:10966 common/flatpak-installation.c:2068 #, c-format msgid "%s branch %s is not installed" -msgstr "" +msgstr "Veja %s %s ni nameščena" #: common/flatpak-dir.c:11219 #, c-format msgid "%s commit %s not installed" -msgstr "" +msgstr "%s objava %s ni nameščen" #: common/flatpak-dir.c:11555 #, c-format msgid "Pruning repo failed: %s" -msgstr "" +msgstr "Obrezovanje skladišča ni uspelo: %s" #: common/flatpak-dir.c:11723 common/flatpak-dir.c:11729 #, c-format @@ -4799,7 +4858,7 @@ msgstr "Ni predpomnjenega povzetka za oddaljeni strežnik »%s«." #: common/flatpak-dir.c:12302 #, c-format msgid "Invalid checksum for indexed summary %s read from %s" -msgstr "" +msgstr "Neveljavna kontrolna vsota za indeksirani povzetek %s, prebran iz %s" #: common/flatpak-dir.c:12375 #, c-format @@ -4814,11 +4873,12 @@ msgstr "" #, c-format msgid "Invalid checksum for indexed summary %s for remote '%s'" msgstr "" +"Neveljavna kontrolna vsota za indeksirani povzetek %s za oddaljeni »%s«" #: common/flatpak-dir.c:13375 #, c-format msgid "Multiple branches available for %s, you must specify one of: " -msgstr "" +msgstr "Več vej je na voljo za %s, navesti morate eno izmed: " #: common/flatpak-dir.c:13441 #, c-format @@ -4833,12 +4893,12 @@ msgstr "Ni mogoče najti ref %s%s%s%s%s" #: common/flatpak-dir.c:13592 #, c-format msgid "Error searching remote %s: %s" -msgstr "" +msgstr "Napaka pri iskanju po oddaljenem %s: %s" #: common/flatpak-dir.c:13689 #, c-format msgid "Error searching local repository: %s" -msgstr "" +msgstr "Napaka pri iskanju po krajevnem skladišču: %s" #: common/flatpak-dir.c:13826 #, c-format @@ -4853,71 +4913,70 @@ msgstr "Ni mogoče najti namestitve %s" #: common/flatpak-dir.c:14574 #, c-format msgid "Invalid file format, no %s group" -msgstr "" +msgstr "Neveljavna vrsta datoteke, ni skupine %s" #: common/flatpak-dir.c:14579 common/flatpak-repo-utils.c:2861 #, c-format msgid "Invalid version %s, only 1 supported" -msgstr "" +msgstr "Neveljavna različica %s, podprta je samo 1" #: common/flatpak-dir.c:14584 common/flatpak-dir.c:14589 #, c-format msgid "Invalid file format, no %s specified" -msgstr "" +msgstr "Neveljavna vrsta datoteke, %s ni določena" #. Check some minimal size so we don't get crap #: common/flatpak-dir.c:14609 msgid "Invalid file format, gpg key invalid" -msgstr "" +msgstr "Neveljavna oblika zapisa, ključ GPG ni veljaven" #: common/flatpak-dir.c:14637 common/flatpak-repo-utils.c:2934 msgid "Collection ID requires GPG key to be provided" -msgstr "" +msgstr "ID zbirke zahteva, da se zagotovi ključ GPG" #: common/flatpak-dir.c:14680 #, c-format msgid "Runtime %s, branch %s is already installed" -msgstr "" +msgstr "Izvajalnik %s, veja %s je že nameščen" #: common/flatpak-dir.c:14681 #, c-format msgid "App %s, branch %s is already installed" -msgstr "" +msgstr "Aplikacija %s, veja %s je že nameščena" #: common/flatpak-dir.c:14914 #, c-format msgid "Can't remove remote '%s' with installed ref %s (at least)" -msgstr "" +msgstr "Oddaljenega »%s« ni mogoče odstraniti z nameščenim ref. %s (vsaj)" #: common/flatpak-dir.c:15013 #, c-format msgid "Invalid character '/' in remote name: %s" -msgstr "" +msgstr "Neveljaven znak »/» v imenu oddaljenega: %s" #: common/flatpak-dir.c:15019 #, c-format msgid "No configuration for remote %s specified" -msgstr "" +msgstr "Prilagoditev za oddaljeni %s ni navedena" #: common/flatpak-dir.c:16516 #, c-format msgid "Skipping deletion of mirror ref (%s, %s)…\n" -msgstr "" +msgstr "Preskakovanje brisanja zrcalne ref (%s, %s) ...\n" #: common/flatpak-exports.c:916 -#, c-format msgid "An absolute path is required" msgstr "Potrebna je absolutna pot" #: common/flatpak-exports.c:933 #, c-format msgid "Unable to open path \"%s\": %s" -msgstr "" +msgstr "Ni mogoče odpreti poti »%s«: %s" #: common/flatpak-exports.c:940 #, c-format msgid "Unable to get file type of \"%s\": %s" -msgstr "" +msgstr "Vrste datoteke »%s« ni mogoče pridobiti: %s" #: common/flatpak-exports.c:949 #, c-format @@ -4932,7 +4991,7 @@ msgstr "Ni mogoče pridobiti informacij datotečnega sistema za »%s«: %s" #: common/flatpak-exports.c:965 #, c-format msgid "Ignoring blocking autofs path \"%s\"" -msgstr "" +msgstr "Prezrtje blokiranja poti autofs »%s«" #: common/flatpak-exports.c:981 common/flatpak-exports.c:994 #: common/flatpak-exports.c:1007 @@ -4943,7 +5002,7 @@ msgstr "Pot »%s« je rezervirana za Flatpak" #: common/flatpak-exports.c:1061 #, c-format msgid "Unable to resolve symbolic link \"%s\": %s" -msgstr "" +msgstr "Ni mogoče razrešiti simbolne povezave »%s«: %s" #: common/flatpak-glib-backports.c:69 msgid "Empty string is not a number" @@ -4962,22 +5021,22 @@ msgstr "Število »%s« je izven območja [%s, %s]" #: common/flatpak-installation.c:835 #, c-format msgid "Ref %s not installed" -msgstr "" +msgstr "Ref %s ni nameščen" #: common/flatpak-installation.c:876 #, c-format msgid "App %s not installed" -msgstr "" +msgstr "Program %s ni nameščen" #: common/flatpak-installation.c:1396 #, c-format msgid "Remote '%s' already exists" -msgstr "" +msgstr "Oddaljeni »%s« že obstaja" #: common/flatpak-installation.c:1947 #, c-format msgid "As requested, %s was only pulled, but not installed" -msgstr "" +msgstr "Kot je bilo zahtevano, %s je samo potegnjen, vendar ni nameščen" #: common/flatpak-instance.c:533 common/flatpak-instance.c:687 #: common/flatpak-instance.c:728 @@ -4988,34 +5047,34 @@ msgstr "Ni mogoče ustvariti mape %s" #: common/flatpak-instance.c:554 #, c-format msgid "Unable to lock %s" -msgstr "" +msgstr "Ni mogoče zakleniti %s" #: common/flatpak-instance.c:627 #, c-format msgid "Unable to create temporary directory in %s" -msgstr "" +msgstr "Ni mogoče ustvariti začasne mape v %s" #: common/flatpak-instance.c:639 #, c-format msgid "Unable to create file %s" -msgstr "" +msgstr "Ni mogoče ustvariti datoteke %s" #: common/flatpak-instance.c:646 #, c-format msgid "Unable to update symbolic link %s/%s" -msgstr "" +msgstr "Ni mogoče posodobiti simbolične povezave %s/%s" #: common/flatpak-oci-registry.c:1021 msgid "Only Bearer authentication supported" -msgstr "" +msgstr "Podprto samo preverjanje pristnosti prinosnika" #: common/flatpak-oci-registry.c:1030 msgid "Only realm in authentication request" -msgstr "" +msgstr "Samo območje v zahtevi za preverjanje pristnosti" #: common/flatpak-oci-registry.c:1037 msgid "Invalid realm in authentication request" -msgstr "" +msgstr "Neveljavno območje v zahtevi za preverjanje pristnosti" #: common/flatpak-oci-registry.c:1107 #, c-format @@ -5024,32 +5083,32 @@ msgstr "Overitev ni uspela: %s" #: common/flatpak-oci-registry.c:1109 msgid "Authorization failed" -msgstr "" +msgstr "Overitev ni uspela" #: common/flatpak-oci-registry.c:1113 #, c-format msgid "Unexpected response status %d when requesting token: %s" -msgstr "" +msgstr "Pri zahtevanju žetona nepričakovano stanje odziva %d: %s" #: common/flatpak-oci-registry.c:1124 msgid "Invalid authentication request response" -msgstr "" +msgstr "Neveljaven odgovor na zahtevo za preverjanje pristnosti" #: common/flatpak-oci-registry.c:1721 common/flatpak-oci-registry.c:1774 #: common/flatpak-oci-registry.c:1803 common/flatpak-oci-registry.c:1858 #: common/flatpak-oci-registry.c:1914 common/flatpak-oci-registry.c:1992 msgid "Invalid delta file format" -msgstr "" +msgstr "Neveljavna oblika datoteke delta" #: common/flatpak-oci-registry.c:2496 #, c-format msgid "No gpg key found with ID %s (homedir: %s)" -msgstr "" +msgstr "Ni najdenega ključa GPG z ID %s (domača mapa: %s)" #: common/flatpak-oci-registry.c:2503 #, c-format msgid "Unable to lookup key ID %s: %d" -msgstr "" +msgstr "Iskanje ID ključa %s z ni mogoče: %d" #: common/flatpak-oci-registry.c:2511 #, c-format @@ -5058,27 +5117,27 @@ msgstr "Napaka pri podpisovanju objave: %d" #: common/flatpak-oci-registry.c:3512 common/flatpak-oci-registry.c:3671 msgid "Invalid OCI image config" -msgstr "" +msgstr "Neveljavna prilagoditev slike OCI" #: common/flatpak-oci-registry.c:3574 common/flatpak-oci-registry.c:3820 #, c-format msgid "Wrong layer checksum, expected %s, was %s" -msgstr "" +msgstr "Napačna kontrolna vsota plasti, pričakovana %s, bila je %s" #: common/flatpak-oci-registry.c:3654 #, c-format msgid "No ref specified for OCI image %s" -msgstr "" +msgstr "Za sliko OCI %s ni določen noben ref" #: common/flatpak-oci-registry.c:3660 #, c-format msgid "Wrong ref (%s) specified for OCI image %s, expected %s" -msgstr "" +msgstr "Napačni ref (%s) je določen za sliko OCI %s, pričakovano %s" #: common/flatpak-progress.c:236 #, c-format msgid "Downloading metadata: %u/(estimating) %s" -msgstr "" +msgstr "Prenos metapodatkov: %u/(ocenjeno) %s" #: common/flatpak-progress.c:260 #, c-format @@ -5118,7 +5177,7 @@ msgstr "Ime se ne more končati s piko" #: common/flatpak-ref-utils.c:171 common/flatpak-ref-utils.c:183 msgid "Only last name segment can contain -" -msgstr "" +msgstr "Samo segment priimka lahko vsebuje -" #: common/flatpak-ref-utils.c:174 #, c-format @@ -5136,34 +5195,34 @@ msgstr "Imena morajo vsebovati vsaj dve vejici" #: common/flatpak-ref-utils.c:312 msgid "Arch can't be empty" -msgstr "" +msgstr "Arch ne more biti prazen" #: common/flatpak-ref-utils.c:323 #, c-format msgid "Arch can't contain %c" -msgstr "" +msgstr "Arch ne more vsebovati %c" #: common/flatpak-ref-utils.c:385 msgid "Branch can't be empty" -msgstr "" +msgstr "Veja ne more biti prazna" #: common/flatpak-ref-utils.c:395 #, c-format msgid "Branch can't start with %c" -msgstr "" +msgstr "Podružnica se ne more začeti z %c" #: common/flatpak-ref-utils.c:405 #, c-format msgid "Branch can't contain %c" -msgstr "" +msgstr "Veja ne more vsebovati %c" #: common/flatpak-ref-utils.c:615 common/flatpak-ref-utils.c:865 msgid "Ref too long" -msgstr "" +msgstr "Predolg ref" #: common/flatpak-ref-utils.c:627 msgid "Invalid remote name" -msgstr "" +msgstr "Neveljavno oddaljeno ime" #: common/flatpak-ref-utils.c:641 #, c-format @@ -5205,7 +5264,7 @@ msgstr "Neveljavna veja: %s: %s" #: common/flatpak-ref-utils.c:978 #, c-format msgid "Wrong number of components in partial ref %s" -msgstr "" +msgstr "Napačno število komponent v delni %s" #: common/flatpak-ref-utils.c:1298 msgid " development platform" @@ -5217,7 +5276,7 @@ msgstr " platforma" #: common/flatpak-ref-utils.c:1302 msgid " application base" -msgstr "" +msgstr " osnova aplikacije" #: common/flatpak-ref-utils.c:1305 msgid " debug symbols" @@ -5233,7 +5292,7 @@ msgstr "prevodi" #: common/flatpak-ref-utils.c:1311 msgid " docs" -msgstr "" +msgstr "dokumentacija" #: common/flatpak-ref-utils.c:1578 #, c-format @@ -5251,22 +5310,21 @@ msgstr "URL ni naveden" #: common/flatpak-remote.c:1266 msgid "GPG verification must be enabled when a collection ID is set" -msgstr "" +msgstr "Preverjanje GPG mora biti omogočeno, ko je nastavljen ID zbirke" #: common/flatpak-repo-utils.c:344 -#, c-format msgid "No extra data sources" -msgstr "" +msgstr "Ni dodatnih virov podatkov" #: common/flatpak-repo-utils.c:2842 #, c-format msgid "Invalid %s: Missing group ‘%s’" -msgstr "" +msgstr "Neveljaven %s: manjka skupina »%s«" #: common/flatpak-repo-utils.c:2851 #, c-format msgid "Invalid %s: Missing key ‘%s’" -msgstr "" +msgstr "Neveljaven %s: manjka ključ »%s«" #: common/flatpak-repo-utils.c:2901 msgid "Invalid gpg key" @@ -5285,151 +5343,161 @@ msgstr "Napaka pri kopiranju ikone 128x128 za komponento %s: %s\n" #: common/flatpak-repo-utils.c:3382 #, c-format msgid "%s is end-of-life, ignoring for appstream" -msgstr "" +msgstr "%s je dosegla konec življenjske dobe, prezrta bo za appstream" #: common/flatpak-repo-utils.c:3417 #, c-format msgid "No appstream data for %s: %s\n" -msgstr "" +msgstr "Za %s ni podatkov appstream: %s\n" #: common/flatpak-repo-utils.c:3764 msgid "Invalid bundle, no ref in metadata" -msgstr "" +msgstr "Neveljaven sveženj, v metapodatki ni sklica ref" #: common/flatpak-repo-utils.c:3866 #, c-format msgid "Collection ‘%s’ of bundle doesn’t match collection ‘%s’ of remote" -msgstr "" +msgstr "Zbirka »%s« svežnja se ne ujema z zbirko »%s« oddaljenega" #: common/flatpak-repo-utils.c:3943 msgid "Metadata in header and app are inconsistent" -msgstr "" +msgstr "Metapodatki v glavi in aplikaciji so nedosledni" -#: common/flatpak-run.c:855 +#: common/flatpak-run.c:865 msgid "No systemd user session available, cgroups not available" -msgstr "" +msgstr "Uporabniška seja systemd ni na voljo, cgroups ni na voljo" -#: common/flatpak-run.c:1395 +#: common/flatpak-run.c:1405 msgid "Unable to allocate instance id" -msgstr "" +msgstr "ID-ja primerka ni mogoče dodeliti" -#: common/flatpak-run.c:1531 common/flatpak-run.c:1541 +#: common/flatpak-run.c:1541 common/flatpak-run.c:1551 #, c-format msgid "Failed to open flatpak-info file: %s" -msgstr "" +msgstr "Odpiranje datoteke flatpak-info ni uspelo: %s" -#: common/flatpak-run.c:1570 +#: common/flatpak-run.c:1580 #, c-format msgid "Failed to open bwrapinfo.json file: %s" -msgstr "" +msgstr "Odpiranje datoteke bwrapinfo.json ni uspelo: %s" -#: common/flatpak-run.c:1595 +#: common/flatpak-run.c:1605 #, c-format msgid "Failed to write to instance id fd: %s" -msgstr "" +msgstr "Pisanje v ID primerka fd ni uspelo: %s" -#: common/flatpak-run.c:1990 +#: common/flatpak-run.c:2000 msgid "Initialize seccomp failed" -msgstr "" +msgstr "Inicializacija seccomp ni uspela" -#: common/flatpak-run.c:2029 +#: common/flatpak-run.c:2039 #, c-format msgid "Failed to add architecture to seccomp filter: %s" -msgstr "" +msgstr "Dodajanje arhitekture v filter seccomp ni uspelo: %s" -#: common/flatpak-run.c:2037 +#: common/flatpak-run.c:2047 #, c-format msgid "Failed to add multiarch architecture to seccomp filter: %s" -msgstr "" +msgstr "Dodajanje arhitekture multiarch v filter seccomp ni uspelo: %s" -#: common/flatpak-run.c:2069 common/flatpak-run.c:2086 -#: common/flatpak-run.c:2108 +#: common/flatpak-run.c:2079 common/flatpak-run.c:2096 +#: common/flatpak-run.c:2118 #, c-format msgid "Failed to block syscall %d: %s" -msgstr "" +msgstr "Blokiranje syscall %d je spodletelo: %s" -#: common/flatpak-run.c:2141 +#: common/flatpak-run.c:2151 #, c-format msgid "Failed to export bpf: %s" -msgstr "" +msgstr "Izvoz BPF ni uspel: %s" -#: common/flatpak-run.c:2440 +#: common/flatpak-run.c:2453 #, c-format msgid "Failed to open ‘%s’" +msgstr "Datoteke »%s« ni mogoče odpreti" + +#: common/flatpak-run.c:2463 +#, c-format +msgid "" +"Directory forwarding needs version 4 of the document portal (have version %d)" msgstr "" +"Posredovanje mape potrebuje različico 4 portala za dokumente (imate " +"različico %d)" -#: common/flatpak-run.c:2727 +#: common/flatpak-run.c:2781 #, c-format msgid "ldconfig failed, exit status %d" -msgstr "" +msgstr "ldconfig ni uspel, stanje izhoda %d" -#: common/flatpak-run.c:2734 +#: common/flatpak-run.c:2788 msgid "Can't open generated ld.so.cache" -msgstr "" +msgstr "Ni mogoče odpreti ustvarjenega ld.so.cache" #. Translators: The placeholder is for an app ref. -#: common/flatpak-run.c:2857 +#: common/flatpak-run.c:2911 #, c-format msgid "Running %s is not allowed by the policy set by your administrator" -msgstr "" +msgstr "Zagon %s ni dovoljen s pravili, ki jih je določil skrbnik" -#: common/flatpak-run.c:2964 +#: common/flatpak-run.c:3018 msgid "" -"\"flatpak run\" is not intended to be run as `sudo flatpak run`. Use `sudo " -"-i` or `su -l` instead and invoke \"flatpak run\" from inside the new shell." +"\"flatpak run\" is not intended to be run as `sudo flatpak run`. Use `sudo -" +"i` or `su -l` instead and invoke \"flatpak run\" from inside the new shell." msgstr "" +"»flatpak run« ni namenjen izvajanju kot `sudo flatpak run`. Namesto tega " +"uporabite `sudo -i` ali `su -l` in iz nove lupine kličite »flatpak run«." -#: common/flatpak-run.c:3154 +#: common/flatpak-run.c:3208 #, c-format msgid "Failed to migrate from %s: %s" msgstr "Selitev iz %s ni uspela: %s" -#: common/flatpak-run.c:3175 +#: common/flatpak-run.c:3229 #, c-format msgid "Failed to migrate old app data directory %s to new name %s: %s" -msgstr "" +msgstr "Selitev podatkovne mape stare aplikacije %s v novo ime %s: %s" -#: common/flatpak-run.c:3184 +#: common/flatpak-run.c:3238 #, c-format msgid "Failed to create symlink while migrating %s: %s" -msgstr "" +msgstr "Med migracijo %s ni uspelo ustvariti simbolne povezave: %s" #: common/flatpak-run-dbus.c:46 msgid "Failed to open app info file" -msgstr "" +msgstr "Odpiranje datoteke z informacijami o aplikaciji ni uspelo" #: common/flatpak-run-dbus.c:149 msgid "Unable to create sync pipe" -msgstr "" +msgstr "Ni mogoče ustvariti sinhronizacijske cevi" #: common/flatpak-run-dbus.c:185 msgid "Failed to sync with dbus proxy" -msgstr "" +msgstr "Sinhronizacija s posrednikom za dbus ni uspela" #: common/flatpak-transaction.c:2210 #, c-format msgid "Warning: Problem looking for related refs: %s" -msgstr "" +msgstr "Opozorilo: Težava pri iskanju sorodnih ref: %s" #: common/flatpak-transaction.c:2428 #, c-format msgid "The application %s requires the runtime %s which was not found" -msgstr "" +msgstr "Aplikacija %s zahteva izvajalnik %s, ki ni bil najden" #: common/flatpak-transaction.c:2444 #, c-format msgid "The application %s requires the runtime %s which is not installed" -msgstr "" +msgstr "Aplikacija %s zahteva izvajalnik %s, ki ni nameščen" #: common/flatpak-transaction.c:2576 #, c-format msgid "Can't uninstall %s which is needed by %s" -msgstr "" +msgstr "Ni mogoče odstraniti %s, ki ga potrebuje %s" #: common/flatpak-transaction.c:2673 #, c-format msgid "Remote %s disabled, ignoring %s update" -msgstr "" +msgstr "Oddaljeni %s onemogočen, prezrta posodobitev %s" #: common/flatpak-transaction.c:2706 #, c-format @@ -5439,7 +5507,7 @@ msgstr "%s je že nameščen" #: common/flatpak-transaction.c:2709 #, c-format msgid "%s is already installed from remote %s" -msgstr "" +msgstr "%s je že nameščen iz oddaljenega %s" #: common/flatpak-transaction.c:3020 #, c-format @@ -5457,11 +5525,13 @@ msgid "" "Warning: Treating remote fetch error as non-fatal since %s is already " "installed: %s" msgstr "" +"Opozorilo: Obravnavanje napake pri oddaljenem pridobivanju kot ne usodne, " +"kajti %s je že nameščen: %s" #: common/flatpak-transaction.c:3950 #, c-format msgid "No authenticator installed for remote '%s'" -msgstr "" +msgstr "Za oddaljeni »%s« ni nameščen avtentikator" #: common/flatpak-transaction.c:4054 common/flatpak-transaction.c:4061 #, c-format @@ -5475,21 +5545,21 @@ msgstr "Ni mogoče dobiti žetonov za ref" #: common/flatpak-transaction.c:4321 #, c-format msgid "Ref %s from %s matches more than one transaction operation" -msgstr "" +msgstr "Sklic %s iz %s se ujema z več kot eno transakcijsko operacijo" #: common/flatpak-transaction.c:4322 common/flatpak-transaction.c:4332 msgid "any remote" -msgstr "" +msgstr "poljubni oddaljeni" #: common/flatpak-transaction.c:4331 #, c-format msgid "No transaction operation found for ref %s from %s" -msgstr "" +msgstr "Za ref %s iz %s ni bila najdena nobena operacija transakcije" #: common/flatpak-transaction.c:4454 #, c-format msgid "Flatpakrepo URL %s not file, HTTP or HTTPS" -msgstr "" +msgstr "URL flatpakrepo %s ni datoteka, HTTP ali HTTPS" #: common/flatpak-transaction.c:4460 #, c-format @@ -5503,13 +5573,15 @@ msgstr "Neveljaven .flatpakrepo: %s" #: common/flatpak-transaction.c:5121 msgid "Transaction already executed" -msgstr "" +msgstr "Transakcija je že izvršena" #: common/flatpak-transaction.c:5136 msgid "" "Refusing to operate on a user installation as root! This can lead to " "incorrect file ownership and permission errors." msgstr "" +"Zavračanje delovanja na uporabniški namestitvi kot korenski uporabnik! To " +"lahko povzroči nepravilno lastništvo datotek in napake pri pravicah." #: common/flatpak-transaction.c:5228 common/flatpak-transaction.c:5241 msgid "Aborted by user" @@ -5528,77 +5600,75 @@ msgstr "Prekinitev zaradi neuspeha (%s)" #: common/flatpak-uri.c:118 #, no-c-format msgid "Invalid %-encoding in URI" -msgstr "" +msgstr "Neveljavni nabor znakov % v naslovu URI" #: common/flatpak-uri.c:135 msgid "Illegal character in URI" -msgstr "" +msgstr "Neveljaven znak v naslovu URI" #: common/flatpak-uri.c:169 msgid "Non-UTF-8 characters in URI" -msgstr "" +msgstr "V naslovu URI so znaki, ki niso UTF-8" #: common/flatpak-uri.c:275 #, c-format msgid "Invalid IPv6 address ‘%.*s’ in URI" -msgstr "" +msgstr "Neveljaven naslov IPv6 »%.*s« v naslovu URI" #: common/flatpak-uri.c:330 #, c-format msgid "Illegal encoded IP address ‘%.*s’ in URI" -msgstr "" +msgstr "Neveljaven kodiran naslov IP »%.*s« v naslovu URI" #: common/flatpak-uri.c:342 #, c-format msgid "Illegal internationalized hostname ‘%.*s’ in URI" -msgstr "" +msgstr "Neveljavno internacionalizirano ime gostitelja »%.*s« v naslovu URI" #: common/flatpak-uri.c:374 common/flatpak-uri.c:386 #, c-format msgid "Could not parse port ‘%.*s’ in URI" -msgstr "" +msgstr "Ni mogoče razčleniti vrat »%.*s« v naslovu URI" #: common/flatpak-uri.c:393 #, c-format msgid "Port ‘%.*s’ in URI is out of range" -msgstr "" +msgstr "Vrednost vrat »%.*s« v naslovu URI je izven obsega" #: common/flatpak-uri.c:910 msgid "URI is not absolute, and no base URI was provided" -msgstr "" +msgstr "Naslov URI ni absoluten naslov in ni podanega osnovnega naslova URI" #: common/flatpak-usb.c:83 -#, c-format msgid "USB device query 'all' must not have data" -msgstr "" +msgstr "Poizvedba naprave USB »all« ne sme vsebovati podatkov" #: common/flatpak-usb.c:102 -#, c-format msgid "USB query rule 'cls' must be in the form CLASS:SUBCLASS or CLASS:*" msgstr "" +"Pravilo poizvedbe USB »cls« mora biti v obliki RAZRED:PODRAZRED ali RAZRED:*" #: common/flatpak-usb.c:111 -#, c-format msgid "Invalid USB class" -msgstr "" +msgstr "Neveljaven razred USB" #: common/flatpak-usb.c:125 -#, c-format msgid "Invalid USB subclass" msgstr "Neveljaven podrazred USB" #: common/flatpak-usb.c:141 common/flatpak-usb.c:148 -#, c-format msgid "USB query rule 'dev' must have a valid 4-digit hexadecimal product id" msgstr "" +"Pravilo poizvedbe USB »dev« mora imeti veljaven 4-mestni šestnajstiški ID " +"izdelka" #: common/flatpak-usb.c:164 common/flatpak-usb.c:171 -#, c-format msgid "USB query rule 'vnd' must have a valid 4-digit hexadecimal vendor id" msgstr "" +"Pravilo poizvedbe USB »vnd« mora imeti veljavni 4-mestni šestnajstiški ID " +"proizvajalca" #: common/flatpak-usb.c:205 -#, c-format msgid "USB device queries must be in the form TYPE:DATA" msgstr "Poizvedbe za naprave USB morajo biti v obliki VRSTA:PODATKI" @@ -5608,51 +5678,47 @@ msgid "Unknown USB query rule %s" msgstr "Neznano pravilo poizvedbe USB %s" #: common/flatpak-usb.c:248 -#, c-format msgid "Empty USB query" msgstr "Prazna poizvedba USB" #: common/flatpak-usb.c:274 -#, c-format msgid "Multiple USB query rules of the same type is not supported" msgstr "Več pravil poizvedbe USB iste vrste ni podprtih" #: common/flatpak-usb.c:283 -#, c-format msgid "'all' must not contain extra query rules" msgstr "»all« ne sme vsebovati dodatnih pravil za poizvedbo" #: common/flatpak-usb.c:291 -#, c-format msgid "USB queries with 'dev' must also specify vendors" msgstr "Poizvedbe USB z »dev« morajo navesti tudi proizvajalca" #: common/flatpak-utils.c:668 msgid "Glob can't match apps" -msgstr "" +msgstr "Glob se ne more ujemati z aplikacijami" #: common/flatpak-utils.c:693 msgid "Empty glob" -msgstr "" +msgstr "Prazen glob" #: common/flatpak-utils.c:712 msgid "Too many segments in glob" -msgstr "" +msgstr "Preveč segmentov v glob-u" #: common/flatpak-utils.c:733 #, c-format msgid "Invalid glob character '%c'" -msgstr "" +msgstr "Neveljaven znak glob »%c«" #: common/flatpak-utils.c:787 #, c-format msgid "Missing glob on line %d" -msgstr "" +msgstr "Manjka glob v vrstici %d" #: common/flatpak-utils.c:791 #, c-format msgid "Trailing text on line %d" -msgstr "" +msgstr "Sledilno besedilo v vrstici %d" #: common/flatpak-utils.c:795 #, c-format @@ -5667,29 +5733,28 @@ msgstr "Nepričakovana beseda »%s« v vrstici %d" #: common/flatpak-utils.c:1980 #, c-format msgid "Invalid require-flatpak argument %s" -msgstr "" +msgstr "Neveljaven argument require-flatpak %s" #: common/flatpak-utils.c:1990 common/flatpak-utils.c:2009 #, c-format msgid "%s needs a later flatpak version (%s)" -msgstr "" +msgstr "%s potrebuje novejšo različico Flatpak (%s)" #: oci-authenticator/flatpak-oci-authenticator.c:291 msgid "Not a oci remote, missing summary.xa.oci-repository" -msgstr "" +msgstr "Ni oddaljeni OCI, manjka summary.xa.oci-repository" #: oci-authenticator/flatpak-oci-authenticator.c:477 msgid "Not a OCI remote" -msgstr "" +msgstr "Ni oddaljeni OCI" #: oci-authenticator/flatpak-oci-authenticator.c:488 msgid "Invalid token" msgstr "Neveljaven žeton" #: portal/flatpak-portal.c:2337 -#, c-format msgid "No portal support found" -msgstr "" +msgstr "Podpore za portale ni moč najti" #: portal/flatpak-portal.c:2343 msgid "Deny" @@ -5706,26 +5771,24 @@ msgstr "Želite posodobiti %s?" #: portal/flatpak-portal.c:2362 msgid "The application wants to update itself." -msgstr "" +msgstr "Aplikacija se želi posodobiti." #: portal/flatpak-portal.c:2363 msgid "Update access can be changed any time from the privacy settings." msgstr "" +"Dostop do posodobitev lahko kadarkoli spremenite iz nastavitev zasebnosti." #: portal/flatpak-portal.c:2388 -#, c-format msgid "Application update not allowed" -msgstr "" +msgstr "Posodobitev aplikacije ni dovoljena" #: portal/flatpak-portal.c:2546 -#, c-format msgid "Self update not supported, new version requires new permissions" -msgstr "" +msgstr "Samoposodobitev ni podprta, nova različica zahteva nova dovoljenja" #: portal/flatpak-portal.c:2728 portal/flatpak-portal.c:2745 -#, c-format msgid "Update ended unexpectedly" -msgstr "" +msgstr "Posodobitev se je nepričakovano končala" #. SECURITY: #. - Normal users need admin authentication to install software @@ -5734,12 +5797,12 @@ msgstr "" #. in the wheel group to install without authenticating. #: system-helper/org.freedesktop.Flatpak.policy.in:23 msgid "Install signed application" -msgstr "" +msgstr "Namesti podpisano aplikacijo" #: system-helper/org.freedesktop.Flatpak.policy.in:24 #: system-helper/org.freedesktop.Flatpak.policy.in:42 msgid "Authentication is required to install software" -msgstr "" +msgstr "Preverjanje pristnosti je potrebno za namestitev programske opreme" #. SECURITY: #. - Normal users need admin authentication to install software @@ -5748,7 +5811,7 @@ msgstr "" #. in the wheel group to install without authenticating. #: system-helper/org.freedesktop.Flatpak.policy.in:41 msgid "Install signed runtime" -msgstr "" +msgstr "Namestit podpisani izvajalnik" #. SECURITY: #. - Normal users do not require admin authentication to update an @@ -5758,7 +5821,7 @@ msgstr "" #. updates. #: system-helper/org.freedesktop.Flatpak.policy.in:60 msgid "Update signed application" -msgstr "" +msgstr "Posodobi podpisano aplikacijo" #: system-helper/org.freedesktop.Flatpak.policy.in:61 #: system-helper/org.freedesktop.Flatpak.policy.in:80 @@ -5785,6 +5848,7 @@ msgstr "Posodobi oddaljene metapodatke" #: system-helper/org.freedesktop.Flatpak.policy.in:95 msgid "Authentication is required to update remote info" msgstr "" +"Preverjanje pristnosti je potrebno za posodobitev oddaljenih informacij" #. SECURITY: #. - Normal users do not need authentication to modify the @@ -5793,22 +5857,24 @@ msgstr "" #. in the wheel group to modify repos without authenticating. #: system-helper/org.freedesktop.Flatpak.policy.in:111 msgid "Update system repository" -msgstr "" +msgstr "Posodobi sistemsko skladišče" #: system-helper/org.freedesktop.Flatpak.policy.in:112 msgid "Authentication is required to modify a system repository" msgstr "" +"Preverjanje pristnosti je potrebno za spreminjanje sistemskega skladišča" #. SECURITY: #. - Normal users need admin authentication to install software #. system-wide. #: system-helper/org.freedesktop.Flatpak.policy.in:126 msgid "Install bundle" -msgstr "" +msgstr "Namesti sveženj" #: system-helper/org.freedesktop.Flatpak.policy.in:127 msgid "Authentication is required to install software from $(path)" msgstr "" +"Preverjanje pristnosti je potrebno za namestitev programske opreme iz $(path)" #. SECURITY: #. - Normal users need admin authentication to uninstall software @@ -5817,11 +5883,11 @@ msgstr "" #. in the wheel group to uninstall without authenticating. #: system-helper/org.freedesktop.Flatpak.policy.in:144 msgid "Uninstall runtime" -msgstr "" +msgstr "Odstrani izvajalnik" #: system-helper/org.freedesktop.Flatpak.policy.in:145 msgid "Authentication is required to uninstall software" -msgstr "" +msgstr "Preverjanje pristnosti je potrebno za odstranitev programske opreme" #. SECURITY: #. - Normal users need admin authentication to uninstall software @@ -5870,11 +5936,13 @@ msgstr "" #. updates. #: system-helper/org.freedesktop.Flatpak.policy.in:210 msgid "Update appstream" -msgstr "" +msgstr "Posodobi appstream" #: system-helper/org.freedesktop.Flatpak.policy.in:211 msgid "Authentication is required to update information about software" msgstr "" +"Preverjanje pristnosti je potrebno za posodobitev informacij o programski " +"opremi" #. SECURITY: #. - Normal users do not require admin authentication to update @@ -5938,9 +6006,8 @@ msgstr "Preverjanje pristnosti je potrebno za posodobitev metapodatkov" #. * Set the malcontent `is-system-installation-allowed` property of #. all users’ parental controls policies to true. #: system-helper/org.freedesktop.Flatpak.policy.in:287 -#, fuzzy msgid "Override parental controls for installs" -msgstr "Preglasi starševski nadzor" +msgstr "Preglasi starševski nadzor za namestitve" #: system-helper/org.freedesktop.Flatpak.policy.in:288 msgid "" @@ -5964,15 +6031,13 @@ msgstr "" #. installing an update which has radically different content from the #. version of the app which the parent originally vetted and installed. #: system-helper/org.freedesktop.Flatpak.policy.in:313 -#, fuzzy msgid "Override parental controls for updates" -msgstr "Preglasi starševski nadzor" +msgstr "Preglasi starševski nadzor za posodobitve" #: system-helper/org.freedesktop.Flatpak.policy.in:314 -#, fuzzy msgid "" "Authentication is required to update software which is restricted by your " "parental controls policy" msgstr "" "Preverjanje pristnosti je potrebno za namestitev programske opreme, ki jo " -"omejuje pravilnik starševskega nadzora" +"omejujejo pravila starševskega nadzora" From 054f4f4a7b674067a8167fb2eed6e8d768852f94 Mon Sep 17 00:00:00 2001 From: Johannes Maibaum Date: Sat, 1 Mar 2025 14:30:30 +0100 Subject: [PATCH 10/53] flatpak-build: Add empty /run/host/font-dirs.xml flatpak run writes /run/host/font-dirs.xml, but flatpak build so far didn't. This resulted in fontconfig writing: Fontconfig error: Cannot load config file "/run/host/font-dirs.xml": No such file: /run/host/font-dirs.xml to the stderr of all processes utilizing fontconfig and run during flatpak build, as /run/host/font-dirs.xml is included via /etc/fonts/50-flatpak.conf. This could cause issues for tests run during building an application, for example. Closes #6137 --- app/flatpak-builtins-build.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/app/flatpak-builtins-build.c b/app/flatpak-builtins-build.c index 585f8f43ba..7989ea120a 100644 --- a/app/flatpak-builtins-build.c +++ b/app/flatpak-builtins-build.c @@ -59,6 +59,17 @@ static GOptionEntry options[] = { { NULL } }; +static void +add_empty_font_dirs_xml (FlatpakBwrap *bwrap) +{ + g_autoptr(GString) xml_snippet = g_string_new ("\n" + "\n" + "\n"); + + if (!flatpak_bwrap_add_args_data (bwrap, "font-dirs.xml", xml_snippet->str, xml_snippet->len, "/run/host/font-dirs.xml", NULL)) + g_warning ("Unable to add fontconfig data snippet"); +} + /* Unset FD_CLOEXEC on the array of fds passed in @user_data */ static void child_setup (gpointer user_data) @@ -559,6 +570,8 @@ flatpak_builtin_build (int argc, char **argv, GCancellable *cancellable, GError instance_id, NULL, cancellable, error)) return FALSE; + add_empty_font_dirs_xml (bwrap); + for (i = 0; opt_bind_mounts != NULL && opt_bind_mounts[i] != NULL; i++) { char *split = strchr (opt_bind_mounts[i], '='); From dd2a04f978596e1cadb2d862530ba4fe9acf0530 Mon Sep 17 00:00:00 2001 From: taoky Date: Tue, 14 Jan 2025 02:08:50 +0800 Subject: [PATCH 11/53] utils: Don't pass NULL remote to ostree_repo_get_remote_option Fixes: #4662 --- common/flatpak-repo-utils.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/common/flatpak-repo-utils.c b/common/flatpak-repo-utils.c index 63dc9981e7..cfe048a40d 100644 --- a/common/flatpak-repo-utils.c +++ b/common/flatpak-repo-utils.c @@ -3857,8 +3857,8 @@ flatpak_pull_from_bundle (OstreeRepo *repo, if (metadata_contents != NULL) metadata_size = strlen (metadata_contents); - if (!ostree_repo_get_remote_option (repo, remote, "collection-id", NULL, - &remote_collection_id, NULL)) + if (!remote || !ostree_repo_get_remote_option (repo, remote, "collection-id", NULL, + &remote_collection_id, NULL)) remote_collection_id = NULL; if (remote_collection_id != NULL && collection_id != NULL && From 1c5788332182411756b0f074207d563891d7bc17 Mon Sep 17 00:00:00 2001 From: Kasumicic Date: Mon, 11 Aug 2025 14:19:17 +0800 Subject: [PATCH 12/53] po(ru): Update Russian translation Updated Russian translation from Damned Lies. --- po/ru.po | 187 ++++++++++++++++++++++--------------------------------- 1 file changed, 73 insertions(+), 114 deletions(-) diff --git a/po/ru.po b/po/ru.po index a25d9fa256..2a2f35bcea 100644 --- a/po/ru.po +++ b/po/ru.po @@ -5,14 +5,15 @@ # Roman Kharin , 2017. # Артемий Судаков , 2020. # Дмитрий , 2023. +# Вячеслав Гурин , 2025. # msgid "" msgstr "" "Project-Id-Version: flatpak master\n" "Report-Msgid-Bugs-To: https://github.com/flatpak/flatpak/issues\n" -"POT-Creation-Date: 2025-05-08 13:08-0300\n" -"PO-Revision-Date: 2023-02-21 22:52+0700\n" -"Last-Translator: Dmitry \n" +"POT-Creation-Date: 2025-08-11 03:26+0000\n" +"PO-Revision-Date: 2025-08-11 14:17+0800\n" +"Last-Translator: Vyacheslav Gurin \n" "Language-Team: Russian \n" "Language: ru\n" "MIME-Version: 1.0\n" @@ -20,7 +21,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -"X-Generator: Poedit 3.0\n" +"X-Generator: Poedit 3.0.1\n" #: app/flatpak-builtins-build-bundle.c:58 msgid "Export runtime instead of app" @@ -137,7 +138,7 @@ msgstr "Должны быть указаны ПУТЬ, ИМЯ_ФАЙЛА и ИМ #: app/flatpak-builtins-build-init.c:217 app/flatpak-builtins-build-sign.c:76 #: app/flatpak-builtins-document-export.c:112 #: app/flatpak-builtins-document-info.c:75 -#: app/flatpak-builtins-document-list.c:182 +#: app/flatpak-builtins-document-list.c:189 #: app/flatpak-builtins-document-unexport.c:70 #: app/flatpak-builtins-history.c:480 app/flatpak-builtins-info.c:130 #: app/flatpak-builtins-install.c:148 app/flatpak-builtins-install.c:217 @@ -262,8 +263,7 @@ msgstr "Не найдена точка расширения, подходяща msgid "Missing '=' in bind mount option '%s'" msgstr "Отсутствует '=' в параметре связанного монтирования '%s'" -#: app/flatpak-builtins-build.c:609 common/flatpak-run.c:3599 -#, c-format +#: app/flatpak-builtins-build.c:609 common/flatpak-run.c:3653 msgid "Unable to start app" msgstr "Невозможно запустить приложение" @@ -521,7 +521,6 @@ msgid "Unable to find basename in %s, specify a name explicitly" msgstr "Невозможно найти базовое имя в %s, укажите его" #: app/flatpak-builtins-build-export.c:746 -#, c-format msgid "No slashes allowed in extra data name" msgstr "" "Не разрешается использовать символ '/' в названии дополнительных данных" @@ -532,7 +531,6 @@ msgid "Invalid format for sha256 checksum: '%s'" msgstr "Неверный формат контрольной суммы sha256: '%s'" #: app/flatpak-builtins-build-export.c:768 -#, c-format msgid "Extra data sizes of zero not supported" msgstr "Дополнительные данные нулевого размера не поддерживаются" @@ -582,7 +580,6 @@ msgid "Content Written: %u\n" msgstr "Данных записано: %u\n" #: app/flatpak-builtins-build-export.c:1171 -#, c-format msgid "Content Bytes Written:" msgstr "Байтов контента записано:" @@ -684,7 +681,6 @@ msgid "Exporting %s\n" msgstr "Экспортирую %s\n" #: app/flatpak-builtins-build-finish.c:439 -#, c-format msgid "More than one executable found\n" msgstr "Найдено больше одного исполняемого файла\n" @@ -694,7 +690,6 @@ msgid "Using %s as command\n" msgstr "Использовать %s как команду\n" #: app/flatpak-builtins-build-finish.c:455 -#, c-format msgid "No executable found\n" msgstr "Не найдено исполняемых файлов\n" @@ -748,7 +743,6 @@ msgid "Build directory %s already finalized" msgstr "Каталог сборки %s уже финализирован" #: app/flatpak-builtins-build-finish.c:701 -#, c-format msgid "Please review the exported files and the metadata\n" msgstr "Пожалуйста, перепроверьте экспортированные файлы и метаданные\n" @@ -1087,12 +1081,10 @@ msgid "LOCATION - Update repository metadata" msgstr "ПУТЬ - Обновить метаданные репозитория" #: app/flatpak-builtins-build-update-repo.c:609 -#, c-format msgid "Updating appstream branch\n" msgstr "Обновление ветви appstream\n" #: app/flatpak-builtins-build-update-repo.c:638 -#, c-format msgid "Updating summary\n" msgstr "Обновление сводной информации\n" @@ -1102,7 +1094,6 @@ msgid "Total objects: %u\n" msgstr "Всего объектов: %u\n" #: app/flatpak-builtins-build-update-repo.c:666 -#, c-format msgid "No unreachable objects\n" msgstr "Нет недоступных объектов\n" @@ -1378,7 +1369,6 @@ msgstr "ФАЙЛ - Получить информацию об экспортир #: app/flatpak-builtins-document-info.c:100 #: app/flatpak-builtins-document-unexport.c:92 -#, c-format msgid "Not exported\n" msgstr "Не экспортировано\n" @@ -1433,7 +1423,11 @@ msgstr "Разрешения" msgid "Show permissions for applications" msgstr "Показать разрешения для приложения" -#: app/flatpak-builtins-document-list.c:171 +#: app/flatpak-builtins-document-list.c:159 +msgid "No documents found\n" +msgstr "Документы не найдены\n" + +#: app/flatpak-builtins-document-list.c:178 msgid "[APPID] - List exported files" msgstr "[ID_ПРИЛ] - Показать список экспортированных файлов" @@ -1671,12 +1665,10 @@ msgid " - Show history" msgstr " - Показать историю" #: app/flatpak-builtins-history.c:488 -#, c-format msgid "Failed to parse the --since option" msgstr "Ошибка разбора параметра --since" #: app/flatpak-builtins-history.c:499 -#, c-format msgid "Failed to parse the --until option" msgstr "Ошибка разбора параметра --until" @@ -1759,7 +1751,6 @@ msgid "ref not present in origin" msgstr "ссылка отсутствует в источнике" #: app/flatpak-builtins-info.c:211 app/flatpak-builtins-remote-info.c:217 -#, c-format msgid "Warning: Commit has no flatpak metadata\n" msgstr "Предупреждение: коммиит не содержит метаданных Flatpak\n" @@ -2002,7 +1993,6 @@ msgid "At least one REF must be specified" msgstr "Должна быть указана хотя бы одна ССЫЛКА" #: app/flatpak-builtins-install.c:336 -#, c-format msgid "Looking for matches…\n" msgstr "Поиск совпадений…\n" @@ -2206,12 +2196,10 @@ msgstr "" "под шаблон" #: app/flatpak-builtins-mask.c:73 -#, c-format msgid "No masked patterns\n" msgstr "Нет замаскированных шаблонов\n" #: app/flatpak-builtins-mask.c:78 -#, c-format msgid "Masked patterns:\n" msgstr "Замаскированные шаблоны:\n" @@ -2304,12 +2292,10 @@ msgstr "" "[ШАБЛОН…] - отключить автоудаление сред выполнения, подходящих под шаблонны" #: app/flatpak-builtins-pin.c:75 -#, c-format msgid "No pinned patterns\n" msgstr "Нет закреплённых шаблонов\n" #: app/flatpak-builtins-pin.c:80 -#, c-format msgid "Pinned patterns:\n" msgstr "Закреплённые шаблоны:\n" @@ -2852,7 +2838,6 @@ msgid "[%d/%d] Verifying %s…\n" msgstr "[%d/%d] Проверяется %s...\n" #: app/flatpak-builtins-repair.c:435 -#, c-format msgid "Dry run: " msgstr "Пробный запуск: " @@ -2872,7 +2857,6 @@ msgid "Deleting ref %s due to %d\n" msgstr "Удаление ссылки %s из-за %d\n" #: app/flatpak-builtins-repair.c:464 -#, c-format msgid "Checking remotes...\n" msgstr "Проверка удалённых репозиториев...\n" @@ -2887,22 +2871,18 @@ msgid "Remote %s for ref %s is disabled\n" msgstr "Удалённый репозиторий %s для ссылки %s отключён\n" #: app/flatpak-builtins-repair.c:490 -#, c-format msgid "Pruning objects\n" msgstr "Очистка объектов\n" #: app/flatpak-builtins-repair.c:498 -#, c-format msgid "Erasing .removed\n" msgstr "Удаление .removed\n" #: app/flatpak-builtins-repair.c:523 -#, c-format msgid "Reinstalling refs\n" msgstr "Переустановка ссылок\n" #: app/flatpak-builtins-repair.c:525 -#, c-format msgid "Reinstalling removed refs\n" msgstr "Переустановка удалённых ссылок\n" @@ -2937,7 +2917,6 @@ msgid "false" msgstr "false" #: app/flatpak-builtins-repo.c:120 -#, c-format msgid "Subsummaries: " msgstr "Дочерние сводки: " @@ -3269,7 +3248,6 @@ msgstr "" "flatpak-pin(1):\n" #: app/flatpak-builtins-uninstall.c:370 -#, c-format msgid "Nothing unused to uninstall\n" msgstr "Нет неиспользуемого для удаления\n" @@ -3294,10 +3272,13 @@ msgid "Warning: %s is not installed\n" msgstr "Предупреждение: %s не установлено\n" #: app/flatpak-builtins-uninstall.c:490 -#, c-format msgid "None of the specified refs are installed" msgstr "Ни одна из указанных ссылок не установлена" +#: app/flatpak-builtins-uninstall.c:599 +msgid "No app data to delete\n" +msgstr "Нет данных приложения для удаления\n" + #: app/flatpak-builtins-update.c:56 msgid "Arch to update for" msgstr "Обновляемая архитектура" @@ -3335,7 +3316,6 @@ msgid "With --commit, only one REF may be specified" msgstr "При указании --commit, должна быть указана хотя бы одна ССЫЛКА" #: app/flatpak-builtins-update.c:162 -#, c-format msgid "Looking for updates…\n" msgstr "Поиск обновлений…\n" @@ -3345,7 +3325,6 @@ msgid "Unable to update %s: %s\n" msgstr "Не удалось обновить %s: %s\n" #: app/flatpak-builtins-update.c:274 -#, c-format msgid "Nothing to do.\n" msgstr "Нечего выполнять.\n" @@ -3410,7 +3389,6 @@ msgid "Found installed ref ‘%s’ (%s). Is this correct?" msgstr "Найдена установленная ссылка '%s' (%s). Она верна?" #: app/flatpak-builtins-utils.c:522 -#, c-format msgid "All of the above" msgstr "Все вышеперечисленное" @@ -3724,12 +3702,10 @@ msgstr "" "причине:\n" #: app/flatpak-cli-transaction.c:960 -#, c-format msgid "Info: applications using this extension:\n" msgstr "Информация: приложения, использующие это расширение:\n" #: app/flatpak-cli-transaction.c:962 -#, c-format msgid "Info: applications using this runtime:\n" msgstr "Информация: приложения, использующие эту среду выполнения:\n" @@ -3738,7 +3714,6 @@ msgid "Replace?" msgstr "Заменить?" #: app/flatpak-cli-transaction.c:984 app/flatpak-quiet-transaction.c:247 -#, c-format msgid "Updating to rebased version\n" msgstr "Обновление перебазированной версии\n" @@ -4288,7 +4263,6 @@ msgid "Filesystem location \"%s\" contains \"..\"" msgstr "Путь \"%s\" файловой системы содержит \"..\"" #: common/flatpak-context.c:1002 -#, c-format msgid "" "--filesystem=/ is not available, use --filesystem=host for a similar result" msgstr "" @@ -4315,22 +4289,18 @@ msgid "Environment variable name must not contain '=': %s" msgstr "Имя переменной окружения не должно содежать'=': %s" #: common/flatpak-context.c:1540 common/flatpak-context.c:1548 -#, c-format msgid "--add-policy arguments must be in the form SUBSYSTEM.KEY=VALUE" msgstr "Аргмуенты --add-policy должны быть в форме ПОДСИСТЕМА.КЛЮЧ=ЗНАЧЕНИЕ" #: common/flatpak-context.c:1555 -#, c-format msgid "--add-policy values can't start with \"!\"" msgstr "Значения --add-policy не могут начинаться с '!'" #: common/flatpak-context.c:1580 common/flatpak-context.c:1588 -#, c-format msgid "--remove-policy arguments must be in the form SUBSYSTEM.KEY=VALUE" msgstr "Аргмуенты --remove-policy должны быть в форме ПОДСИСТЕМА.КЛЮЧ=ЗНАЧЕНИЕ" #: common/flatpak-context.c:1595 -#, c-format msgid "--remove-policy values can't start with \"!\"" msgstr "Значения --remove-policy не могут начинаться с '!'" @@ -4454,9 +4424,8 @@ msgid "Don't allow app to talk to name on the system bus" msgstr "Запретить приложению обмениваться с именем используя системную шину" #: common/flatpak-context.c:1689 -#, fuzzy msgid "Allow app to own name on the a11y bus" -msgstr "Разрешить приложению владеть именем используя системную шину" +msgstr "Разрешить приложению владеть именем на шине специальных возможностей" #: common/flatpak-context.c:1690 msgid "Add generic policy option" @@ -4472,27 +4441,27 @@ msgstr "Удалить параметр обобщенной политики" #: common/flatpak-context.c:1692 msgid "Add USB device to enumerables" -msgstr "" +msgstr "Добавить USB-устройство в список доступных" #: common/flatpak-context.c:1692 common/flatpak-context.c:1693 msgid "VENDOR_ID:PRODUCT_ID" -msgstr "" +msgstr "VENDOR_ID:PRODUCT_ID" #: common/flatpak-context.c:1693 msgid "Add USB device to hidden list" -msgstr "" +msgstr "Добавить USB-устройство в список скрытых" #: common/flatpak-context.c:1694 msgid "A list of USB devices that are enumerable" -msgstr "" +msgstr "Список доступных USB-устройств" #: common/flatpak-context.c:1694 msgid "LIST" -msgstr "" +msgstr "СПИСОК" #: common/flatpak-context.c:1695 msgid "File containing a list of USB devices to make enumerable" -msgstr "" +msgstr "Файл, содержащий список доступных USB-устройств" #: common/flatpak-context.c:1695 common/flatpak-context.c:1696 msgid "FILENAME" @@ -4548,10 +4517,9 @@ msgstr "Ссылки %s в удалённом репозитории %s не с #: common/flatpak-dir.c:769 common/flatpak-dir.c:906 common/flatpak-dir.c:935 #: common/flatpak-dir.c:947 -#, fuzzy, c-format +#, c-format msgid "No entry for %s in remote %s summary flatpak cache" -msgstr "" -"Нет записи для %s в удаленном репозитории '%s' суммарного кеша flatpak " +msgstr "Нет записи для «%s» в кэше сводки удалённого репозитория «%s»" #: common/flatpak-dir.c:924 #, c-format @@ -4798,9 +4766,8 @@ msgid "Extra data %s missing in detached metadata" msgstr "В отдельных метаданных отсутствуют отдельные данные %s" #: common/flatpak-dir.c:8413 -#, fuzzy, c-format msgid "Unable to get runtime key from metadata" -msgstr "Использовать другой файл метаданных" +msgstr "Не удалось получить ключ среды выполнения из метаданных" #: common/flatpak-dir.c:8526 #, c-format @@ -4885,7 +4852,6 @@ msgid "This version of %s is already installed" msgstr "Указанная версия %s уже установлена" #: common/flatpak-dir.c:10369 -#, c-format msgid "Can't change remote during bundle install" msgstr "Невозможно изменить удалённый репозиторий во время установки пакета" @@ -5051,7 +5017,6 @@ msgid "Skipping deletion of mirror ref (%s, %s)…\n" msgstr "Пропуск удаления зеркальной ссылки (%s,%s)…\n" #: common/flatpak-exports.c:916 -#, c-format msgid "An absolute path is required" msgstr "Требуется абсолютный путь" @@ -5401,7 +5366,6 @@ msgid "GPG verification must be enabled when a collection ID is set" msgstr "Проверка GPG должна быть включена, когда установлен ID коллекции" #: common/flatpak-repo-utils.c:344 -#, c-format msgid "No extra data sources" msgstr "Нет источников дополнительных данных" @@ -5453,96 +5417,104 @@ msgstr "" msgid "Metadata in header and app are inconsistent" msgstr "Метаданные в заголовке и приложении несовместимы" -#: common/flatpak-run.c:855 +#: common/flatpak-run.c:865 msgid "No systemd user session available, cgroups not available" msgstr "Отсутствует пользовательская сессия systemd, cgroups недоступны" -#: common/flatpak-run.c:1395 +#: common/flatpak-run.c:1405 msgid "Unable to allocate instance id" msgstr "Невозможно выделить идентификатор экземпляра" -#: common/flatpak-run.c:1531 common/flatpak-run.c:1541 +#: common/flatpak-run.c:1541 common/flatpak-run.c:1551 #, c-format msgid "Failed to open flatpak-info file: %s" msgstr "Не удалось открыть файл flatpak-info: %s" -#: common/flatpak-run.c:1570 +#: common/flatpak-run.c:1580 #, c-format msgid "Failed to open bwrapinfo.json file: %s" msgstr "Не удалось открыть файл bwrapinfo.json: %s" -#: common/flatpak-run.c:1595 +#: common/flatpak-run.c:1605 #, c-format msgid "Failed to write to instance id fd: %s" msgstr "Не удалось записать файловый дескриптор с ID экземпляра: %s" -#: common/flatpak-run.c:1990 +#: common/flatpak-run.c:2000 msgid "Initialize seccomp failed" msgstr "Не удалось инициализировать seccomp" -#: common/flatpak-run.c:2029 +#: common/flatpak-run.c:2039 #, c-format msgid "Failed to add architecture to seccomp filter: %s" msgstr "Не удалось добавить архитектуру в фильтр seccomp: %s" -#: common/flatpak-run.c:2037 +#: common/flatpak-run.c:2047 #, c-format msgid "Failed to add multiarch architecture to seccomp filter: %s" msgstr "Не удалось добавить многоархивную архитектуру к фильтру seccomp: %s" -#: common/flatpak-run.c:2069 common/flatpak-run.c:2086 -#: common/flatpak-run.c:2108 +#: common/flatpak-run.c:2079 common/flatpak-run.c:2096 +#: common/flatpak-run.c:2118 #, c-format msgid "Failed to block syscall %d: %s" msgstr "Не удалось заблокировать системный вызов %d: %s" -#: common/flatpak-run.c:2141 +#: common/flatpak-run.c:2151 #, c-format msgid "Failed to export bpf: %s" msgstr "Не удалось экспортировать bpf: %s" -#: common/flatpak-run.c:2440 +#: common/flatpak-run.c:2453 #, c-format msgid "Failed to open ‘%s’" msgstr "Не удалось открыть '%s'" -#: common/flatpak-run.c:2727 +#: common/flatpak-run.c:2463 +#, c-format +msgid "" +"Directory forwarding needs version 4 of the document portal (have version %d)" +msgstr "" +"Для перенаправления каталога требуется портал документов версии 4 " +"(установлена версия %d)" + +#: common/flatpak-run.c:2781 #, c-format msgid "ldconfig failed, exit status %d" msgstr "ошибка ldconfig, статус ошибки %d" -#: common/flatpak-run.c:2734 +#: common/flatpak-run.c:2788 msgid "Can't open generated ld.so.cache" msgstr "Невозможно открыть сгенерированный файл ld.so.cache" #. Translators: The placeholder is for an app ref. -#: common/flatpak-run.c:2857 +#: common/flatpak-run.c:2911 #, c-format msgid "Running %s is not allowed by the policy set by your administrator" msgstr "Запуск %s не разрешен политикой, установленной вашим администратором" -#: common/flatpak-run.c:2964 +#: common/flatpak-run.c:3018 msgid "" -"\"flatpak run\" is not intended to be run as `sudo flatpak run`. Use `sudo " -"-i` or `su -l` instead and invoke \"flatpak run\" from inside the new shell." +"\"flatpak run\" is not intended to be run as `sudo flatpak run`. Use `sudo -" +"i` or `su -l` instead and invoke \"flatpak run\" from inside the new shell." msgstr "" "\"flatpak run\" не предназначен для запуска как `sudo flatpak run`. Вместо " "этого используйте `sudo -i` или `su -l` и вызывайте \"flatpak run\" из новой " "оболочки." -#: common/flatpak-run.c:3154 +#: common/flatpak-run.c:3208 #, c-format msgid "Failed to migrate from %s: %s" msgstr "Не удалось перенести с %s: %s" -#: common/flatpak-run.c:3175 +#: common/flatpak-run.c:3229 #, c-format msgid "Failed to migrate old app data directory %s to new name %s: %s" msgstr "" "Не удалось переместить старую папку с данными приложения %s в папку с новым " "именем %s: %s" -#: common/flatpak-run.c:3184 +#: common/flatpak-run.c:3238 #, c-format msgid "Failed to create symlink while migrating %s: %s" msgstr "Не удалось создать символическую ссылку при переносе %s: %s" @@ -5725,64 +5697,58 @@ msgid "URI is not absolute, and no base URI was provided" msgstr "URI не абсолютный, и базовый URI не указан" #: common/flatpak-usb.c:83 -#, c-format msgid "USB device query 'all' must not have data" -msgstr "" +msgstr "Запрос USB-устройства «all» не должен содержать данные" #: common/flatpak-usb.c:102 -#, c-format msgid "USB query rule 'cls' must be in the form CLASS:SUBCLASS or CLASS:*" msgstr "" +"Правило запроса USB «cls» должно быть в формате CLASS:SUBCLASS или CLASS:*" #: common/flatpak-usb.c:111 -#, fuzzy, c-format msgid "Invalid USB class" -msgstr "Некорректный ID %s: %s" +msgstr "Недопустимый класс USB" #: common/flatpak-usb.c:125 -#, c-format msgid "Invalid USB subclass" -msgstr "" +msgstr "Недопустимый подкласс USB" #: common/flatpak-usb.c:141 common/flatpak-usb.c:148 -#, c-format msgid "USB query rule 'dev' must have a valid 4-digit hexadecimal product id" msgstr "" +"Правило запроса USB «dev» должно содержать действительный 4-значный " +"шестнадцатеричный идентификатор продукта" #: common/flatpak-usb.c:164 common/flatpak-usb.c:171 -#, c-format msgid "USB query rule 'vnd' must have a valid 4-digit hexadecimal vendor id" msgstr "" +"Правило запроса USB «vnd» должно содержать действительный 4-значный " +"шестнадцатеричный идентификатор производителя" #: common/flatpak-usb.c:205 -#, c-format msgid "USB device queries must be in the form TYPE:DATA" -msgstr "" +msgstr "Запросы USB-устройств должны быть в формате TYPE:DATA" #: common/flatpak-usb.c:225 #, c-format msgid "Unknown USB query rule %s" -msgstr "" +msgstr "Неизвестное правило запроса USB: %s" #: common/flatpak-usb.c:248 -#, c-format msgid "Empty USB query" -msgstr "" +msgstr "Пустой запрос USB" #: common/flatpak-usb.c:274 -#, c-format msgid "Multiple USB query rules of the same type is not supported" -msgstr "" +msgstr "Несколько правил запроса USB одного типа не поддерживаются" #: common/flatpak-usb.c:283 -#, c-format msgid "'all' must not contain extra query rules" -msgstr "" +msgstr "Правило «all» не должно содержать дополнительных правил запроса" #: common/flatpak-usb.c:291 -#, c-format msgid "USB queries with 'dev' must also specify vendors" -msgstr "" +msgstr "В запросах USB с «dev» также должны быть указаны производители" #: common/flatpak-utils.c:668 msgid "Glob can't match apps" @@ -5845,7 +5811,6 @@ msgid "Invalid token" msgstr "Некорректный токен" #: portal/flatpak-portal.c:2337 -#, c-format msgid "No portal support found" msgstr "Поддержки порталов не обнаружено" @@ -5873,19 +5838,16 @@ msgstr "" "конфиденциальности." #: portal/flatpak-portal.c:2388 -#, c-format msgid "Application update not allowed" msgstr "Обновления приложений не разрешены" #: portal/flatpak-portal.c:2546 -#, c-format msgid "Self update not supported, new version requires new permissions" msgstr "" "Самостоятельное обновление не поддерживается, новая версия требует новых " "разрешений" #: portal/flatpak-portal.c:2728 portal/flatpak-portal.c:2745 -#, c-format msgid "Update ended unexpectedly" msgstr "Обновление закончилось неожиданно" @@ -6096,9 +6058,8 @@ msgstr "Требуется авторизация для обновления м #. * Set the malcontent `is-system-installation-allowed` property of #. all users’ parental controls policies to true. #: system-helper/org.freedesktop.Flatpak.policy.in:287 -#, fuzzy msgid "Override parental controls for installs" -msgstr "Перезаписать данные для родительского контроля" +msgstr "Переопределить родительский контроль для установок" #: system-helper/org.freedesktop.Flatpak.policy.in:288 msgid "" @@ -6122,18 +6083,16 @@ msgstr "" #. installing an update which has radically different content from the #. version of the app which the parent originally vetted and installed. #: system-helper/org.freedesktop.Flatpak.policy.in:313 -#, fuzzy msgid "Override parental controls for updates" -msgstr "Перезаписать данные для родительского контроля" +msgstr "Переопределить родительский контроль для обновлений" #: system-helper/org.freedesktop.Flatpak.policy.in:314 -#, fuzzy msgid "" "Authentication is required to update software which is restricted by your " "parental controls policy" msgstr "" -"Для установки программного обеспечения требуется аутентификация, которая " -"ограничена вашей политикой родительского контроля" +"Требуется аутентификация для обновления программного обеспечения, " +"ограниченного вашей политикой родительского контроля" #, c-format #~ msgid "" From 59ad08e78caac64dd4371d00f2547af6e92869fd Mon Sep 17 00:00:00 2001 From: "Owen W. Taylor" Date: Mon, 14 Oct 2024 09:12:39 -0400 Subject: [PATCH 13/53] image-source: Refactor - add FlatpakImageSource type To avoid passing around combinations of a FlaptakOciRegistry with repository and digest, add a FlatpakImageSource type. This also reduces duplicated code where every place that did this independently retrieved the repository and image config. --- app/flatpak-builtins-build-import-bundle.c | 65 +----- common/flatpak-common-types-private.h | 1 + common/flatpak-dir.c | 80 +++---- common/flatpak-image-source-private.h | 57 +++++ common/flatpak-image-source.c | 230 +++++++++++++++++++++ common/flatpak-oci-registry-private.h | 11 +- common/flatpak-oci-registry.c | 46 ++--- common/meson.build | 1 + doc/reference/meson.build | 1 + system-helper/flatpak-system-helper.c | 57 +---- 10 files changed, 351 insertions(+), 198 deletions(-) create mode 100644 common/flatpak-image-source-private.h create mode 100644 common/flatpak-image-source.c diff --git a/app/flatpak-builtins-build-import-bundle.c b/app/flatpak-builtins-build-import-bundle.c index d5d6fc2674..f3508709f7 100644 --- a/app/flatpak-builtins-build-import-bundle.c +++ b/app/flatpak-builtins-build-import-bundle.c @@ -30,9 +30,10 @@ #include "libglnx.h" #include "flatpak-builtins.h" +#include "flatpak-image-source-private.h" +#include "flatpak-oci-registry-private.h" #include "flatpak-repo-utils-private.h" #include "flatpak-utils-private.h" -#include "flatpak-oci-registry-private.h" static char *opt_ref; static gboolean opt_oci = FALSE; @@ -58,65 +59,17 @@ import_oci (OstreeRepo *repo, GFile *file, GCancellable *cancellable, GError **error) { g_autofree char *commit_checksum = NULL; - g_autofree char *dir_uri = NULL; g_autofree char *target_ref = NULL; - const char *oci_digest; - g_autoptr(FlatpakOciRegistry) registry = NULL; - g_autoptr(FlatpakOciVersioned) versioned = NULL; - g_autoptr(FlatpakOciImage) image_config = NULL; - FlatpakOciManifest *manifest = NULL; - g_autoptr(FlatpakOciIndex) index = NULL; - const FlatpakOciManifestDescriptor *desc; + g_autoptr(FlatpakImageSource) image_source = NULL; GHashTable *labels; - dir_uri = g_file_get_uri (file); - registry = flatpak_oci_registry_new (dir_uri, FALSE, -1, cancellable, error); - if (registry == NULL) - return NULL; - - index = flatpak_oci_registry_load_index (registry, cancellable, error); - if (index == NULL) - return NULL; - - if (opt_ref) - { - desc = flatpak_oci_index_get_manifest (index, opt_ref); - if (desc == NULL) - { - flatpak_fail (error, _("Ref '%s' not found in registry"), opt_ref); - return NULL; - } - } - else - { - desc = flatpak_oci_index_get_only_manifest (index); - if (desc == NULL) - { - flatpak_fail (error, _("Multiple images in registry, specify a ref with --ref")); - return NULL; - } - } - - oci_digest = desc->parent.digest; - - versioned = flatpak_oci_registry_load_versioned (registry, NULL, - oci_digest, NULL, NULL, - cancellable, error); - if (versioned == NULL) + image_source = flatpak_image_source_new_local (file, opt_ref, cancellable, error); + if (image_source == NULL) return NULL; - manifest = FLATPAK_OCI_MANIFEST (versioned); - - image_config = flatpak_oci_registry_load_image_config (registry, NULL, - manifest->config.digest, NULL, - NULL, cancellable, error); - if (image_config == NULL) - return FALSE; - - labels = flatpak_oci_image_get_labels (image_config); - if (labels) - flatpak_oci_parse_commit_labels (labels, NULL, NULL, NULL, - &target_ref, NULL, NULL, NULL); + labels = flatpak_image_source_get_labels (image_source); + flatpak_oci_parse_commit_labels (labels, NULL, NULL, NULL, + &target_ref, NULL, NULL, NULL); if (target_ref == NULL) { g_set_error (error, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED, @@ -124,7 +77,7 @@ import_oci (OstreeRepo *repo, GFile *file, return NULL; } - commit_checksum = flatpak_pull_from_oci (repo, registry, NULL, oci_digest, NULL, manifest, image_config, + commit_checksum = flatpak_pull_from_oci (repo, image_source, NULL, NULL, target_ref, FLATPAK_PULL_FLAGS_NONE, NULL, NULL, cancellable, error); if (commit_checksum == NULL) return NULL; diff --git a/common/flatpak-common-types-private.h b/common/flatpak-common-types-private.h index 051301442c..d7f3913b0b 100644 --- a/common/flatpak-common-types-private.h +++ b/common/flatpak-common-types-private.h @@ -53,6 +53,7 @@ typedef enum { typedef struct FlatpakDir FlatpakDir; typedef struct FlatpakDeploy FlatpakDeploy; +typedef struct _FlatpakImageSource FlatpakImageSource; typedef struct FlatpakOciRegistry FlatpakOciRegistry; typedef struct _FlatpakOciManifest FlatpakOciManifest; typedef struct _FlatpakOciImage FlatpakOciImage; diff --git a/common/flatpak-dir.c b/common/flatpak-dir.c index 71688ddc44..5ad35afc30 100644 --- a/common/flatpak-dir.c +++ b/common/flatpak-dir.c @@ -52,6 +52,7 @@ #include "flatpak-dir-utils-private.h" #include "flatpak-error.h" #include "flatpak-locale-utils-private.h" +#include "flatpak-image-source-private.h" #include "flatpak-oci-registry-private.h" #include "flatpak-ref.h" #include "flatpak-repo-utils-private.h" @@ -1049,14 +1050,16 @@ lookup_oci_registry_uri_from_summary (GVariant *summary, return g_steal_pointer (®istry_uri); } -static FlatpakOciRegistry * -flatpak_remote_state_new_oci_registry (FlatpakRemoteState *self, +static FlatpakImageSource * +flatpak_remote_state_new_image_source (FlatpakRemoteState *self, + const char *oci_repository, + const char *digest, const char *token, GCancellable *cancellable, GError **error) { g_autofree char *registry_uri = NULL; - g_autoptr(FlatpakOciRegistry) registry = NULL; + g_autoptr(FlatpakImageSource) image_source = NULL; if (!flatpak_remote_state_ensure_summary (self, error)) return NULL; @@ -1065,13 +1068,13 @@ flatpak_remote_state_new_oci_registry (FlatpakRemoteState *self, if (registry_uri == NULL) return NULL; - registry = flatpak_oci_registry_new (registry_uri, FALSE, -1, NULL, error); - if (registry == NULL) + image_source = flatpak_image_source_new_remote (registry_uri, oci_repository, digest, NULL, error); + if (image_source == NULL) return NULL; - flatpak_oci_registry_set_token (registry, token); + flatpak_image_source_set_token (image_source, token); - return g_steal_pointer (®istry); + return g_steal_pointer (&image_source); } static GVariant * @@ -1083,9 +1086,7 @@ flatpak_remote_state_fetch_commit_object_oci (FlatpakRemoteState *self, GCancellable *cancellable, GError **error) { - g_autoptr(FlatpakOciRegistry) registry = NULL; - g_autoptr(FlatpakOciVersioned) versioned = NULL; - g_autoptr(FlatpakOciImage) image_config = NULL; + g_autoptr(FlatpakImageSource) image_source = NULL; g_autofree char *oci_digest = NULL; g_autofree char *latest_rev = NULL; VarRefInfoRef latest_rev_info; @@ -1100,10 +1101,6 @@ flatpak_remote_state_fetch_commit_object_oci (FlatpakRemoteState *self, g_autoptr(GVariantBuilder) metadata_builder = g_variant_builder_new (G_VARIANT_TYPE ("a{sv}")); g_autoptr(GVariant) metadata_v = NULL; - registry = flatpak_remote_state_new_oci_registry (self, token, cancellable, error); - if (registry == NULL) - return NULL; - /* We extract the rev info from the latest, even if we don't use the latest digest, assuming refs don't move */ if (!flatpak_remote_state_lookup_ref (self, ref, &latest_rev, NULL, &latest_rev_info, NULL, error)) return NULL; @@ -1121,25 +1118,11 @@ flatpak_remote_state_fetch_commit_object_oci (FlatpakRemoteState *self, oci_digest = g_strconcat ("sha256:", checksum, NULL); - versioned = flatpak_oci_registry_load_versioned (registry, oci_repository, oci_digest, - NULL, NULL, cancellable, error); - if (versioned == NULL) - return NULL; - - if (!FLATPAK_IS_OCI_MANIFEST (versioned)) - { - flatpak_fail_error (error, FLATPAK_ERROR_INVALID_DATA, _("Image is not a manifest")); - return NULL; - } - - image_config = flatpak_oci_registry_load_image_config (registry, oci_repository, - FLATPAK_OCI_MANIFEST (versioned)->config.digest, - (const char **)FLATPAK_OCI_MANIFEST (versioned)->config.urls, - NULL, cancellable, error); - if (image_config == NULL) + image_source = flatpak_remote_state_new_image_source (self, oci_repository, oci_digest, token, cancellable, error); + if (image_source == NULL) return NULL; - labels = flatpak_oci_image_get_labels (image_config); + labels = flatpak_image_source_get_labels (image_source); if (labels) flatpak_oci_parse_commit_labels (labels, ×tamp, &subject, &body, @@ -5935,7 +5918,7 @@ flatpak_dir_mirror_oci (FlatpakDir *self, GCancellable *cancellable, GError **error) { - g_autoptr(FlatpakOciRegistry) registry = NULL; + g_autoptr(FlatpakImageSource) image_source = NULL; g_autofree char *oci_digest = NULL; g_autofree char *latest_rev = NULL; VarRefInfoRef latest_rev_info; @@ -5968,15 +5951,15 @@ flatpak_dir_mirror_oci (FlatpakDir *self, oci_digest = g_strconcat ("sha256:", rev, NULL); - registry = flatpak_remote_state_new_oci_registry (state, token, cancellable, error); - if (registry == NULL) + image_source = flatpak_remote_state_new_image_source (state, oci_repository, oci_digest, token, cancellable, error); + if (image_source == NULL) return FALSE; flatpak_progress_start_oci_pull (progress); g_info ("Mirroring OCI image %s", oci_digest); - res = flatpak_mirror_image_from_oci (dst_registry, registry, oci_repository, oci_digest, state->remote_name, ref, delta_url, self->repo, oci_pull_progress_cb, + res = flatpak_mirror_image_from_oci (dst_registry, image_source, state->remote_name, ref, delta_url, self->repo, oci_pull_progress_cb, progress, cancellable, error); if (!res) @@ -5998,9 +5981,8 @@ flatpak_dir_pull_oci (FlatpakDir *self, GCancellable *cancellable, GError **error) { - g_autoptr(FlatpakOciRegistry) registry = NULL; - g_autoptr(FlatpakOciVersioned) versioned = NULL; - g_autoptr(FlatpakOciImage) image_config = NULL; + g_autoptr(FlatpakImageSource) image_source = NULL; + FlatpakOciRegistry *registry = NULL; const char *oci_repository = NULL; const char *delta_url = NULL; g_autofree char *oci_digest = NULL; @@ -6031,23 +6013,8 @@ flatpak_dir_pull_oci (FlatpakDir *self, if (latest_alt_commit != NULL && strcmp (oci_digest + strlen ("sha256:"), latest_alt_commit) == 0) return TRUE; - registry = flatpak_remote_state_new_oci_registry (state, token, cancellable, error); - if (registry == NULL) - return FALSE; - - versioned = flatpak_oci_registry_load_versioned (registry, oci_repository, oci_digest, - NULL, NULL, cancellable, error); - if (versioned == NULL) - return FALSE; - - if (!FLATPAK_IS_OCI_MANIFEST (versioned)) - return flatpak_fail_error (error, FLATPAK_ERROR_INVALID_DATA, _("Image is not a manifest")); - - image_config = flatpak_oci_registry_load_image_config (registry, oci_repository, - FLATPAK_OCI_MANIFEST (versioned)->config.digest, - (const char **)FLATPAK_OCI_MANIFEST (versioned)->config.urls, - NULL, cancellable, error); - if (image_config == NULL) + image_source = flatpak_remote_state_new_image_source (state, oci_repository, oci_digest, token, cancellable, error); + if (image_source == NULL) return FALSE; if (repo == NULL) @@ -6057,7 +6024,7 @@ flatpak_dir_pull_oci (FlatpakDir *self, g_info ("Pulling OCI image %s", oci_digest); - checksum = flatpak_pull_from_oci (repo, registry, oci_repository, oci_digest, delta_url, FLATPAK_OCI_MANIFEST (versioned), image_config, + checksum = flatpak_pull_from_oci (repo, image_source, delta_url, state->remote_name, ref, flatpak_flags, oci_pull_progress_cb, progress, cancellable, error); if (checksum == NULL) @@ -6073,6 +6040,7 @@ flatpak_dir_pull_oci (FlatpakDir *self, name = g_file_get_path (file); } + registry = flatpak_image_source_get_registry (image_source); (flatpak_dir_log) (self, __FILE__, __LINE__, __FUNCTION__, name, "pull oci", flatpak_oci_registry_get_uri (registry), ref, NULL, NULL, NULL, "Pulled %s from %s", ref, flatpak_oci_registry_get_uri (registry)); diff --git a/common/flatpak-image-source-private.h b/common/flatpak-image-source-private.h new file mode 100644 index 0000000000..ebd856a421 --- /dev/null +++ b/common/flatpak-image-source-private.h @@ -0,0 +1,57 @@ +/* + * Copyright © 2024 Red Hat, Inc + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. If not, see . + * + * Authors: + * Owen Taylor + */ + +#ifndef __FLATPAK_IMAGE_SOURCE_H__ +#define __FLATPAK_IMAGE_SOURCE_H__ + +#include +#include + +#include + +#define FLATPAK_TYPE_IMAGE_SOURCE flatpak_image_source_get_type () +G_DECLARE_FINAL_TYPE (FlatpakImageSource, + flatpak_image_source, + FLATPAK, IMAGE_SOURCE, + GObject) + +FlatpakImageSource *flatpak_image_source_new_local (GFile *file, + const char *reference, + GCancellable *cancellable, + GError **error); +FlatpakImageSource *flatpak_image_source_new_remote (const char *uri, + const char *oci_repository, + const char *digest, + GCancellable *cancellable, + GError **error); + +void flatpak_image_source_set_token (FlatpakImageSource *self, + const char *token); + +FlatpakOciRegistry *flatpak_image_source_get_registry (FlatpakImageSource *self); +const char *flatpak_image_source_get_oci_repository (FlatpakImageSource *self); +const char *flatpak_image_source_get_digest (FlatpakImageSource *self); +FlatpakOciManifest *flatpak_image_source_get_manifest (FlatpakImageSource *self); +size_t flatpak_image_source_get_manifest_size (FlatpakImageSource *self); +FlatpakOciImage *flatpak_image_source_get_image_config (FlatpakImageSource *self); + +GHashTable *flatpak_image_source_get_labels (FlatpakImageSource *self); + +#endif /* __FLATPAK_IMAGE_SOURCE_H__ */ diff --git a/common/flatpak-image-source.c b/common/flatpak-image-source.c new file mode 100644 index 0000000000..30e619563f --- /dev/null +++ b/common/flatpak-image-source.c @@ -0,0 +1,230 @@ +/* vi:set et sw=2 sts=2 cin cino=t0,f0,(0,{s,>2s,n-s,^-s,e-s: + * Copyright © 2024 Red Hat, Inc + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. If not, see . + * + * Authors: + * Owen Taylor + */ + +#include + +#include "flatpak-image-source-private.h" +#include "flatpak-oci-registry-private.h" + +struct _FlatpakImageSource +{ + GObject parent; + + FlatpakOciRegistry *registry; + char *repository; + char *digest; + + FlatpakOciManifest *manifest; + size_t manifest_size; + FlatpakOciImage *image_config; +}; + +G_DEFINE_TYPE (FlatpakImageSource, flatpak_image_source, G_TYPE_OBJECT) + +static void +flatpak_image_source_finalize (GObject *object) +{ + FlatpakImageSource *self = FLATPAK_IMAGE_SOURCE (object); + + g_clear_object (&self->registry); + g_clear_pointer (&self->repository, g_free); + g_clear_pointer (&self->digest, g_free); + g_clear_object (&self->manifest); + g_clear_object (&self->image_config); + + G_OBJECT_CLASS (flatpak_image_source_parent_class)->finalize (object); +} + +static void +flatpak_image_source_class_init (FlatpakImageSourceClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS (klass); + + object_class->finalize = flatpak_image_source_finalize; +} + +static void +flatpak_image_source_init (FlatpakImageSource *self) +{ +} + +static FlatpakImageSource * +flatpak_image_source_new (FlatpakOciRegistry *registry, + const char *repository, + const char *digest, + GCancellable *cancellable, + GError **error) +{ + g_autoptr(FlatpakImageSource) self = NULL; + g_autoptr(FlatpakOciVersioned) versioned = NULL; + GHashTable *labels; + + self = g_object_new (FLATPAK_TYPE_IMAGE_SOURCE, NULL); + self->registry = g_object_ref (registry); + self->repository = g_strdup (repository); + self->digest = g_strdup (digest); + + versioned = flatpak_oci_registry_load_versioned (self->registry, self->repository, + self->digest, NULL, &self->manifest_size, + cancellable, error); + if (versioned == NULL) + return NULL; + + if (!FLATPAK_IS_OCI_MANIFEST (versioned)) + { + flatpak_fail_error (error, FLATPAK_ERROR_INVALID_DATA, _("Image is not a manifest")); + return NULL; + } + + self->manifest = FLATPAK_OCI_MANIFEST (g_steal_pointer (&versioned)); + + if (self->manifest->config.digest == NULL) + { + flatpak_fail_error (error, FLATPAK_ERROR_INVALID_DATA, _("Image is not a manifest")); + return NULL; + } + + self->image_config = + flatpak_oci_registry_load_image_config (self->registry, + self->repository, + self->manifest->config.digest, + (const char **) self->manifest->config.urls, + NULL, cancellable, error); + if (self->image_config == NULL) + return NULL; + + labels = flatpak_image_source_get_labels (self); + if (!g_hash_table_contains (labels, "org.flatpak.ref")) + { + flatpak_fail_error (error, FLATPAK_ERROR_INVALID_DATA, _("No org.flatpak.ref found in image")); + return NULL; + } + + return g_steal_pointer (&self); +} + +FlatpakImageSource * +flatpak_image_source_new_local (GFile *file, + const char *reference, + GCancellable *cancellable, + GError **error) +{ + g_autofree char *dir_uri = NULL; + g_autofree char *target_ref = NULL; + g_autoptr(FlatpakImageSource) image_source = NULL; + g_autoptr(FlatpakOciRegistry) registry = NULL; + g_autoptr(FlatpakOciIndex) index = NULL; + const FlatpakOciManifestDescriptor *desc; + + dir_uri = g_file_get_uri (file); + registry = flatpak_oci_registry_new (dir_uri, FALSE, -1, cancellable, error); + if (registry == NULL) + return NULL; + + index = flatpak_oci_registry_load_index (registry, cancellable, error); + if (index == NULL) + return NULL; + + if (reference) + { + desc = flatpak_oci_index_get_manifest (index, reference); + if (desc == NULL) + { + flatpak_fail (error, _("Ref '%s' not found in registry"), reference); + return NULL; + } + } + else + { + desc = flatpak_oci_index_get_only_manifest (index); + if (desc == NULL) + { + flatpak_fail (error, _("Multiple images in registry, specify a ref with --ref")); + return NULL; + } + } + + return flatpak_image_source_new (registry, NULL, desc->parent.digest, cancellable, error); +} + +FlatpakImageSource * +flatpak_image_source_new_remote (const char *uri, + const char *oci_repository, + const char *digest, + GCancellable *cancellable, + GError **error) +{ + g_autoptr(FlatpakOciRegistry) registry = NULL; + + registry = flatpak_oci_registry_new (uri, FALSE, -1, cancellable, error); + if (!registry) + return NULL; + + return flatpak_image_source_new (registry, oci_repository, digest, cancellable, error); +} + +void +flatpak_image_source_set_token (FlatpakImageSource *self, + const char *token) +{ + flatpak_oci_registry_set_token (self->registry, token); +} + +FlatpakOciRegistry * +flatpak_image_source_get_registry (FlatpakImageSource *self) +{ + return self->registry; +} + +const char * +flatpak_image_source_get_oci_repository (FlatpakImageSource *self) +{ + return self->repository; +} + +const char * +flatpak_image_source_get_digest (FlatpakImageSource *self) +{ + return self->digest; +} + +FlatpakOciManifest * +flatpak_image_source_get_manifest (FlatpakImageSource *self) +{ + return self->manifest; +} + +size_t +flatpak_image_source_get_manifest_size (FlatpakImageSource *self) +{ + return self->manifest_size; +} + +FlatpakOciImage * +flatpak_image_source_get_image_config (FlatpakImageSource *self) +{ + return self->image_config; +} + +GHashTable * +flatpak_image_source_get_labels (FlatpakImageSource *self) +{ + return flatpak_oci_image_get_labels (self->image_config); +} diff --git a/common/flatpak-oci-registry-private.h b/common/flatpak-oci-registry-private.h index 2c0608dce4..47ffc7beb5 100644 --- a/common/flatpak-oci-registry-private.h +++ b/common/flatpak-oci-registry-private.h @@ -183,6 +183,7 @@ GBytes *flatpak_oci_index_make_appstream (FlatpakHttpSession *http_session, GCancellable *cancellable, GError **error); + typedef void (*FlatpakOciPullProgress) (guint64 total_size, guint64 pulled_size, guint32 n_layers, @@ -190,12 +191,8 @@ typedef void (*FlatpakOciPullProgress) (guint64 total_size, gpointer data); char * flatpak_pull_from_oci (OstreeRepo *repo, - FlatpakOciRegistry *registry, - const char *oci_repository, - const char *digest, + FlatpakImageSource *image_source, const char *delta_url, - FlatpakOciManifest *manifest, - FlatpakOciImage *image_config, const char *remote, const char *ref, FlatpakPullFlags flags, @@ -205,9 +202,7 @@ char * flatpak_pull_from_oci (OstreeRepo *repo, GError **error); gboolean flatpak_mirror_image_from_oci (FlatpakOciRegistry *dst_registry, - FlatpakOciRegistry *registry, - const char *oci_repository, - const char *digest, + FlatpakImageSource *image_source, const char *remote, const char *ref, const char *delta_url, diff --git a/common/flatpak-oci-registry.c b/common/flatpak-oci-registry.c index 6d36de2a16..11b5f98d81 100644 --- a/common/flatpak-oci-registry.c +++ b/common/flatpak-oci-registry.c @@ -28,6 +28,7 @@ #include #include +#include "flatpak-image-source-private.h" #include "flatpak-oci-registry-private.h" #include "flatpak-repo-utils-private.h" #include "flatpak-utils-base-private.h" @@ -3454,9 +3455,7 @@ oci_layer_progress (guint64 downloaded_bytes, gboolean flatpak_mirror_image_from_oci (FlatpakOciRegistry *dst_registry, - FlatpakOciRegistry *registry, - const char *oci_repository, - const char *digest, + FlatpakImageSource *image_source, const char *remote, const char *ref, const char *delta_url, @@ -3467,8 +3466,11 @@ flatpak_mirror_image_from_oci (FlatpakOciRegistry *dst_registry, GError **error) { FlatpakOciPullProgressData progress_data = { progress_cb, progress_user_data }; - g_autoptr(FlatpakOciVersioned) versioned = NULL; - FlatpakOciManifest *manifest = NULL; + FlatpakOciRegistry *registry = flatpak_image_source_get_registry (image_source); + const char *oci_repository = flatpak_image_source_get_oci_repository (image_source); + const char *digest = flatpak_image_source_get_digest (image_source); + FlatpakOciManifest *manifest = flatpak_image_source_get_manifest (image_source); + FlatpakOciImage *image_config = flatpak_image_source_get_image_config (image_source); g_autoptr(FlatpakOciDescriptor) manifest_desc = NULL; g_autoptr(FlatpakOciManifest) delta_manifest = NULL; g_autofree char *old_checksum = NULL; @@ -3476,36 +3478,16 @@ flatpak_mirror_image_from_oci (FlatpakOciRegistry *dst_registry, g_autoptr(GFile) old_root = NULL; OstreeRepoCommitState old_state = 0; g_autofree char *old_diffid = NULL; - gsize versioned_size; g_autoptr(FlatpakOciIndex) index = NULL; - g_autoptr(FlatpakOciImage) image_config = NULL; int n_layers; int i; if (!flatpak_oci_registry_mirror_blob (dst_registry, registry, oci_repository, TRUE, digest, NULL, NULL, NULL, cancellable, error)) return FALSE; - versioned = flatpak_oci_registry_load_versioned (dst_registry, NULL, digest, NULL, &versioned_size, cancellable, error); - if (versioned == NULL) - return FALSE; - - if (!FLATPAK_IS_OCI_MANIFEST (versioned)) - return flatpak_fail_error (error, FLATPAK_ERROR_INVALID_DATA, _("Image is not a manifest")); - - manifest = FLATPAK_OCI_MANIFEST (versioned); - - if (manifest->config.digest == NULL) - return flatpak_fail_error (error, FLATPAK_ERROR_INVALID_DATA, _("Image is not a manifest")); - if (!flatpak_oci_registry_mirror_blob (dst_registry, registry, oci_repository, FALSE, manifest->config.digest, (const char **)manifest->config.urls, NULL, NULL, cancellable, error)) return FALSE; - image_config = flatpak_oci_registry_load_image_config (dst_registry, NULL, - manifest->config.digest, NULL, - NULL, cancellable, error); - if (image_config == NULL) - return FALSE; - /* For deltas we ensure that the diffid and regular layers exists and match up */ n_layers = flatpak_oci_manifest_get_n_layers (manifest); if (n_layers == 0 || n_layers != flatpak_oci_image_get_n_layers (image_config)) @@ -3589,7 +3571,8 @@ flatpak_mirror_image_from_oci (FlatpakOciRegistry *dst_registry, if (index == NULL) index = flatpak_oci_index_new (); - manifest_desc = flatpak_oci_descriptor_new (versioned->mediatype, digest, versioned_size); + manifest_desc = flatpak_oci_descriptor_new (manifest->parent.mediatype, digest, + flatpak_image_source_get_manifest_size (image_source)); flatpak_oci_index_add_manifest (index, ref, manifest_desc); @@ -3601,12 +3584,8 @@ flatpak_mirror_image_from_oci (FlatpakOciRegistry *dst_registry, char * flatpak_pull_from_oci (OstreeRepo *repo, - FlatpakOciRegistry *registry, - const char *oci_repository, - const char *digest, + FlatpakImageSource *image_source, const char *delta_url, - FlatpakOciManifest *manifest, - FlatpakOciImage *image_config, const char *remote, const char *ref, FlatpakPullFlags flags, @@ -3615,6 +3594,11 @@ flatpak_pull_from_oci (OstreeRepo *repo, GCancellable *cancellable, GError **error) { + FlatpakOciRegistry *registry = flatpak_image_source_get_registry (image_source); + const char *oci_repository = flatpak_image_source_get_oci_repository (image_source); + const char *digest = flatpak_image_source_get_digest (image_source); + FlatpakOciManifest *manifest = flatpak_image_source_get_manifest (image_source); + FlatpakOciImage *image_config = flatpak_image_source_get_image_config (image_source); gboolean force_disable_deltas = (flags & FLATPAK_PULL_FLAGS_NO_STATIC_DELTAS) != 0; g_autoptr(OstreeMutableTree) archive_mtree = NULL; g_autoptr(GFile) archive_root = NULL; diff --git a/common/meson.build b/common/meson.build index 0925950892..67627538de 100644 --- a/common/meson.build +++ b/common/meson.build @@ -189,6 +189,7 @@ sources = [ 'flatpak-error.c', 'flatpak-exports.c', 'flatpak-glib-backports.c', + 'flatpak-image-source.c', 'flatpak-installation.c', 'flatpak-installed-ref.c', 'flatpak-instance.c', diff --git a/doc/reference/meson.build b/doc/reference/meson.build index a881b0cb6b..92f1482e7d 100644 --- a/doc/reference/meson.build +++ b/doc/reference/meson.build @@ -46,6 +46,7 @@ gnome.gtkdoc( 'flatpak-document-dbus-generated.h', 'flatpak-enum-types.h', 'flatpak-exports-private.h', + 'flatpak-image-source-private.h', 'flatpak-installed-ref-private.h', 'flatpak-json-oci-private.h', 'flatpak-json-private.h', diff --git a/system-helper/flatpak-system-helper.c b/system-helper/flatpak-system-helper.c index a58ab2c604..a4d9708bef 100644 --- a/system-helper/flatpak-system-helper.c +++ b/system-helper/flatpak-system-helper.c @@ -39,6 +39,7 @@ #include "flatpak-dbus-generated.h" #include "flatpak-dir-private.h" #include "flatpak-error.h" +#include "flatpak-image-source-private.h" #include "flatpak-oci-registry-private.h" #include "flatpak-progress-private.h" #include "flatpak-system-helper.h" @@ -528,15 +529,11 @@ handle_deploy (FlatpakSystemHelper *object, if (strlen (arg_repo_path) > 0 && is_oci) { g_autoptr(GFile) registry_file = g_file_new_for_path (arg_repo_path); - g_autofree char *registry_uri = g_file_get_uri (registry_file); - g_autoptr(FlatpakOciRegistry) registry = NULL; - g_autoptr(FlatpakOciIndex) index = NULL; - const FlatpakOciManifestDescriptor *desc; - g_autoptr(FlatpakOciVersioned) versioned = NULL; - g_autoptr(FlatpakOciImage) image_config = NULL; + g_autoptr(FlatpakImageSource) image_source = NULL; g_autoptr(FlatpakRemoteState) state = NULL; g_autoptr(GHashTable) remote_refs = NULL; g_autofree char *checksum = NULL; + const char *image_source_digest; const char *verified_digest; g_autofree char *upstream_url = NULL; @@ -552,50 +549,14 @@ handle_deploy (FlatpakSystemHelper *object, return G_DBUS_METHOD_INVOCATION_HANDLED; } - registry = flatpak_oci_registry_new (registry_uri, FALSE, -1, NULL, &error); - if (registry == NULL) + image_source = flatpak_image_source_new_local (registry_file, arg_ref, NULL, &error); + if (image_source == NULL) { g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR, G_DBUS_ERROR_FAILED, "Can't open child OCI registry: %s", error->message); return G_DBUS_METHOD_INVOCATION_HANDLED; } - index = flatpak_oci_registry_load_index (registry, NULL, &error); - if (index == NULL) - { - g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR, G_DBUS_ERROR_FAILED, - "Can't open child OCI registry index: %s", error->message); - return G_DBUS_METHOD_INVOCATION_HANDLED; - } - - desc = flatpak_oci_index_get_manifest (index, arg_ref); - if (desc == NULL) - { - g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR, G_DBUS_ERROR_FAILED, - "Can't find ref %s in child OCI registry index", arg_ref); - return G_DBUS_METHOD_INVOCATION_HANDLED; - } - - versioned = flatpak_oci_registry_load_versioned (registry, NULL, desc->parent.digest, (const char **)desc->parent.urls, NULL, - NULL, &error); - if (versioned == NULL || !FLATPAK_IS_OCI_MANIFEST (versioned)) - { - g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR, G_DBUS_ERROR_FAILED, - "Can't open child manifest"); - return G_DBUS_METHOD_INVOCATION_HANDLED; - } - - image_config = flatpak_oci_registry_load_image_config (registry, NULL, - FLATPAK_OCI_MANIFEST (versioned)->config.digest, - (const char **)FLATPAK_OCI_MANIFEST (versioned)->config.urls, - NULL, NULL, &error); - if (image_config == NULL) - { - g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR, G_DBUS_ERROR_FAILED, - "Can't open child image config"); - return G_DBUS_METHOD_INVOCATION_HANDLED; - } - state = flatpak_dir_get_remote_state (system, arg_origin, FALSE, NULL, &error); if (state == NULL) { @@ -622,15 +583,17 @@ handle_deploy (FlatpakSystemHelper *object, return G_DBUS_METHOD_INVOCATION_HANDLED; } - if (!g_str_has_prefix (desc->parent.digest, "sha256:") || - strcmp (desc->parent.digest + strlen ("sha256:"), verified_digest) != 0) + image_source_digest = flatpak_image_source_get_digest (image_source); + + if (!g_str_has_prefix (image_source_digest, "sha256:") || + strcmp (image_source_digest + strlen ("sha256:"), verified_digest) != 0) { g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR, G_DBUS_ERROR_FAILED, "%s: manifest hash in downloaded content does not match ref %s", arg_origin, arg_ref); return G_DBUS_METHOD_INVOCATION_HANDLED; } - checksum = flatpak_pull_from_oci (flatpak_dir_get_repo (system), registry, NULL, desc->parent.digest, NULL, FLATPAK_OCI_MANIFEST (versioned), image_config, + checksum = flatpak_pull_from_oci (flatpak_dir_get_repo (system), image_source, NULL, arg_origin, arg_ref, FLATPAK_PULL_FLAGS_NONE, NULL, NULL, NULL, &error); if (checksum == NULL) { From 5950438ca7f859b26f89ddde87b72e0d82ac8a5e Mon Sep 17 00:00:00 2001 From: "Owen W. Taylor" Date: Mon, 28 Oct 2024 12:35:33 -0400 Subject: [PATCH 14/53] image-source: Replace flatpak_oci_parse_commit_labels with getters Instead of having one function with a pile of out arguments in arbitrary order, add getters to FlatpakImageSource. --- app/flatpak-builtins-build-import-bundle.c | 18 ++-- common/flatpak-dir.c | 25 ++---- common/flatpak-image-source-private.h | 11 ++- common/flatpak-image-source.c | 96 ++++++++++++++++++++-- common/flatpak-json-oci-private.h | 8 -- common/flatpak-json-oci.c | 66 --------------- common/flatpak-oci-registry.c | 28 +++---- 7 files changed, 125 insertions(+), 127 deletions(-) diff --git a/app/flatpak-builtins-build-import-bundle.c b/app/flatpak-builtins-build-import-bundle.c index f3508709f7..d79fbbde12 100644 --- a/app/flatpak-builtins-build-import-bundle.c +++ b/app/flatpak-builtins-build-import-bundle.c @@ -59,30 +59,22 @@ import_oci (OstreeRepo *repo, GFile *file, GCancellable *cancellable, GError **error) { g_autofree char *commit_checksum = NULL; - g_autofree char *target_ref = NULL; g_autoptr(FlatpakImageSource) image_source = NULL; - GHashTable *labels; + const char *ref; image_source = flatpak_image_source_new_local (file, opt_ref, cancellable, error); if (image_source == NULL) return NULL; - labels = flatpak_image_source_get_labels (image_source); - flatpak_oci_parse_commit_labels (labels, NULL, NULL, NULL, - &target_ref, NULL, NULL, NULL); - if (target_ref == NULL) - { - g_set_error (error, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED, - "The OCI image didn't specify a ref, use --ref to specify one"); - return NULL; - } + ref = flatpak_image_source_get_ref (image_source); commit_checksum = flatpak_pull_from_oci (repo, image_source, NULL, - NULL, target_ref, FLATPAK_PULL_FLAGS_NONE, NULL, NULL, cancellable, error); + NULL, ref, FLATPAK_PULL_FLAGS_NONE, + NULL, NULL, cancellable, error); if (commit_checksum == NULL) return NULL; - g_print (_("Importing %s (%s)\n"), target_ref, commit_checksum); + g_print (_("Importing %s (%s)\n"), ref, commit_checksum); return g_strdup (commit_checksum); } diff --git a/common/flatpak-dir.c b/common/flatpak-dir.c index 5ad35afc30..2d1f8b3afc 100644 --- a/common/flatpak-dir.c +++ b/common/flatpak-dir.c @@ -1092,12 +1092,7 @@ flatpak_remote_state_fetch_commit_object_oci (FlatpakRemoteState *self, VarRefInfoRef latest_rev_info; VarMetadataRef metadata; const char *oci_repository = NULL; - GHashTable *labels; - g_autofree char *subject = NULL; - g_autofree char *body = NULL; - g_autofree char *manifest_ref = NULL; - g_autofree char *parent = NULL; - guint64 timestamp = 0; + const char *parent = NULL; g_autoptr(GVariantBuilder) metadata_builder = g_variant_builder_new (G_VARIANT_TYPE ("a{sv}")); g_autoptr(GVariant) metadata_v = NULL; @@ -1122,30 +1117,26 @@ flatpak_remote_state_fetch_commit_object_oci (FlatpakRemoteState *self, if (image_source == NULL) return NULL; - labels = flatpak_image_source_get_labels (image_source); - if (labels) - flatpak_oci_parse_commit_labels (labels, ×tamp, - &subject, &body, - &manifest_ref, NULL, &parent, - metadata_builder); - - - if (g_strcmp0 (manifest_ref, ref) != 0) + if (g_strcmp0 (flatpak_image_source_get_ref (image_source), ref) != 0) { flatpak_fail_error (error, FLATPAK_ERROR_INVALID_DATA, _("Commit has no requested ref ‘%s’ in ref binding metadata"), ref); return NULL; } + flatpak_image_source_build_commit_metadata (image_source, metadata_builder); metadata_v = g_variant_ref_sink (g_variant_builder_end (metadata_builder)); + parent = flatpak_image_source_get_parent_commit (image_source); + /* This isn't going to be exactly the same as the reconstructed one from the pull, because we don't have the contents, but its useful to get metadata */ return g_variant_ref_sink (g_variant_new ("(@a{sv}@ay@a(say)sst@ay@ay)", metadata_v, parent ? ostree_checksum_to_bytes_v (parent) : g_variant_new_from_data (G_VARIANT_TYPE ("ay"), NULL, 0, FALSE, NULL, NULL), g_variant_new_array (G_VARIANT_TYPE ("(say)"), NULL, 0), - subject, body, - GUINT64_TO_BE (timestamp), + flatpak_image_source_get_commit_subject (image_source), + flatpak_image_source_get_commit_body (image_source), + GUINT64_TO_BE (flatpak_image_source_get_commit_timestamp (image_source)), ostree_checksum_to_bytes_v ("0000000000000000000000000000000000000000000000000000000000000000"), ostree_checksum_to_bytes_v ("0000000000000000000000000000000000000000000000000000000000000000"))); } diff --git a/common/flatpak-image-source-private.h b/common/flatpak-image-source-private.h index ebd856a421..fe8f02ba27 100644 --- a/common/flatpak-image-source-private.h +++ b/common/flatpak-image-source-private.h @@ -52,6 +52,15 @@ FlatpakOciManifest *flatpak_image_source_get_manifest (FlatpakImageSource size_t flatpak_image_source_get_manifest_size (FlatpakImageSource *self); FlatpakOciImage *flatpak_image_source_get_image_config (FlatpakImageSource *self); -GHashTable *flatpak_image_source_get_labels (FlatpakImageSource *self); +const char *flatpak_image_source_get_ref (FlatpakImageSource *self); +const char *flatpak_image_source_get_metadata (FlatpakImageSource *self); +const char *flatpak_image_source_get_commit (FlatpakImageSource *self); +const char *flatpak_image_source_get_parent_commit (FlatpakImageSource *self); +guint64 flatpak_image_source_get_commit_timestamp (FlatpakImageSource *self); +const char *flatpak_image_source_get_commit_subject (FlatpakImageSource *self); +const char *flatpak_image_source_get_commit_body (FlatpakImageSource *self); + +void flatpak_image_source_build_commit_metadata (FlatpakImageSource *self, + GVariantBuilder *metadata_builder); #endif /* __FLATPAK_IMAGE_SOURCE_H__ */ diff --git a/common/flatpak-image-source.c b/common/flatpak-image-source.c index 30e619563f..4232550145 100644 --- a/common/flatpak-image-source.c +++ b/common/flatpak-image-source.c @@ -74,7 +74,6 @@ flatpak_image_source_new (FlatpakOciRegistry *registry, { g_autoptr(FlatpakImageSource) self = NULL; g_autoptr(FlatpakOciVersioned) versioned = NULL; - GHashTable *labels; self = g_object_new (FLATPAK_TYPE_IMAGE_SOURCE, NULL); self->registry = g_object_ref (registry); @@ -110,8 +109,7 @@ flatpak_image_source_new (FlatpakOciRegistry *registry, if (self->image_config == NULL) return NULL; - labels = flatpak_image_source_get_labels (self); - if (!g_hash_table_contains (labels, "org.flatpak.ref")) + if (flatpak_image_source_get_ref (self) == NULL) { flatpak_fail_error (error, FLATPAK_ERROR_INVALID_DATA, _("No org.flatpak.ref found in image")); return NULL; @@ -223,8 +221,94 @@ flatpak_image_source_get_image_config (FlatpakImageSource *self) return self->image_config; } -GHashTable * -flatpak_image_source_get_labels (FlatpakImageSource *self) +const char * +flatpak_image_source_get_ref (FlatpakImageSource *self) +{ + GHashTable *labels = flatpak_oci_image_get_labels (self->image_config); + + return g_hash_table_lookup (labels, "org.flatpak.ref"); +} + +const char * +flatpak_image_source_get_metadata (FlatpakImageSource *self) +{ + GHashTable *labels = flatpak_oci_image_get_labels (self->image_config); + + return g_hash_table_lookup (labels, "org.flatpak.metadata"); +} + +const char * +flatpak_image_source_get_commit (FlatpakImageSource *self) +{ + GHashTable *labels = flatpak_oci_image_get_labels (self->image_config); + + return g_hash_table_lookup (labels, "org.flatpak.commit"); +} + +const char * +flatpak_image_source_get_parent_commit (FlatpakImageSource *self) +{ + GHashTable *labels = flatpak_oci_image_get_labels (self->image_config); + + return g_hash_table_lookup (labels, "org.flatpak.parent-commit"); +} + +guint64 +flatpak_image_source_get_commit_timestamp (FlatpakImageSource *self) { - return flatpak_oci_image_get_labels (self->image_config); + GHashTable *labels = flatpak_oci_image_get_labels (self->image_config); + const char *oci_timestamp = g_hash_table_lookup (labels, "org.flatpak.timestamp"); + + if (oci_timestamp != NULL) + return g_ascii_strtoull (oci_timestamp, NULL, 10); + else + return 0; +} + +const char * +flatpak_image_source_get_commit_subject (FlatpakImageSource *self) +{ + GHashTable *labels = flatpak_oci_image_get_labels (self->image_config); + + return g_hash_table_lookup (labels, "org.flatpak.subject"); +} + +const char * +flatpak_image_source_get_commit_body (FlatpakImageSource *self) +{ + GHashTable *labels = flatpak_oci_image_get_labels (self->image_config); + + return g_hash_table_lookup (labels, "org.flatpak.body"); +} + +void +flatpak_image_source_build_commit_metadata (FlatpakImageSource *self, + GVariantBuilder *metadata_builder) +{ + GHashTable *labels = flatpak_oci_image_get_labels (self->image_config); + GHashTableIter iter; + const char *key; + const char *value; + + g_hash_table_iter_init (&iter, labels); + while (g_hash_table_iter_next (&iter, (gpointer *)&key, (gpointer *)&value)) + { + g_autoptr(GVariant) data = NULL; + uint8_t *bin; + size_t bin_len; + + if (!g_str_has_prefix (key, "org.flatpak.commit-metadata.")) + continue; + + key += strlen ("org.flatpak.commit-metadata."); + + bin = g_base64_decode (value, &bin_len); + data = g_variant_ref_sink (g_variant_new_from_data (G_VARIANT_TYPE ("v"), + bin, + bin_len, + FALSE, + g_free, + bin)); + g_variant_builder_add (metadata_builder, "{s@v}", key, data); + } } diff --git a/common/flatpak-json-oci-private.h b/common/flatpak-json-oci-private.h index edb22eeb09..87573c1711 100644 --- a/common/flatpak-json-oci-private.h +++ b/common/flatpak-json-oci-private.h @@ -246,14 +246,6 @@ void flatpak_oci_add_labels_for_commit (GHashTable *labels, const char *ref, const char *commit, GVariant *commit_data); -void flatpak_oci_parse_commit_labels (GHashTable *labels, - guint64 *out_timestamp, - char **out_subject, - char **out_body, - char **out_ref, - char **out_commit, - char **out_parent_commit, - GVariantBuilder *metadata_builder); #define FLATPAK_TYPE_OCI_SIGNATURE flatpak_oci_signature_get_type () G_DECLARE_FINAL_TYPE (FlatpakOciSignature, flatpak_oci_signature, FLATPAK, OCI_SIGNATURE, FlatpakJson) diff --git a/common/flatpak-json-oci.c b/common/flatpak-json-oci.c index 42647d1191..2b55b9de70 100644 --- a/common/flatpak-json-oci.c +++ b/common/flatpak-json-oci.c @@ -927,72 +927,6 @@ flatpak_oci_add_labels_for_commit (GHashTable *labels, } } -void -flatpak_oci_parse_commit_labels (GHashTable *labels, - guint64 *out_timestamp, - char **out_subject, - char **out_body, - char **out_ref, - char **out_commit, - char **out_parent_commit, - GVariantBuilder *metadata_builder) -{ - const char *oci_timestamp, *oci_subject, *oci_body, *oci_parent_commit, *oci_commit, *oci_ref; - GHashTableIter iter; - gpointer _key, _value; - - oci_ref = g_hash_table_lookup (labels, "org.flatpak.ref"); - - /* Early return if this is not a flatpak manifest */ - if (oci_ref == NULL) - return; - - if (oci_ref != NULL && out_ref != NULL && *out_ref == NULL) - *out_ref = g_strdup (oci_ref); - - oci_commit = g_hash_table_lookup (labels, "org.flatpak.commit"); - if (oci_commit != NULL && out_commit != NULL && *out_commit == NULL) - *out_commit = g_strdup (oci_commit); - - oci_parent_commit = g_hash_table_lookup (labels, "org.flatpak.parent-commit"); - if (oci_parent_commit != NULL && out_parent_commit != NULL && *out_parent_commit == NULL) - *out_parent_commit = g_strdup (oci_parent_commit); - - oci_timestamp = g_hash_table_lookup (labels, "org.flatpak.timestamp"); - if (oci_timestamp != NULL && out_timestamp != NULL && *out_timestamp == 0) - *out_timestamp = g_ascii_strtoull (oci_timestamp, NULL, 10); - - oci_subject = g_hash_table_lookup (labels, "org.flatpak.subject"); - if (oci_subject != NULL && out_subject != NULL && *out_subject == NULL) - *out_subject = g_strdup (oci_subject); - - oci_body = g_hash_table_lookup (labels, "org.flatpak.body"); - if (oci_body != NULL && out_body != NULL && *out_body == NULL) - *out_body = g_strdup (oci_body); - - if (metadata_builder) - { - g_hash_table_iter_init (&iter, labels); - while (g_hash_table_iter_next (&iter, &_key, &_value)) - { - const char *key = _key; - const char *value = _value; - guchar *bin; - gsize bin_len; - g_autoptr(GVariant) data = NULL; - - if (!g_str_has_prefix (key, "org.flatpak.commit-metadata.")) - continue; - key += strlen ("org.flatpak.commit-metadata."); - - bin = g_base64_decode (value, &bin_len); - data = g_variant_ref_sink (g_variant_new_from_data (G_VARIANT_TYPE ("v"), bin, bin_len, FALSE, - g_free, bin)); - g_variant_builder_add (metadata_builder, "{s@v}", key, data); - } - } -} - G_DEFINE_TYPE (FlatpakOciSignature, flatpak_oci_signature, FLATPAK_TYPE_JSON); diff --git a/common/flatpak-oci-registry.c b/common/flatpak-oci-registry.c index 11b5f98d81..ad05c9f025 100644 --- a/common/flatpak-oci-registry.c +++ b/common/flatpak-oci-registry.c @@ -3610,28 +3610,18 @@ flatpak_pull_from_oci (OstreeRepo *repo, g_autofree char *old_diffid = NULL; g_autofree char *commit_checksum = NULL; const char *parent = NULL; - g_autofree char *subject = NULL; - g_autofree char *body = NULL; - g_autofree char *manifest_ref = NULL; + const char *manifest_ref = NULL; g_autofree char *full_ref = NULL; const char *diffid; - guint64 timestamp = 0; FlatpakOciPullProgressData progress_data = { progress_cb, progress_user_data }; g_autoptr(GVariantBuilder) metadata_builder = g_variant_builder_new (G_VARIANT_TYPE ("a{sv}")); g_autoptr(GVariant) metadata = NULL; - GHashTable *labels; int n_layers; int i; - g_assert (ref != NULL); g_assert (g_str_has_prefix (digest, "sha256:")); - labels = flatpak_oci_image_get_labels (image_config); - if (labels) - flatpak_oci_parse_commit_labels (labels, ×tamp, - &subject, &body, - &manifest_ref, NULL, NULL, - metadata_builder); + manifest_ref = flatpak_image_source_get_ref (image_source); if (manifest_ref == NULL) { @@ -3639,12 +3629,18 @@ flatpak_pull_from_oci (OstreeRepo *repo, return NULL; } - if (strcmp (manifest_ref, ref) != 0) + if (ref == NULL) + { + ref = manifest_ref; + } + else if (g_strcmp0 (manifest_ref, ref) != 0) { flatpak_fail_error (error, FLATPAK_ERROR_INVALID_DATA, _("Wrong ref (%s) specified for OCI image %s, expected %s"), manifest_ref, digest, ref); return NULL; } + flatpak_image_source_build_commit_metadata (image_source, metadata_builder); + g_variant_builder_add (metadata_builder, "{s@v}", "xa.alt-id", g_variant_new_variant (g_variant_new_string (digest + strlen ("sha256:")))); @@ -3818,11 +3814,11 @@ flatpak_pull_from_oci (OstreeRepo *repo, metadata = g_variant_ref_sink (g_variant_builder_end (metadata_builder)); if (!ostree_repo_write_commit_with_time (repo, parent, - subject, - body, + flatpak_image_source_get_commit_subject (image_source), + flatpak_image_source_get_commit_body (image_source), metadata, OSTREE_REPO_FILE (archive_root), - timestamp, + flatpak_image_source_get_commit_timestamp (image_source), &commit_checksum, cancellable, error)) goto error; From 15560e87e0e47399c777e13056eeaa8c7a5b63f5 Mon Sep 17 00:00:00 2001 From: Sebastian Wick Date: Wed, 18 Dec 2024 00:32:32 +0100 Subject: [PATCH 15/53] transaction: Typedef structs directly --- common/flatpak-transaction.c | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/common/flatpak-transaction.c b/common/flatpak-transaction.c index 7339acab7e..8a16cc1ea0 100644 --- a/common/flatpak-transaction.c +++ b/common/flatpak-transaction.c @@ -138,15 +138,11 @@ struct _FlatpakTransactionOperation GPtrArray *related_to_ops; /* (element-type FlatpakTransactionOperation) (nullable) */ }; -typedef struct _FlatpakTransactionPrivate FlatpakTransactionPrivate; - -typedef struct _BundleData BundleData; - -struct _BundleData +typedef struct _BundleData { GFile *file; GBytes *gpg_data; -}; +} BundleData; typedef struct { FlatpakTransaction *transaction; @@ -157,7 +153,7 @@ typedef struct { GVariant *results; } RequestData; -struct _FlatpakTransactionPrivate +typedef struct _FlatpakTransactionPrivate { GObject parent; @@ -198,7 +194,7 @@ struct _FlatpakTransactionPrivate gboolean needs_resolve; gboolean needs_tokens; -}; +} FlatpakTransactionPrivate; enum { NEW_OPERATION, From 0bfc82a8a3bf5b58d6c8d93fb2432c26a232950e Mon Sep 17 00:00:00 2001 From: Sebastian Wick Date: Wed, 18 Dec 2024 00:38:15 +0100 Subject: [PATCH 16/53] transaction: Use g_clear_pointer/object functions for op finalize --- common/flatpak-transaction.c | 45 +++++++++++++++--------------------- 1 file changed, 18 insertions(+), 27 deletions(-) diff --git a/common/flatpak-transaction.c b/common/flatpak-transaction.c index 8a16cc1ea0..7039d86e25 100644 --- a/common/flatpak-transaction.c +++ b/common/flatpak-transaction.c @@ -593,34 +593,25 @@ flatpak_transaction_operation_finalize (GObject *object) { FlatpakTransactionOperation *self = (FlatpakTransactionOperation *) object; - g_free (self->remote); - flatpak_decomposed_unref (self->ref); - g_free (self->commit); - g_strfreev (self->subpaths); + g_clear_pointer (&self->remote, g_free); + g_clear_pointer (&self->ref, flatpak_decomposed_unref); + g_clear_pointer (&self->commit, g_free); + g_clear_pointer (&self->subpaths, g_strfreev); g_clear_object (&self->bundle); - g_free (self->eol); - g_free (self->eol_rebase); - if (self->previous_ids) - g_strfreev (self->previous_ids); - if (self->external_metadata) - g_bytes_unref (self->external_metadata); - g_free (self->resolved_commit); - if (self->resolved_sideload_path) - g_object_unref (self->resolved_sideload_path); - if (self->resolved_metadata) - g_bytes_unref (self->resolved_metadata); - if (self->resolved_metakey) - g_key_file_unref (self->resolved_metakey); - if (self->resolved_old_metadata) - g_bytes_unref (self->resolved_old_metadata); - if (self->resolved_old_metakey) - g_key_file_unref (self->resolved_old_metakey); - g_free (self->resolved_token); - g_list_free (self->run_before_ops); - if (self->related_to_ops) - g_ptr_array_unref (self->related_to_ops); - if (self->summary_metadata) - g_variant_unref (self->summary_metadata); + g_clear_pointer (&self->eol, g_free); + g_clear_pointer (&self->eol_rebase, g_free); + g_clear_pointer (&self->previous_ids, g_strfreev); + g_clear_pointer (&self->external_metadata, g_bytes_unref); + g_clear_pointer (&self->resolved_commit, g_free); + g_clear_object (&self->resolved_sideload_path); + g_clear_pointer (&self->resolved_metadata, g_bytes_unref); + g_clear_pointer (&self->resolved_metakey, g_key_file_unref); + g_clear_pointer (&self->resolved_old_metadata, g_bytes_unref); + g_clear_pointer (&self->resolved_old_metakey, g_key_file_unref); + g_clear_pointer (&self->resolved_token, g_free); + g_clear_pointer (&self->run_before_ops, g_list_free); + g_clear_pointer (&self->related_to_ops, g_ptr_array_unref); + g_clear_pointer (&self->summary_metadata, g_variant_unref); G_OBJECT_CLASS (flatpak_transaction_operation_parent_class)->finalize (object); } From dc56bda820ac0cd2a8c18f9f9aee3ec9a9ba571e Mon Sep 17 00:00:00 2001 From: "Owen W. Taylor" Date: Wed, 18 Dec 2024 00:46:33 +0100 Subject: [PATCH 17/53] image-source: Add flatpak_image_source_new_for_location Which allows one to create an image source from a container location. It also adds a new FlatpakDockerReference to access different parts of a docker reference and changes to FlatpakOciIndex to get a manifest for a specific architecture. This will become useful in the next commit when we're going to add support for installing OCI images. --- common/flatpak-docker-reference-private.h | 20 ++++ common/flatpak-docker-reference.c | 140 ++++++++++++++++++++++ common/flatpak-image-source-private.h | 3 + common/flatpak-image-source.c | 123 +++++++++++++++++++ common/flatpak-json-oci-private.h | 4 +- common/flatpak-json-oci.c | 21 ++++ common/meson.build | 1 + 7 files changed, 311 insertions(+), 1 deletion(-) create mode 100644 common/flatpak-docker-reference-private.h create mode 100644 common/flatpak-docker-reference.c diff --git a/common/flatpak-docker-reference-private.h b/common/flatpak-docker-reference-private.h new file mode 100644 index 0000000000..8205064c51 --- /dev/null +++ b/common/flatpak-docker-reference-private.h @@ -0,0 +1,20 @@ +#ifndef __FLATPAK_DOCKER_REFERENCE_H__ +#define __FLATPAK_DOCKER_REFERENCE_H__ + +#include + +typedef struct _FlatpakDockerReference FlatpakDockerReference; + +FlatpakDockerReference *flatpak_docker_reference_parse (const char *reference_str, + GError **error); + +const char *flatpak_docker_reference_get_uri (FlatpakDockerReference *reference); +const char *flatpak_docker_reference_get_repository (FlatpakDockerReference *reference); +const char *flatpak_docker_reference_get_tag (FlatpakDockerReference *reference); +const char *flatpak_docker_reference_get_digest (FlatpakDockerReference *reference); + +void flatpak_docker_reference_free (FlatpakDockerReference *reference); + +G_DEFINE_AUTOPTR_CLEANUP_FUNC(FlatpakDockerReference, flatpak_docker_reference_free); + +#endif /* __FLATPAK_DOCKER_REFERENCE_H__ */ diff --git a/common/flatpak-docker-reference.c b/common/flatpak-docker-reference.c new file mode 100644 index 0000000000..6df3011f77 --- /dev/null +++ b/common/flatpak-docker-reference.c @@ -0,0 +1,140 @@ +/* vi:set et sw=2 sts=2 cin cino=t0,f0,(0,{s,>2s,n-s,^-s,e-s: + * Copyright © 2024 Red Hat, Inc + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. If not, see . + * + * Authors: + * Owen Taylor + */ + +#include "flatpak-docker-reference-private.h" +#include "flatpak-utils-private.h" + +struct _FlatpakDockerReference +{ + char *uri; + char *repository; + char *tag; + char *digest; +}; + +/* + * Parsing here is loosely based off: + * + * https://github.com/containers/image/tree/main/docker/reference + * + * The major simplification is that we require a domain component, and + * don't have any default domain. This removes ambiguity between domains and paths + * and makes parsing much simpler. We also don't normalize single component + * paths (e.g. ubuntu => library/ubuntu.) + */ + +#define TAG "[0-9A-Za-z_][0-9A-Za-z_-]{0,127}" +#define DIGEST "[A-Za-z][A-Za-z0-9]*(?:[-_+.][A-Za-z][A-Za-z0-9]*)*[:][[:xdigit:]]{32,}" +#define REMAINDER_TAG_AND_DIGEST_RE "^(.*?)(:" TAG ")?" "(@" DIGEST ")?$" + +static GRegex * +get_remainder_tag_and_digest_regex (void) +{ + static gsize regex = 0; + + if (g_once_init_enter (®ex)) + { + g_autoptr(GRegex) compiled = g_regex_new (REMAINDER_TAG_AND_DIGEST_RE, + G_REGEX_DEFAULT, + G_REGEX_MATCH_DEFAULT, + NULL); + g_once_init_leave (®ex, (gsize)g_steal_pointer (&compiled)); + } + + return (GRegex *)regex; +} + +FlatpakDockerReference * +flatpak_docker_reference_parse (const char *reference_str, + GError **error) +{ + g_autoptr(FlatpakDockerReference) reference = g_new0 (FlatpakDockerReference, 1); + GRegex *regex = get_remainder_tag_and_digest_regex (); + g_autoptr(GMatchInfo) match_info = NULL; + g_autofree char *tag_match = NULL; + g_autofree char *digest_match = NULL; + g_autofree char *remainder = NULL; + g_autofree char *domain = NULL; + gboolean matched; + const char *slash; + + matched = g_regex_match (regex, reference_str, G_REGEX_MATCH_DEFAULT, &match_info); + g_assert (matched); + + tag_match = g_match_info_fetch (match_info, 2); + if (tag_match[0] == '\0') + reference->tag = NULL; + else + reference->tag = g_strdup (tag_match + 1); + + digest_match = g_match_info_fetch (match_info, 3); + if (digest_match[0] == '\0') + reference->digest = NULL; + else + reference->digest = g_strdup (digest_match + 1); + + remainder = g_match_info_fetch (match_info, 1); + slash = strchr (remainder, '/'); + if (slash == NULL || slash == reference_str || *slash == '\0') + { + flatpak_fail(error, "Can't parse %s into /", remainder); + return NULL; + } + + domain = g_strndup (remainder, slash - remainder); + reference->uri = g_strconcat ("https://", domain, NULL); + reference->repository = g_strdup (slash + 1); + + return g_steal_pointer (&reference); +} + +const char * +flatpak_docker_reference_get_uri (FlatpakDockerReference *reference) +{ + return reference->uri; +} + +const char * +flatpak_docker_reference_get_repository (FlatpakDockerReference *reference) +{ + return reference->repository; +} + +const char * +flatpak_docker_reference_get_tag (FlatpakDockerReference *reference) +{ + return reference->tag; +} + +const char * +flatpak_docker_reference_get_digest (FlatpakDockerReference *reference) +{ + return reference->digest; +} + +void +flatpak_docker_reference_free (FlatpakDockerReference *reference) +{ + g_clear_pointer (&reference->uri, g_free); + g_clear_pointer (&reference->repository, g_free); + g_clear_pointer (&reference->tag, g_free); + g_clear_pointer (&reference->digest, g_free); + g_free (reference); +} diff --git a/common/flatpak-image-source-private.h b/common/flatpak-image-source-private.h index fe8f02ba27..b1e5d2fabe 100644 --- a/common/flatpak-image-source-private.h +++ b/common/flatpak-image-source-private.h @@ -41,6 +41,9 @@ FlatpakImageSource *flatpak_image_source_new_remote (const char *uri, const char *digest, GCancellable *cancellable, GError **error); +FlatpakImageSource *flatpak_image_source_new_for_location (const char *location, + GCancellable *cancellable, + GError **error); void flatpak_image_source_set_token (FlatpakImageSource *self, const char *token); diff --git a/common/flatpak-image-source.c b/common/flatpak-image-source.c index 4232550145..9ccb284f7e 100644 --- a/common/flatpak-image-source.c +++ b/common/flatpak-image-source.c @@ -20,6 +20,7 @@ #include +#include "flatpak-docker-reference-private.h" #include "flatpak-image-source-private.h" #include "flatpak-oci-registry-private.h" @@ -178,6 +179,128 @@ flatpak_image_source_new_remote (const char *uri, return flatpak_image_source_new (registry, oci_repository, digest, cancellable, error); } +/* Parse an oci: or oci-archive: image location into a path + * and an optional reference + */ +static void +get_path_and_reference (const char *image_location, + GFile **path, + char **reference) +{ + g_autofree char *path_str = NULL; + const char *bare; + const char *colon; + + colon = strchr (image_location, ':'); + g_assert (colon != NULL); + + bare = colon + 1; + colon = strchr (bare, ':'); + + if (colon) + { + path_str = g_strndup (bare, colon - bare); + *reference = g_strdup (colon + 1); + } + else + { + path_str = g_strdup (bare); + *reference = NULL; + } + + *path = g_file_new_for_path (path_str); +} + +FlatpakImageSource * +flatpak_image_source_new_for_location (const char *location, + GCancellable *cancellable, + GError **error) +{ + if (g_str_has_prefix (location, "oci:")) + { + g_autoptr(GFile) path = NULL; + g_autofree char *reference = NULL; + + get_path_and_reference (location, &path, &reference); + + return flatpak_image_source_new_local (path, reference, cancellable, error); + } + else if (g_str_has_prefix (location, "docker:")) + { + g_autoptr(FlatpakOciRegistry) registry = NULL; + g_autoptr(FlatpakDockerReference) docker_reference = NULL; + g_autofree char *local_digest = NULL; + const char *repository = NULL; + + if (!g_str_has_prefix (location, "docker://")) + { + flatpak_fail (error, "docker: location must start docker://"); + return NULL; + } + + docker_reference = flatpak_docker_reference_parse (location + 9, error); + if (docker_reference == NULL) + return NULL; + + registry = flatpak_oci_registry_new (flatpak_docker_reference_get_uri (docker_reference), + FALSE, -1, cancellable, error); + if (registry == NULL) + return NULL; + + repository = flatpak_docker_reference_get_repository (docker_reference); + + local_digest = g_strdup (flatpak_docker_reference_get_digest (docker_reference)); + if (local_digest == NULL) + { + g_autoptr(GBytes) bytes = NULL; + g_autoptr(FlatpakOciVersioned) versioned = NULL; + const char *tag = flatpak_docker_reference_get_tag (docker_reference); + + if (tag == NULL) + tag = "latest"; + + bytes = flatpak_oci_registry_load_blob (registry, repository, TRUE, tag, + NULL, NULL, cancellable, error); + if (!bytes) + return NULL; + + versioned = flatpak_oci_versioned_from_json (bytes, NULL, error); + if (!versioned) + return NULL; + + if (FLATPAK_IS_OCI_MANIFEST (versioned)) + { + g_autofree char *checksum = NULL; + + checksum = g_compute_checksum_for_bytes (G_CHECKSUM_SHA256, bytes); + local_digest = g_strconcat ("sha256:", checksum, NULL); + } + else if (FLATPAK_IS_OCI_INDEX (versioned)) + { + const char *oci_arch = flatpak_arch_to_oci_arch (flatpak_get_arch ()); + FlatpakOciManifestDescriptor *descriptor; + + descriptor = flatpak_oci_index_get_manifest_for_arch (FLATPAK_OCI_INDEX (versioned), oci_arch); + if (descriptor == NULL) + { + flatpak_fail_error (error, FLATPAK_ERROR_INVALID_DATA, + "Can't find manifest for %s in image index", oci_arch); + return NULL; + } + + local_digest = g_strdup (descriptor->parent.digest); + } + } + + return flatpak_image_source_new (registry, repository, local_digest, cancellable, error); + } + else + { + flatpak_fail (error, "unsupported image location: %s", location); + return NULL; + } +} + void flatpak_image_source_set_token (FlatpakImageSource *self, const char *token) diff --git a/common/flatpak-json-oci-private.h b/common/flatpak-json-oci-private.h index 87573c1711..e8924ee4eb 100644 --- a/common/flatpak-json-oci-private.h +++ b/common/flatpak-json-oci-private.h @@ -166,8 +166,10 @@ gboolean flatpak_oci_index_remove_manifest (FlatpakOciIndex FlatpakOciManifestDescriptor *flatpak_oci_index_get_manifest (FlatpakOciIndex *self, const char *ref); FlatpakOciManifestDescriptor *flatpak_oci_index_get_only_manifest (FlatpakOciIndex *self); -int flatpak_oci_index_get_n_manifests (FlatpakOciIndex *self); +FlatpakOciManifestDescriptor *flatpak_oci_index_get_manifest_for_arch (FlatpakOciIndex *self, + const char *oci_arch); +int flatpak_oci_index_get_n_manifests (FlatpakOciIndex *self); /* Only useful for delta index */ FlatpakOciDescriptor *flatpak_oci_index_find_delta_for (FlatpakOciIndex *delta_index, const char *for_digest); diff --git a/common/flatpak-json-oci.c b/common/flatpak-json-oci.c index 2b55b9de70..3a339a0268 100644 --- a/common/flatpak-json-oci.c +++ b/common/flatpak-json-oci.c @@ -577,6 +577,27 @@ flatpak_oci_index_get_only_manifest (FlatpakOciIndex *self) return NULL; } +FlatpakOciManifestDescriptor * +flatpak_oci_index_get_manifest_for_arch (FlatpakOciIndex *self, + const char *oci_arch) +{ + int i, found = -1; + + if (self->manifests == NULL) + return NULL; + + for (i = 0; self->manifests[i] != NULL; i++) + { + if (strcmp (self->manifests[i]->platform.architecture, oci_arch) == 0) + return self->manifests[i]; + } + + if (found >= 0) + return self->manifests[found]; + + return NULL; +} + gboolean flatpak_oci_index_remove_manifest (FlatpakOciIndex *self, const char *ref) diff --git a/common/meson.build b/common/meson.build index 67627538de..5aee3cd92b 100644 --- a/common/meson.build +++ b/common/meson.build @@ -186,6 +186,7 @@ sources = [ 'flatpak-context.c', 'flatpak-dir.c', 'flatpak-dir-utils.c', + 'flatpak-docker-reference.c', 'flatpak-error.c', 'flatpak-exports.c', 'flatpak-glib-backports.c', From 806fc83cd6adde6560b9f85f849c7586896dbdf9 Mon Sep 17 00:00:00 2001 From: "Owen W. Taylor" Date: Wed, 18 Dec 2024 00:52:27 +0100 Subject: [PATCH 18/53] common: Add OCI image installation support --- common/flatpak-dir-private.h | 3 + common/flatpak-dir.c | 131 ++++++++++-------- common/flatpak-installation.c | 4 +- common/flatpak-transaction.c | 183 +++++++++++++++++++++++--- common/flatpak-transaction.h | 4 + system-helper/flatpak-system-helper.c | 6 +- 6 files changed, 252 insertions(+), 79 deletions(-) diff --git a/common/flatpak-dir-private.h b/common/flatpak-dir-private.h index ca000602a9..3642425d29 100644 --- a/common/flatpak-dir-private.h +++ b/common/flatpak-dir-private.h @@ -574,6 +574,7 @@ gboolean flatpak_dir_pull (Fla const char *opt_rev, const char **subpaths, GFile *sideload_repo, + FlatpakImageSource *opt_image_source, GBytes *require_metadata, const char *token, OstreeRepo *repo, @@ -695,6 +696,7 @@ gboolean flatpak_dir_install (Fla const char **subpaths, const char **previous_ids, GFile *sideload_repo, + FlatpakImageSource *opt_image_source, GBytes *require_metadata, const char *token, FlatpakProgress *progress, @@ -741,6 +743,7 @@ gboolean flatpak_dir_update (Fla const char **opt_subpaths, const char **opt_previous_ids, GFile *sideload_repo, + FlatpakImageSource *opt_image_source, GBytes *require_metadata, const char *token, FlatpakProgress *progress, diff --git a/common/flatpak-dir.c b/common/flatpak-dir.c index 2d1f8b3afc..7a9b4e5b59 100644 --- a/common/flatpak-dir.c +++ b/common/flatpak-dir.c @@ -123,7 +123,7 @@ static gboolean flatpak_dir_mirror_oci (FlatpakDir *self, FlatpakRemoteState *state, const char *ref, const char *opt_rev, - const char *skip_if_current_is, + FlatpakImageSource *opt_image_source, const char *token, FlatpakProgress *progress, GCancellable *cancellable, @@ -5307,7 +5307,7 @@ flatpak_dir_update_appstream (FlatpakDir *self, if (child_repo == NULL) return FALSE; - if (!flatpak_dir_pull (self, state, used_branch, appstream_commit, NULL, appstream_sideload_path, NULL, NULL, + if (!flatpak_dir_pull (self, state, used_branch, appstream_commit, NULL, appstream_sideload_path, NULL, NULL, NULL, child_repo, FLATPAK_PULL_FLAGS_NONE, 0, progress, cancellable, error)) { @@ -5351,7 +5351,7 @@ flatpak_dir_update_appstream (FlatpakDir *self, } - if (!flatpak_dir_pull (self, state, used_branch, appstream_commit, NULL, appstream_sideload_path, NULL, NULL, NULL, + if (!flatpak_dir_pull (self, state, used_branch, appstream_commit, NULL, appstream_sideload_path, NULL, NULL, NULL, NULL, FLATPAK_PULL_FLAGS_NONE, OSTREE_REPO_PULL_FLAGS_NONE, progress, cancellable, error)) { @@ -5903,7 +5903,7 @@ flatpak_dir_mirror_oci (FlatpakDir *self, FlatpakRemoteState *state, const char *ref, const char *opt_rev, - const char *skip_if_current_is, + FlatpakImageSource *opt_image_source, const char *token, FlatpakProgress *progress, GCancellable *cancellable, @@ -5911,40 +5911,42 @@ flatpak_dir_mirror_oci (FlatpakDir *self, { g_autoptr(FlatpakImageSource) image_source = NULL; g_autofree char *oci_digest = NULL; - g_autofree char *latest_rev = NULL; - VarRefInfoRef latest_rev_info; - VarMetadataRef metadata; - const char *oci_repository = NULL; const char *delta_url = NULL; - const char *rev; gboolean res; - /* We use the summary so that we can reuse any cached json */ - if (!flatpak_remote_state_lookup_ref (state, ref, &latest_rev, NULL, &latest_rev_info, NULL, error)) - return FALSE; - if (latest_rev == NULL) - return flatpak_fail_error (error, FLATPAK_ERROR_REF_NOT_FOUND, - _("Couldn't find latest checksum for ref %s in remote %s"), - ref, state->remote_name); - - rev = opt_rev != NULL ? opt_rev : latest_rev; - - if (skip_if_current_is != NULL && strcmp (rev, skip_if_current_is) == 0) + if (opt_image_source) { - return flatpak_fail_error (error, FLATPAK_ERROR_ALREADY_INSTALLED, - _("%s commit %s already installed"), - ref, rev); + image_source = g_object_ref (opt_image_source); + oci_digest = g_strdup (flatpak_image_source_get_digest (image_source)); } + else + { + g_autofree char *latest_rev = NULL; + VarRefInfoRef latest_rev_info; + VarMetadataRef metadata; + const char *oci_repository = NULL; + const char *rev; - metadata = var_ref_info_get_metadata (latest_rev_info); - oci_repository = var_metadata_lookup_string (metadata, "xa.oci-repository", NULL); - delta_url = var_metadata_lookup_string (metadata, "xa.delta-url", NULL); + /* We use the summary so that we can reuse any cached json */ + if (!flatpak_remote_state_lookup_ref (state, ref, &latest_rev, NULL, &latest_rev_info, NULL, error)) + return FALSE; + if (latest_rev == NULL) + return flatpak_fail_error (error, FLATPAK_ERROR_REF_NOT_FOUND, + _("Couldn't find latest checksum for ref %s in remote %s"), + ref, state->remote_name); - oci_digest = g_strconcat ("sha256:", rev, NULL); + rev = opt_rev != NULL ? opt_rev : latest_rev; - image_source = flatpak_remote_state_new_image_source (state, oci_repository, oci_digest, token, cancellable, error); - if (image_source == NULL) - return FALSE; + metadata = var_ref_info_get_metadata (latest_rev_info); + oci_repository = var_metadata_lookup_string (metadata, "xa.oci-repository", NULL); + delta_url = var_metadata_lookup_string (metadata, "xa.delta-url", NULL); + + oci_digest = g_strconcat ("sha256:", rev, NULL); + + image_source = flatpak_remote_state_new_image_source (state, oci_repository, oci_digest, token, cancellable, error); + if (image_source == NULL) + return FALSE; + } flatpak_progress_start_oci_pull (progress); @@ -5964,6 +5966,7 @@ flatpak_dir_pull_oci (FlatpakDir *self, FlatpakRemoteState *state, const char *ref, const char *opt_rev, + FlatpakImageSource *opt_image_source, OstreeRepo *repo, FlatpakPullFlags flatpak_flags, OstreeRepoPullFlags flags, @@ -5974,40 +5977,49 @@ flatpak_dir_pull_oci (FlatpakDir *self, { g_autoptr(FlatpakImageSource) image_source = NULL; FlatpakOciRegistry *registry = NULL; - const char *oci_repository = NULL; const char *delta_url = NULL; g_autofree char *oci_digest = NULL; g_autofree char *checksum = NULL; - VarRefInfoRef latest_rev_info; g_autofree char *latest_alt_commit = NULL; - VarMetadataRef metadata; - g_autofree char *latest_rev = NULL; G_GNUC_UNUSED g_autofree char *latest_commit = flatpak_dir_read_latest (self, state->remote_name, ref, &latest_alt_commit, cancellable, NULL); g_autofree char *name = NULL; - /* We use the summary so that we can reuse any cached json */ - if (!flatpak_remote_state_lookup_ref (state, ref, &latest_rev, NULL, &latest_rev_info, NULL, error)) - return FALSE; - if (latest_rev == NULL) - return flatpak_fail_error (error, FLATPAK_ERROR_REF_NOT_FOUND, - _("Couldn't find latest checksum for ref %s in remote %s"), - ref, state->remote_name); + if (opt_image_source) + { + image_source = g_object_ref (opt_image_source); + oci_digest = g_strdup (flatpak_image_source_get_digest (image_source)); + } + else + { + VarMetadataRef metadata; + VarRefInfoRef latest_rev_info; + const char *oci_repository = NULL; + g_autofree char *latest_rev = NULL; - metadata = var_ref_info_get_metadata (latest_rev_info); - oci_repository = var_metadata_lookup_string (metadata, "xa.oci-repository", NULL); - delta_url = var_metadata_lookup_string (metadata, "xa.delta-url", NULL); + /* We use the summary so that we can reuse any cached json */ + if (!flatpak_remote_state_lookup_ref (state, ref, &latest_rev, NULL, &latest_rev_info, NULL, error)) + return FALSE; + if (latest_rev == NULL) + return flatpak_fail_error (error, FLATPAK_ERROR_REF_NOT_FOUND, + _("Couldn't find latest checksum for ref %s in remote %s"), + ref, state->remote_name); + + metadata = var_ref_info_get_metadata (latest_rev_info); + oci_repository = var_metadata_lookup_string (metadata, "xa.oci-repository", NULL); + delta_url = var_metadata_lookup_string (metadata, "xa.delta-url", NULL); + + oci_digest = g_strconcat ("sha256:", opt_rev != NULL ? opt_rev : latest_rev, NULL); - oci_digest = g_strconcat ("sha256:", opt_rev != NULL ? opt_rev : latest_rev, NULL); + image_source = flatpak_remote_state_new_image_source (state, oci_repository, oci_digest, token, cancellable, error); + if (image_source == NULL) + return FALSE; + } /* Short circuit if we've already got this commit */ if (latest_alt_commit != NULL && strcmp (oci_digest + strlen ("sha256:"), latest_alt_commit) == 0) return TRUE; - image_source = flatpak_remote_state_new_image_source (state, oci_repository, oci_digest, token, cancellable, error); - if (image_source == NULL) - return FALSE; - if (repo == NULL) repo = self->repo; @@ -6046,6 +6058,7 @@ flatpak_dir_pull (FlatpakDir *self, const char *opt_rev, const char **subpaths, GFile *sideload_repo, + FlatpakImageSource *opt_image_source, GBytes *require_metadata, const char *token, OstreeRepo *repo, @@ -6076,8 +6089,8 @@ flatpak_dir_pull (FlatpakDir *self, if (repo == NULL && !flatpak_dir_repo_lock (self, &lock, LOCK_SH, cancellable, error)) return FALSE; - if (flatpak_dir_get_remote_oci (self, state->remote_name)) - return flatpak_dir_pull_oci (self, state, ref, opt_rev, repo, flatpak_flags, + if (opt_image_source || flatpak_dir_get_remote_oci (self, state->remote_name)) + return flatpak_dir_pull_oci (self, state, ref, opt_rev, opt_image_source, repo, flatpak_flags, flags, token, progress, cancellable, error); if (!ostree_repo_remote_get_url (self->repo, @@ -9849,6 +9862,7 @@ flatpak_dir_install (FlatpakDir *self, const char **opt_subpaths, const char **opt_previous_ids, GFile *sideload_repo, + FlatpakImageSource *opt_image_source, GBytes *require_metadata, const char *token, FlatpakProgress *progress, @@ -9913,7 +9927,8 @@ flatpak_dir_install (FlatpakDir *self, child_repo_path = g_file_get_path (registry_file); - if (!flatpak_dir_mirror_oci (self, registry, state, flatpak_decomposed_get_ref (ref), opt_commit, NULL, token, progress, cancellable, error)) + if (!flatpak_dir_mirror_oci (self, registry, state, flatpak_decomposed_get_ref (ref), + opt_commit, opt_image_source, token, progress, cancellable, error)) return FALSE; } else if (!gpg_verify_summary || !gpg_verify) @@ -10007,7 +10022,7 @@ flatpak_dir_install (FlatpakDir *self, flatpak_flags |= FLATPAK_PULL_FLAGS_SIDELOAD_EXTRA_DATA; - if (!flatpak_dir_pull (self, state, flatpak_decomposed_get_ref (ref), opt_commit, subpaths, sideload_repo, require_metadata, token, + if (!flatpak_dir_pull (self, state, flatpak_decomposed_get_ref (ref), opt_commit, subpaths, sideload_repo, NULL, require_metadata, token, child_repo, flatpak_flags, 0, @@ -10082,7 +10097,8 @@ flatpak_dir_install (FlatpakDir *self, if (!no_pull) { - if (!flatpak_dir_pull (self, state, flatpak_decomposed_get_ref (ref), opt_commit, opt_subpaths, sideload_repo, require_metadata, token, NULL, + if (!flatpak_dir_pull (self, state, flatpak_decomposed_get_ref (ref), opt_commit, opt_subpaths, + sideload_repo, opt_image_source, require_metadata, token, NULL, flatpak_flags, OSTREE_REPO_PULL_FLAGS_NONE, progress, cancellable, error)) return FALSE; @@ -10529,6 +10545,7 @@ flatpak_dir_update (FlatpakDir *self, const char **opt_subpaths, const char **opt_previous_ids, GFile *sideload_repo, + FlatpakImageSource *opt_image_source, GBytes *require_metadata, const char *token, FlatpakProgress *progress, @@ -10616,7 +10633,7 @@ flatpak_dir_update (FlatpakDir *self, child_repo_path = g_file_get_path (registry_file); if (!flatpak_dir_mirror_oci (self, registry, state, flatpak_decomposed_get_ref (ref), - commit, NULL, token, progress, cancellable, error)) + commit, opt_image_source, token, progress, cancellable, error)) return FALSE; } else if (!gpg_verify_summary || !gpg_verify) @@ -10696,7 +10713,7 @@ flatpak_dir_update (FlatpakDir *self, flatpak_flags |= FLATPAK_PULL_FLAGS_SIDELOAD_EXTRA_DATA; if (!flatpak_dir_pull (self, state, flatpak_decomposed_get_ref (ref), - commit, subpaths, sideload_repo, require_metadata, token, + commit, subpaths, sideload_repo, NULL, require_metadata, token, child_repo, flatpak_flags, 0, progress, cancellable, error)) @@ -10762,7 +10779,7 @@ flatpak_dir_update (FlatpakDir *self, if (!no_pull) { if (!flatpak_dir_pull (self, state, flatpak_decomposed_get_ref (ref), - commit, subpaths, sideload_repo, require_metadata, token, + commit, subpaths, sideload_repo, opt_image_source, require_metadata, token, NULL, flatpak_flags, OSTREE_REPO_PULL_FLAGS_NONE, progress, cancellable, error)) return FALSE; diff --git a/common/flatpak-installation.c b/common/flatpak-installation.c index c7d2e1dd86..3a8677e836 100644 --- a/common/flatpak-installation.c +++ b/common/flatpak-installation.c @@ -1930,7 +1930,7 @@ flatpak_installation_install_full (FlatpakInstallation *self, (flags & FLATPAK_INSTALL_FLAGS_NO_DEPLOY) != 0, (flags & FLATPAK_INSTALL_FLAGS_NO_STATIC_DELTAS) != 0, FALSE, FALSE, FALSE, state, - ref, NULL, (const char **) subpaths, NULL, NULL, NULL, NULL, + ref, NULL, (const char **) subpaths, NULL, NULL, NULL, NULL, NULL, progress, cancellable, error)) return NULL; @@ -2098,7 +2098,7 @@ flatpak_installation_update_full (FlatpakInstallation *self, (flags & FLATPAK_UPDATE_FLAGS_NO_STATIC_DELTAS) != 0, FALSE, FALSE, FALSE, state, ref, target_commit, - (const char **) subpaths, NULL, NULL, NULL, NULL, + (const char **) subpaths, NULL, NULL, NULL, NULL, NULL, progress, cancellable, error)) return NULL; diff --git a/common/flatpak-transaction.c b/common/flatpak-transaction.c index 7039d86e25..ffee385e49 100644 --- a/common/flatpak-transaction.c +++ b/common/flatpak-transaction.c @@ -26,7 +26,9 @@ #include "flatpak-auth-private.h" #include "flatpak-dir-private.h" #include "flatpak-error.h" +#include "flatpak-image-source-private.h" #include "flatpak-installation-private.h" +#include "flatpak-oci-registry-private.h" #include "flatpak-progress-private.h" #include "flatpak-repo-utils-private.h" #include "flatpak-transaction-private.h" @@ -103,6 +105,7 @@ struct _FlatpakTransactionOperation char **subpaths; char **previous_ids; char *commit; + FlatpakImageSource *image_source; GFile *bundle; GBytes *external_metadata; FlatpakTransactionOperationType kind; @@ -115,6 +118,7 @@ struct _FlatpakTransactionOperation gboolean resolved; char *resolved_commit; GFile *resolved_sideload_path; + FlatpakImageSource *resolved_image_source; GBytes *resolved_metadata; GKeyFile *resolved_metakey; GBytes *resolved_old_metadata; @@ -144,6 +148,11 @@ typedef struct _BundleData GBytes *gpg_data; } BundleData; +typedef struct _ImageData +{ + char *image_location; +} ImageData; + typedef struct { FlatpakTransaction *transaction; const char *remote; @@ -168,6 +177,7 @@ typedef struct _FlatpakTransactionPrivate GList *flatpakrefs; /* GKeyFiles */ GList *bundles; /* BundleData */ + GList *images; /* ImageData */ guint next_request_id; guint active_request_id; @@ -260,6 +270,23 @@ bundle_data_free (BundleData *data) g_free (data); } +static ImageData * +image_data_new (const char *image_location) +{ + ImageData *data = g_new0 (ImageData, 1); + + data->image_location = g_strdup (image_location); + + return data; +} + +static void +image_data_free (ImageData *data) +{ + g_clear_pointer (&data->image_location, g_free); + g_free (data); +} + static guint progress_signals[LAST_SIGNAL] = { 0 }; /** @@ -612,6 +639,8 @@ flatpak_transaction_operation_finalize (GObject *object) g_clear_pointer (&self->run_before_ops, g_list_free); g_clear_pointer (&self->related_to_ops, g_ptr_array_unref); g_clear_pointer (&self->summary_metadata, g_variant_unref); + g_clear_object (&self->image_source); + g_clear_object (&self->resolved_image_source); G_OBJECT_CLASS (flatpak_transaction_operation_parent_class)->finalize (object); } @@ -993,6 +1022,7 @@ flatpak_transaction_finalize (GObject *object) g_free (priv->parent_window); g_list_free_full (priv->flatpakrefs, (GDestroyNotify) g_key_file_unref); g_list_free_full (priv->bundles, (GDestroyNotify) bundle_data_free); + g_list_free_full (priv->images, (GDestroyNotify) image_data_free); g_free (priv->default_arch); g_hash_table_unref (priv->last_op_for_ref); g_hash_table_unref (priv->remote_states); @@ -2603,6 +2633,7 @@ flatpak_transaction_add_ref (FlatpakTransaction *self, const char *commit, FlatpakTransactionOperationType kind, GFile *bundle, + FlatpakImageSource *image_source, const char *external_metadata, gboolean pin_on_deploy, FlatpakTransactionOperation **out_op, @@ -2730,6 +2761,9 @@ flatpak_transaction_add_ref (FlatpakTransaction *self, op = flatpak_transaction_add_op (self, remote, ref, subpaths, previous_ids, commit, bundle, kind, pin_on_deploy); + if (image_source) + op->image_source = g_object_ref (image_source); + if (external_metadata) op->external_metadata = g_bytes_new (external_metadata, strlen (external_metadata)); @@ -2783,7 +2817,7 @@ flatpak_transaction_add_install (FlatpakTransaction *self, if (!flatpak_transaction_add_ref (self, remote, decomposed, subpaths, NULL, NULL, FLATPAK_TRANSACTION_OPERATION_INSTALL, - NULL, NULL, pin_on_deploy, NULL, error)) + NULL, NULL, NULL, pin_on_deploy, NULL, error)) return FALSE; return TRUE; @@ -2843,7 +2877,7 @@ flatpak_transaction_add_rebase (FlatpakTransaction *self, if (dir_ref_is_installed (priv->dir, decomposed, &installed_origin, NULL)) remote = installed_origin; - return flatpak_transaction_add_ref (self, remote, decomposed, subpaths, previous_ids, NULL, FLATPAK_TRANSACTION_OPERATION_INSTALL_OR_UPDATE, NULL, NULL, FALSE, NULL, error); + return flatpak_transaction_add_ref (self, remote, decomposed, subpaths, previous_ids, NULL, FLATPAK_TRANSACTION_OPERATION_INSTALL_OR_UPDATE, NULL, NULL, NULL, FALSE, NULL, error); } /** @@ -2919,12 +2953,12 @@ flatpak_transaction_add_rebase_and_uninstall (FlatpakTransaction *self, if (!flatpak_transaction_add_ref (self, remote, new_decomposed, subpaths, previous_ids, NULL, FLATPAK_TRANSACTION_OPERATION_INSTALL_OR_UPDATE, - NULL, NULL, FALSE, &rebase_op, error)) + NULL, NULL, NULL, FALSE, &rebase_op, error)) return FALSE; if (!flatpak_transaction_add_ref (self, NULL, old_decomposed, NULL, NULL, NULL, FLATPAK_TRANSACTION_OPERATION_UNINSTALL, - NULL, NULL, FALSE, &uninstall_op, &local_error)) + NULL, NULL, NULL, FALSE, &uninstall_op, &local_error)) { /* If the user is trying to install an eol-rebased app from scratch, the * @old_ref can’t be uninstalled because it’s not installed already. @@ -2980,6 +3014,36 @@ flatpak_transaction_add_install_bundle (FlatpakTransaction *self, return TRUE; } +/** + * flatpak_transaction_add_install_image: + * @self: a #FlatpakTransaction + * @image_location: (nullable): location string to install from. + * @error: return location for a #GError + * + * Install a Flatpak from a container image. The image is specified + * + * If the reference from the image was previously installed, then + * that remote will be used as the remote for the newly installed image. If the + * reference was not previously installed, then a remote will be created for the + * reference. + * + * @image_location is specified in containers-transports(5) form. Only a subset + * of transports are supported: oci: and docker:. + * + * Returns: %TRUE on success; %FALSE with @error set on failure. + */ +gboolean +flatpak_transaction_add_install_image (FlatpakTransaction *self, + const char *image_location, + GError **error) +{ + FlatpakTransactionPrivate *priv = flatpak_transaction_get_instance_private (self); + + priv->images = g_list_append (priv->images, image_data_new (image_location)); + + return TRUE; +} + /** * flatpak_transaction_add_install_flatpakref: * @self: a #FlatpakTransaction @@ -3046,7 +3110,7 @@ flatpak_transaction_add_update (FlatpakTransaction *self, return FALSE; /* Note: we implement the merge when subpaths == NULL in flatpak_transaction_add_ref() */ - return flatpak_transaction_add_ref (self, NULL, decomposed, subpaths, NULL, commit, FLATPAK_TRANSACTION_OPERATION_UPDATE, NULL, NULL, FALSE, NULL, error); + return flatpak_transaction_add_ref (self, NULL, decomposed, subpaths, NULL, commit, FLATPAK_TRANSACTION_OPERATION_UPDATE, NULL, NULL, NULL, FALSE, NULL, error); } /** @@ -3073,7 +3137,7 @@ flatpak_transaction_add_uninstall (FlatpakTransaction *self, if (decomposed == NULL) return FALSE; - return flatpak_transaction_add_ref (self, NULL, decomposed, NULL, NULL, NULL, FLATPAK_TRANSACTION_OPERATION_UNINSTALL, NULL, NULL, FALSE, NULL, error); + return flatpak_transaction_add_ref (self, NULL, decomposed, NULL, NULL, NULL, FLATPAK_TRANSACTION_OPERATION_UNINSTALL, NULL, NULL, NULL, FALSE, NULL, error); } static gboolean @@ -3185,7 +3249,7 @@ flatpak_transaction_add_auto_install (FlatpakTransaction *self, if (!flatpak_transaction_add_ref (self, remote, auto_install_ref, NULL, NULL, NULL, FLATPAK_TRANSACTION_OPERATION_INSTALL_OR_UPDATE, - NULL, NULL, FALSE, NULL, + NULL, NULL, NULL, FALSE, NULL, &local_error)) g_info ("Failed to add auto-install ref %s: %s", flatpak_decomposed_get_ref (auto_install_ref), local_error->message); @@ -3283,6 +3347,7 @@ static gboolean mark_op_resolved (FlatpakTransactionOperation *op, const char *commit, GFile *sideload_path, + FlatpakImageSource *image_source, GBytes *metadata, GBytes *old_metadata, GError **error) @@ -3291,7 +3356,7 @@ mark_op_resolved (FlatpakTransactionOperation *op, g_assert (op != NULL); - g_assert (commit != NULL); + g_assert (commit != NULL || image_source != NULL); op->resolved = TRUE; @@ -3304,6 +3369,9 @@ mark_op_resolved (FlatpakTransactionOperation *op, if (sideload_path) op->resolved_sideload_path = g_object_ref (sideload_path); + if (image_source) + op->resolved_image_source = g_object_ref (image_source); + if (metadata) { g_autoptr(GKeyFile) metakey = g_key_file_new (); @@ -3337,13 +3405,14 @@ resolve_op_end (FlatpakTransaction *self, FlatpakTransactionOperation *op, const char *checksum, GFile *sideload_path, + FlatpakImageSource *image_source, GBytes *metadata_bytes, GError **error) { g_autoptr(GBytes) old_metadata_bytes = NULL; old_metadata_bytes = load_deployed_metadata (self, op->ref, NULL, NULL); - if (!mark_op_resolved (op, checksum, sideload_path, metadata_bytes, old_metadata_bytes, error)) + if (!mark_op_resolved (op, checksum, sideload_path, image_source, metadata_bytes, old_metadata_bytes, error)) return FALSE; emit_eol_and_maybe_skip (self, op); return TRUE; @@ -3394,7 +3463,7 @@ resolve_op_from_commit (FlatpakTransaction *self, flatpak_decomposed_get_ref (eolr_decomposed)); } - return resolve_op_end (self, op, checksum, sideload_path, metadata_bytes, error); + return resolve_op_end (self, op, checksum, sideload_path, NULL, metadata_bytes, error); } /* NOTE: In case of non-available summary this returns FALSE with a @@ -3459,7 +3528,7 @@ try_resolve_op_from_metadata (FlatpakTransaction *self, } } - return resolve_op_end (self, op, checksum, sideload_path, metadata_bytes, error); + return resolve_op_end (self, op, checksum, sideload_path, NULL, metadata_bytes, error); } static gboolean @@ -3502,7 +3571,7 @@ resolve_ops (FlatpakTransaction *self, * checksum we got was the version already installed. */ g_assert (op->resolved_commit != NULL); - if (!mark_op_resolved (op, op->resolved_commit, NULL, NULL, NULL, error)) + if (!mark_op_resolved (op, op->resolved_commit, NULL, NULL, NULL, NULL, error)) return FALSE; continue; } @@ -3517,7 +3586,7 @@ resolve_ops (FlatpakTransaction *self, op->skip = TRUE; continue; } - if (!mark_op_resolved (op, checksum, NULL, metadata_bytes, NULL, error)) + if (!mark_op_resolved (op, checksum, NULL, NULL, metadata_bytes, NULL, error)) return FALSE; continue; } @@ -3525,7 +3594,7 @@ resolve_ops (FlatpakTransaction *self, if (op->kind == FLATPAK_TRANSACTION_OPERATION_INSTALL_BUNDLE) { g_assert (op->commit != NULL); - if (!mark_op_resolved (op, op->commit, NULL, op->external_metadata, NULL, error)) + if (!mark_op_resolved (op, op->commit, NULL, NULL, op->external_metadata, NULL, error)) return FALSE; continue; } @@ -3549,8 +3618,13 @@ resolve_ops (FlatpakTransaction *self, if (state == NULL) return FALSE; + if (op->image_source) + { + if (!mark_op_resolved (op, NULL, NULL, op->image_source, op->external_metadata, NULL, error)) + return FALSE; + } /* Should we use local state */ - if (transaction_is_local_only (self, op->kind)) + else if (transaction_is_local_only (self, op->kind)) { g_autoptr(GVariant) commit_data = flatpak_dir_read_latest_commit (priv->dir, op->remote, op->ref, &checksum, NULL, error); @@ -4688,7 +4762,74 @@ flatpak_transaction_resolve_bundles (FlatpakTransaction *self, if (!flatpak_transaction_add_ref (self, remote, ref, NULL, NULL, commit, FLATPAK_TRANSACTION_OPERATION_INSTALL_BUNDLE, - data->file, metadata, FALSE, NULL, error)) + data->file, NULL, metadata, FALSE, NULL, error)) + return FALSE; + } + + return TRUE; +} + +static gboolean +flatpak_transaction_resolve_images (FlatpakTransaction *self, + GCancellable *cancellable, + GError **error) +{ + FlatpakTransactionPrivate *priv = flatpak_transaction_get_instance_private (self); + GList *l; + + for (l = priv->images; l != NULL; l = l->next) + { + ImageData *data = l->data; + g_autoptr(FlatpakImageSource) image_source = NULL; + g_autofree char *remote = NULL; + g_autoptr(FlatpakDecomposed) ref = NULL; + const char *ref_label; + const char *metadata_label; + FlatpakTransactionOperation *op; + g_autoptr(GBytes) deploy_data = NULL; + + image_source = flatpak_image_source_new_for_location (data->image_location, + cancellable, error); + if (!image_source) + return FALSE; + + ref_label = flatpak_image_source_get_ref (image_source); + ref = flatpak_decomposed_new_from_ref (ref_label, error); + if (ref == NULL) + { + g_prefix_error (error, "Cannot parse org.flatpak.ref label: "); + return FALSE; + } + + metadata_label = flatpak_image_source_get_metadata (image_source); + if (metadata_label == NULL) + return flatpak_fail_error (error, FLATPAK_ERROR_INVALID_DATA, + "Image does not have org.flatpak.metadata label"); + + deploy_data = flatpak_dir_get_deploy_data (priv->dir, ref, FLATPAK_DEPLOY_VERSION_ANY, cancellable, NULL); + if (deploy_data != NULL) + remote = g_strdup (flatpak_deploy_data_get_origin (deploy_data)); + + if (remote == NULL) + { + gboolean created_remote; + g_autofree char *id = flatpak_decomposed_dup_id (ref); + + remote = flatpak_dir_create_origin_remote (priv->dir, NULL /* url */, id, + NULL /* title */, ref_label, + NULL /* gpg_data */, NULL /* collection_id */, + &created_remote, + cancellable, error); + if (!remote) + return FALSE; + + if (created_remote) + flatpak_installation_drop_caches (priv->installation, NULL, NULL); + } + + if (!flatpak_transaction_add_ref (self, remote, ref, NULL, NULL, NULL, + FLATPAK_TRANSACTION_OPERATION_INSTALL, + NULL, image_source, metadata_label, FALSE, &op, error)) return FALSE; } @@ -4747,7 +4888,7 @@ _run_op_kind (FlatpakTransaction *self, emit_new_op (self, op, progress); - g_assert (op->resolved_commit != NULL); /* We resolved this before */ + g_assert (op->resolved_commit != NULL || op->resolved_image_source != NULL); /* We resolved this before */ if (op->resolved_metakey && !flatpak_check_required_version (flatpak_decomposed_get_ref (op->ref), op->resolved_metakey, &local_error)) @@ -4765,6 +4906,7 @@ _run_op_kind (FlatpakTransaction *self, (const char **) op->subpaths, (const char **) op->previous_ids, op->resolved_sideload_path, + op->resolved_image_source, op->resolved_metadata, op->resolved_token, progress->progress_obj, @@ -4838,6 +4980,7 @@ _run_op_kind (FlatpakTransaction *self, (const char **) op->subpaths, (const char **) op->previous_ids, op->resolved_sideload_path, + op->resolved_image_source, op->resolved_metadata, op->resolved_token, progress->progress_obj, @@ -5149,6 +5292,12 @@ flatpak_transaction_real_run (FlatpakTransaction *self, return FALSE; } + if (!flatpak_transaction_resolve_images (self, cancellable, error)) + { + g_assert (error == NULL || *error != NULL); + return FALSE; + } + /* Resolve initial ops */ if (!resolve_all_ops (self, cancellable, error)) { diff --git a/common/flatpak-transaction.h b/common/flatpak-transaction.h index 0b8f2de89b..3d3f4ce893 100644 --- a/common/flatpak-transaction.h +++ b/common/flatpak-transaction.h @@ -326,6 +326,10 @@ gboolean flatpak_transaction_add_install_bundle (FlatpakTransaction * GBytes *gpg_data, GError **error); FLATPAK_EXTERN +gboolean flatpak_transaction_add_install_image (FlatpakTransaction *self, + const char *image_location, + GError **error); +FLATPAK_EXTERN gboolean flatpak_transaction_add_install_flatpakref (FlatpakTransaction *self, GBytes *flatpakref_data, GError **error); diff --git a/system-helper/flatpak-system-helper.c b/system-helper/flatpak-system-helper.c index a4d9708bef..2740b2998e 100644 --- a/system-helper/flatpak-system-helper.c +++ b/system-helper/flatpak-system-helper.c @@ -640,7 +640,7 @@ handle_deploy (FlatpakSystemHelper *object, return G_DBUS_METHOD_INVOCATION_HANDLED; } - if (!flatpak_dir_pull (system, state, arg_ref, NULL, (const char **) arg_subpaths, NULL, NULL, NULL, NULL, + if (!flatpak_dir_pull (system, state, arg_ref, NULL, (const char **) arg_subpaths, NULL, NULL, NULL, NULL, NULL, FLATPAK_PULL_FLAGS_NONE, OSTREE_REPO_PULL_FLAGS_UNTRUSTED, NULL, NULL, &error)) { @@ -874,11 +874,11 @@ handle_deploy_appstream (FlatpakSystemHelper *object, return G_DBUS_METHOD_INVOCATION_HANDLED; } - if (!flatpak_dir_pull (system, state, new_branch, NULL, NULL, NULL, NULL, NULL, NULL, + if (!flatpak_dir_pull (system, state, new_branch, NULL, NULL, NULL, NULL, NULL, NULL, NULL, FLATPAK_PULL_FLAGS_NONE, OSTREE_REPO_PULL_FLAGS_UNTRUSTED, NULL, NULL, &first_error)) { - if (!flatpak_dir_pull (system, state, old_branch, NULL, NULL, NULL, NULL, NULL, NULL, + if (!flatpak_dir_pull (system, state, old_branch, NULL, NULL, NULL, NULL, NULL, NULL, NULL, FLATPAK_PULL_FLAGS_NONE, OSTREE_REPO_PULL_FLAGS_UNTRUSTED, NULL, NULL, &second_error)) { From ee9d25dfe2ba346a0febc071b64764699dffae65 Mon Sep 17 00:00:00 2001 From: Sebastian Wick Date: Wed, 18 Dec 2024 00:40:45 +0100 Subject: [PATCH 19/53] builtins/install: Create install transaction in common function --- app/flatpak-builtins-install.c | 85 +++++++++++++--------------------- 1 file changed, 33 insertions(+), 52 deletions(-) diff --git a/app/flatpak-builtins-install.c b/app/flatpak-builtins-install.c index d4d9ae30a8..c5132da689 100644 --- a/app/flatpak-builtins-install.c +++ b/app/flatpak-builtins-install.c @@ -129,6 +129,36 @@ read_gpg_data (GCancellable *cancellable, return flatpak_read_stream (source_stream, FALSE, error); } +static FlatpakTransaction * +create_install_transaction (FlatpakDir *dir, + GError **error) +{ + g_autoptr(FlatpakTransaction) transaction = NULL; + + if (opt_noninteractive) + transaction = flatpak_quiet_transaction_new (dir, error); + else + transaction = flatpak_cli_transaction_new (dir, opt_yes, TRUE, opt_arch != NULL, error); + + if (transaction == NULL) + return NULL; + + flatpak_transaction_set_no_pull (transaction, opt_no_pull); + flatpak_transaction_set_no_deploy (transaction, opt_no_deploy); + flatpak_transaction_set_disable_static_deltas (transaction, opt_no_static_deltas); + flatpak_transaction_set_disable_dependencies (transaction, opt_no_deps); + flatpak_transaction_set_disable_related (transaction, opt_no_related); + flatpak_transaction_set_disable_auto_pin (transaction, opt_no_auto_pin); + flatpak_transaction_set_reinstall (transaction, opt_reinstall); + flatpak_transaction_set_auto_install_sdk (transaction, opt_include_sdk); + flatpak_transaction_set_auto_install_debug (transaction, opt_include_debug); + + for (int i = 0; opt_sideload_repos != NULL && opt_sideload_repos[i] != NULL; i++) + flatpak_transaction_add_sideload_repo (transaction, opt_sideload_repos[i]); + + return g_steal_pointer (&transaction); +} + static gboolean install_bundle (FlatpakDir *dir, GOptionContext *context, @@ -162,26 +192,10 @@ install_bundle (FlatpakDir *dir, return FALSE; } - if (opt_noninteractive) - transaction = flatpak_quiet_transaction_new (dir, error); - else - transaction = flatpak_cli_transaction_new (dir, opt_yes, TRUE, opt_arch != NULL, error); + transaction = create_install_transaction (dir, error); if (transaction == NULL) return FALSE; - flatpak_transaction_set_no_pull (transaction, opt_no_pull); - flatpak_transaction_set_no_deploy (transaction, opt_no_deploy); - flatpak_transaction_set_disable_static_deltas (transaction, opt_no_static_deltas); - flatpak_transaction_set_disable_dependencies (transaction, opt_no_deps); - flatpak_transaction_set_disable_related (transaction, opt_no_related); - flatpak_transaction_set_disable_auto_pin (transaction, opt_no_auto_pin); - flatpak_transaction_set_reinstall (transaction, opt_reinstall); - flatpak_transaction_set_auto_install_sdk (transaction, opt_include_sdk); - flatpak_transaction_set_auto_install_debug (transaction, opt_include_debug); - - for (int i = 0; opt_sideload_repos != NULL && opt_sideload_repos[i] != NULL; i++) - flatpak_transaction_add_sideload_repo (transaction, opt_sideload_repos[i]); - if (!flatpak_transaction_add_install_bundle (transaction, file, gpg_data, error)) return FALSE; @@ -241,27 +255,10 @@ install_from (FlatpakDir *dir, file_data = g_bytes_new_take (g_steal_pointer (&data), data_len); } - if (opt_noninteractive) - transaction = flatpak_quiet_transaction_new (dir, error); - else - transaction = flatpak_cli_transaction_new (dir, opt_yes, TRUE, opt_arch != NULL, error); + transaction = create_install_transaction (dir, error); if (transaction == NULL) return FALSE; - flatpak_transaction_set_no_pull (transaction, opt_no_pull); - flatpak_transaction_set_no_deploy (transaction, opt_no_deploy); - flatpak_transaction_set_disable_static_deltas (transaction, opt_no_static_deltas); - flatpak_transaction_set_disable_dependencies (transaction, opt_no_deps); - flatpak_transaction_set_disable_related (transaction, opt_no_related); - flatpak_transaction_set_disable_auto_pin (transaction, opt_no_auto_pin); - flatpak_transaction_set_reinstall (transaction, opt_reinstall); - flatpak_transaction_set_default_arch (transaction, opt_arch); - flatpak_transaction_set_auto_install_sdk (transaction, opt_include_sdk); - flatpak_transaction_set_auto_install_debug (transaction, opt_include_debug); - - for (int i = 0; opt_sideload_repos != NULL && opt_sideload_repos[i] != NULL; i++) - flatpak_transaction_add_sideload_repo (transaction, opt_sideload_repos[i]); - if (!flatpak_transaction_add_install_flatpakref (transaction, file_data, error)) return FALSE; @@ -485,26 +482,10 @@ flatpak_builtin_install (int argc, char **argv, GCancellable *cancellable, GErro default_branch = flatpak_dir_get_remote_default_branch (dir, remote); - if (opt_noninteractive) - transaction = flatpak_quiet_transaction_new (dir, error); - else - transaction = flatpak_cli_transaction_new (dir, opt_yes, TRUE, opt_arch != NULL, error); + transaction = create_install_transaction (dir, error); if (transaction == NULL) return FALSE; - flatpak_transaction_set_no_pull (transaction, opt_no_pull); - flatpak_transaction_set_no_deploy (transaction, opt_no_deploy); - flatpak_transaction_set_disable_static_deltas (transaction, opt_no_static_deltas); - flatpak_transaction_set_disable_dependencies (transaction, opt_no_deps); - flatpak_transaction_set_disable_related (transaction, opt_no_related); - flatpak_transaction_set_disable_auto_pin (transaction, opt_no_auto_pin); - flatpak_transaction_set_reinstall (transaction, opt_reinstall); - flatpak_transaction_set_auto_install_sdk (transaction, opt_include_sdk); - flatpak_transaction_set_auto_install_debug (transaction, opt_include_debug); - - for (i = 0; opt_sideload_repos != NULL && opt_sideload_repos[i] != NULL; i++) - flatpak_transaction_add_sideload_repo (transaction, opt_sideload_repos[i]); - for (i = 0; i < n_prefs; i++) { const char *pref = prefs[i]; From eee21d5a273b8ca178d99b89321af87631639b8c Mon Sep 17 00:00:00 2001 From: "Owen W. Taylor" Date: Wed, 18 Dec 2024 00:53:59 +0100 Subject: [PATCH 20/53] builtins/install: Allow direct installation from OCI images Similar to bundle installs, add: flatpak install [--image] docker://registry.example.com/image:latest flatpak install [--image] oci:/path/to/image These is useful for testing purposes and in certain cases when installing Flatpaks on disconnected systems. --- app/flatpak-builtins-install.c | 60 ++++++++++++++++++++++++++++++++-- app/flatpak-cli-transaction.c | 2 +- doc/flatpak-install.xml | 24 ++++++++++---- tests/test-oci-registry.sh | 33 ++++++++++++++++++- tests/test-oci.sh | 22 ++++++++++++- 5 files changed, 129 insertions(+), 12 deletions(-) diff --git a/app/flatpak-builtins-install.c b/app/flatpak-builtins-install.c index c5132da689..70474bbe40 100644 --- a/app/flatpak-builtins-install.c +++ b/app/flatpak-builtins-install.c @@ -56,6 +56,7 @@ static gboolean opt_include_sdk; static gboolean opt_include_debug; static gboolean opt_bundle; static gboolean opt_from; +static gboolean opt_image; static gboolean opt_yes; static gboolean opt_reinstall; static gboolean opt_noninteractive; @@ -76,6 +77,7 @@ static GOptionEntry options[] = { { "include-debug", 0, 0, G_OPTION_ARG_NONE, &opt_include_debug, N_("Additionally install the debug info for the given refs and their dependencies") }, { "bundle", 0, 0, G_OPTION_ARG_NONE, &opt_bundle, N_("Assume LOCATION is a .flatpak single-file bundle"), NULL }, { "from", 0, 0, G_OPTION_ARG_NONE, &opt_from, N_("Assume LOCATION is a .flatpakref application description"), NULL }, + { "image", 0, 0, G_OPTION_ARG_NONE, &opt_image, N_("Assume LOCATION is containers-transports(5) reference to an OCI image"), NULL }, { "gpg-file", 0, 0, G_OPTION_ARG_FILENAME_ARRAY, &opt_gpg_file, N_("Check bundle signatures with GPG key from FILE (- for stdin)"), N_("FILE") }, { "subpath", 0, 0, G_OPTION_ARG_FILENAME_ARRAY, &opt_subpaths, N_("Only install this subpath"), N_("PATH") }, { "assumeyes", 'y', 0, G_OPTION_ARG_NONE, &opt_yes, N_("Automatically answer yes for all questions"), NULL }, @@ -273,6 +275,52 @@ install_from (FlatpakDir *dir, return TRUE; } +static gboolean +install_image (FlatpakDir *dir, + GOptionContext *context, + int argc, + char **argv, + GCancellable *cancellable, + GError **error) +{ + const char *location; + g_autoptr(GBytes) gpg_data = NULL; + g_autoptr(FlatpakTransaction) transaction = NULL; + + if (argc < 2) + return usage_error (context, _("Image location must be specified"), error); + + if (argc > 2) + return usage_error (context, _("Too many arguments"), error); + + location = argv[1]; + + if (opt_gpg_file != NULL) + { + /* Override gpg_data from file */ + gpg_data = read_gpg_data (cancellable, error); + if (gpg_data == NULL) + return FALSE; + } + + transaction = create_install_transaction (dir, error); + if (transaction == NULL) + return FALSE; + + if (!flatpak_transaction_add_install_image (transaction, location, error)) + return FALSE; + + if (!flatpak_transaction_run (transaction, cancellable, error)) + { + if (g_error_matches (*error, FLATPAK_ERROR, FLATPAK_ERROR_ABORTED)) + g_clear_error (error); /* Don't report on stderr */ + + return FALSE; + } + + return TRUE; +} + gboolean flatpak_builtin_install (int argc, char **argv, GCancellable *cancellable, GError **error) { @@ -301,11 +349,14 @@ flatpak_builtin_install (int argc, char **argv, GCancellable *cancellable, GErro /* Start with the default or specified dir, this is fine for opt_bundle or opt_from */ dir = g_object_ref (g_ptr_array_index (dirs, 0)); - if (!opt_bundle && !opt_from && argc >= 2) + if (!opt_bundle && !opt_from && !opt_image && argc >= 2) { - if (flatpak_file_arg_has_suffix (argv[1], ".flatpakref")) + if (g_str_has_prefix (argv[1], "oci:") || + g_str_has_prefix (argv[1], "docker:")) + opt_image = TRUE; + else if (flatpak_file_arg_has_suffix (argv[1], ".flatpakref")) opt_from = TRUE; - if (flatpak_file_arg_has_suffix (argv[1], ".flatpak")) + else if (flatpak_file_arg_has_suffix (argv[1], ".flatpak")) opt_bundle = TRUE; } @@ -315,6 +366,9 @@ flatpak_builtin_install (int argc, char **argv, GCancellable *cancellable, GErro if (opt_from) return install_from (dir, context, argc, argv, cancellable, error); + if (opt_image) + return install_image (dir, context, argc, argv, cancellable, error); + if (argc < 2) return usage_error (context, _("At least one REF must be specified"), error); diff --git a/app/flatpak-cli-transaction.c b/app/flatpak-cli-transaction.c index f4bfbe53df..fcc72bee92 100644 --- a/app/flatpak-cli-transaction.c +++ b/app/flatpak-cli-transaction.c @@ -1359,7 +1359,7 @@ transaction_ready_pre_auth (FlatpakTransaction *transaction) GList *l; int i; FlatpakTablePrinter *printer; - const char *op_shorthand[] = { "i", "u", "i", "r" }; + const char *op_shorthand[] = { "i", "u", "i", "r", "i" }; /* These caches may no longer be valid once the transaction runs */ g_clear_pointer (&self->runtime_app_map, g_hash_table_unref); diff --git a/doc/flatpak-install.xml b/doc/flatpak-install.xml index ab4bb1fba2..f75dedae40 100644 --- a/doc/flatpak-install.xml +++ b/doc/flatpak-install.xml @@ -38,7 +38,7 @@ flatpak install OPTION - --from|--bundle + --from|--bundle|--image LOCATION @@ -85,11 +85,11 @@ flatpak1). - The alternative form of the command (with or - ) allows to install directly from a source such as a - .flatpak single-file bundle or a .flatpakref - application description. The options are optional if the first argument has the expected - filename extension. + The alternative form of the command (with , , + or ) allows to install directly from a source. The source can be a + .flatpak single-file bundle, .flatpakref + application description, or a reference to an OCI image. The options are optional if the + first argument has the expected filename extension or prefix. Note that flatpak allows to have multiple branches of an application and runtimes @@ -139,6 +139,18 @@ + + + + Treat LOCATION as the location of a Flatpak in + OCI image format. LOCATION is in the format of + containers-transports5. + Supported schemes are docker:// and oci:. + This is assumed if the argument starts + with one of these schemes. + + + diff --git a/tests/test-oci-registry.sh b/tests/test-oci-registry.sh index da234ded59..9503656b60 100755 --- a/tests/test-oci-registry.sh +++ b/tests/test-oci-registry.sh @@ -23,7 +23,7 @@ set -euo pipefail skip_without_bwrap -echo "1..14" +echo "1..16" # Start the fake registry server @@ -315,3 +315,34 @@ assert_file_has_content remotes-list "^hello-origin.*[ ]${scheme}://127\.0\.0\. assert_not_has_file $base/oci/hello-origin.index.gz ok "change remote origin via bundle" + +${FLATPAK} ${U} -y uninstall org.test.Hello >&2 +${FLATPAK} ${U} -y uninstall org.test.Platform >&2 + +${FLATPAK} ${U} list --columns=application,origin > flatpak-list +assert_not_file_has_content flatpak-list 'org.test.Platform' +assert_not_file_has_content flatpak-list 'org.test.Hello' + +${FLATPAK} ${U} remotes --show-disabled > remotes-list +assert_not_file_has_content remotes-list '^platform-origin' +assert_not_file_has_content remotes-list '^hello-origin' + +ok "clean up" + +# Install from registry via a docker:// location +# TODO: docker:// locations only support HTTPS +# This needs https://github.com/flatpak/flatpak/pull/5916 + +if false && [ x${USE_SYSTEMDIR-} != xyes ]; then + $FLATPAK --user -y install docker://127.0.0.1/platform-image:latest >&2 + + ${FLATPAK} ${U} list --columns=application,origin > flatpak-list + assert_file_has_content flatpak-list '^org.test.Platform *platform-origin$' + + ${FLATPAK} ${U} remotes --show-disabled > remotes-list + assert_file_has_content remotes-list '^platform-origin' + + ok "install image from registry" +else + ok "install image from registry # skip Not supported" +fi diff --git a/tests/test-oci.sh b/tests/test-oci.sh index a7baf887f7..431fa6d62e 100755 --- a/tests/test-oci.sh +++ b/tests/test-oci.sh @@ -23,7 +23,7 @@ set -euo pipefail skip_without_bwrap -echo "1..2" +echo "1..3" setup_repo_no_add oci @@ -66,3 +66,23 @@ assert_has_file checked-out/files/bin/hello.sh assert_has_file checked-out/metadata ok "import oci" + +# Trying installing the bundle directly + +${FLATPAK} build-bundle --runtime --oci $FL_GPGARGS repos/oci oci/platform-image org.test.Platform >&2 + +${FLATPAK} --user list --columns=application,origin > flatpak-list +assert_not_file_has_content flatpak-list 'org.test.Platform' + +${FLATPAK} --user remotes --show-disabled > remotes-list +assert_not_file_has_content remotes-list '^platform-origin' + +$FLATPAK --user -y install oci:oci/platform-image >&2 + +${FLATPAK} --user list --columns=application,origin > flatpak-list +assert_file_has_content flatpak-list '^org.test.Platform *platform-origin$' + +${FLATPAK} --user remotes --show-disabled > remotes-list +assert_file_has_content remotes-list '^platform-origin' + +ok "install oci" From 3824aba9113fb60aa27caf52d04a4ffb1e46726c Mon Sep 17 00:00:00 2001 From: Sebastian Wick Date: Fri, 20 Dec 2024 00:25:55 +0100 Subject: [PATCH 21/53] oci-registry: Remove a bunch of double newlines --- common/flatpak-oci-registry-private.h | 1 - common/flatpak-oci-registry.c | 6 ------ 2 files changed, 7 deletions(-) diff --git a/common/flatpak-oci-registry-private.h b/common/flatpak-oci-registry-private.h index 47ffc7beb5..a051b0a695 100644 --- a/common/flatpak-oci-registry-private.h +++ b/common/flatpak-oci-registry-private.h @@ -183,7 +183,6 @@ GBytes *flatpak_oci_index_make_appstream (FlatpakHttpSession *http_session, GCancellable *cancellable, GError **error); - typedef void (*FlatpakOciPullProgress) (guint64 total_size, guint64 pulled_size, guint32 n_layers, diff --git a/common/flatpak-oci-registry.c b/common/flatpak-oci-registry.c index ad05c9f025..e104ab4042 100644 --- a/common/flatpak-oci-registry.c +++ b/common/flatpak-oci-registry.c @@ -255,7 +255,6 @@ flatpak_oci_registry_set_token (FlatpakOciRegistry *self, 0, NULL, NULL); } - FlatpakOciRegistry * flatpak_oci_registry_new (const char *uri, gboolean for_write, @@ -830,7 +829,6 @@ flatpak_oci_registry_download_blob (FlatpakOciRegistry *self, return -1; } - if (!flatpak_open_in_tmpdir_at (self->tmp_dfd, 0600, tmpfile_name, &out_stream, cancellable, error)) return -1; @@ -1357,7 +1355,6 @@ flatpak_oci_layer_writer_reset (FlatpakOciLayerWriter *self) g_clear_object (&self->compressor); } - static void flatpak_oci_layer_writer_finalize (GObject *object) { @@ -1725,7 +1722,6 @@ delta_read_byte (GInputStream *in, return TRUE; } - static gboolean delta_read_varuint (GInputStream *in, guint64 *out, @@ -2731,7 +2727,6 @@ get_image_metadata (FlatpakOciIndexImage *img, const char *key) return NULL; } - static const char * get_image_ref (FlatpakOciIndexImage *img) { @@ -2838,7 +2833,6 @@ flatpak_oci_index_ensure_cached (FlatpakHttpSession *http_session, oci_arch = flatpak_arch_to_oci_arch (flatpak_get_arch ()); - query = g_string_new (NULL); flatpak_uri_encode_query_arg (query, "label:org.flatpak.ref:exists", "1"); flatpak_uri_encode_query_arg (query, "architecture", oci_arch); From 74e4c2a60134a5921db3a5fcbe0bdc33587fcf28 Mon Sep 17 00:00:00 2001 From: Sebastian Wick Date: Fri, 20 Dec 2024 00:27:29 +0100 Subject: [PATCH 22/53] oci-registry: Allow passing a NULL URI --- common/flatpak-oci-registry.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/common/flatpak-oci-registry.c b/common/flatpak-oci-registry.c index e104ab4042..a4b914a029 100644 --- a/common/flatpak-oci-registry.c +++ b/common/flatpak-oci-registry.c @@ -142,10 +142,13 @@ flatpak_oci_registry_set_property (GObject *object, case PROP_URI: /* Ensure the base uri ends with a / so relative urls work */ uri = g_value_get_string (value); - if (g_str_has_suffix (uri, "/")) - self->uri = g_strdup (uri); - else - self->uri = g_strconcat (uri, "/", NULL); + if (uri) + { + if (g_str_has_suffix (uri, "/")) + self->uri = g_strdup (uri); + else + self->uri = g_strconcat (uri, "/", NULL); + } break; case PROP_FOR_WRITE: From a460dd50693c52bc3d4700fdf2ffb13cb56394ca Mon Sep 17 00:00:00 2001 From: "Owen W. Taylor" Date: Wed, 18 Dec 2024 00:53:59 +0100 Subject: [PATCH 23/53] image-source: Support `oci-archive:` image sources Add support for `oci-archive:` image sources by temporarily unpacking the archive using libarchive. Co-authored-by: Sebastian Wick --- app/flatpak-builtins-install.c | 1 + common/flatpak-image-source.c | 50 ++++-- common/flatpak-oci-registry-private.h | 14 +- common/flatpak-oci-registry.c | 247 +++++++++++++++++++++++--- common/flatpak-transaction.c | 2 +- doc/flatpak-install.xml | 4 +- tests/test-oci.sh | 24 ++- 7 files changed, 297 insertions(+), 45 deletions(-) diff --git a/app/flatpak-builtins-install.c b/app/flatpak-builtins-install.c index 70474bbe40..e1f7f312fe 100644 --- a/app/flatpak-builtins-install.c +++ b/app/flatpak-builtins-install.c @@ -352,6 +352,7 @@ flatpak_builtin_install (int argc, char **argv, GCancellable *cancellable, GErro if (!opt_bundle && !opt_from && !opt_image && argc >= 2) { if (g_str_has_prefix (argv[1], "oci:") || + g_str_has_prefix (argv[1], "oci-archive:") || g_str_has_prefix (argv[1], "docker:")) opt_image = TRUE; else if (flatpak_file_arg_has_suffix (argv[1], ".flatpakref")) diff --git a/common/flatpak-image-source.c b/common/flatpak-image-source.c index 9ccb284f7e..750f740bc0 100644 --- a/common/flatpak-image-source.c +++ b/common/flatpak-image-source.c @@ -119,24 +119,15 @@ flatpak_image_source_new (FlatpakOciRegistry *registry, return g_steal_pointer (&self); } -FlatpakImageSource * -flatpak_image_source_new_local (GFile *file, - const char *reference, - GCancellable *cancellable, - GError **error) +static FlatpakImageSource * +flatpak_image_source_new_local_for_registry (FlatpakOciRegistry *registry, + const char *reference, + GCancellable *cancellable, + GError **error) { - g_autofree char *dir_uri = NULL; - g_autofree char *target_ref = NULL; - g_autoptr(FlatpakImageSource) image_source = NULL; - g_autoptr(FlatpakOciRegistry) registry = NULL; g_autoptr(FlatpakOciIndex) index = NULL; const FlatpakOciManifestDescriptor *desc; - dir_uri = g_file_get_uri (file); - registry = flatpak_oci_registry_new (dir_uri, FALSE, -1, cancellable, error); - if (registry == NULL) - return NULL; - index = flatpak_oci_registry_load_index (registry, cancellable, error); if (index == NULL) return NULL; @@ -163,6 +154,23 @@ flatpak_image_source_new_local (GFile *file, return flatpak_image_source_new (registry, NULL, desc->parent.digest, cancellable, error); } +FlatpakImageSource * +flatpak_image_source_new_local (GFile *file, + const char *reference, + GCancellable *cancellable, + GError **error) +{ + g_autofree char *dir_uri = NULL; + g_autoptr(FlatpakOciRegistry) registry = NULL; + + dir_uri = g_file_get_uri (file); + registry = flatpak_oci_registry_new (dir_uri, FALSE, -1, cancellable, error); + if (registry == NULL) + return NULL; + + return flatpak_image_source_new_local_for_registry (registry, reference, cancellable, error); +} + FlatpakImageSource * flatpak_image_source_new_remote (const char *uri, const char *oci_repository, @@ -225,6 +233,20 @@ flatpak_image_source_new_for_location (const char *location, return flatpak_image_source_new_local (path, reference, cancellable, error); } + else if (g_str_has_prefix (location, "oci-archive:")) + { + g_autoptr(FlatpakOciRegistry) registry = NULL; + g_autoptr(GFile) path = NULL; + g_autofree char *reference = NULL; + + get_path_and_reference (location, &path, &reference); + + registry = flatpak_oci_registry_new_for_archive (path, cancellable, error); + if (registry == NULL) + return NULL; + + return flatpak_image_source_new_local_for_registry (registry, reference, cancellable, error); + } else if (g_str_has_prefix (location, "docker:")) { g_autoptr(FlatpakOciRegistry) registry = NULL; diff --git a/common/flatpak-oci-registry-private.h b/common/flatpak-oci-registry-private.h index a051b0a695..d48c8ed45b 100644 --- a/common/flatpak-oci-registry-private.h +++ b/common/flatpak-oci-registry-private.h @@ -50,11 +50,15 @@ typedef struct FlatpakOciLayerWriter FlatpakOciLayerWriter; G_DEFINE_AUTOPTR_CLEANUP_FUNC (FlatpakOciLayerWriter, g_object_unref) -FlatpakOciRegistry * flatpak_oci_registry_new (const char *uri, - gboolean for_write, - int tmp_dfd, - GCancellable * cancellable, - GError **error); + +FlatpakOciRegistry * flatpak_oci_registry_new (const char *uri, + gboolean for_write, + int tmp_dfd, + GCancellable *cancellable, + GError **error); +FlatpakOciRegistry * flatpak_oci_registry_new_for_archive (GFile *archive, + GCancellable *cancellable, + GError **error); void flatpak_oci_registry_set_token (FlatpakOciRegistry *self, const char *token); gboolean flatpak_oci_registry_is_local (FlatpakOciRegistry *self); diff --git a/common/flatpak-oci-registry.c b/common/flatpak-oci-registry.c index a4b914a029..ebf000f863 100644 --- a/common/flatpak-oci-registry.c +++ b/common/flatpak-oci-registry.c @@ -27,6 +27,7 @@ #include "libglnx.h" #include +#include #include #include "flatpak-image-source-private.h" #include "flatpak-oci-registry-private.h" @@ -69,11 +70,13 @@ struct FlatpakOciRegistry gboolean valid; gboolean is_docker; char *uri; + GFile *archive; int tmp_dfd; char *token; /* Local repos */ int dfd; + GLnxTmpDir *tmp_dir; /* Remote repos */ FlatpakHttpSession *http_session; @@ -90,6 +93,7 @@ enum { PROP_0, PROP_URI, + PROP_ARCHIVE, PROP_FOR_WRITE, PROP_TMP_DFD, }; @@ -98,6 +102,14 @@ G_DEFINE_TYPE_WITH_CODE (FlatpakOciRegistry, flatpak_oci_registry, G_TYPE_OBJECT G_IMPLEMENT_INTERFACE (G_TYPE_INITABLE, flatpak_oci_registry_initable_iface_init)) +static void +glnx_tmpdir_free (GLnxTmpDir *tmpf) +{ + (void)glnx_tmpdir_delete (tmpf, NULL, NULL); + g_free (tmpf); +} +G_DEFINE_AUTOPTR_CLEANUP_FUNC(GLnxTmpDir, glnx_tmpdir_free) + static gchar * parse_relative_uri (GUri *base_uri, const char *subpath, @@ -124,6 +136,8 @@ flatpak_oci_registry_finalize (GObject *object) g_clear_pointer (&self->base_uri, g_uri_unref); g_free (self->uri); g_free (self->token); + g_clear_object (&self->archive); + g_clear_pointer (&self->tmp_dir, glnx_tmpdir_free); G_OBJECT_CLASS (flatpak_oci_registry_parent_class)->finalize (object); } @@ -151,6 +165,10 @@ flatpak_oci_registry_set_property (GObject *object, } break; + case PROP_ARCHIVE: + self->archive = g_value_dup_object (value); + break; + case PROP_FOR_WRITE: self->for_write = g_value_get_boolean (value); break; @@ -179,6 +197,10 @@ flatpak_oci_registry_get_property (GObject *object, g_value_set_string (value, self->uri); break; + case PROP_ARCHIVE: + g_value_set_object (value, self->archive); + break; + case PROP_FOR_WRITE: g_value_set_boolean (value, self->for_write); break; @@ -209,6 +231,13 @@ flatpak_oci_registry_class_init (FlatpakOciRegistryClass *klass) "", NULL, G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); + g_object_class_install_property (object_class, + PROP_ARCHIVE, + g_param_spec_object ("archive", + "", + "", + G_TYPE_FILE, + G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property (object_class, PROP_TMP_DFD, g_param_spec_int ("tmp-dfd", @@ -277,6 +306,21 @@ flatpak_oci_registry_new (const char *uri, return oci_registry; } +FlatpakOciRegistry * +flatpak_oci_registry_new_for_archive (GFile *archive, + GCancellable *cancellable, + GError **error) +{ + FlatpakOciRegistry *oci_registry; + + oci_registry = g_initable_new (FLATPAK_TYPE_OCI_REGISTRY, + cancellable, error, + "archive", archive, + NULL); + + return oci_registry; +} + static int local_open_file (int dfd, const char *subpath, @@ -457,13 +501,164 @@ verify_oci_version (GBytes *oci_layout_bytes, gboolean *not_json, GCancellable * return TRUE; } +/* + * Code to extract an archive such as a tarfile into a temporary directory + * + * Based on: https://github.com/libarchive/libarchive/wiki/Examples#A_Complete_Extractor + * + * We treat ARCHIVE_WARNING as fatal - while this might be too strict, it + * will avoid surprises. + */ + +static gboolean +propagate_libarchive_error (GError **error, + struct archive *a) +{ + g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED, + "%s", archive_error_string (a)); + return FALSE; +} + +static gboolean +copy_data (struct archive *ar, + struct archive *aw, + GError **error) +{ + int r; + const void *buff; + size_t size; + gint64 offset; + + while (TRUE) + { + r = archive_read_data_block (ar, &buff, &size, &offset); + + if (r == ARCHIVE_EOF) + return TRUE; + + if (r == ARCHIVE_RETRY) + continue; + + if (r != ARCHIVE_OK) + return propagate_libarchive_error (error, ar); + + while (TRUE) + { + r = archive_write_data_block (aw, buff, size, offset); + + if (r == ARCHIVE_RETRY) + continue; + + if (r == ARCHIVE_OK) + break; + + return propagate_libarchive_error (error, aw); + } + } +} + +static gboolean +unpack_archive (GFile *archive, + char *destination, + GError **error) +{ + g_autoptr(FlatpakAutoArchiveRead) a = NULL; + g_autoptr(FlatpakAutoArchiveWrite) ext = NULL; + int flags; + int r; + + flags = 0; + flags |= ARCHIVE_EXTRACT_SECURE_NODOTDOT; + flags |= ARCHIVE_EXTRACT_SECURE_SYMLINKS; + + a = archive_read_new (); + archive_read_support_format_all (a); + archive_read_support_filter_all (a); + + ext = archive_write_disk_new (); + archive_write_disk_set_options (ext, flags); + archive_write_disk_set_standard_lookup (ext); + + r = archive_read_open_filename (a, g_file_get_path(archive), 10240); + if (r != ARCHIVE_OK) + return propagate_libarchive_error (error, a); + + while (TRUE) + { + g_autofree char *target_path = NULL; + struct archive_entry *entry; + + r = archive_read_next_header (a, &entry); + if (r == ARCHIVE_EOF) + break; + + if (r != ARCHIVE_OK) + return propagate_libarchive_error (error, a); + + target_path = g_build_filename (destination, archive_entry_pathname (entry), NULL); + archive_entry_set_pathname (entry, target_path); + + r = archive_write_header (ext, entry); + if (r != ARCHIVE_OK) + return propagate_libarchive_error (error, ext); + + if (archive_entry_size (entry) > 0) + { + if (!copy_data (a, ext, error)) + return FALSE; + } + + r = archive_write_finish_entry (ext); + if (r != ARCHIVE_OK) + return propagate_libarchive_error (error, ext); + } + + r = archive_read_close (a); + if (r != ARCHIVE_OK) + return propagate_libarchive_error (error, a); + + r = archive_write_close (ext); + if (r != ARCHIVE_OK) + return propagate_libarchive_error (error, ext); + + return TRUE; +} + +static const char * +get_download_tmpdir (void) +{ + /* We don't use TMPDIR because the downloaded artifacts can be + * very big, and we want to prefer /var/tmp to /tmp. + */ + const char *tmpdir = g_getenv ("FLATPAK_DOWNLOAD_TMPDIR"); + if (tmpdir) + return tmpdir; + + return "/var/tmp"; +} + +static GLnxTmpDir * +download_tmpdir_new (GError **error) +{ + g_autoptr(GLnxTmpDir) tmp_dir = g_new0 (GLnxTmpDir, 1); + glnx_autofd int base_dfd = -1; + + if (!glnx_opendirat (AT_FDCWD, get_download_tmpdir (), TRUE, &base_dfd, error)) + return NULL; + + if (!glnx_mkdtempat (base_dfd, "oci-XXXXXX", 0700, tmp_dir, error)) + return NULL; + + return g_steal_pointer (&tmp_dir); +} + static gboolean flatpak_oci_registry_ensure_local (FlatpakOciRegistry *self, gboolean for_write, GCancellable *cancellable, GError **error) { - g_autoptr(GFile) dir = g_file_new_for_uri (self->uri); + g_autoptr(GLnxTmpDir) local_tmp_dir = NULL; glnx_autofd int local_dfd = -1; int dfd; g_autoptr(GError) local_error = NULL; @@ -472,9 +667,28 @@ flatpak_oci_registry_ensure_local (FlatpakOciRegistry *self, gboolean not_json; if (self->dfd != -1) - dfd = self->dfd; + { + dfd = self->dfd; + } + else if (self->archive) + { + local_tmp_dir = download_tmpdir_new (error); + if (!local_tmp_dir) + return FALSE; + + if (!unpack_archive (self->archive, local_tmp_dir->path, error)) + return FALSE; + + if (!glnx_opendirat (AT_FDCWD, local_tmp_dir->path, + TRUE, &local_dfd, error)) + return FALSE; + + dfd = local_dfd; + } else { + g_autoptr(GFile) dir = g_file_new_for_uri (self->uri); + if (!glnx_opendirat (AT_FDCWD, flatpak_file_get_path_cached (dir), TRUE, &local_dfd, &local_error)) { @@ -537,8 +751,11 @@ flatpak_oci_registry_ensure_local (FlatpakOciRegistry *self, self->token = g_strndup (g_bytes_get_data (token_bytes, NULL), g_bytes_get_size (token_bytes)); } - if (self->dfd == -1 && local_dfd != -1) - self->dfd = g_steal_fd (&local_dfd); + if (self->dfd == -1) + { + self->dfd = g_steal_fd (&local_dfd); + self->tmp_dir = g_steal_pointer (&local_tmp_dir); + } return TRUE; } @@ -589,20 +806,15 @@ flatpak_oci_registry_initable_init (GInitable *initable, FlatpakOciRegistry *self = FLATPAK_OCI_REGISTRY (initable); gboolean res; + g_warn_if_fail (self->archive || self->uri); + if (self->tmp_dfd == -1) { - /* We don't use TMPDIR because the downloaded artifacts can be - * very big, and we want to prefer /var/tmp to /tmp. - */ - const char *tmpdir = g_getenv ("FLATPAK_DOWNLOAD_TMPDIR"); - if (tmpdir == NULL) - tmpdir = "/var/tmp"; - - if (!glnx_opendirat (AT_FDCWD, tmpdir, TRUE, &self->tmp_dfd, error)) + if (!glnx_opendirat (AT_FDCWD, get_download_tmpdir (), TRUE, &self->tmp_dfd, error)) return FALSE; } - if (g_str_has_prefix (self->uri, "file:/")) + if (self->archive || g_str_has_prefix (self->uri, "file:/")) res = flatpak_oci_registry_ensure_local (self, self->for_write, cancellable, error); else res = flatpak_oci_registry_ensure_remote (self, self->for_write, cancellable, error); @@ -1332,15 +1544,6 @@ typedef struct G_DEFINE_TYPE (FlatpakOciLayerWriter, flatpak_oci_layer_writer, G_TYPE_OBJECT) -static gboolean -propagate_libarchive_error (GError **error, - struct archive *a) -{ - g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED, - "%s", archive_error_string (a)); - return FALSE; -} - static void flatpak_oci_layer_writer_reset (FlatpakOciLayerWriter *self) { diff --git a/common/flatpak-transaction.c b/common/flatpak-transaction.c index ffee385e49..1aba1daac5 100644 --- a/common/flatpak-transaction.c +++ b/common/flatpak-transaction.c @@ -3028,7 +3028,7 @@ flatpak_transaction_add_install_bundle (FlatpakTransaction *self, * reference. * * @image_location is specified in containers-transports(5) form. Only a subset - * of transports are supported: oci: and docker:. + * of transports are supported: oci:, oci-archive:, and docker:. * * Returns: %TRUE on success; %FALSE with @error set on failure. */ diff --git a/doc/flatpak-install.xml b/doc/flatpak-install.xml index f75dedae40..99aa5469ac 100644 --- a/doc/flatpak-install.xml +++ b/doc/flatpak-install.xml @@ -145,8 +145,8 @@ Treat LOCATION as the location of a Flatpak in OCI image format. LOCATION is in the format of containers-transports5. - Supported schemes are docker:// and oci:. - This is assumed if the argument starts + Supported schemes are docker://, oci:, + and oci-archive:. This is assumed if the argument starts with one of these schemes. diff --git a/tests/test-oci.sh b/tests/test-oci.sh index 431fa6d62e..861310a5f5 100755 --- a/tests/test-oci.sh +++ b/tests/test-oci.sh @@ -23,7 +23,7 @@ set -euo pipefail skip_without_bwrap -echo "1..3" +echo "1..4" setup_repo_no_add oci @@ -85,4 +85,26 @@ assert_file_has_content flatpak-list '^org.test.Platform *platform-origin$' ${FLATPAK} --user remotes --show-disabled > remotes-list assert_file_has_content remotes-list '^platform-origin' +${FLATPAK} ${U} -y uninstall org.test.Platform >&2 + ok "install oci" + +# Trying installing an OCI archive bundle + +(cd oci/platform-image && tar cf - .) > oci/platform-image.tar + +${FLATPAK} --user list --columns=application,origin > flatpak-list +assert_not_file_has_content flatpak-list 'org.test.Platform' + +${FLATPAK} --user remotes --show-disabled > remotes-list +assert_not_file_has_content remotes-list '^platform-origin' + +$FLATPAK --user -y install oci-archive:oci/platform-image.tar >&2 + +${FLATPAK} --user list --columns=application,origin > flatpak-list +assert_file_has_content flatpak-list '^org.test.Platform *platform-origin$' + +${FLATPAK} --user remotes --show-disabled > remotes-list +assert_file_has_content remotes-list '^platform-origin' + +ok "install oci archive" From 609f0ce0a1a045147a5ef882914cb3c0ed2528c2 Mon Sep 17 00:00:00 2001 From: "Owen W. Taylor" Date: Tue, 29 Oct 2024 16:59:40 -0400 Subject: [PATCH 24/53] common: Move delta_url into the FlatpakImageSource Instead of passing the delta URL along with the image source, when we create an image source for a remote registry, if we find a delta URL in the metadata, set it on the FlatpakImageSource for later use. Centralize duplicated code for creating an image source for a remote repository based on a summary lookup into one place. --- app/flatpak-builtins-build-import-bundle.c | 2 +- common/flatpak-dir.c | 131 +++++++-------------- common/flatpak-image-source-private.h | 4 + common/flatpak-image-source.c | 41 +++++++ common/flatpak-oci-registry-private.h | 2 - common/flatpak-oci-registry.c | 4 +- system-helper/flatpak-system-helper.c | 2 +- 7 files changed, 89 insertions(+), 97 deletions(-) diff --git a/app/flatpak-builtins-build-import-bundle.c b/app/flatpak-builtins-build-import-bundle.c index d79fbbde12..d623386f64 100644 --- a/app/flatpak-builtins-build-import-bundle.c +++ b/app/flatpak-builtins-build-import-bundle.c @@ -69,7 +69,7 @@ import_oci (OstreeRepo *repo, GFile *file, ref = flatpak_image_source_get_ref (image_source); commit_checksum = flatpak_pull_from_oci (repo, image_source, NULL, - NULL, ref, FLATPAK_PULL_FLAGS_NONE, + ref, FLATPAK_PULL_FLAGS_NONE, NULL, NULL, cancellable, error); if (commit_checksum == NULL) return NULL; diff --git a/common/flatpak-dir.c b/common/flatpak-dir.c index 7a9b4e5b59..c8c28db2d5 100644 --- a/common/flatpak-dir.c +++ b/common/flatpak-dir.c @@ -1077,14 +1077,14 @@ flatpak_remote_state_new_image_source (FlatpakRemoteState *self, return g_steal_pointer (&image_source); } -static GVariant * -flatpak_remote_state_fetch_commit_object_oci (FlatpakRemoteState *self, - FlatpakDir *dir, - const char *ref, - const char *checksum, - const char *token, - GCancellable *cancellable, - GError **error) +static FlatpakImageSource * +flatpak_remote_state_fetch_image_source (FlatpakRemoteState *self, + FlatpakDir *dir, + const char *ref, + const char *opt_rev, + const char *token, + GCancellable *cancellable, + GError **error) { g_autoptr(FlatpakImageSource) image_source = NULL; g_autofree char *oci_digest = NULL; @@ -1092,9 +1092,7 @@ flatpak_remote_state_fetch_commit_object_oci (FlatpakRemoteState *self, VarRefInfoRef latest_rev_info; VarMetadataRef metadata; const char *oci_repository = NULL; - const char *parent = NULL; - g_autoptr(GVariantBuilder) metadata_builder = g_variant_builder_new (G_VARIANT_TYPE ("a{sv}")); - g_autoptr(GVariant) metadata_v = NULL; + const char *delta_url = NULL; /* We extract the rev info from the latest, even if we don't use the latest digest, assuming refs don't move */ if (!flatpak_remote_state_lookup_ref (self, ref, &latest_rev, NULL, &latest_rev_info, NULL, error)) @@ -1110,8 +1108,9 @@ flatpak_remote_state_fetch_commit_object_oci (FlatpakRemoteState *self, metadata = var_ref_info_get_metadata (latest_rev_info); oci_repository = var_metadata_lookup_string (metadata, "xa.oci-repository", NULL); + delta_url = var_metadata_lookup_string (metadata, "xa.delta-url", NULL); - oci_digest = g_strconcat ("sha256:", checksum, NULL); + oci_digest = g_strconcat ("sha256:", opt_rev ? opt_rev : latest_rev, NULL); image_source = flatpak_remote_state_new_image_source (self, oci_repository, oci_digest, token, cancellable, error); if (image_source == NULL) @@ -1123,22 +1122,28 @@ flatpak_remote_state_fetch_commit_object_oci (FlatpakRemoteState *self, return NULL; } - flatpak_image_source_build_commit_metadata (image_source, metadata_builder); - metadata_v = g_variant_ref_sink (g_variant_builder_end (metadata_builder)); + flatpak_image_source_set_delta_url (image_source, delta_url); + + return g_steal_pointer (&image_source); +} + - parent = flatpak_image_source_get_parent_commit (image_source); +static GVariant * +flatpak_remote_state_fetch_commit_object_oci (FlatpakRemoteState *self, + FlatpakDir *dir, + const char *ref, + const char *checksum, + const char *token, + GCancellable *cancellable, + GError **error) +{ + g_autoptr(FlatpakImageSource) image_source = NULL; + + image_source = flatpak_remote_state_fetch_image_source (self, dir, ref, checksum, token, cancellable, error); + if (image_source == NULL) + return NULL; - /* This isn't going to be exactly the same as the reconstructed one from the pull, because we don't have the contents, but its useful to get metadata */ - return - g_variant_ref_sink (g_variant_new ("(@a{sv}@ay@a(say)sst@ay@ay)", - metadata_v, - parent ? ostree_checksum_to_bytes_v (parent) : g_variant_new_from_data (G_VARIANT_TYPE ("ay"), NULL, 0, FALSE, NULL, NULL), - g_variant_new_array (G_VARIANT_TYPE ("(say)"), NULL, 0), - flatpak_image_source_get_commit_subject (image_source), - flatpak_image_source_get_commit_body (image_source), - GUINT64_TO_BE (flatpak_image_source_get_commit_timestamp (image_source)), - ostree_checksum_to_bytes_v ("0000000000000000000000000000000000000000000000000000000000000000"), - ostree_checksum_to_bytes_v ("0000000000000000000000000000000000000000000000000000000000000000"))); + return flatpak_image_source_make_fake_commit (image_source); } static GVariant * @@ -5910,49 +5915,18 @@ flatpak_dir_mirror_oci (FlatpakDir *self, GError **error) { g_autoptr(FlatpakImageSource) image_source = NULL; - g_autofree char *oci_digest = NULL; - const char *delta_url = NULL; gboolean res; if (opt_image_source) - { - image_source = g_object_ref (opt_image_source); - oci_digest = g_strdup (flatpak_image_source_get_digest (image_source)); - } + image_source = g_object_ref (opt_image_source); else - { - g_autofree char *latest_rev = NULL; - VarRefInfoRef latest_rev_info; - VarMetadataRef metadata; - const char *oci_repository = NULL; - const char *rev; - - /* We use the summary so that we can reuse any cached json */ - if (!flatpak_remote_state_lookup_ref (state, ref, &latest_rev, NULL, &latest_rev_info, NULL, error)) - return FALSE; - if (latest_rev == NULL) - return flatpak_fail_error (error, FLATPAK_ERROR_REF_NOT_FOUND, - _("Couldn't find latest checksum for ref %s in remote %s"), - ref, state->remote_name); - - rev = opt_rev != NULL ? opt_rev : latest_rev; - - metadata = var_ref_info_get_metadata (latest_rev_info); - oci_repository = var_metadata_lookup_string (metadata, "xa.oci-repository", NULL); - delta_url = var_metadata_lookup_string (metadata, "xa.delta-url", NULL); - - oci_digest = g_strconcat ("sha256:", rev, NULL); - - image_source = flatpak_remote_state_new_image_source (state, oci_repository, oci_digest, token, cancellable, error); - if (image_source == NULL) - return FALSE; - } + image_source = flatpak_remote_state_fetch_image_source (state, self, ref, opt_rev, token, cancellable, error); flatpak_progress_start_oci_pull (progress); - g_info ("Mirroring OCI image %s", oci_digest); + g_info ("Mirroring OCI image %s", flatpak_image_source_get_digest (image_source)); - res = flatpak_mirror_image_from_oci (dst_registry, image_source, state->remote_name, ref, delta_url, self->repo, oci_pull_progress_cb, + res = flatpak_mirror_image_from_oci (dst_registry, image_source, state->remote_name, ref, self->repo, oci_pull_progress_cb, progress, cancellable, error); if (!res) @@ -5977,8 +5951,7 @@ flatpak_dir_pull_oci (FlatpakDir *self, { g_autoptr(FlatpakImageSource) image_source = NULL; FlatpakOciRegistry *registry = NULL; - const char *delta_url = NULL; - g_autofree char *oci_digest = NULL; + const char *oci_digest = NULL; g_autofree char *checksum = NULL; g_autofree char *latest_alt_commit = NULL; G_GNUC_UNUSED g_autofree char *latest_commit = @@ -5986,35 +5959,11 @@ flatpak_dir_pull_oci (FlatpakDir *self, g_autofree char *name = NULL; if (opt_image_source) - { - image_source = g_object_ref (opt_image_source); - oci_digest = g_strdup (flatpak_image_source_get_digest (image_source)); - } + image_source = g_object_ref (opt_image_source); else - { - VarMetadataRef metadata; - VarRefInfoRef latest_rev_info; - const char *oci_repository = NULL; - g_autofree char *latest_rev = NULL; + image_source = flatpak_remote_state_fetch_image_source (state, self, ref, opt_rev, token, cancellable, error); - /* We use the summary so that we can reuse any cached json */ - if (!flatpak_remote_state_lookup_ref (state, ref, &latest_rev, NULL, &latest_rev_info, NULL, error)) - return FALSE; - if (latest_rev == NULL) - return flatpak_fail_error (error, FLATPAK_ERROR_REF_NOT_FOUND, - _("Couldn't find latest checksum for ref %s in remote %s"), - ref, state->remote_name); - - metadata = var_ref_info_get_metadata (latest_rev_info); - oci_repository = var_metadata_lookup_string (metadata, "xa.oci-repository", NULL); - delta_url = var_metadata_lookup_string (metadata, "xa.delta-url", NULL); - - oci_digest = g_strconcat ("sha256:", opt_rev != NULL ? opt_rev : latest_rev, NULL); - - image_source = flatpak_remote_state_new_image_source (state, oci_repository, oci_digest, token, cancellable, error); - if (image_source == NULL) - return FALSE; - } + oci_digest = flatpak_image_source_get_digest (image_source); /* Short circuit if we've already got this commit */ if (latest_alt_commit != NULL && strcmp (oci_digest + strlen ("sha256:"), latest_alt_commit) == 0) @@ -6027,7 +5976,7 @@ flatpak_dir_pull_oci (FlatpakDir *self, g_info ("Pulling OCI image %s", oci_digest); - checksum = flatpak_pull_from_oci (repo, image_source, delta_url, + checksum = flatpak_pull_from_oci (repo, image_source, state->remote_name, ref, flatpak_flags, oci_pull_progress_cb, progress, cancellable, error); if (checksum == NULL) diff --git a/common/flatpak-image-source-private.h b/common/flatpak-image-source-private.h index b1e5d2fabe..94e4cc1aa7 100644 --- a/common/flatpak-image-source-private.h +++ b/common/flatpak-image-source-private.h @@ -47,10 +47,13 @@ FlatpakImageSource *flatpak_image_source_new_for_location (const char *locatio void flatpak_image_source_set_token (FlatpakImageSource *self, const char *token); +void flatpak_image_source_set_delta_url (FlatpakImageSource *self, + const char *delta_url); FlatpakOciRegistry *flatpak_image_source_get_registry (FlatpakImageSource *self); const char *flatpak_image_source_get_oci_repository (FlatpakImageSource *self); const char *flatpak_image_source_get_digest (FlatpakImageSource *self); +const char *flatpak_image_source_get_delta_url (FlatpakImageSource *self); FlatpakOciManifest *flatpak_image_source_get_manifest (FlatpakImageSource *self); size_t flatpak_image_source_get_manifest_size (FlatpakImageSource *self); FlatpakOciImage *flatpak_image_source_get_image_config (FlatpakImageSource *self); @@ -66,4 +69,5 @@ const char *flatpak_image_source_get_commit_body (FlatpakImageSource *self) void flatpak_image_source_build_commit_metadata (FlatpakImageSource *self, GVariantBuilder *metadata_builder); +GVariant *flatpak_image_source_make_fake_commit (FlatpakImageSource *image_source); #endif /* __FLATPAK_IMAGE_SOURCE_H__ */ diff --git a/common/flatpak-image-source.c b/common/flatpak-image-source.c index 750f740bc0..2454d4a5eb 100644 --- a/common/flatpak-image-source.c +++ b/common/flatpak-image-source.c @@ -31,6 +31,7 @@ struct _FlatpakImageSource FlatpakOciRegistry *registry; char *repository; char *digest; + char *delta_url; FlatpakOciManifest *manifest; size_t manifest_size; @@ -47,6 +48,7 @@ flatpak_image_source_finalize (GObject *object) g_clear_object (&self->registry); g_clear_pointer (&self->repository, g_free); g_clear_pointer (&self->digest, g_free); + g_clear_pointer (&self->delta_url, g_free); g_clear_object (&self->manifest); g_clear_object (&self->image_config); @@ -330,6 +332,20 @@ flatpak_image_source_set_token (FlatpakImageSource *self, flatpak_oci_registry_set_token (self->registry, token); } +void +flatpak_image_source_set_delta_url (FlatpakImageSource *self, + const char *delta_url) +{ + g_free (self->delta_url); + self->delta_url = g_strdup (delta_url); +} + +const char * +flatpak_image_source_get_delta_url (FlatpakImageSource *self) +{ + return self->delta_url; +} + FlatpakOciRegistry * flatpak_image_source_get_registry (FlatpakImageSource *self) { @@ -457,3 +473,28 @@ flatpak_image_source_build_commit_metadata (FlatpakImageSource *self, g_variant_builder_add (metadata_builder, "{s@v}", key, data); } } + +GVariant * +flatpak_image_source_make_fake_commit (FlatpakImageSource *self) +{ + const char *parent = NULL; + g_autoptr(GVariantBuilder) metadata_builder = g_variant_builder_new (G_VARIANT_TYPE ("a{sv}")); + g_autoptr(GVariant) metadata_v = NULL; + + flatpak_image_source_build_commit_metadata (self, metadata_builder); + metadata_v = g_variant_ref_sink (g_variant_builder_end (metadata_builder)); + + parent = flatpak_image_source_get_parent_commit (self); + + /* This isn't going to be exactly the same as the reconstructed one from the pull, because we don't have the contents, but its useful to get metadata */ + return + g_variant_ref_sink (g_variant_new ("(@a{sv}@ay@a(say)sst@ay@ay)", + metadata_v, + parent ? ostree_checksum_to_bytes_v (parent) : g_variant_new_from_data (G_VARIANT_TYPE ("ay"), NULL, 0, FALSE, NULL, NULL), + g_variant_new_array (G_VARIANT_TYPE ("(say)"), NULL, 0), + flatpak_image_source_get_commit_subject (self), + flatpak_image_source_get_commit_body (self), + GUINT64_TO_BE (flatpak_image_source_get_commit_timestamp (self)), + ostree_checksum_to_bytes_v ("0000000000000000000000000000000000000000000000000000000000000000"), + ostree_checksum_to_bytes_v ("0000000000000000000000000000000000000000000000000000000000000000"))); +} diff --git a/common/flatpak-oci-registry-private.h b/common/flatpak-oci-registry-private.h index d48c8ed45b..7867c761b6 100644 --- a/common/flatpak-oci-registry-private.h +++ b/common/flatpak-oci-registry-private.h @@ -195,7 +195,6 @@ typedef void (*FlatpakOciPullProgress) (guint64 total_size, char * flatpak_pull_from_oci (OstreeRepo *repo, FlatpakImageSource *image_source, - const char *delta_url, const char *remote, const char *ref, FlatpakPullFlags flags, @@ -208,7 +207,6 @@ gboolean flatpak_mirror_image_from_oci (FlatpakOciRegistry *dst_registry, FlatpakImageSource *image_source, const char *remote, const char *ref, - const char *delta_url, OstreeRepo *repo, FlatpakOciPullProgress progress_cb, gpointer progress_data, diff --git a/common/flatpak-oci-registry.c b/common/flatpak-oci-registry.c index ebf000f863..c3dff5d60f 100644 --- a/common/flatpak-oci-registry.c +++ b/common/flatpak-oci-registry.c @@ -3658,7 +3658,6 @@ flatpak_mirror_image_from_oci (FlatpakOciRegistry *dst_registry, FlatpakImageSource *image_source, const char *remote, const char *ref, - const char *delta_url, OstreeRepo *repo, FlatpakOciPullProgress progress_cb, gpointer progress_user_data, @@ -3670,6 +3669,7 @@ flatpak_mirror_image_from_oci (FlatpakOciRegistry *dst_registry, const char *oci_repository = flatpak_image_source_get_oci_repository (image_source); const char *digest = flatpak_image_source_get_digest (image_source); FlatpakOciManifest *manifest = flatpak_image_source_get_manifest (image_source); + const char *delta_url = flatpak_image_source_get_delta_url (image_source); FlatpakOciImage *image_config = flatpak_image_source_get_image_config (image_source); g_autoptr(FlatpakOciDescriptor) manifest_desc = NULL; g_autoptr(FlatpakOciManifest) delta_manifest = NULL; @@ -3785,7 +3785,6 @@ flatpak_mirror_image_from_oci (FlatpakOciRegistry *dst_registry, char * flatpak_pull_from_oci (OstreeRepo *repo, FlatpakImageSource *image_source, - const char *delta_url, const char *remote, const char *ref, FlatpakPullFlags flags, @@ -3798,6 +3797,7 @@ flatpak_pull_from_oci (OstreeRepo *repo, const char *oci_repository = flatpak_image_source_get_oci_repository (image_source); const char *digest = flatpak_image_source_get_digest (image_source); FlatpakOciManifest *manifest = flatpak_image_source_get_manifest (image_source); + const char *delta_url = flatpak_image_source_get_delta_url (image_source); FlatpakOciImage *image_config = flatpak_image_source_get_image_config (image_source); gboolean force_disable_deltas = (flags & FLATPAK_PULL_FLAGS_NO_STATIC_DELTAS) != 0; g_autoptr(OstreeMutableTree) archive_mtree = NULL; diff --git a/system-helper/flatpak-system-helper.c b/system-helper/flatpak-system-helper.c index 2740b2998e..1f950b20e4 100644 --- a/system-helper/flatpak-system-helper.c +++ b/system-helper/flatpak-system-helper.c @@ -593,7 +593,7 @@ handle_deploy (FlatpakSystemHelper *object, return G_DBUS_METHOD_INVOCATION_HANDLED; } - checksum = flatpak_pull_from_oci (flatpak_dir_get_repo (system), image_source, NULL, + checksum = flatpak_pull_from_oci (flatpak_dir_get_repo (system), image_source, arg_origin, arg_ref, FLATPAK_PULL_FLAGS_NONE, NULL, NULL, NULL, &error); if (checksum == NULL) { From 555d676cc03300a3d156dca81de3ad79b5480835 Mon Sep 17 00:00:00 2001 From: "Owen W. Taylor" Date: Wed, 30 Oct 2024 14:27:44 -0400 Subject: [PATCH 25/53] Enable collection IDs for OCI remotes We want to use collection IDs to specify what remote to install from when processing /etc/flatpak/preinstall.d; in order for this to work for OCI remotes, we need to permit collection IDs. - In flatpakrepo files, don't require a GPGKey for a OCI remote with a collection - we don't have signature verification for GPG remotes. - Don't validate that the collection ID appears in the summary - the image index doesn't currently contain an image ID --- common/flatpak-dir.c | 6 +++++- common/flatpak-repo-utils.c | 5 ++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/common/flatpak-dir.c b/common/flatpak-dir.c index c8c28db2d5..34e2563050 100644 --- a/common/flatpak-dir.c +++ b/common/flatpak-dir.c @@ -12931,9 +12931,13 @@ _flatpak_dir_get_remote_state (FlatpakDir *self, return NULL; } + /* For OCI remotes, the collection ID is local configuration only: + * In the future we could add it to the index format. + */ if (state->collection_id != NULL && state->summary != NULL && - !_validate_summary_for_collection_id (state->summary, state->collection_id, error)) + !(flatpak_dir_get_remote_oci (self, state->remote_name) || + _validate_summary_for_collection_id (state->summary, state->collection_id, error))) return NULL; if (flatpak_dir_get_remote_oci (self, remote_or_uri)) diff --git a/common/flatpak-repo-utils.c b/common/flatpak-repo-utils.c index cfe048a40d..21348ee4dc 100644 --- a/common/flatpak-repo-utils.c +++ b/common/flatpak-repo-utils.c @@ -2929,7 +2929,10 @@ flatpak_parse_repofile (const char *remote_name, FLATPAK_REPO_COLLECTION_ID_KEY); if (collection_id != NULL) { - if (gpg_key == NULL) + /* We don't support signatures for OCI remotes, but Collection ID's are + * still useful for preinstallation. + */ + if (gpg_key == NULL && !g_str_has_prefix (uri, "oci+")) { flatpak_fail_error (error, FLATPAK_ERROR_INVALID_DATA, _("Collection ID requires GPG key to be provided")); return NULL; From 667ad4c57b28bbff44ceab65021358d2abe7cdc7 Mon Sep 17 00:00:00 2001 From: Sebastian Wick Date: Fri, 9 May 2025 00:08:47 +0200 Subject: [PATCH 26/53] glib-backports: Add g_set_str from 2.84.1 --- common/flatpak-glib-backports-private.h | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/common/flatpak-glib-backports-private.h b/common/flatpak-glib-backports-private.h index d030aaf97f..8adb54aa49 100644 --- a/common/flatpak-glib-backports-private.h +++ b/common/flatpak-glib-backports-private.h @@ -172,4 +172,24 @@ guint g_string_replace (GString *string, # define G_DBUS_METHOD_INVOCATION_UNHANDLED FALSE #endif +#if !GLIB_CHECK_VERSION (2, 76, 0) +/* All this code is backported directly from 2.84.1 */ +static inline gboolean +g_set_str (char **str_pointer, + const char *new_str) +{ + char *copy; + + if (*str_pointer == new_str || + (*str_pointer && new_str && strcmp (*str_pointer, new_str) == 0)) + return FALSE; + + copy = g_strdup (new_str); + g_free (*str_pointer); + *str_pointer = copy; + + return TRUE; +} +#endif /* GLIB_CHECK_VERSION (2, 76, 0) */ + G_END_DECLS From 555e9200d94902064d93965b9f1831c86125a1f0 Mon Sep 17 00:00:00 2001 From: Sebastian Wick Date: Tue, 19 Aug 2025 21:42:01 +0200 Subject: [PATCH 27/53] libtest.sh: Add have_working_bwrap to skip over parts of a test --- tests/libtest.sh | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/tests/libtest.sh b/tests/libtest.sh index 823b1be215..75becface1 100644 --- a/tests/libtest.sh +++ b/tests/libtest.sh @@ -525,6 +525,11 @@ else _flatpak_bwrap_works=true fi +have_working_bwrap() { + [[ "${_flatpak_bwrap_works}" == "true" ]] + return $? +} + # Use to skip all of these tests skip() { echo "1..0 # SKIP" "$@" From d10e11482d42996c47bc0d4f97b513fc197a7e2b Mon Sep 17 00:00:00 2001 From: Kalev Lember Date: Tue, 16 Apr 2024 12:18:59 +0200 Subject: [PATCH 28/53] Add initial support for preinstalling flatpaks This adds new FlatpakTransaction API, and a new top level CLI command to preinstall flatpaks, that is to install flatpaks that are considered part of the operating system. A new drop-in directory /etc/flatpak/preinstall.d/ allows configuring what apps should be preinstalled, and a new flatpak preinstall command installs and removes apps based on the current configuration. A drop-in loupe.preinstall file can look something like this: [Flatpak Preinstall org.gnome.Loupe] Branch=stable IsRuntime=false The corresponding API is flatpak_transaction_add_sync_preinstalled() which can be implemented by GUI clients to drive the actual installs on system startup. Resolves: https://github.com/flatpak/flatpak/issues/5579 Co-authored-by: Sebastian Wick --- app/flatpak-builtins-preinstall.c | 156 ++++++++++ app/flatpak-builtins.h | 1 + app/flatpak-main.c | 1 + app/meson.build | 1 + common/flatpak-dir-private.h | 23 +- common/flatpak-dir.c | 430 +++++++++++++++++++++++++- common/flatpak-installation.c | 2 +- common/flatpak-transaction.c | 187 +++++++++-- common/flatpak-transaction.h | 3 + doc/flatpak-docs.xml.in | 1 + doc/flatpak-preinstall.xml | 276 +++++++++++++++++ doc/meson.build | 1 + po/POTFILES.in | 1 + system-helper/flatpak-system-helper.c | 5 +- tests/libtest.sh | 1 + tests/test-basic.sh | 2 +- tests/test-matrix/meson.build | 1 + tests/test-preinstall.sh | 254 +++++++++++++++ 18 files changed, 1316 insertions(+), 30 deletions(-) create mode 100644 app/flatpak-builtins-preinstall.c create mode 100644 doc/flatpak-preinstall.xml create mode 100755 tests/test-preinstall.sh diff --git a/app/flatpak-builtins-preinstall.c b/app/flatpak-builtins-preinstall.c new file mode 100644 index 0000000000..3d52cb8bc2 --- /dev/null +++ b/app/flatpak-builtins-preinstall.c @@ -0,0 +1,156 @@ +/* vi:set et sw=2 sts=2 cin cino=t0,f0,(0,{s,>2s,n-s,^-s,e-s: + * Copyright © 2024 Red Hat, Inc + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. If not, see . + * + * Authors: + * Kalev Lember + */ + +#include "config.h" + +#include +#include +#include +#include + +#include + +#include + +#include "libglnx.h" + +#include "flatpak-builtins.h" +#include "flatpak-builtins-utils.h" +#include "flatpak-transaction-private.h" +#include "flatpak-cli-transaction.h" +#include "flatpak-quiet-transaction.h" +#include "flatpak-utils-http-private.h" +#include "flatpak-utils-private.h" +#include "flatpak-error.h" +#include "flatpak-chain-input-stream-private.h" + +static char **opt_sideload_repos; +static gboolean opt_no_pull; +static gboolean opt_no_deploy; +static gboolean opt_no_related; +static gboolean opt_no_deps; +static gboolean opt_no_static_deltas; +static gboolean opt_include_sdk; +static gboolean opt_include_debug; +static gboolean opt_yes; +static gboolean opt_reinstall; +static gboolean opt_noninteractive; + +static GOptionEntry options[] = { + { "no-pull", 0, 0, G_OPTION_ARG_NONE, &opt_no_pull, N_("Don't pull, only install from local cache"), NULL }, + { "no-deploy", 0, 0, G_OPTION_ARG_NONE, &opt_no_deploy, N_("Don't deploy, only download to local cache"), NULL }, + { "no-related", 0, 0, G_OPTION_ARG_NONE, &opt_no_related, N_("Don't install related refs"), NULL }, + { "no-deps", 0, 0, G_OPTION_ARG_NONE, &opt_no_deps, N_("Don't verify/install runtime dependencies"), NULL }, + { "no-static-deltas", 0, 0, G_OPTION_ARG_NONE, &opt_no_static_deltas, N_("Don't use static deltas"), NULL }, + { "include-sdk", 0, 0, G_OPTION_ARG_NONE, &opt_include_sdk, N_("Additionally install the SDK used to build the given refs") }, + { "include-debug", 0, 0, G_OPTION_ARG_NONE, &opt_include_debug, N_("Additionally install the debug info for the given refs and their dependencies") }, + { "assumeyes", 'y', 0, G_OPTION_ARG_NONE, &opt_yes, N_("Automatically answer yes for all questions"), NULL }, + { "reinstall", 0, 0, G_OPTION_ARG_NONE, &opt_reinstall, N_("Uninstall first if already installed"), NULL }, + { "noninteractive", 0, 0, G_OPTION_ARG_NONE, &opt_noninteractive, N_("Produce minimal output and don't ask questions"), NULL }, + /* Translators: A sideload is when you install from a local USB drive rather than the Internet. */ + { "sideload-repo", 0, 0, G_OPTION_ARG_FILENAME_ARRAY, &opt_sideload_repos, N_("Use this local repo for sideloads"), N_("PATH") }, + { NULL } +}; + +gboolean +flatpak_builtin_preinstall (int argc, char **argv, GCancellable *cancellable, GError **error) +{ + g_autoptr(GOptionContext) context = NULL; + g_autoptr(GPtrArray) dirs = NULL; + g_autoptr(FlatpakDir) dir = NULL; + g_autoptr(FlatpakTransaction) transaction = NULL; + + context = g_option_context_new (_("- Install flatpaks that are part of the operating system")); + g_option_context_set_translation_domain (context, GETTEXT_PACKAGE); + + if (!flatpak_option_context_parse (context, options, &argc, &argv, + FLATPAK_BUILTIN_FLAG_ALL_DIRS | FLATPAK_BUILTIN_FLAG_OPTIONAL_REPO, + &dirs, cancellable, error)) + return FALSE; + + /* Use the default dir */ + dir = g_object_ref (g_ptr_array_index (dirs, 0)); + + if (opt_noninteractive) + opt_yes = TRUE; /* Implied */ + + if (opt_noninteractive) + transaction = flatpak_quiet_transaction_new (dir, error); + else + transaction = flatpak_cli_transaction_new (dir, opt_yes, TRUE, FALSE, error); + if (transaction == NULL) + return FALSE; + + flatpak_transaction_set_no_pull (transaction, opt_no_pull); + flatpak_transaction_set_no_deploy (transaction, opt_no_deploy); + flatpak_transaction_set_disable_static_deltas (transaction, opt_no_static_deltas); + flatpak_transaction_set_disable_dependencies (transaction, opt_no_deps); + flatpak_transaction_set_disable_related (transaction, opt_no_related); + flatpak_transaction_set_reinstall (transaction, opt_reinstall); + flatpak_transaction_set_auto_install_sdk (transaction, opt_include_sdk); + flatpak_transaction_set_auto_install_debug (transaction, opt_include_debug); + + for (int i = 0; opt_sideload_repos != NULL && opt_sideload_repos[i] != NULL; i++) + flatpak_transaction_add_sideload_repo (transaction, opt_sideload_repos[i]); + + if (!flatpak_transaction_add_sync_preinstalled (transaction, error)) + return FALSE; + + if (flatpak_transaction_is_empty (transaction)) + { + g_print (_("Nothing to do.\n")); + + return TRUE; + } + + if (!flatpak_transaction_run (transaction, cancellable, error)) + { + if (g_error_matches (*error, FLATPAK_ERROR, FLATPAK_ERROR_ABORTED)) + g_clear_error (error); /* Don't report on stderr */ + + return FALSE; + } + + return TRUE; +} + +gboolean +flatpak_complete_preinstall (FlatpakCompletion *completion) +{ + g_autoptr(GOptionContext) context = NULL; + g_autoptr(GPtrArray) dirs = NULL; + + context = g_option_context_new (""); + if (!flatpak_option_context_parse (context, options, &completion->argc, &completion->argv, + FLATPAK_BUILTIN_FLAG_ONE_DIR | FLATPAK_BUILTIN_FLAG_OPTIONAL_REPO, + &dirs, NULL, NULL)) + return FALSE; + + switch (completion->argc) + { + default: /* REF */ + flatpak_complete_options (completion, global_entries); + flatpak_complete_options (completion, options); + flatpak_complete_options (completion, user_entries); + break; + } + + return TRUE; +} diff --git a/app/flatpak-builtins.h b/app/flatpak-builtins.h index 32a9c9528c..20eb227206 100644 --- a/app/flatpak-builtins.h +++ b/app/flatpak-builtins.h @@ -127,6 +127,7 @@ BUILTINPROTO (repair) BUILTINPROTO (create_usb) BUILTINPROTO (kill) BUILTINPROTO (history) +BUILTINPROTO (preinstall) #undef BUILTINPROTO diff --git a/app/flatpak-main.c b/app/flatpak-main.c index 4549889566..d5794d9909 100644 --- a/app/flatpak-main.c +++ b/app/flatpak-main.c @@ -89,6 +89,7 @@ static FlatpakCommand commands[] = { { "config", N_("Configure flatpak"), flatpak_builtin_config, flatpak_complete_config }, { "repair", N_("Repair flatpak installation"), flatpak_builtin_repair, flatpak_complete_repair }, { "create-usb", N_("Put applications or runtimes onto removable media"), flatpak_builtin_create_usb, flatpak_complete_create_usb }, + { "preinstall", N_("Install flatpaks that are part of the operating system"), flatpak_builtin_preinstall, flatpak_complete_preinstall }, /* translators: please keep the leading newline and space */ { N_("\n Find applications and runtimes") }, diff --git a/app/meson.build b/app/meson.build index 258d582a93..8e6ef1dd1b 100644 --- a/app/meson.build +++ b/app/meson.build @@ -100,6 +100,7 @@ sources = [ 'flatpak-builtins-permission-set.c', 'flatpak-builtins-permission-show.c', 'flatpak-builtins-pin.c', + 'flatpak-builtins-preinstall.c', 'flatpak-builtins-ps.c', 'flatpak-builtins-remote-add.c', 'flatpak-builtins-remote-delete.c', diff --git a/common/flatpak-dir-private.h b/common/flatpak-dir-private.h index 3642425d29..6082ccc5f4 100644 --- a/common/flatpak-dir-private.h +++ b/common/flatpak-dir-private.h @@ -180,6 +180,7 @@ typedef enum { FLATPAK_HELPER_DEPLOY_FLAGS_APP_HINT = 1 << 5, FLATPAK_HELPER_DEPLOY_FLAGS_INSTALL_HINT = 1 << 6, FLATPAK_HELPER_DEPLOY_FLAGS_UPDATE_PINNED = 1 << 7, + FLATPAK_HELPER_DEPLOY_FLAGS_UPDATE_PREINSTALLED = 1 << 8, } FlatpakHelperDeployFlags; #define FLATPAK_HELPER_DEPLOY_FLAGS_ALL (FLATPAK_HELPER_DEPLOY_FLAGS_UPDATE | \ @@ -189,18 +190,21 @@ typedef enum { FLATPAK_HELPER_DEPLOY_FLAGS_NO_INTERACTION | \ FLATPAK_HELPER_DEPLOY_FLAGS_APP_HINT | \ FLATPAK_HELPER_DEPLOY_FLAGS_INSTALL_HINT | \ - FLATPAK_HELPER_DEPLOY_FLAGS_UPDATE_PINNED) + FLATPAK_HELPER_DEPLOY_FLAGS_UPDATE_PINNED | \ + FLATPAK_HELPER_DEPLOY_FLAGS_UPDATE_PREINSTALLED) typedef enum { FLATPAK_HELPER_UNINSTALL_FLAGS_NONE = 0, FLATPAK_HELPER_UNINSTALL_FLAGS_KEEP_REF = 1 << 0, FLATPAK_HELPER_UNINSTALL_FLAGS_FORCE_REMOVE = 1 << 1, FLATPAK_HELPER_UNINSTALL_FLAGS_NO_INTERACTION = 1 << 2, + FLATPAK_HELPER_UNINSTALL_FLAGS_UPDATE_PREINSTALLED = 1 << 3, } FlatpakHelperUninstallFlags; #define FLATPAK_HELPER_UNINSTALL_FLAGS_ALL (FLATPAK_HELPER_UNINSTALL_FLAGS_KEEP_REF | \ FLATPAK_HELPER_UNINSTALL_FLAGS_FORCE_REMOVE | \ - FLATPAK_HELPER_UNINSTALL_FLAGS_NO_INTERACTION) + FLATPAK_HELPER_UNINSTALL_FLAGS_NO_INTERACTION | \ + FLATPAK_HELPER_UNINSTALL_FLAGS_UPDATE_PREINSTALLED) typedef enum { FLATPAK_HELPER_CONFIGURE_REMOTE_FLAGS_NONE = 0, @@ -364,6 +368,19 @@ gboolean flatpak_remove_override_keyfile (const char *app_id, gboolean user, GError **error); +typedef struct +{ + FlatpakDecomposed *ref; + char *collection_id; +} FlatpakPreinstallConfig; + +GPtrArray * flatpak_get_preinstall_config (const char *default_arch, + GCancellable *cancellable, + GError **error); +gboolean flatpak_dir_uninitialized_mark_preinstalled (FlatpakDir *self, + const GPtrArray *preinstall_config, + GError **error); + int flatpak_deploy_data_get_version (GBytes *deploy_data); const char * flatpak_deploy_data_get_origin (GBytes *deploy_data); const char * flatpak_deploy_data_get_commit (GBytes *deploy_data); @@ -681,6 +698,7 @@ gboolean flatpak_dir_deploy_install (Fla const char **previous_ids, gboolean reinstall, gboolean pin_on_deploy, + gboolean update_preinstalled_on_deploy, GCancellable *cancellable, GError **error); gboolean flatpak_dir_install (FlatpakDir *self, @@ -690,6 +708,7 @@ gboolean flatpak_dir_install (Fla gboolean reinstall, gboolean app_hint, gboolean pin_on_deploy, + gboolean update_preinstalled_on_deploy, FlatpakRemoteState *state, FlatpakDecomposed *ref, const char *opt_commit, diff --git a/common/flatpak-dir.c b/common/flatpak-dir.c index 34e2563050..2041b5ae0f 100644 --- a/common/flatpak-dir.c +++ b/common/flatpak-dir.c @@ -85,6 +85,16 @@ #define FLATPAK_REMOTES_DIR "remotes.d" #define FLATPAK_REMOTES_FILE_EXT ".flatpakrepo" +#define FLATPAK_PREINSTALL_DIR "preinstall.d" +#define FLATPAK_PREINSTALL_FILE_EXT ".preinstall" + +#define FLATPAK_PREINSTALL_GROUP_PREFIX "Flatpak Preinstall " +#define FLATPAK_PREINSTALL_IS_RUNTIME_KEY "IsRuntime" +#define FLATPAK_PREINSTALL_NAME_KEY "Name" +#define FLATPAK_PREINSTALL_BRANCH_KEY "Branch" +#define FLATPAK_PREINSTALL_COLLECTION_ID_KEY "CollectionID" +#define FLATPAK_PREINSTALL_INSTALL_KEY "Install" + #define SIDELOAD_REPOS_DIR_NAME "sideload-repos" #define FLATPAK_TRIGGERS_DIR "triggers" @@ -1878,6 +1888,405 @@ get_system_locations (GCancellable *cancellable, return g_steal_pointer (&locations); } +typedef struct +{ + char *name; + char *branch; + gboolean is_runtime; + char *collection_id; + gboolean install; +} PreinstallConfig; + +static PreinstallConfig * +preinstall_config_new (const char *name) +{ + PreinstallConfig *config = g_new0 (PreinstallConfig, 1); + + config->name = g_strdup (name); + config->branch = g_strdup ("master"); + config->install = TRUE; + + return config; +} + +static void +preinstall_config_free (PreinstallConfig *config) +{ + g_clear_pointer (&config->name, g_free); + g_clear_pointer (&config->branch, g_free); + g_clear_pointer (&config->collection_id, g_free); + g_free (config); +} + +G_DEFINE_AUTOPTR_CLEANUP_FUNC (PreinstallConfig, preinstall_config_free) + +static void +flatpak_preinstall_config_free (FlatpakPreinstallConfig *preinstall) +{ + g_clear_pointer (&preinstall->ref, flatpak_decomposed_unref); + g_clear_pointer (&preinstall->collection_id, g_free); + g_free (preinstall); +} + +G_DEFINE_AUTOPTR_CLEANUP_FUNC (FlatpakPreinstallConfig, flatpak_preinstall_config_free) + +static void +flatpak_parse_preinstall_config_file (GKeyFile *keyfile, + GHashTable *configs) +{ + g_auto(GStrv) groups = NULL; + + groups = g_key_file_get_groups (keyfile, NULL); + + for (int i = 0; groups[i] != NULL; i++) + { + const char *group_name = groups[i]; + const char *name; + g_autoptr(PreinstallConfig) config = NULL; + g_autoptr(GError) local_error = NULL; + g_autofree char *owned_name = NULL; + g_autofree char *branch = NULL; + gboolean is_runtime = FALSE; + g_autofree char *collection_id = NULL; + gboolean install = TRUE; + + if (!g_str_has_prefix (group_name, FLATPAK_PREINSTALL_GROUP_PREFIX) || + *(group_name + strlen (FLATPAK_PREINSTALL_GROUP_PREFIX)) == '\0') + { + g_info ("Skipping unknown group %s", group_name); + continue; + } + + name = group_name + strlen (FLATPAK_PREINSTALL_GROUP_PREFIX); + + if (!g_hash_table_steal_extended (configs, name, + (gpointer *)&owned_name, + (gpointer *)&config)) + { + config = preinstall_config_new (name); + owned_name = g_strdup (name); + } + + branch = g_key_file_get_string (keyfile, + group_name, + FLATPAK_PREINSTALL_BRANCH_KEY, + NULL); + if (branch) + { + if (*branch == '\0') + g_clear_pointer (&branch, g_free); + + g_set_str (&config->branch, branch); + } + + is_runtime = g_key_file_get_boolean (keyfile, + group_name, + FLATPAK_PREINSTALL_IS_RUNTIME_KEY, + &local_error); + if (!local_error) + { + config->is_runtime = is_runtime; + } + else if (!g_error_matches (local_error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_KEY_NOT_FOUND)) + { + g_info ("Invalid file format, %s is not a boolean", + FLATPAK_PREINSTALL_IS_RUNTIME_KEY); + } + g_clear_error (&local_error); + + collection_id = g_key_file_get_string (keyfile, + group_name, + FLATPAK_PREINSTALL_COLLECTION_ID_KEY, + NULL); + if (collection_id) + { + if (*collection_id == '\0') + g_clear_pointer (&collection_id, g_free); + + g_set_str (&config->collection_id, collection_id); + } + + install = g_key_file_get_boolean (keyfile, + group_name, + FLATPAK_PREINSTALL_INSTALL_KEY, + &local_error); + if (!local_error) + { + config->install = install; + } + else if (!g_error_matches (local_error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_KEY_NOT_FOUND)) + { + g_info ("Invalid file format, %s is not a boolean", + FLATPAK_PREINSTALL_INSTALL_KEY); + } + g_clear_error (&local_error); + + g_hash_table_insert (configs, + g_steal_pointer (&owned_name), + g_steal_pointer (&config)); + } +} + +typedef struct +{ + char *name; + GFile *file; +} PreinstallConfigFile; + +static gint +preinstall_config_file_sort (gconstpointer a, + gconstpointer b) +{ + const PreinstallConfigFile *ca = a; + const PreinstallConfigFile *cb = b; + + return g_strcmp0 (ca->name, cb->name); +} + +static void +preinstall_config_file_free (PreinstallConfigFile *preinstall_config_file) +{ + g_clear_pointer (&preinstall_config_file->name, g_free); + g_clear_object (&preinstall_config_file->file); + g_free (preinstall_config_file); +} + +G_DEFINE_AUTOPTR_CLEANUP_FUNC (PreinstallConfigFile, preinstall_config_file_free); + +static gboolean +scan_preinstall_config_files (const char *config_dir, + GHashTable *configs, + GCancellable *cancellable, + GError **error) +{ + g_autoptr(GFile) conf_dir = NULL; + g_autoptr(GFileEnumerator) dir_enum = NULL; + g_autoptr(GPtrArray) config_files = NULL; + g_autoptr(GError) local_error = NULL; + + if (!g_file_test (config_dir, G_FILE_TEST_IS_DIR)) + { + g_info ("Skipping missing preinstall config directory %s", config_dir); + return TRUE; + } + + conf_dir = g_file_new_for_path (config_dir); + dir_enum = g_file_enumerate_children (conf_dir, + G_FILE_ATTRIBUTE_STANDARD_NAME "," G_FILE_ATTRIBUTE_STANDARD_TYPE, + G_FILE_QUERY_INFO_NONE, + cancellable, + &local_error); + if (local_error != NULL) + { + g_info ("Unexpected error retrieving preinstalls from %s: %s", + config_dir, + local_error->message); + + g_propagate_error (error, g_steal_pointer (&local_error)); + return FALSE; + } + + config_files = g_ptr_array_new_with_free_func ((GDestroyNotify)preinstall_config_file_free); + + while (TRUE) + { + GFileInfo *file_info; + GFile *path; + const char *name; + guint32 type; + g_autoptr(PreinstallConfigFile) config_file = NULL; + + if (!g_file_enumerator_iterate (dir_enum, + &file_info, + &path, + cancellable, + &local_error)) + { + g_info ("Unexpected error reading file in %s: %s", + config_dir, + local_error->message); + + g_propagate_error (error, g_steal_pointer (&local_error)); + return FALSE; + } + + if (file_info == NULL) + break; + + name = g_file_info_get_name (file_info); + type = g_file_info_get_file_type (file_info); + + if (type != G_FILE_TYPE_REGULAR || + !g_str_has_suffix (name, FLATPAK_PREINSTALL_FILE_EXT)) + continue; + + config_file = g_new0 (PreinstallConfigFile, 1); + config_file->name = g_strdup (name); + config_file->file = g_object_ref (path); + g_ptr_array_add (config_files, g_steal_pointer (&config_file)); + } + + g_ptr_array_sort (config_files, preinstall_config_file_sort); + + for (int i = 0; i < config_files->len; i++) + { + PreinstallConfigFile *config_file = g_ptr_array_index (config_files, i); + g_autofree char *path = NULL; + g_autoptr(GKeyFile) keyfile = NULL; + g_autoptr(GError) load_error = NULL; + + path = g_file_get_path (config_file->file); + + g_info ("Parsing config file %s", path); + + keyfile = g_key_file_new (); + + if (!g_key_file_load_from_file (keyfile, path, G_KEY_FILE_NONE, &load_error)) + g_info ("Parsing config file %s failed: %s", path, load_error->message); + + flatpak_parse_preinstall_config_file (keyfile, configs); + } + + return TRUE; +} + +GPtrArray * +flatpak_get_preinstall_config (const char *default_arch, + GCancellable *cancellable, + GError **error) +{ + g_autoptr(GHashTable) configs = NULL; + g_autoptr(GPtrArray) preinstalls = NULL; + g_autofree char *config_dir = NULL; + g_autofree char *data_dir = NULL; + GHashTableIter iter; + PreinstallConfig *config; + + configs = g_hash_table_new_full (g_str_hash, g_str_equal, + g_free, (GDestroyNotify)preinstall_config_free); + + /* scan directories in reverse priority order */ + data_dir = g_build_filename (get_data_dir_location (), FLATPAK_PREINSTALL_DIR, NULL); + if (!scan_preinstall_config_files (data_dir, configs, cancellable, error)) + return NULL; + + config_dir = g_build_filename (get_config_dir_location (), FLATPAK_PREINSTALL_DIR, NULL); + if (!scan_preinstall_config_files (config_dir, configs, cancellable, error)) + return NULL; + + preinstalls = g_ptr_array_new_with_free_func ((GDestroyNotify)flatpak_preinstall_config_free); + + g_hash_table_iter_init (&iter, configs); + while (g_hash_table_iter_next (&iter, NULL, (gpointer *)&config)) + { + g_autoptr(FlatpakPreinstallConfig) preinstall = NULL; + g_autoptr(FlatpakDecomposed) ref = NULL; + g_autoptr(GError) local_error = NULL; + + if (!config->install) + { + g_info ("Skipping preinstall of %s because it is configured to not install", + config->name); + continue; + } + + ref = flatpak_decomposed_new_from_parts (config->is_runtime ? + FLATPAK_KINDS_RUNTIME : + FLATPAK_KINDS_APP, + config->name, + default_arch, + config->branch, + &local_error); + if (ref == NULL) + { + g_info ("Skipping preinstall of %s because of problems in the configuration: %s", + config->name, + local_error->message); + continue; + } + + preinstall = g_new0 (FlatpakPreinstallConfig, 1); + preinstall->ref = g_steal_pointer (&ref); + preinstall->collection_id = g_strdup (config->collection_id); + + g_info ("Found preinstall ref %s", + flatpak_decomposed_get_ref (preinstall->ref)); + + g_ptr_array_add (preinstalls, g_steal_pointer (&preinstall)); + } + + return g_steal_pointer (&preinstalls); +} + +static gboolean +flatpak_is_ref_in_list (FlatpakDecomposed *needle, + GPtrArray *refs) +{ + for (size_t i = 0; i < refs->len; i++) + { + FlatpakDecomposed *ref = g_ptr_array_index (refs, i); + + if (flatpak_decomposed_equal (ref, needle)) + return TRUE; + } + + return FALSE; +} + +gboolean +flatpak_dir_uninitialized_mark_preinstalled (FlatpakDir *self, + const GPtrArray *preinstall_config, + GError **error) +{ + g_autoptr(GPtrArray) installed_refs = NULL; + g_autofree char *existing_preinstalls = NULL; + g_autoptr(GError) local_error = NULL; + + existing_preinstalls = flatpak_dir_get_config (self, + "preinstalled", + &local_error); + + if (existing_preinstalls != NULL) + return TRUE; + + if (!g_error_matches (local_error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_KEY_NOT_FOUND)) + { + g_propagate_error (error, g_steal_pointer (&local_error)); + return FALSE; + } + + g_clear_error (&local_error); + + installed_refs = flatpak_dir_list_refs (self, FLATPAK_KINDS_RUNTIME | FLATPAK_KINDS_APP, + NULL, error); + if (installed_refs == NULL) + return FALSE; + + for (int i = 0; i < preinstall_config->len; i++) + { + const FlatpakPreinstallConfig *config = g_ptr_array_index (preinstall_config, i); + GError **append_error = local_error == NULL ? &local_error : NULL; + + if (!flatpak_is_ref_in_list (config->ref, installed_refs)) + continue; + + flatpak_dir_config_append_pattern (self, + "preinstalled", + flatpak_decomposed_get_ref (config->ref), + FALSE, + NULL, + append_error); + } + + if (local_error) + { + g_propagate_error (error, g_steal_pointer (&local_error)); + return FALSE; + } + + return TRUE; +} + GPtrArray * flatpak_get_system_base_dir_locations (GCancellable *cancellable, GError **error) @@ -9097,6 +9506,7 @@ flatpak_dir_deploy_install (FlatpakDir *self, const char **previous_ids, gboolean reinstall, gboolean pin_on_deploy, + gboolean update_preinstalled_on_deploy, GCancellable *cancellable, GError **error) { @@ -9204,6 +9614,14 @@ flatpak_dir_deploy_install (FlatpakDir *self, TRUE, NULL, error)) goto out; + /* Save preinstalled refs to keep the data on what is user installed and what + * is automatically installed. */ + if (update_preinstalled_on_deploy && + !flatpak_dir_config_append_pattern (self, "preinstalled", + flatpak_decomposed_get_ref (ref), + FALSE, NULL, error)) + goto out; + ret = TRUE; commit = flatpak_dir_read_active (self, ref, cancellable); @@ -9805,6 +10223,7 @@ flatpak_dir_install (FlatpakDir *self, gboolean reinstall, gboolean app_hint, gboolean pin_on_deploy, + gboolean update_preinstalled_on_deploy, FlatpakRemoteState *state, FlatpakDecomposed *ref, const char *opt_commit, @@ -10019,6 +10438,9 @@ flatpak_dir_install (FlatpakDir *self, if (pin_on_deploy) helper_flags |= FLATPAK_HELPER_DEPLOY_FLAGS_UPDATE_PINNED; + if (update_preinstalled_on_deploy) + helper_flags |= FLATPAK_HELPER_DEPLOY_FLAGS_UPDATE_PREINSTALLED; + helper_flags |= FLATPAK_HELPER_DEPLOY_FLAGS_INSTALL_HINT; if (!flatpak_dir_system_helper_call_deploy (self, @@ -10057,6 +10479,7 @@ flatpak_dir_install (FlatpakDir *self, { if (!flatpak_dir_deploy_install (self, ref, state->remote_name, opt_subpaths, opt_previous_ids, reinstall, pin_on_deploy, + update_preinstalled_on_deploy, cancellable, error)) return FALSE; @@ -10347,7 +10770,7 @@ flatpak_dir_install_bundle (FlatpakDir *self, } else { - if (!flatpak_dir_deploy_install (self, ref, remote, NULL, NULL, FALSE, FALSE, cancellable, error)) + if (!flatpak_dir_deploy_install (self, ref, remote, NULL, NULL, FALSE, FALSE, FALSE, cancellable, error)) return FALSE; } @@ -10778,6 +11201,7 @@ flatpak_dir_uninstall (FlatpakDir *self, g_autoptr(GBytes) deploy_data = NULL; gboolean keep_ref = flags & FLATPAK_HELPER_UNINSTALL_FLAGS_KEEP_REF; gboolean force_remove = flags & FLATPAK_HELPER_UNINSTALL_FLAGS_FORCE_REMOVE; + gboolean update_preinstalled = flags & FLATPAK_HELPER_UNINSTALL_FLAGS_UPDATE_PREINSTALLED; name = flatpak_decomposed_dup_id (ref); @@ -10884,6 +11308,10 @@ flatpak_dir_uninstall (FlatpakDir *self, if (!flatpak_dir_mark_changed (self, error)) return FALSE; + if (update_preinstalled && + !flatpak_dir_config_remove_pattern (self, "preinstalled", flatpak_decomposed_get_ref (ref), error)) + return FALSE; + if (!was_deployed) { const char *branch = flatpak_decomposed_get_branch (ref); diff --git a/common/flatpak-installation.c b/common/flatpak-installation.c index 3a8677e836..be7061748b 100644 --- a/common/flatpak-installation.c +++ b/common/flatpak-installation.c @@ -1929,7 +1929,7 @@ flatpak_installation_install_full (FlatpakInstallation *self, (flags & FLATPAK_INSTALL_FLAGS_NO_PULL) != 0, (flags & FLATPAK_INSTALL_FLAGS_NO_DEPLOY) != 0, (flags & FLATPAK_INSTALL_FLAGS_NO_STATIC_DELTAS) != 0, - FALSE, FALSE, FALSE, state, + FALSE, FALSE, FALSE, FALSE, state, ref, NULL, (const char **) subpaths, NULL, NULL, NULL, NULL, NULL, progress, cancellable, error)) return NULL; diff --git a/common/flatpak-transaction.c b/common/flatpak-transaction.c index 1aba1daac5..f153a805b8 100644 --- a/common/flatpak-transaction.c +++ b/common/flatpak-transaction.c @@ -114,6 +114,7 @@ struct _FlatpakTransactionOperation gboolean skip; gboolean update_only_deploy; gboolean pin_on_deploy; + gboolean update_preinstalled_on_deploy; gboolean resolved; char *resolved_commit; @@ -666,7 +667,8 @@ flatpak_transaction_operation_new (const char *remote, const char *commit, GFile *bundle, FlatpakTransactionOperationType kind, - gboolean pin_on_deploy) + gboolean pin_on_deploy, + gboolean update_preinstalled_on_deploy) { FlatpakTransactionOperation *self; @@ -681,6 +683,7 @@ flatpak_transaction_operation_new (const char *remote, self->bundle = g_object_ref (bundle); self->kind = kind; self->pin_on_deploy = pin_on_deploy; + self->update_preinstalled_on_deploy = update_preinstalled_on_deploy; return self; } @@ -2132,7 +2135,8 @@ flatpak_transaction_add_op (FlatpakTransaction *self, const char *commit, GFile *bundle, FlatpakTransactionOperationType kind, - gboolean pin_on_deploy) + gboolean pin_on_deploy, + gboolean update_preinstalled_on_deploy) { FlatpakTransactionPrivate *priv = flatpak_transaction_get_instance_private (self); FlatpakTransactionOperation *op; @@ -2162,7 +2166,8 @@ flatpak_transaction_add_op (FlatpakTransaction *self, } op = flatpak_transaction_operation_new (remote, ref, subpaths, previous_ids, - commit, bundle, kind, pin_on_deploy); + commit, bundle, kind, pin_on_deploy, + update_preinstalled_on_deploy); g_hash_table_insert (priv->last_op_for_ref, flatpak_decomposed_ref (ref), op); priv->ops = g_list_prepend (priv->ops, op); @@ -2270,7 +2275,7 @@ add_related (FlatpakTransaction *self, related_op = flatpak_transaction_add_op (self, rel->remote, rel->ref, NULL, NULL, NULL, NULL, FLATPAK_TRANSACTION_OPERATION_UNINSTALL, - FALSE); + FALSE, FALSE); related_op->non_fatal = TRUE; related_op->fail_if_op_fails = op; flatpak_transaction_operation_add_related_to_op (related_op, op); @@ -2299,7 +2304,7 @@ add_related (FlatpakTransaction *self, (const char **) rel->subpaths, NULL, NULL, NULL, FLATPAK_TRANSACTION_OPERATION_INSTALL_OR_UPDATE, - FALSE); + FALSE, FALSE); related_op->non_fatal = TRUE; related_op->fail_if_op_fails = op; flatpak_transaction_operation_add_related_to_op (related_op, op); @@ -2530,7 +2535,7 @@ add_new_dep_op (FlatpakTransaction *self, return FALSE; *dep_op = flatpak_transaction_add_op (self, dep_remote, dep_ref, NULL, NULL, NULL, NULL, - FLATPAK_TRANSACTION_OPERATION_INSTALL_OR_UPDATE, FALSE); + FLATPAK_TRANSACTION_OPERATION_INSTALL_OR_UPDATE, FALSE, FALSE); } else { @@ -2540,7 +2545,7 @@ add_new_dep_op (FlatpakTransaction *self, g_info ("Updating dependency %s of %s", flatpak_decomposed_get_pref (dep_ref), flatpak_decomposed_get_pref (op->ref)); *dep_op = flatpak_transaction_add_op (self, dep_remote, dep_ref, NULL, NULL, NULL, NULL, - FLATPAK_TRANSACTION_OPERATION_UPDATE, FALSE); + FLATPAK_TRANSACTION_OPERATION_UPDATE, FALSE, FALSE); (*dep_op)->non_fatal = TRUE; } } @@ -2636,6 +2641,7 @@ flatpak_transaction_add_ref (FlatpakTransaction *self, FlatpakImageSource *image_source, const char *external_metadata, gboolean pin_on_deploy, + gboolean update_preinstalled_on_deploy, FlatpakTransactionOperation **out_op, GError **error) { @@ -2759,7 +2765,8 @@ flatpak_transaction_add_ref (FlatpakTransaction *self, } op = flatpak_transaction_add_op (self, remote, ref, subpaths, previous_ids, - commit, bundle, kind, pin_on_deploy); + commit, bundle, kind, pin_on_deploy, + update_preinstalled_on_deploy); if (image_source) op->image_source = g_object_ref (image_source); @@ -2817,7 +2824,7 @@ flatpak_transaction_add_install (FlatpakTransaction *self, if (!flatpak_transaction_add_ref (self, remote, decomposed, subpaths, NULL, NULL, FLATPAK_TRANSACTION_OPERATION_INSTALL, - NULL, NULL, NULL, pin_on_deploy, NULL, error)) + NULL, NULL, NULL, pin_on_deploy, FALSE, NULL, error)) return FALSE; return TRUE; @@ -2877,7 +2884,9 @@ flatpak_transaction_add_rebase (FlatpakTransaction *self, if (dir_ref_is_installed (priv->dir, decomposed, &installed_origin, NULL)) remote = installed_origin; - return flatpak_transaction_add_ref (self, remote, decomposed, subpaths, previous_ids, NULL, FLATPAK_TRANSACTION_OPERATION_INSTALL_OR_UPDATE, NULL, NULL, NULL, FALSE, NULL, error); + return flatpak_transaction_add_ref (self, remote, decomposed, subpaths, previous_ids, NULL, + FLATPAK_TRANSACTION_OPERATION_INSTALL_OR_UPDATE, + NULL, NULL, NULL, FALSE, FALSE, NULL, error); } /** @@ -2953,25 +2962,22 @@ flatpak_transaction_add_rebase_and_uninstall (FlatpakTransaction *self, if (!flatpak_transaction_add_ref (self, remote, new_decomposed, subpaths, previous_ids, NULL, FLATPAK_TRANSACTION_OPERATION_INSTALL_OR_UPDATE, - NULL, NULL, NULL, FALSE, &rebase_op, error)) + NULL, NULL, NULL, FALSE, FALSE, &rebase_op, error)) return FALSE; if (!flatpak_transaction_add_ref (self, NULL, old_decomposed, NULL, NULL, NULL, FLATPAK_TRANSACTION_OPERATION_UNINSTALL, - NULL, NULL, NULL, FALSE, &uninstall_op, &local_error)) + NULL, NULL, NULL, FALSE, FALSE, &uninstall_op, &local_error)) { /* If the user is trying to install an eol-rebased app from scratch, the * @old_ref can’t be uninstalled because it’s not installed already. * Silently ignore that. */ - if (g_error_matches (local_error, FLATPAK_ERROR, FLATPAK_ERROR_NOT_INSTALLED)) - { - g_clear_error (&local_error); - } - else + if (!g_error_matches (local_error, FLATPAK_ERROR, FLATPAK_ERROR_NOT_INSTALLED)) { g_propagate_error (error, g_steal_pointer (&local_error)); return FALSE; } + g_clear_error (&local_error); } /* Link the ops together so that the install/update is done first, and if @@ -3075,6 +3081,134 @@ flatpak_transaction_add_install_flatpakref (FlatpakTransaction *self, return TRUE; } +/** + * flatpak_transaction_add_sync_preinstalled: + * @self: a #FlatpakTransaction + * @error: return location for a #GError + * + * Adds preinstall operations to this transaction. This can involve both + * installing and removing refs, based on /etc/preinstall.d contents and what + * the system had preinstalled before. + * + * Returns: %TRUE on success; %FALSE with @error set on failure. + */ +gboolean +flatpak_transaction_add_sync_preinstalled (FlatpakTransaction *self, + GError **error) +{ + FlatpakTransactionPrivate *priv = flatpak_transaction_get_instance_private (self); + g_autoptr(GPtrArray) install_refs = g_ptr_array_new_with_free_func (g_free); + g_autoptr(GPtrArray) preinstalled_refs = NULL; + g_auto(GStrv) remotes = NULL; + g_autoptr(GPtrArray) configs = NULL; + + remotes = flatpak_dir_list_remotes (priv->dir, NULL, error); + if (remotes == NULL) + return FALSE; + + configs = flatpak_get_preinstall_config (priv->default_arch, NULL, error); + if (configs == NULL) + return FALSE; + + /* If the system has not had any apps pre-installed (i.e. the key in the + * config is missing) we mark all installed apps we would pre-install as + * pre-installed. This makes sure we will uninstall them when the config says + * that they no longer should be installed. */ + if (!flatpak_dir_uninitialized_mark_preinstalled (priv->dir, configs, NULL)) + g_message (_("Warning: Could not mark already installed apps as preinstalled")); + + preinstalled_refs = flatpak_dir_get_config_patterns (priv->dir, "preinstalled"); + + /* Find preinstalls that should get installed */ + for (int i = 0; i < configs->len; i++) + { + const FlatpakPreinstallConfig *config = g_ptr_array_index (configs, i); + + /* Store for later */ + g_ptr_array_add (install_refs, flatpak_decomposed_dup_ref (config->ref)); + + /* Skip over if it's listed as previously preinstalled - it's now under + * user's control and we no longer install it again, even if the user + * manually removes it. */ + if (!priv->reinstall && + flatpak_g_ptr_array_contains_string (preinstalled_refs, + flatpak_decomposed_get_ref (config->ref))) + { + g_info ("Preinstall ref %s is marked as already preinstalled; skipping", + flatpak_decomposed_get_ref (config->ref)); + continue; + } + + for (int j = 0; remotes[j] != NULL; j++) + { + const char *remote = remotes[j]; + g_autoptr(GError) local_error = NULL; + g_autofree char *remote_collection_id = NULL; + + if (flatpak_dir_get_remote_disabled (priv->dir, remote)) + continue; + + remote_collection_id = flatpak_dir_get_remote_collection_id (priv->dir, + remote); + + /* Choose the first match if the collection ID was not specified */ + if (config->collection_id != NULL && + g_strcmp0 (remote_collection_id, config->collection_id) != 0) + continue; + + g_info ("Adding preinstall of %s from remote %s", + flatpak_decomposed_get_ref (config->ref), + remote); + + if (!flatpak_transaction_add_ref (self, remote, config->ref, NULL, NULL, NULL, + FLATPAK_TRANSACTION_OPERATION_INSTALL, + NULL, NULL, NULL, FALSE, TRUE, NULL, + &local_error)) + { + g_info ("Failed to add preinstall ref %s: %s", + flatpak_decomposed_get_ref (config->ref), + local_error->message); + } + } + } + + /* Find previously preinstalled refs that are no longer in the preinstall + * list and should now get uninstalled */ + for (int i = 0; i < preinstalled_refs->len; i++) + { + const char *ref = g_ptr_array_index (preinstalled_refs, i); + + /* No longer in the preinstall.d list, so uninstall */ + if (!flatpak_g_ptr_array_contains_string (install_refs, ref)) + { + g_autoptr(GError) local_error = NULL; + g_autoptr(FlatpakDecomposed) decomposed = NULL; + + decomposed = flatpak_decomposed_new_from_ref (ref, error); + if (decomposed == NULL) + return FALSE; + + g_info ("Preinstalled ref %s is no longer listed as wanted in preinstall.d config; uninstalling", + flatpak_decomposed_get_ref (decomposed)); + + if (!flatpak_transaction_add_ref (self, NULL, decomposed, NULL, NULL, NULL, + FLATPAK_TRANSACTION_OPERATION_UNINSTALL, + NULL, NULL, NULL, FALSE, TRUE, NULL, + &local_error)) + { + if (!g_error_matches (local_error, FLATPAK_ERROR, FLATPAK_ERROR_NOT_INSTALLED)) + { + g_propagate_error (error, g_steal_pointer (&local_error)); + return FALSE; + } + g_clear_error (&local_error); + } + } + } + + return TRUE; +} + /** * flatpak_transaction_add_update: * @self: a #FlatpakTransaction @@ -3110,7 +3244,7 @@ flatpak_transaction_add_update (FlatpakTransaction *self, return FALSE; /* Note: we implement the merge when subpaths == NULL in flatpak_transaction_add_ref() */ - return flatpak_transaction_add_ref (self, NULL, decomposed, subpaths, NULL, commit, FLATPAK_TRANSACTION_OPERATION_UPDATE, NULL, NULL, NULL, FALSE, NULL, error); + return flatpak_transaction_add_ref (self, NULL, decomposed, subpaths, NULL, commit, FLATPAK_TRANSACTION_OPERATION_UPDATE, NULL, NULL, NULL, FALSE, FALSE, NULL, error); } /** @@ -3137,7 +3271,7 @@ flatpak_transaction_add_uninstall (FlatpakTransaction *self, if (decomposed == NULL) return FALSE; - return flatpak_transaction_add_ref (self, NULL, decomposed, NULL, NULL, NULL, FLATPAK_TRANSACTION_OPERATION_UNINSTALL, NULL, NULL, NULL, FALSE, NULL, error); + return flatpak_transaction_add_ref (self, NULL, decomposed, NULL, NULL, NULL, FLATPAK_TRANSACTION_OPERATION_UNINSTALL, NULL, NULL, NULL, FALSE, FALSE, NULL, error); } static gboolean @@ -3249,7 +3383,7 @@ flatpak_transaction_add_auto_install (FlatpakTransaction *self, if (!flatpak_transaction_add_ref (self, remote, auto_install_ref, NULL, NULL, NULL, FLATPAK_TRANSACTION_OPERATION_INSTALL_OR_UPDATE, - NULL, NULL, NULL, FALSE, NULL, + NULL, NULL, NULL, FALSE, FALSE, NULL, &local_error)) g_info ("Failed to add auto-install ref %s: %s", flatpak_decomposed_get_ref (auto_install_ref), local_error->message); @@ -4762,7 +4896,7 @@ flatpak_transaction_resolve_bundles (FlatpakTransaction *self, if (!flatpak_transaction_add_ref (self, remote, ref, NULL, NULL, commit, FLATPAK_TRANSACTION_OPERATION_INSTALL_BUNDLE, - data->file, NULL, metadata, FALSE, NULL, error)) + data->file, NULL, metadata, FALSE, FALSE, NULL, error)) return FALSE; } @@ -4829,7 +4963,8 @@ flatpak_transaction_resolve_images (FlatpakTransaction *self, if (!flatpak_transaction_add_ref (self, remote, ref, NULL, NULL, NULL, FLATPAK_TRANSACTION_OPERATION_INSTALL, - NULL, image_source, metadata_label, FALSE, &op, error)) + NULL, image_source, metadata_label, FALSE, FALSE, + &op, error)) return FALSE; } @@ -4901,6 +5036,7 @@ _run_op_kind (FlatpakTransaction *self, priv->reinstall, priv->max_op >= APP_UPDATE, op->pin_on_deploy, + op->update_preinstalled_on_deploy, remote_state, op->ref, op->resolved_commit, (const char **) op->subpaths, @@ -4940,7 +5076,7 @@ _run_op_kind (FlatpakTransaction *self, if (flatpak_decomposed_is_app (op->ref)) *out_needs_triggers = TRUE; - if (op->pin_on_deploy) + if (op->pin_on_deploy|| op->update_preinstalled_on_deploy) *out_needs_cache_drop = TRUE; } } @@ -5045,6 +5181,9 @@ _run_op_kind (FlatpakTransaction *self, if (priv->force_uninstall) flags |= FLATPAK_HELPER_UNINSTALL_FLAGS_FORCE_REMOVE; + if (op->update_preinstalled_on_deploy) + flags |= FLATPAK_HELPER_UNINSTALL_FLAGS_UPDATE_PREINSTALLED; + emit_new_op (self, op, progress); res = flatpak_dir_uninstall (priv->dir, op->ref, flags, @@ -5225,7 +5364,7 @@ add_uninstall_unused_ops (FlatpakTransaction *self, uninstall_op = flatpak_transaction_add_op (self, origin, unused_ref, NULL, NULL, NULL, NULL, FLATPAK_TRANSACTION_OPERATION_UNINSTALL, - FALSE); + FALSE, FALSE); run_operation_last (uninstall_op); } } diff --git a/common/flatpak-transaction.h b/common/flatpak-transaction.h index 3d3f4ce893..71f7e1928e 100644 --- a/common/flatpak-transaction.h +++ b/common/flatpak-transaction.h @@ -334,6 +334,9 @@ gboolean flatpak_transaction_add_install_flatpakref (FlatpakTransacti GBytes *flatpakref_data, GError **error); FLATPAK_EXTERN +gboolean flatpak_transaction_add_sync_preinstalled (FlatpakTransaction *self, + GError **error); +FLATPAK_EXTERN gboolean flatpak_transaction_add_update (FlatpakTransaction *self, const char *ref, const char **subpaths, diff --git a/doc/flatpak-docs.xml.in b/doc/flatpak-docs.xml.in index 581bf685db..4de8d1f9bf 100644 --- a/doc/flatpak-docs.xml.in +++ b/doc/flatpak-docs.xml.in @@ -52,6 +52,7 @@ + diff --git a/doc/flatpak-preinstall.xml b/doc/flatpak-preinstall.xml new file mode 100644 index 0000000000..b774c618ec --- /dev/null +++ b/doc/flatpak-preinstall.xml @@ -0,0 +1,276 @@ + + + + + + + flatpak preinstall + flatpak + + + + Developer + Kalev + Lember + klember@redhat.com + + + + + + flatpak preinstall + 1 + + + + flatpak-preinstall + Install flatpaks that are part of the operating system + + + + + flatpak preinstall + OPTION + + + + + Description + + + This command manages flatpaks that are part of the operating system. If no options are given, running flatpak preinstall will synchronize (install and remove) flatpaks to match the set that the OS vendor has chosen. + + + + Preinstalled flatpaks are defined by dropping .preinstall files into the directories /usr/share/flatpak/preinstall.d/ and /etc/flatpak/preinstall.d/. The OS runs flatpak preinstall -y (or its GUI equivalent) on system startup, which then does the actual installation. + + + + This system allows the OS vendor to define the list of flatpaks that are installed together with the OS, and also makes it possible for the OS vendor to make changes to the list in the future, which is then applied once flatpak preinstall is run next time. + + Users can opt out of preinstalled flatpaks by simply uninstalling them, at which point they won't get automatically reinstalled again. + + + + + File format + + + The .preinstall file is using the same .ini file format that is used for systemd unit files or application .desktop files. + + + + [Flatpak Preinstall NAME] + + + The NAME is the fully qualified name of the runtime or application. All the information for a single runtime or application is contained in one [Flatpak Preinstall NAME] group. Multiple groups can be defined in a single file. + + + The following keys can be present in this group: + + + + (boolean) + + Whether this group should be installed. If this key is not specified, the group will be installed. + + + + (string) + + The name of the branch from which to install the application or runtime. If this key is not specified, the "master" branch is used. + + + + (boolean) + + Whether this group refers to a runtime. If this key is not specified, the group is assumed to refer to an application. + + + + (string) + + The collection ID of the remote to use, if it has one. + + + + + + + + Example + +[Flatpak Preinstall org.gnome.Loupe] +Branch=stable +IsRuntime=false + + + + + Options + + The following options are understood: + + + + + + + + Show help options and exit. + + + + + + + + Uninstall first if already installed. + + + + + + + + + Install the application or runtime in a per-user installation. + + + + + + + + Install the application or runtime in the default system-wide installation. + + + + + + + + Install the application or runtime in a system-wide installation + specified by NAME among those defined in + /etc/flatpak/installations.d/. Using + is equivalent to using + . + + + + + + + + Download the latest version, but don't deploy it. + + + + + + + + Don't download the latest version, deploy whatever is locally available. + + + + + + + + Don't download related extensions, such as the locale data. + + + + + + + + Don't verify runtime dependencies when installing. + + + + + + + + Adds an extra local ostree repo as a source for installation. This is equivalent + to using the sideload-repos directories (see + flatpak1), + but can be done on a per-command basis. Any path added here is used in addition + to ones in those directories. + + + + + + + + For each app being installed, also installs the SDK that was used to build it. + Implies ; incompatible with . + + + + + + + + For each ref being installed, as well as all dependencies, also installs its + debug info. Implies ; incompatible with + . + + + + + + + + Automatically answer yes to all questions (or pick the most prioritized answer). This is useful for automation. + + + + + + + Produce minimal output and avoid most questions. This is suitable for use in + non-interactive situations, e.g. in a build script. + + + + + + + + + Print debug information during command processing. + + + + + + + + Print OSTree debug information during command processing. + + + + + + + Examples + + + $ flatpak preinstall + + + + + See also + + + flatpak1, + + + + diff --git a/doc/meson.build b/doc/meson.build index a4cedfbe84..9ef8eee1fd 100644 --- a/doc/meson.build +++ b/doc/meson.build @@ -26,6 +26,7 @@ man1 = [ 'flatpak-config', 'flatpak-update', 'flatpak-uninstall', + 'flatpak-preinstall', 'flatpak-mask', 'flatpak-pin', 'flatpak-list', diff --git a/po/POTFILES.in b/po/POTFILES.in index b3cb79c0e2..52600abd60 100644 --- a/po/POTFILES.in +++ b/po/POTFILES.in @@ -30,6 +30,7 @@ app/flatpak-builtins-permission-reset.c app/flatpak-builtins-permission-set.c app/flatpak-builtins-permission-show.c app/flatpak-builtins-pin.c +app/flatpak-builtins-preinstall.c app/flatpak-builtins-ps.c app/flatpak-builtins-remote-add.c app/flatpak-builtins-remote-delete.c diff --git a/system-helper/flatpak-system-helper.c b/system-helper/flatpak-system-helper.c index 1f950b20e4..623c2fa04a 100644 --- a/system-helper/flatpak-system-helper.c +++ b/system-helper/flatpak-system-helper.c @@ -404,6 +404,7 @@ handle_deploy (FlatpakSystemHelper *object, gboolean local_pull; gboolean reinstall; gboolean update_pinned; + gboolean update_preinstalled; g_autofree char *url = NULL; g_autoptr(OngoingPull) ongoing_pull = NULL; g_autofree gchar *src_dir = NULL; @@ -489,6 +490,7 @@ handle_deploy (FlatpakSystemHelper *object, local_pull = (arg_flags & FLATPAK_HELPER_DEPLOY_FLAGS_LOCAL_PULL) != 0; reinstall = (arg_flags & FLATPAK_HELPER_DEPLOY_FLAGS_REINSTALL) != 0; update_pinned = (arg_flags & FLATPAK_HELPER_DEPLOY_FLAGS_UPDATE_PINNED) != 0; + update_preinstalled = (arg_flags & FLATPAK_HELPER_DEPLOY_FLAGS_UPDATE_PREINSTALLED) != 0; deploy_dir = flatpak_dir_get_if_deployed (system, ref, NULL, NULL); @@ -667,7 +669,8 @@ handle_deploy (FlatpakSystemHelper *object, if (!flatpak_dir_deploy_install (system, ref, arg_origin, (const char **) arg_subpaths, (const char **) arg_previous_ids, - reinstall, update_pinned, NULL, &error)) + reinstall, update_pinned, update_preinstalled, + NULL, &error)) { flatpak_invocation_return_error (invocation, error, "Error deploying"); return G_DBUS_METHOD_INVOCATION_HANDLED; diff --git a/tests/libtest.sh b/tests/libtest.sh index 75becface1..174f7ec0b3 100644 --- a/tests/libtest.sh +++ b/tests/libtest.sh @@ -105,6 +105,7 @@ export FLATPAK_SYSTEM_DIR=${TEST_DATA_DIR}/system export FLATPAK_SYSTEM_CACHE_DIR=${TEST_DATA_DIR}/system-cache export FLATPAK_SYSTEM_HELPER_ON_SESSION=1 export FLATPAK_CONFIG_DIR=${TEST_DATA_DIR}/config +export FLATPAK_DATA_DIR=${TEST_DATA_DIR}/datadir export FLATPAK_RUN_DIR=${TEST_DATA_DIR}/run export FLATPAK_FANCY_OUTPUT=0 export FLATPAK_FORCE_ALLOW_FUZZY_MATCHING=1 diff --git a/tests/test-basic.sh b/tests/test-basic.sh index 76369b358f..9f1cfb20a2 100755 --- a/tests/test-basic.sh +++ b/tests/test-basic.sh @@ -71,7 +71,7 @@ for cmd in install update uninstall list info config repair create-usb \ remote-modify remote-delete remote-ls remote-info build-init \ build build-finish build-export build-bundle build-import-bundle \ build-sign build-update-repo build-commit-from repo kill history \ - mask; + mask preinstall; do ${FLATPAK} $cmd --help > help_out head -2 help_out > help_out2 diff --git a/tests/test-matrix/meson.build b/tests/test-matrix/meson.build index fd0b50345c..3c20abed3e 100644 --- a/tests/test-matrix/meson.build +++ b/tests/test-matrix/meson.build @@ -45,3 +45,4 @@ wrapped_tests += {'name' : 'test-unused.sh', 'script' : 'test-unused.sh'} wrapped_tests += {'name' : 'test-prune.sh', 'script' : 'test-prune.sh'} wrapped_tests += {'name' : 'test-seccomp.sh', 'script' : 'test-seccomp.sh'} wrapped_tests += {'name' : 'test-repair.sh', 'script' : 'test-repair.sh'} +wrapped_tests += {'name' : 'test-preinstall.sh', 'script' : 'test-preinstall.sh'} diff --git a/tests/test-preinstall.sh b/tests/test-preinstall.sh new file mode 100755 index 0000000000..ffa3666349 --- /dev/null +++ b/tests/test-preinstall.sh @@ -0,0 +1,254 @@ +#!/bin/bash +# +# Copyright (C) 2025 Red Hat, Inc +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the +# Free Software Foundation, Inc., 59 Temple Place - Suite 330, +# Boston, MA 02111-1307, USA. + +set -euo pipefail + +USE_COLLECTIONS_IN_SERVER=yes +USE_COLLECTIONS_IN_CLIENT=yes + +. $(dirname $0)/libtest.sh + +mkdir -p $FLATPAK_DATA_DIR/preinstall.d +mkdir -p $FLATPAK_CONFIG_DIR/preinstall.d + +cat << EOF > hello-install.preinstall +[Flatpak Preinstall org.test.Hello] +EOF + +cat << EOF > hello-not-install.preinstall +[Flatpak Preinstall org.test.Hello] +Install=false +EOF + +cat << EOF > hello-install-multi.preinstall +[Flatpak Preinstall org.test.Hello] +[Flatpak Preinstall org.test.Hello2] +CollectionID=org.test.Collection.test +EOF + +cat << EOF > hello-install-devel.preinstall +[Flatpak Preinstall org.test.Hello] +Branch=devel +EOF + +cat << EOF > hello-install-collection.preinstall +[Flatpak Preinstall org.test.Hello2] +CollectionID=org.test.Collection.test2 +EOF + +cat << EOF > bad.preinstall +[Wrong Group] +a=b + +[Flatpak Preinstall ] +Install=false + +[Flatpak Preinstall] +Install=true +EOF + +# Set up the runtimes +# org.test.Platform//master and org.test.Platform//devel +# and the apps +# org.test.Hello//master, org.test.Hello//devel, +# org.test.Hello2//master, org.test.Hello2//devel +setup_repo test +make_updated_runtime test org.test.Collection.test devel HELLO_DEVEL org.test.Hello +make_updated_app test org.test.Collection.test devel HELLO_DEVEL org.test.Hello +make_updated_app test org.test.Collection.test master HELLO2_MASTER org.test.Hello2 +make_updated_app test org.test.Collection.test devel HELLO2_DEVEL org.test.Hello2 + +setup_repo test2 +make_updated_app test2 org.test.Collection.test2 master HELLO2_MASTER_C2 org.test.Hello2 + +echo "1..10" + +# just checking that the test remote got added +port=$(cat httpd-port) +assert_remote_has_config test-repo url "http://127.0.0.1:${port}/test" +assert_remote_has_config test2-repo url "http://127.0.0.1:${port}/test2" + +ok "setup" + +# if we have nothing configured and nothing is marked as preinstalled +# calling preinstall should be a no-op +${FLATPAK} ${U} preinstall -y > nothingtodo +assert_file_has_content nothingtodo "Nothing to do" + +ok "no config" + +# make sure nothing is installed +${FLATPAK} ${U} list --columns=ref > list-log +assert_file_empty list-log +! ostree config --repo=$XDG_DATA_HOME/flatpak/repo get --group "core" xa.preinstalled &> /dev/null + +# The preinstall config wants org.test.Hello. +cp hello-install.preinstall $FLATPAK_DATA_DIR/preinstall.d/ + +${FLATPAK} ${U} preinstall -y >&2 + +# Make sure it and the runtime were installed +${FLATPAK} ${U} list --columns=ref > list-log +assert_file_has_content list-log "^org\.test\.Hello/.*/master$" +assert_not_file_has_content list-log "^org\.test\.Hello/.*/devel$" +assert_not_file_has_content list-log "^org\.test\.Hello2/.*/master$" +assert_not_file_has_content list-log "^org\.test\.Hello2/.*/devel$" +assert_file_has_content list-log "^org\.test\.Platform/.*/master$" +assert_not_file_has_content list-log "^org\.test\.Platform/.*/devel$" + +ostree config --repo=$XDG_DATA_HOME/flatpak/repo get --group "core" xa.preinstalled > marked-preinstalled +assert_file_has_content marked-preinstalled "^app/org\.test\.Hello/.*/master$" + +ok "simple preinstall" + +# Make sure calling preinstall with the same config again is a no-op... +${FLATPAK} ${U} preinstall -y > nothingtodo +assert_file_has_content nothingtodo "Nothing to do" + +# ...and everything is still installed +${FLATPAK} ${U} list --columns=ref > list-log +assert_file_has_content list-log "^org\.test\.Hello/.*/master$" +assert_not_file_has_content list-log "^org\.test\.Hello/.*/devel$" +assert_not_file_has_content list-log "^org\.test\.Hello2/.*/master$" +assert_not_file_has_content list-log "^org\.test\.Hello2/.*/devel$" +assert_file_has_content list-log "^org\.test\.Platform/.*/master$" +assert_not_file_has_content list-log "^org\.test\.Platform/.*/devel$" + +ok "simple preinstall no op" + +${FLATPAK} ${U} uninstall -y org.test.Hello >&2 + +${FLATPAK} ${U} list --columns=ref > list-log +assert_not_file_has_content list-log "^org\.test\.Hello/.*/master$" +assert_not_file_has_content list-log "^org\.test\.Hello/.*/devel$" +assert_not_file_has_content list-log "^org\.test\.Hello2/.*/master$" +assert_not_file_has_content list-log "^org\.test\.Hello2/.*/devel$" +assert_file_has_content list-log "^org\.test\.Platform/.*/master$" +assert_not_file_has_content list-log "^org\.test\.Platform/.*/devel$" + +# Make sure calling preinstall with the same config again is a no-op +# Even if the user uninstalled the app (it is marked as preinstalled) +${FLATPAK} ${U} preinstall -y > nothingtodo +assert_file_has_content nothingtodo "Nothing to do" + +# Make sure nothing has changed +${FLATPAK} ${U} list --columns=ref > list-log +assert_not_file_has_content list-log "^org\.test\.Hello/.*/master$" +assert_not_file_has_content list-log "^org\.test\.Hello/.*/devel$" +assert_not_file_has_content list-log "^org\.test\.Hello2/.*/master$" +assert_not_file_has_content list-log "^org\.test\.Hello2/.*/devel$" +assert_file_has_content list-log "^org\.test\.Platform/.*/master$" +assert_not_file_has_content list-log "^org\.test\.Platform/.*/devel$" + +ok "uninstall preinstall" + +${FLATPAK} ${U} install test-repo -y org.test.Hello master >&2 + +${FLATPAK} ${U} list --columns=ref > list-log +assert_file_has_content list-log "^org\.test\.Hello/.*/master$" +assert_not_file_has_content list-log "^org\.test\.Hello/.*/devel$" +assert_not_file_has_content list-log "^org\.test\.Hello2/.*/master$" +assert_not_file_has_content list-log "^org\.test\.Hello2/.*/devel$" +assert_file_has_content list-log "^org\.test\.Platform/.*/master$" +assert_not_file_has_content list-log "^org\.test\.Platform/.*/devel$" + +# Add a config to /etc which overwrites the config in /usr ($FLATPAK_DATA_DIR) +# It has the Install=false setting which means it shall not be installed. +cp hello-not-install.preinstall $FLATPAK_CONFIG_DIR/preinstall.d/ + +${FLATPAK} ${U} preinstall -y >&2 + +# Make sure preinstall removed org.test.Hello as indicated by the config +${FLATPAK} ${U} list --columns=ref > list-log +assert_not_file_has_content list-log "^org\.test\.Hello/.*/master$" +assert_not_file_has_content list-log "^org\.test\.Hello/.*/devel$" +assert_not_file_has_content list-log "^org\.test\.Hello2/.*/master$" +assert_not_file_has_content list-log "^org\.test\.Hello2/.*/devel$" +assert_file_has_content list-log "^org\.test\.Platform/.*/master$" +assert_not_file_has_content list-log "^org\.test\.Platform/.*/devel$" + +ok "preinstall install false" + +# Remove the existing configs +rm -rf $FLATPAK_CONFIG_DIR/preinstall.d/* +rm -rf $FLATPAK_DATA_DIR/preinstall.d/* + +# Add a config file which wants org.test.Hello and org.test.Hello2 installed +cp hello-install-multi.preinstall $FLATPAK_DATA_DIR/preinstall.d/ + +${FLATPAK} ${U} preinstall -y >&2 + +# Make sure both apps got installed +${FLATPAK} ${U} list --columns=ref > list-log +assert_file_has_content list-log "^org\.test\.Hello/.*/master$" +assert_not_file_has_content list-log "^org\.test\.Hello/.*/devel$" +assert_file_has_content list-log "^org\.test\.Hello2/.*/master$" +assert_not_file_has_content list-log "^org\.test\.Hello2/.*/devel$" +assert_file_has_content list-log "^org\.test\.Platform/.*/master$" +assert_not_file_has_content list-log "^org\.test\.Platform/.*/devel$" + +if have_working_bwrap; then + # Also make sure we installed the app from the right CollectionID + ${FLATPAK} run org.test.Hello2 > hello2-output + assert_file_has_content hello2-output "HELLO2_MASTER$" +fi + +ok "install multi" + +# Overwrite the branch of org.test.Hello from master to devel +cp hello-install-devel.preinstall $FLATPAK_CONFIG_DIR/preinstall.d/ + +${FLATPAK} ${U} preinstall -y >&2 + +# Make sure org.test.Hello//devel replaced org.test.Hello//master +${FLATPAK} ${U} list --columns=ref > list-log +assert_not_file_has_content list-log "^org\.test\.Hello/.*/master$" +assert_file_has_content list-log "^org\.test\.Hello/.*/devel$" +assert_file_has_content list-log "^org\.test\.Hello2/.*/master$" +assert_not_file_has_content list-log "^org\.test\.Hello2/.*/devel$" +assert_file_has_content list-log "^org\.test\.Platform/.*/master$" +assert_file_has_content list-log "^org\.test\.Platform/.*/devel$" + +ok "overwrite branch" + +# Overwrite the CollectionID we're installing org.test.Hello2 from +cp hello-install-collection.preinstall $FLATPAK_CONFIG_DIR/preinstall.d/ + +# Changing the collection id doesn't automatically change apps over so we need +# to uninstall and mark it as not pre-installed +${FLATPAK} ${U} uninstall -y org.test.Hello2 >&2 +ostree config --repo=$XDG_DATA_HOME/flatpak/repo unset --group "core" xa.preinstalled + +${FLATPAK} ${U} preinstall -y >&2 + +if have_working_bwrap; then + # Make sure the app with the right CollectionID got installed + ${FLATPAK} run org.test.Hello2 > hello2-output + assert_file_has_content hello2-output "HELLO2_MASTER_C2$" +fi + +ok "change collection id" + +# Make sure some config file parsing edge cases don't blow up +cp bad.preinstall $FLATPAK_CONFIG_DIR/preinstall.d/ + +${FLATPAK} ${U} preinstall -y > nothingtodo +assert_file_has_content nothingtodo "Nothing to do" + +ok "bad config" \ No newline at end of file From 5d35f0debadf267fa547302ee677e73ecbb99b39 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Piotr=20Dr=C4=85g?= Date: Wed, 27 Aug 2025 17:38:14 +0200 Subject: [PATCH 29/53] Update POTFILES.in --- po/POTFILES.in | 1 + 1 file changed, 1 insertion(+) diff --git a/po/POTFILES.in b/po/POTFILES.in index 52600abd60..0e3b433754 100644 --- a/po/POTFILES.in +++ b/po/POTFILES.in @@ -54,6 +54,7 @@ common/flatpak-dir-utils.c common/flatpak-dir.c common/flatpak-exports.c common/flatpak-glib-backports.c +common/flatpak-image-source.c common/flatpak-installation.c common/flatpak-instance.c common/flatpak-oci-registry.c From 5a80ac679d0594591e417824846bf22c48892e16 Mon Sep 17 00:00:00 2001 From: Sebastian Wick Date: Thu, 21 Aug 2025 20:39:39 +0200 Subject: [PATCH 30/53] oci-registry: Fix leak by freeing certificates in finalize --- common/flatpak-oci-registry.c | 1 + 1 file changed, 1 insertion(+) diff --git a/common/flatpak-oci-registry.c b/common/flatpak-oci-registry.c index c3dff5d60f..66e5ddb31a 100644 --- a/common/flatpak-oci-registry.c +++ b/common/flatpak-oci-registry.c @@ -138,6 +138,7 @@ flatpak_oci_registry_finalize (GObject *object) g_free (self->token); g_clear_object (&self->archive); g_clear_pointer (&self->tmp_dir, glnx_tmpdir_free); + g_clear_pointer (&self->certificates, flatpak_certificates_free); G_OBJECT_CLASS (flatpak_oci_registry_parent_class)->finalize (object); } From 37d6fbe033b9c75f9b1e69695e8882d546b2a16d Mon Sep 17 00:00:00 2001 From: Sebastian Wick Date: Thu, 28 Aug 2025 12:05:10 +0200 Subject: [PATCH 31/53] oci-registry: Fix leak in unpack_archive by freeing the archive path --- common/flatpak-oci-registry.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/common/flatpak-oci-registry.c b/common/flatpak-oci-registry.c index 66e5ddb31a..4dccd5056f 100644 --- a/common/flatpak-oci-registry.c +++ b/common/flatpak-oci-registry.c @@ -565,6 +565,7 @@ unpack_archive (GFile *archive, { g_autoptr(FlatpakAutoArchiveRead) a = NULL; g_autoptr(FlatpakAutoArchiveWrite) ext = NULL; + g_autofree char *archive_path = NULL; int flags; int r; @@ -580,7 +581,8 @@ unpack_archive (GFile *archive, archive_write_disk_set_options (ext, flags); archive_write_disk_set_standard_lookup (ext); - r = archive_read_open_filename (a, g_file_get_path(archive), 10240); + archive_path = g_file_get_path (archive); + r = archive_read_open_filename (a, archive_path, 10240); if (r != ARCHIVE_OK) return propagate_libarchive_error (error, a); From 7399dea9603c30f142a45c3952626425dd91aca0 Mon Sep 17 00:00:00 2001 From: Simon Chopin Date: Wed, 27 Aug 2025 17:56:12 +0200 Subject: [PATCH 32/53] testlib: add expected argument to fcntl(F_DUPFD) The F_DUPFD and its relative F_DUPFD_CLOEXEC both expect an int argument as extra argument, being the minimal value for the new FD. This argument must be within the accepted range (see ulimit -H -n). This was detected in Ubuntu during testing against the latest glibc, stracing resulted in: 107244 fcntl(1, F_DUPFD_CLOEXEC, 1847846346272) = -1 EINVAL (Invalid argument) On the system in question (ppc64el machine running Ubuntu Questing), the relevant limit is 524288. For the fix we use 3 as a reasonable floor value, as in the first one after stderr. It also happens to be the one used in revokefs/main.c. Bug-Ubuntu: https://bugs.launchpad.net/ubuntu/+source/glibc/+bug/2121039 --- tests/testlib.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/testlib.c b/tests/testlib.c index 41f27ac9f5..90c0f0b43d 100644 --- a/tests/testlib.c +++ b/tests/testlib.c @@ -257,7 +257,7 @@ tests_stdout_to_stderr_begin (void) { TestsStdoutToStderr *original = g_new0 (TestsStdoutToStderr, 1); - original->fd = fcntl (STDOUT_FILENO, F_DUPFD_CLOEXEC); + original->fd = fcntl (STDOUT_FILENO, F_DUPFD_CLOEXEC, 3); if (original->fd < 0) g_error ("fcntl F_DUPFD_CLOEXEC: %s", g_strerror (errno)); From a832df659f886f0aad646806b11ca3d9fd5f91ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Piotr=20Dr=C4=85g?= Date: Wed, 27 Aug 2025 18:43:17 +0200 Subject: [PATCH 33/53] Update Polish translation --- po/pl.po | 787 +++++++++++++++++++++++++++---------------------------- 1 file changed, 385 insertions(+), 402 deletions(-) diff --git a/po/pl.po b/po/pl.po index 096f79d2f0..2549bb15d9 100644 --- a/po/pl.po +++ b/po/pl.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: flatpak\n" "Report-Msgid-Bugs-To: https://github.com/flatpak/flatpak/issues\n" -"POT-Creation-Date: 2025-05-08 13:08-0300\n" -"PO-Revision-Date: 2025-02-09 15:15+0100\n" +"POT-Creation-Date: 2025-08-27 16:33+0000\n" +"PO-Revision-Date: 2025-08-27 18:42+0200\n" "Last-Translator: Piotr Drąg \n" "Language-Team: Polish \n" "Language: pl\n" @@ -30,7 +30,7 @@ msgstr "Architektura pakietu" #: app/flatpak-builtins-build-bundle.c:59 #: app/flatpak-builtins-build-export.c:62 app/flatpak-builtins-build-init.c:53 #: app/flatpak-builtins-build-sign.c:42 app/flatpak-builtins-create-usb.c:46 -#: app/flatpak-builtins-info.c:55 app/flatpak-builtins-install.c:66 +#: app/flatpak-builtins-info.c:55 app/flatpak-builtins-install.c:67 #: app/flatpak-builtins-list.c:49 app/flatpak-builtins-make-current.c:38 #: app/flatpak-builtins-remote-info.c:54 app/flatpak-builtins-remote-ls.c:55 #: app/flatpak-builtins-run.c:66 app/flatpak-builtins-search.c:36 @@ -66,7 +66,7 @@ msgstr "Dodaje klucz GPG z PLIKU (- dla standardowego wejścia)" #: app/flatpak-builtins-build-bundle.c:62 app/flatpak-builtins-build.c:54 #: app/flatpak-builtins-build-export.c:67 #: app/flatpak-builtins-build-update-repo.c:83 -#: app/flatpak-builtins-install.c:79 app/flatpak-builtins-remote-add.c:83 +#: app/flatpak-builtins-install.c:81 app/flatpak-builtins-remote-add.c:83 #: app/flatpak-builtins-remote-add.c:84 app/flatpak-builtins-remote-modify.c:88 #: app/flatpak-builtins-remote-modify.c:90 msgid "FILE" @@ -79,7 +79,7 @@ msgstr "Identyfikator klucza GPG do podpisania obrazu OCI" #: app/flatpak-builtins-build-bundle.c:63 #: app/flatpak-builtins-build-commit-from.c:68 #: app/flatpak-builtins-build-export.c:68 -#: app/flatpak-builtins-build-import-bundle.c:48 +#: app/flatpak-builtins-build-import-bundle.c:49 #: app/flatpak-builtins-build-sign.c:44 #: app/flatpak-builtins-build-update-repo.c:84 msgid "KEY-ID" @@ -88,7 +88,7 @@ msgstr "IDENTYFIKATOR-KLUCZA" #: app/flatpak-builtins-build-bundle.c:64 #: app/flatpak-builtins-build-commit-from.c:69 #: app/flatpak-builtins-build-export.c:71 -#: app/flatpak-builtins-build-import-bundle.c:49 +#: app/flatpak-builtins-build-import-bundle.c:50 #: app/flatpak-builtins-build-sign.c:45 #: app/flatpak-builtins-build-update-repo.c:85 msgid "GPG Homedir to use when looking for keyrings" @@ -97,7 +97,7 @@ msgstr "Katalog domowy GPG do wyszukiwania baz kluczy" #: app/flatpak-builtins-build-bundle.c:64 #: app/flatpak-builtins-build-commit-from.c:69 #: app/flatpak-builtins-build-export.c:71 -#: app/flatpak-builtins-build-import-bundle.c:49 +#: app/flatpak-builtins-build-import-bundle.c:50 #: app/flatpak-builtins-build-sign.c:45 #: app/flatpak-builtins-build-update-repo.c:85 msgid "HOMEDIR" @@ -130,16 +130,16 @@ msgstr "Należy podać POŁOŻENIE, NAZWĘ-PLIKU i NAZWĘ" #: app/flatpak-builtins-build-bundle.c:631 #: app/flatpak-builtins-build-export.c:844 -#: app/flatpak-builtins-build-import-bundle.c:191 +#: app/flatpak-builtins-build-import-bundle.c:136 #: app/flatpak-builtins-build-init.c:217 app/flatpak-builtins-build-sign.c:76 #: app/flatpak-builtins-document-export.c:112 #: app/flatpak-builtins-document-info.c:75 -#: app/flatpak-builtins-document-list.c:182 +#: app/flatpak-builtins-document-list.c:189 #: app/flatpak-builtins-document-unexport.c:70 #: app/flatpak-builtins-history.c:480 app/flatpak-builtins-info.c:130 -#: app/flatpak-builtins-install.c:148 app/flatpak-builtins-install.c:217 -#: app/flatpak-builtins-list.c:417 app/flatpak-builtins-make-current.c:72 -#: app/flatpak-builtins-override.c:73 +#: app/flatpak-builtins-install.c:180 app/flatpak-builtins-install.c:233 +#: app/flatpak-builtins-install.c:294 app/flatpak-builtins-list.c:417 +#: app/flatpak-builtins-make-current.c:72 app/flatpak-builtins-override.c:73 #: app/flatpak-builtins-permission-list.c:159 #: app/flatpak-builtins-permission-remove.c:132 #: app/flatpak-builtins-remote-add.c:318 @@ -151,7 +151,7 @@ msgstr "Za dużo parametrów" #: app/flatpak-builtins-build-bundle.c:646 #: app/flatpak-builtins-build-commit-from.c:338 #: app/flatpak-builtins-build-commit-from.c:351 -#: app/flatpak-builtins-build-import-bundle.c:200 +#: app/flatpak-builtins-build-import-bundle.c:145 #, c-format msgid "'%s' is not a valid repository" msgstr "„%s” nie jest prawidłowym repozytorium" @@ -162,20 +162,20 @@ msgid "'%s' is not a valid repository: " msgstr "„%s” nie jest prawidłowym repozytorium: " #: app/flatpak-builtins-build-bundle.c:661 app/flatpak-builtins-build-sign.c:88 -#: common/flatpak-dir.c:13280 +#: common/flatpak-dir.c:13637 #, c-format msgid "'%s' is not a valid name: %s" msgstr "„%s” nie jest prawidłową nazwą: %s" #: app/flatpak-builtins-build-bundle.c:664 #: app/flatpak-builtins-build-export.c:865 app/flatpak-builtins-build-sign.c:91 -#: common/flatpak-dir.c:13286 +#: common/flatpak-dir.c:13643 #, c-format msgid "'%s' is not a valid branch name: %s" msgstr "„%s” nie jest prawidłową nazwą gałęzi: %s" #: app/flatpak-builtins-build-bundle.c:678 -#: app/flatpak-builtins-build-import-bundle.c:204 +#: app/flatpak-builtins-build-import-bundle.c:149 #: app/flatpak-builtins-build-init.c:281 #, c-format msgid "'%s' is not a valid filename" @@ -234,37 +234,36 @@ msgstr "Zapisywanie wywołań magistrali sesji w dzienniku" msgid "Log system bus calls" msgstr "Zapisywanie wywołań magistrali systemu w dzienniku" -#: app/flatpak-builtins-build.c:208 +#: app/flatpak-builtins-build.c:219 msgid "DIRECTORY [COMMAND [ARGUMENT…]] - Build in directory" msgstr "KATALOG [POLECENIE [PARAMETR…]] — buduje w katalogu" -#: app/flatpak-builtins-build.c:231 app/flatpak-builtins-build-finish.c:655 +#: app/flatpak-builtins-build.c:242 app/flatpak-builtins-build-finish.c:655 msgid "DIRECTORY must be specified" msgstr "Należy podać KATALOG" -#: app/flatpak-builtins-build.c:242 app/flatpak-builtins-build-export.c:887 +#: app/flatpak-builtins-build.c:253 app/flatpak-builtins-build-export.c:887 #, c-format msgid "Build directory %s not initialized, use flatpak build-init" msgstr "" "Nie zainicjowano katalogu budowania %s, należy użyć „flatpak build-init”" -#: app/flatpak-builtins-build.c:261 +#: app/flatpak-builtins-build.c:272 msgid "metadata invalid, not application or runtime" msgstr "" "nieprawidłowe metadane, nie jest programem lub środowiskiem wykonawczym" -#: app/flatpak-builtins-build.c:392 +#: app/flatpak-builtins-build.c:403 #, c-format msgid "No extension point matching %s in %s" msgstr "Brak punktu rozszerzeń pasującego do %s w %s" -#: app/flatpak-builtins-build.c:568 +#: app/flatpak-builtins-build.c:581 #, c-format msgid "Missing '=' in bind mount option '%s'" msgstr "Brak „=” w opcji montowania dowiązania „%s”" -#: app/flatpak-builtins-build.c:609 common/flatpak-run.c:3599 -#, c-format +#: app/flatpak-builtins-build.c:622 common/flatpak-run.c:3653 msgid "Unable to start app" msgstr "Nie można uruchomić programu" @@ -306,20 +305,20 @@ msgstr "TREŚĆ" #: app/flatpak-builtins-build-commit-from.c:66 #: app/flatpak-builtins-build-export.c:64 -#: app/flatpak-builtins-build-import-bundle.c:50 +#: app/flatpak-builtins-build-import-bundle.c:51 msgid "Update the appstream branch" msgstr "Aktualizuje gałąź AppStream" #: app/flatpak-builtins-build-commit-from.c:67 #: app/flatpak-builtins-build-export.c:65 -#: app/flatpak-builtins-build-import-bundle.c:51 +#: app/flatpak-builtins-build-import-bundle.c:52 #: app/flatpak-builtins-build-update-repo.c:87 msgid "Don't update the summary" msgstr "Bez aktualizowania podsumowania" #: app/flatpak-builtins-build-commit-from.c:68 #: app/flatpak-builtins-build-export.c:68 -#: app/flatpak-builtins-build-import-bundle.c:48 +#: app/flatpak-builtins-build-import-bundle.c:49 #: app/flatpak-builtins-build-sign.c:44 msgid "GPG Key ID to sign the commit with" msgstr "Identyfikator klucza GPG do podpisania zatwierdzenia" @@ -367,7 +366,7 @@ msgstr "CZAS" #: app/flatpak-builtins-build-commit-from.c:75 #: app/flatpak-builtins-build-export.c:80 -#: app/flatpak-builtins-build-import-bundle.c:52 +#: app/flatpak-builtins-build-import-bundle.c:53 #: app/flatpak-builtins-build-update-repo.c:97 msgid "Don't generate a summary index" msgstr "Bez tworzenia indeksu podsumowania" @@ -532,7 +531,6 @@ msgid "Unable to find basename in %s, specify a name explicitly" msgstr "Nie można odnaleźć podstawowej nazwy w %s, należy podać nazwę" #: app/flatpak-builtins-build-export.c:746 -#, c-format msgid "No slashes allowed in extra data name" msgstr "Ukośniki są niedozwolone w nazwach dodatkowych danych" @@ -542,7 +540,6 @@ msgid "Invalid format for sha256 checksum: '%s'" msgstr "Nieprawidłowy format sumy kontrolnej SHA256: „%s”" #: app/flatpak-builtins-build-export.c:768 -#, c-format msgid "Extra data sizes of zero not supported" msgstr "Dodatkowe dane o zerowym rozmiarze są nieobsługiwane" @@ -592,7 +589,6 @@ msgid "Content Written: %u\n" msgstr "Zapisana treść: %u\n" #: app/flatpak-builtins-build-export.c:1171 -#, c-format msgid "Content Bytes Written:" msgstr "Zapisane bajty treści:" @@ -601,7 +597,7 @@ msgid "Command to set" msgstr "Ustawiane polecenie" #: app/flatpak-builtins-build-finish.c:52 app/flatpak-builtins-run.c:67 -#: app/flatpak-main.c:208 +#: app/flatpak-main.c:209 msgid "COMMAND" msgstr "POLECENIE" @@ -636,7 +632,7 @@ msgstr "Usuwa informacje o punkcie rozszerzeń" #: app/flatpak-builtins-build-finish.c:57 #: app/flatpak-builtins-build-update-repo.c:79 app/flatpak-builtins-info.c:58 #: app/flatpak-builtins-remote-add.c:86 app/flatpak-builtins-remote-modify.c:92 -#: app/flatpak-main.c:181 +#: app/flatpak-main.c:182 msgid "NAME" msgstr "NAZWA" @@ -694,7 +690,6 @@ msgid "Exporting %s\n" msgstr "Eksportowanie %s\n" #: app/flatpak-builtins-build-finish.c:439 -#, c-format msgid "More than one executable found\n" msgstr "Odnaleziono więcej niż jeden plik wykonywalny\n" @@ -704,7 +699,6 @@ msgid "Using %s as command\n" msgstr "Używanie %s jako polecenia\n" #: app/flatpak-builtins-build-finish.c:455 -#, c-format msgid "No executable found\n" msgstr "Nie odnaleziono żadnych plików wykonywalnych\n" @@ -758,44 +752,33 @@ msgid "Build directory %s already finalized" msgstr "Już sfinalizowano katalog budowania %s" #: app/flatpak-builtins-build-finish.c:701 -#, c-format msgid "Please review the exported files and the metadata\n" msgstr "Proszę przejrzeć wyeksportowane pliki i metadane\n" -#: app/flatpak-builtins-build-import-bundle.c:46 +#: app/flatpak-builtins-build-import-bundle.c:47 msgid "Override the ref used for the imported bundle" msgstr "Zastępuje odniesienie dla zaimportowanego pakietu" -#: app/flatpak-builtins-build-import-bundle.c:46 +#: app/flatpak-builtins-build-import-bundle.c:47 msgid "REF" msgstr "ODNIESIENIE" -#: app/flatpak-builtins-build-import-bundle.c:47 +#: app/flatpak-builtins-build-import-bundle.c:48 msgid "Import oci image instead of flatpak bundle" msgstr "Importuje obraz OCI zamiast pakietu Flatpak" -#: app/flatpak-builtins-build-import-bundle.c:86 -#, c-format -msgid "Ref '%s' not found in registry" -msgstr "Nie odnaleziono odniesienia „%s” w rejestrze" - -#: app/flatpak-builtins-build-import-bundle.c:95 -msgid "Multiple images in registry, specify a ref with --ref" -msgstr "" -"Wiele obrazów w rejestrze, należy podać odniesienie za pomocą opcji --ref" - -#: app/flatpak-builtins-build-import-bundle.c:132 -#: app/flatpak-builtins-build-import-bundle.c:160 +#: app/flatpak-builtins-build-import-bundle.c:77 +#: app/flatpak-builtins-build-import-bundle.c:105 #, c-format msgid "Importing %s (%s)\n" msgstr "Importowanie %s (%s)\n" -#: app/flatpak-builtins-build-import-bundle.c:181 +#: app/flatpak-builtins-build-import-bundle.c:126 msgid "LOCATION FILENAME - Import a file bundle into a local repository" msgstr "" "POŁOŻENIE NAZWA-PLIKU — importuje pakiet plików do lokalnego repozytorium" -#: app/flatpak-builtins-build-import-bundle.c:188 +#: app/flatpak-builtins-build-import-bundle.c:133 msgid "LOCATION and FILENAME must be specified" msgstr "Należy podać POŁOŻENIE i NAZWĘ-PLIKU" @@ -912,13 +895,13 @@ msgstr "„%s” nie jest prawidłową nazwą programu: %s" msgid "Build directory %s already initialized" msgstr "Już zainicjowano katalog budowania %s" -#: app/flatpak-builtins-build-sign.c:42 app/flatpak-builtins-install.c:66 +#: app/flatpak-builtins-build-sign.c:42 app/flatpak-builtins-install.c:67 #: app/flatpak-builtins-remote-info.c:54 msgid "Arch to install for" msgstr "Instalowana architektura" #: app/flatpak-builtins-build-sign.c:43 app/flatpak-builtins-create-usb.c:48 -#: app/flatpak-builtins-install.c:73 app/flatpak-builtins-remote-info.c:56 +#: app/flatpak-builtins-install.c:74 app/flatpak-builtins-remote-info.c:56 #: app/flatpak-builtins-uninstall.c:58 app/flatpak-builtins-update.c:64 msgid "Look for runtime with the specified name" msgstr "Wyszukuje środowisko wykonawcze o podanej nazwie" @@ -1106,12 +1089,10 @@ msgid "LOCATION - Update repository metadata" msgstr "POŁOŻENIE — aktualizuje metadane repozytorium" #: app/flatpak-builtins-build-update-repo.c:609 -#, c-format msgid "Updating appstream branch\n" msgstr "Aktualizowanie danych AppStream\n" #: app/flatpak-builtins-build-update-repo.c:638 -#, c-format msgid "Updating summary\n" msgstr "Aktualizowanie podsumowania\n" @@ -1121,7 +1102,6 @@ msgid "Total objects: %u\n" msgstr "Razem obiektów: %u\n" #: app/flatpak-builtins-build-update-repo.c:666 -#, c-format msgid "No unreachable objects\n" msgstr "Brak nieosiągalnych obiektów\n" @@ -1197,7 +1177,7 @@ msgstr "Można użyć tylko jednego z --list, --get, --set lub --unset" msgid "Must specify one of --list, --get, --set or --unset" msgstr "Należy podać jedną z opcji --list, --get, --set lub --unset" -#: app/flatpak-builtins-create-usb.c:45 app/flatpak-builtins-install.c:74 +#: app/flatpak-builtins-create-usb.c:45 app/flatpak-builtins-install.c:75 #: app/flatpak-builtins-remote-info.c:57 app/flatpak-builtins-uninstall.c:59 #: app/flatpak-builtins-update.c:65 msgid "Look for app with the specified name" @@ -1400,7 +1380,6 @@ msgstr "PLIK — pobiera informacje o wyeksportowanym pliku" #: app/flatpak-builtins-document-info.c:100 #: app/flatpak-builtins-document-unexport.c:92 -#, c-format msgid "Not exported\n" msgstr "Nie wyeksportowano\n" @@ -1455,7 +1434,11 @@ msgstr "Uprawnienia" msgid "Show permissions for applications" msgstr "Wyświetla uprawnienia programów" -#: app/flatpak-builtins-document-list.c:171 +#: app/flatpak-builtins-document-list.c:159 +msgid "No documents found\n" +msgstr "Nie odnaleziono dokumentów\n" + +#: app/flatpak-builtins-document-list.c:178 msgid "[APPID] - List exported files" msgstr "[IDENTYFIKATOR-PROGRAMU] — wyświetla listę wyeksportowanych plików" @@ -1693,12 +1676,10 @@ msgid " - Show history" msgstr " — Wyświetla historię" #: app/flatpak-builtins-history.c:488 -#, c-format msgid "Failed to parse the --since option" msgstr "Przetworzenie opcji --since się nie powiodło" #: app/flatpak-builtins-history.c:499 -#, c-format msgid "Failed to parse the --until option" msgstr "Przetworzenie opcji --until się nie powiodło" @@ -1750,10 +1731,10 @@ msgstr "Wyświetla uprawnienia" msgid "Query file access" msgstr "Odpytuje dostęp do plików" -#: app/flatpak-builtins-info.c:67 app/flatpak-builtins-install.c:80 -#: app/flatpak-builtins-install.c:86 app/flatpak-builtins-run.c:90 -#: app/flatpak-builtins-run.c:91 app/flatpak-builtins-update.c:67 -#: app/flatpak-builtins-update.c:71 +#: app/flatpak-builtins-info.c:67 app/flatpak-builtins-install.c:82 +#: app/flatpak-builtins-install.c:88 app/flatpak-builtins-preinstall.c:68 +#: app/flatpak-builtins-run.c:90 app/flatpak-builtins-run.c:91 +#: app/flatpak-builtins-update.c:67 app/flatpak-builtins-update.c:71 msgid "PATH" msgstr "ŚCIEŻKA" @@ -1781,7 +1762,6 @@ msgid "ref not present in origin" msgstr "odniesienia nie ma w pochodzeniu" #: app/flatpak-builtins-info.c:211 app/flatpak-builtins-remote-info.c:217 -#, c-format msgid "Warning: Commit has no flatpak metadata\n" msgstr "Ostrzeżenie: zatwierdzenie nie ma metadanych Flatpak\n" @@ -1927,133 +1907,145 @@ msgstr "niewspierane" msgid "unknown" msgstr "nieznane" -#: app/flatpak-builtins-install.c:67 +#: app/flatpak-builtins-install.c:68 app/flatpak-builtins-preinstall.c:57 msgid "Don't pull, only install from local cache" msgstr "Bez pobierania, tylko instaluje z lokalnej pamięci podręcznej" -#: app/flatpak-builtins-install.c:68 app/flatpak-builtins-update.c:60 +#: app/flatpak-builtins-install.c:69 app/flatpak-builtins-preinstall.c:58 +#: app/flatpak-builtins-update.c:60 msgid "Don't deploy, only download to local cache" msgstr "Bez wdrażania, tylko pobiera do lokalnej pamięci podręcznej" -#: app/flatpak-builtins-install.c:69 +#: app/flatpak-builtins-install.c:70 app/flatpak-builtins-preinstall.c:59 msgid "Don't install related refs" msgstr "Bez instalowania powiązanych odniesień" -#: app/flatpak-builtins-install.c:70 app/flatpak-builtins-update.c:62 +#: app/flatpak-builtins-install.c:71 app/flatpak-builtins-preinstall.c:60 +#: app/flatpak-builtins-update.c:62 msgid "Don't verify/install runtime dependencies" msgstr "Bez sprawdzania poprawności/instalowania zależności wykonawczych" -#: app/flatpak-builtins-install.c:71 +#: app/flatpak-builtins-install.c:72 msgid "Don't automatically pin explicit installs" msgstr "Bez automatycznego przypinania instalacji przez użytkownika" -#: app/flatpak-builtins-install.c:72 app/flatpak-builtins-update.c:63 +#: app/flatpak-builtins-install.c:73 app/flatpak-builtins-preinstall.c:61 +#: app/flatpak-builtins-update.c:63 msgid "Don't use static deltas" msgstr "Bez używania statycznych delt" -#: app/flatpak-builtins-install.c:75 +#: app/flatpak-builtins-install.c:76 app/flatpak-builtins-preinstall.c:62 msgid "Additionally install the SDK used to build the given refs" msgstr "" "Dodatkowo instaluje środowisko programistyczne użyte do zbudowania podanych " "odniesień" -#: app/flatpak-builtins-install.c:76 +#: app/flatpak-builtins-install.c:77 app/flatpak-builtins-preinstall.c:63 msgid "" "Additionally install the debug info for the given refs and their dependencies" msgstr "" "Dodatkowo instaluje informacje debugowania dla podanych odniesień i ich " "zależności" -#: app/flatpak-builtins-install.c:77 +#: app/flatpak-builtins-install.c:78 msgid "Assume LOCATION is a .flatpak single-file bundle" msgstr "Przyjmuje, że POŁOŻENIE to jednoplikowy pakiet .flatpak" -#: app/flatpak-builtins-install.c:78 +#: app/flatpak-builtins-install.c:79 msgid "Assume LOCATION is a .flatpakref application description" msgstr "Przyjmuje, że POŁOŻENIE to opis programu .flatpakref" -#: app/flatpak-builtins-install.c:79 +#: app/flatpak-builtins-install.c:80 +msgid "Assume LOCATION is containers-transports(5) reference to an OCI image" +msgstr "" +"Przyjmuje, że POŁOŻENIE to odniesienie containers-transports(5) do obrazu OCI" + +#: app/flatpak-builtins-install.c:81 msgid "Check bundle signatures with GPG key from FILE (- for stdin)" msgstr "" "Sprawdza podpisy pakietów za pomocą klucza GPG z PLIKU (- dla standardowego " "wejścia)" -#: app/flatpak-builtins-install.c:80 +#: app/flatpak-builtins-install.c:82 msgid "Only install this subpath" msgstr "Instaluje tylko tę podścieżkę" -#: app/flatpak-builtins-install.c:81 app/flatpak-builtins-uninstall.c:63 -#: app/flatpak-builtins-update.c:68 +#: app/flatpak-builtins-install.c:83 app/flatpak-builtins-preinstall.c:64 +#: app/flatpak-builtins-uninstall.c:63 app/flatpak-builtins-update.c:68 msgid "Automatically answer yes for all questions" msgstr "Automatycznie odpowiada tak na wszystkie pytania" -#: app/flatpak-builtins-install.c:82 +#: app/flatpak-builtins-install.c:84 app/flatpak-builtins-preinstall.c:65 msgid "Uninstall first if already installed" msgstr "Należy najpierw odinstalować, jeśli jest już zainstalowane" -#: app/flatpak-builtins-install.c:83 app/flatpak-builtins-uninstall.c:64 -#: app/flatpak-builtins-update.c:69 +#: app/flatpak-builtins-install.c:85 app/flatpak-builtins-preinstall.c:66 +#: app/flatpak-builtins-uninstall.c:64 app/flatpak-builtins-update.c:69 msgid "Produce minimal output and don't ask questions" msgstr "Wyświetla minimum informacji i nie zadaje pytań" -#: app/flatpak-builtins-install.c:84 +#: app/flatpak-builtins-install.c:86 msgid "Update install if already installed" msgstr "Aktualizuje instalację, jeśli jest już zainstalowane" #. Translators: A sideload is when you install from a local USB drive rather than the Internet. -#: app/flatpak-builtins-install.c:86 app/flatpak-builtins-update.c:71 +#: app/flatpak-builtins-install.c:88 app/flatpak-builtins-preinstall.c:68 +#: app/flatpak-builtins-update.c:71 msgid "Use this local repo for sideloads" msgstr "Używa tego lokalnego repozytorium do wczytywania bocznego" -#: app/flatpak-builtins-install.c:145 +#: app/flatpak-builtins-install.c:177 msgid "Bundle filename must be specified" msgstr "Należy podać nazwę pliku pakietu" -#: app/flatpak-builtins-install.c:155 +#: app/flatpak-builtins-install.c:187 msgid "Remote bundles are not supported" msgstr "Zdalne pakiety nie są obsługiwane" -#: app/flatpak-builtins-install.c:214 +#: app/flatpak-builtins-install.c:230 msgid "Filename or uri must be specified" msgstr "Należy podać nazwę pliku lub adres URI" -#: app/flatpak-builtins-install.c:296 +#: app/flatpak-builtins-install.c:291 +msgid "Image location must be specified" +msgstr "Należy podać położenie obrazu" + +#: app/flatpak-builtins-install.c:341 msgid "[LOCATION/REMOTE] [REF…] - Install applications or runtimes" msgstr "" "[POŁOŻENIE/REPOZYTORIUM] [ODNIESIENIE…] — instaluje programy lub środowiska " "wykonawcze" -#: app/flatpak-builtins-install.c:322 +#: app/flatpak-builtins-install.c:374 msgid "At least one REF must be specified" msgstr "Należy podać co najmniej jedno ODNIESIENIE" -#: app/flatpak-builtins-install.c:336 -#, c-format +#: app/flatpak-builtins-install.c:388 msgid "Looking for matches…\n" msgstr "Wyszukiwanie wyników…\n" -#: app/flatpak-builtins-install.c:457 +#: app/flatpak-builtins-install.c:509 #, c-format msgid "No remote refs found for ‘%s’" msgstr "Nie odnaleziono zdalnych odniesień dla „%s”" -#: app/flatpak-builtins-install.c:533 app/flatpak-builtins-uninstall.c:405 +#: app/flatpak-builtins-install.c:569 app/flatpak-builtins-uninstall.c:405 #: common/flatpak-ref-utils.c:689 common/flatpak-ref-utils.c:1595 #, c-format msgid "Invalid branch %s: %s" msgstr "Nieprawidłowa gałąź %s: %s" -#: app/flatpak-builtins-install.c:566 +#: app/flatpak-builtins-install.c:602 #, c-format msgid "Nothing matches %s in local repository for remote %s" msgstr "Nic nie pasuje do %s w lokalnym repozytorium dla %s" -#: app/flatpak-builtins-install.c:568 +#: app/flatpak-builtins-install.c:604 #, c-format msgid "Nothing matches %s in remote %s" msgstr "Nic nie pasuje do %s w repozytorium %s" -#: app/flatpak-builtins-install.c:589 +#: app/flatpak-builtins-install.c:625 #, c-format msgid "Skipping: %s\n" msgstr "Pomijanie: %s\n" @@ -2233,12 +2225,10 @@ msgstr "" "[WZÓR…] — wyłącza aktualizacje i automatyczną instalację pasujących wzorów" #: app/flatpak-builtins-mask.c:73 -#, c-format msgid "No masked patterns\n" msgstr "Brak zamaskowanych wzorów\n" #: app/flatpak-builtins-mask.c:78 -#, c-format msgid "Masked patterns:\n" msgstr "Zamaskowane wzory:\n" @@ -2336,15 +2326,21 @@ msgstr "" "wzorów" #: app/flatpak-builtins-pin.c:75 -#, c-format msgid "No pinned patterns\n" msgstr "Brak przypiętych wzorów\n" #: app/flatpak-builtins-pin.c:80 -#, c-format msgid "Pinned patterns:\n" msgstr "Przypięte wzory:\n" +#: app/flatpak-builtins-preinstall.c:80 +msgid "- Install flatpaks that are part of the operating system" +msgstr "— instaluje pakiety Flatpak będące częścią systemu operacyjnego" + +#: app/flatpak-builtins-preinstall.c:118 app/flatpak-builtins-update.c:274 +msgid "Nothing to do.\n" +msgstr "Nie ma nic do zrobienia.\n" + #: app/flatpak-builtins-ps.c:47 msgid "Instance" msgstr "Wystąpienie" @@ -2510,7 +2506,7 @@ msgstr "Bez podążania za przekierowaniem ustawionym w pliku podsumowania" msgid "Can't load uri %s: %s\n" msgstr "Nie można wczytać adresu URI %s: %s\n" -#: app/flatpak-builtins-remote-add.c:271 common/flatpak-dir.c:4052 +#: app/flatpak-builtins-remote-add.c:271 common/flatpak-dir.c:4440 #, c-format msgid "Can't load file %s: %s\n" msgstr "Nie można wczytać pliku %s: %s\n" @@ -2880,7 +2876,6 @@ msgid "[%d/%d] Verifying %s…\n" msgstr "[%d/%d] Sprawdzanie poprawności %s…\n" #: app/flatpak-builtins-repair.c:435 -#, c-format msgid "Dry run: " msgstr "Próbne wykonanie: " @@ -2900,7 +2895,6 @@ msgid "Deleting ref %s due to %d\n" msgstr "Usuwanie odniesienia %s z powodu %d\n" #: app/flatpak-builtins-repair.c:464 -#, c-format msgid "Checking remotes...\n" msgstr "Sprawdzanie repozytoriów…\n" @@ -2915,22 +2909,18 @@ msgid "Remote %s for ref %s is disabled\n" msgstr "Repozytorium %s dla odniesienia %s jest wyłączone\n" #: app/flatpak-builtins-repair.c:490 -#, c-format msgid "Pruning objects\n" msgstr "Usuwanie nieużywanych obiektów\n" #: app/flatpak-builtins-repair.c:498 -#, c-format msgid "Erasing .removed\n" msgstr "Usuwanie „.removed”\n" #: app/flatpak-builtins-repair.c:523 -#, c-format msgid "Reinstalling refs\n" msgstr "Ponowne instalowanie odniesień\n" #: app/flatpak-builtins-repair.c:525 -#, c-format msgid "Reinstalling removed refs\n" msgstr "Ponowne instalowanie usuniętych odniesień\n" @@ -2965,7 +2955,6 @@ msgid "false" msgstr "fałsz" #: app/flatpak-builtins-repo.c:120 -#, c-format msgid "Subsummaries: " msgstr "Podsumowania podrzędne: " @@ -3295,7 +3284,6 @@ msgstr "" "usunięte; flatpak-pin(1) zawiera więcej informacji:\n" #: app/flatpak-builtins-uninstall.c:370 -#, c-format msgid "Nothing unused to uninstall\n" msgstr "Nie ma nic nieużywanego do odinstalowania\n" @@ -3320,10 +3308,13 @@ msgid "Warning: %s is not installed\n" msgstr "Ostrzeżenie: %s nie jest zainstalowane\n" #: app/flatpak-builtins-uninstall.c:490 -#, c-format msgid "None of the specified refs are installed" msgstr "Żadne z podanych odniesień nie są zainstalowane" +#: app/flatpak-builtins-uninstall.c:599 +msgid "No app data to delete\n" +msgstr "Brak danych programu do usunięcia\n" + #: app/flatpak-builtins-update.c:56 msgid "Arch to update for" msgstr "Aktualizowana architektura" @@ -3361,7 +3352,6 @@ msgid "With --commit, only one REF may be specified" msgstr "Używając opcji --commit można podać tylko jedno ODNIESIENIE" #: app/flatpak-builtins-update.c:162 -#, c-format msgid "Looking for updates…\n" msgstr "Wyszukiwanie aktualizacji…\n" @@ -3370,11 +3360,6 @@ msgstr "Wyszukiwanie aktualizacji…\n" msgid "Unable to update %s: %s\n" msgstr "Nie można zaktualizować %s: %s\n" -#: app/flatpak-builtins-update.c:274 -#, c-format -msgid "Nothing to do.\n" -msgstr "Nie ma nic do zrobienia.\n" - #: app/flatpak-builtins-utils.c:342 #, c-format msgid "Remote ‘%s’ found in multiple installations:" @@ -3435,7 +3420,6 @@ msgid "Found installed ref ‘%s’ (%s). Is this correct?" msgstr "Odnaleziono zainstalowane odniesienie „%s” (%s). Czy to w porządku?" #: app/flatpak-builtins-utils.c:522 -#, c-format msgid "All of the above" msgstr "Wszystko powyższe" @@ -3750,12 +3734,10 @@ msgstr "" "Informacja: program %s%s%s, gałąź %s%s%s jest niewspierany z powodu:\n" #: app/flatpak-cli-transaction.c:960 -#, c-format msgid "Info: applications using this extension:\n" msgstr "Informacja: programy używające tego rozszerzenia:\n" #: app/flatpak-cli-transaction.c:962 -#, c-format msgid "Info: applications using this runtime:\n" msgstr "Informacja: programy używające tego środowiska wykonawczego:\n" @@ -3764,7 +3746,6 @@ msgid "Replace?" msgstr "Zastąpić?" #: app/flatpak-cli-transaction.c:984 app/flatpak-quiet-transaction.c:247 -#, c-format msgid "Updating to rebased version\n" msgstr "Aktualizowanie do zmienionej wersji\n" @@ -3885,8 +3866,12 @@ msgstr "Naprawia instalację Flatpak" msgid "Put applications or runtimes onto removable media" msgstr "Umieszcza programy lub środowiska wykonawcze na nośnikach wymiennych" +#: app/flatpak-main.c:92 +msgid "Install flatpaks that are part of the operating system" +msgstr "Instaluje pakiety Flatpak będące częścią systemu operacyjnego" + #. translators: please keep the leading newline and space -#: app/flatpak-main.c:94 +#: app/flatpak-main.c:95 msgid "" "\n" " Find applications and runtimes" @@ -3894,12 +3879,12 @@ msgstr "" "\n" " Wyszukuje programy i środowiska wykonawcze" -#: app/flatpak-main.c:95 +#: app/flatpak-main.c:96 msgid "Search for remote apps/runtimes" msgstr "Wyszukuje programy/środowiska wykonawcze repozytorium" #. translators: please keep the leading newline and space -#: app/flatpak-main.c:98 +#: app/flatpak-main.c:99 msgid "" "\n" " Manage running applications" @@ -3907,32 +3892,32 @@ msgstr "" "\n" " Zarządza uruchamianiem programów" -#: app/flatpak-main.c:99 +#: app/flatpak-main.c:100 msgid "Run an application" msgstr "Uruchamia program" -#: app/flatpak-main.c:100 +#: app/flatpak-main.c:101 msgid "Override permissions for an application" msgstr "Zastępuje uprawnienia programu" -#: app/flatpak-main.c:101 +#: app/flatpak-main.c:102 msgid "Specify default version to run" msgstr "Podaje domyślnie uruchamianą wersję" -#: app/flatpak-main.c:102 +#: app/flatpak-main.c:103 msgid "Enter the namespace of a running application" msgstr "Przestrzeń nazw działającego programu" -#: app/flatpak-main.c:103 +#: app/flatpak-main.c:104 msgid "Enumerate running applications" msgstr "Wylicza uruchomione programy" -#: app/flatpak-main.c:104 +#: app/flatpak-main.c:105 msgid "Stop a running application" msgstr "Zatrzymuje uruchomiony program" #. translators: please keep the leading newline and space -#: app/flatpak-main.c:107 +#: app/flatpak-main.c:108 msgid "" "\n" " Manage file access" @@ -3940,24 +3925,24 @@ msgstr "" "\n" " Zarządza dostępem do plików" -#: app/flatpak-main.c:108 +#: app/flatpak-main.c:109 msgid "List exported files" msgstr "Wyświetla listę wyeksportowanych plików" -#: app/flatpak-main.c:109 +#: app/flatpak-main.c:110 msgid "Grant an application access to a specific file" msgstr "Nadaje programowi dostęp do podanego pliku" -#: app/flatpak-main.c:110 +#: app/flatpak-main.c:111 msgid "Revoke access to a specific file" msgstr "Odbiera dostęp do podanego pliku" -#: app/flatpak-main.c:111 +#: app/flatpak-main.c:112 msgid "Show information about a specific file" msgstr "Wyświetla informacje o podanym pliku" #. translators: please keep the leading newline and space -#: app/flatpak-main.c:115 +#: app/flatpak-main.c:116 msgid "" "\n" " Manage dynamic permissions" @@ -3965,28 +3950,28 @@ msgstr "" "\n" " Zarządza dynamicznymi uprawnieniami" -#: app/flatpak-main.c:116 +#: app/flatpak-main.c:117 msgid "List permissions" msgstr "Wyświetla listę uprawnień" -#: app/flatpak-main.c:117 +#: app/flatpak-main.c:118 msgid "Remove item from permission store" msgstr "Usuwa element z przechowalni uprawnień" -#: app/flatpak-main.c:119 +#: app/flatpak-main.c:120 msgid "Set permissions" msgstr "Ustawia uprawnienia" -#: app/flatpak-main.c:120 +#: app/flatpak-main.c:121 msgid "Show app permissions" msgstr "Wyświetla uprawnienia programu" -#: app/flatpak-main.c:121 +#: app/flatpak-main.c:122 msgid "Reset app permissions" msgstr "Przywraca uprawnienia programu" #. translators: please keep the leading newline and space -#: app/flatpak-main.c:124 +#: app/flatpak-main.c:125 msgid "" "\n" " Manage remote repositories" @@ -3994,33 +3979,33 @@ msgstr "" "\n" " Zarządza zdalnymi repozytoriami" -#: app/flatpak-main.c:125 +#: app/flatpak-main.c:126 msgid "List all configured remotes" msgstr "Wyświetla listę wszystkich skonfigurowanych repozytoriów" -#: app/flatpak-main.c:126 +#: app/flatpak-main.c:127 msgid "Add a new remote repository (by URL)" msgstr "Dodaje nowe zdalne repozytorium (według adresu URL)" -#: app/flatpak-main.c:127 +#: app/flatpak-main.c:128 msgid "Modify properties of a configured remote" msgstr "Modyfikuje właściwości skonfigurowanego repozytorium" -#: app/flatpak-main.c:128 +#: app/flatpak-main.c:129 msgid "Delete a configured remote" msgstr "Usuwa skonfigurowane repozytorium" -#: app/flatpak-main.c:130 +#: app/flatpak-main.c:131 msgid "List contents of a configured remote" msgstr "Wyświetla listę zawartości skonfigurowanego repozytorium" -#: app/flatpak-main.c:131 +#: app/flatpak-main.c:132 msgid "Show information about a remote app or runtime" msgstr "" "Wyświetla informacje o programie lub środowisku wykonawczym repozytorium" #. translators: please keep the leading newline and space -#: app/flatpak-main.c:134 +#: app/flatpak-main.c:135 msgid "" "\n" " Build applications" @@ -4028,100 +4013,100 @@ msgstr "" "\n" " Buduje programy" -#: app/flatpak-main.c:135 +#: app/flatpak-main.c:136 msgid "Initialize a directory for building" msgstr "Inicjuje katalog do budowania" -#: app/flatpak-main.c:136 +#: app/flatpak-main.c:137 msgid "Run a build command inside the build dir" msgstr "Wykonuje polecenie budowania w katalogu budowania" -#: app/flatpak-main.c:137 +#: app/flatpak-main.c:138 msgid "Finish a build dir for export" msgstr "Kończy katalog budowania do eksportu" -#: app/flatpak-main.c:138 +#: app/flatpak-main.c:139 msgid "Export a build dir to a repository" msgstr "Eksportuje katalog budowania do repozytorium" -#: app/flatpak-main.c:139 +#: app/flatpak-main.c:140 msgid "Create a bundle file from a ref in a local repository" msgstr "Tworzy pakiet z odniesienia w lokalnym repozytorium" -#: app/flatpak-main.c:140 +#: app/flatpak-main.c:141 msgid "Import a bundle file" msgstr "Importuje pakiet" -#: app/flatpak-main.c:141 +#: app/flatpak-main.c:142 msgid "Sign an application or runtime" msgstr "Podpisuje program lub środowisko wykonawcze" -#: app/flatpak-main.c:142 +#: app/flatpak-main.c:143 msgid "Update the summary file in a repository" msgstr "Aktualizuje plik podsumowania w repozytorium" -#: app/flatpak-main.c:143 +#: app/flatpak-main.c:144 msgid "Create new commit based on existing ref" msgstr "Tworzy nowe zatwierdzenie na podstawie istniejącego odniesienia" -#: app/flatpak-main.c:144 +#: app/flatpak-main.c:145 msgid "Show information about a repo" msgstr "Wyświetla informacje o repozytorium" -#: app/flatpak-main.c:161 +#: app/flatpak-main.c:162 msgid "Show debug information, -vv for more detail" msgstr "Wyświetla informacje debugowania, -vv wyświetla więcej" -#: app/flatpak-main.c:162 +#: app/flatpak-main.c:163 msgid "Show OSTree debug information" msgstr "Wyświetla informacje debugowania OSTree" -#: app/flatpak-main.c:168 +#: app/flatpak-main.c:169 msgid "Print version information and exit" msgstr "Wyświetla informacje o wersji i kończy działanie" -#: app/flatpak-main.c:169 +#: app/flatpak-main.c:170 msgid "Print default arch and exit" msgstr "Wyświetla domyślną architekturę i kończy działanie" -#: app/flatpak-main.c:170 +#: app/flatpak-main.c:171 msgid "Print supported arches and exit" msgstr "Wyświetla obsługiwane architektury i kończy działanie" -#: app/flatpak-main.c:171 +#: app/flatpak-main.c:172 msgid "Print active gl drivers and exit" msgstr "Wyświetla aktywne sterowniki GL i kończy działanie" -#: app/flatpak-main.c:172 +#: app/flatpak-main.c:173 msgid "Print paths for system installations and exit" msgstr "Wyświetla ścieżki do instalacji systemowych i kończy działanie" -#: app/flatpak-main.c:173 +#: app/flatpak-main.c:174 msgid "Print the updated environment needed to run flatpaks" msgstr "" "Wyświetla zaktualizowane środowisko wymagane do uruchamiania pakietów Flatpak" -#: app/flatpak-main.c:174 +#: app/flatpak-main.c:175 msgid "Only include the system installation with --print-updated-env" msgstr "Zawiera tylko instalacje systemowe w --print-updated-env" -#: app/flatpak-main.c:179 +#: app/flatpak-main.c:180 msgid "Work on the user installation" msgstr "Działa na instalacji użytkownika" -#: app/flatpak-main.c:180 +#: app/flatpak-main.c:181 msgid "Work on the system-wide installation (default)" msgstr "Działa na instalacji systemowej (domyślnie)" -#: app/flatpak-main.c:181 +#: app/flatpak-main.c:182 msgid "Work on a non-default system-wide installation" msgstr "Działa na niedomyślnej instalacji systemowej" -#: app/flatpak-main.c:211 +#: app/flatpak-main.c:212 msgid "Builtin Commands:" msgstr "Wbudowane polecenia:" -#: app/flatpak-main.c:297 +#: app/flatpak-main.c:298 #, c-format msgid "" "Note that the directories %s are not in the search path set by the " @@ -4133,7 +4118,7 @@ msgstr "" "Flatpak mogą nie pojawić się w środowisku pulpitu do czasu ponownego " "uruchomienia sesji." -#: app/flatpak-main.c:311 +#: app/flatpak-main.c:312 #, c-format msgid "" "Note that the directory %s is not in the search path set by the " @@ -4145,7 +4130,7 @@ msgstr "" "Flatpak mogą nie pojawić się w środowisku pulpitu do czasu ponownego " "uruchomienia sesji." -#: app/flatpak-main.c:380 +#: app/flatpak-main.c:381 msgid "" "Refusing to operate under sudo with --user. Omit sudo to operate on the user " "installation, or use a root shell to operate on the root user's installation." @@ -4154,32 +4139,32 @@ msgstr "" "w instalacji użytkownika, albo użyć powłoki roota, aby działać w instalacji " "użytkownika root." -#: app/flatpak-main.c:452 +#: app/flatpak-main.c:453 msgid "" "Multiple installations specified for a command that works on one installation" msgstr "" "Podano wiele instalacji dla polecenia, które działa na jednej instalacji" -#: app/flatpak-main.c:503 app/flatpak-main.c:690 +#: app/flatpak-main.c:504 app/flatpak-main.c:691 #, c-format msgid "See '%s --help'" msgstr "„%s --help” wyświetli więcej informacji" -#: app/flatpak-main.c:699 +#: app/flatpak-main.c:700 #, c-format msgid "'%s' is not a flatpak command. Did you mean '%s%s'?" msgstr "„%s” nie jest poleceniem Flatpak. Czy chodziło o „%s%s”?" -#: app/flatpak-main.c:702 +#: app/flatpak-main.c:703 #, c-format msgid "'%s' is not a flatpak command" msgstr "„%s” nie jest poleceniem Flatpak" -#: app/flatpak-main.c:817 +#: app/flatpak-main.c:818 msgid "No command specified" msgstr "Nie podano polecenia" -#: app/flatpak-main.c:976 +#: app/flatpak-main.c:977 msgid "error:" msgstr "błąd:" @@ -4238,16 +4223,16 @@ msgstr "Ostrzeżenie: odinstalowanie %s się nie powiodło: %s\n" msgid "Error: Failed to uninstall %s: %s\n" msgstr "Błąd: odinstalowanie %s się nie powiodło: %s\n" -#: app/flatpak-quiet-transaction.c:166 common/flatpak-dir.c:10535 +#: app/flatpak-quiet-transaction.c:166 common/flatpak-dir.c:10882 #, c-format msgid "%s already installed" msgstr "Już zainstalowano %s" #: app/flatpak-quiet-transaction.c:168 common/flatpak-dir-utils.c:166 -#: common/flatpak-dir-utils.c:259 common/flatpak-dir.c:3033 -#: common/flatpak-dir.c:3732 common/flatpak-dir.c:15888 -#: common/flatpak-dir.c:16178 common/flatpak-transaction.c:2669 -#: common/flatpak-transaction.c:2724 +#: common/flatpak-dir-utils.c:259 common/flatpak-dir.c:3421 +#: common/flatpak-dir.c:4120 common/flatpak-dir.c:16245 +#: common/flatpak-dir.c:16535 common/flatpak-transaction.c:2693 +#: common/flatpak-transaction.c:2748 #, c-format msgid "%s not installed" msgstr "Nie zainstalowano %s" @@ -4317,7 +4302,6 @@ msgid "Filesystem location \"%s\" contains \"..\"" msgstr "Położenie w systemie plików „%s” zawiera „..”" #: common/flatpak-context.c:1002 -#, c-format msgid "" "--filesystem=/ is not available, use --filesystem=host for a similar result" msgstr "" @@ -4344,22 +4328,18 @@ msgid "Environment variable name must not contain '=': %s" msgstr "Nazwa zmiennej środowiskowej nie może zawierać „=”: %s" #: common/flatpak-context.c:1540 common/flatpak-context.c:1548 -#, c-format msgid "--add-policy arguments must be in the form SUBSYSTEM.KEY=VALUE" msgstr "Parametry --add-policy muszą być w formacie PODSYSTEM.KLUCZ=WARTOŚĆ" #: common/flatpak-context.c:1555 -#, c-format msgid "--add-policy values can't start with \"!\"" msgstr "Wartości --add-policy nie mogą zaczynać się od znaku „!”" #: common/flatpak-context.c:1580 common/flatpak-context.c:1588 -#, c-format msgid "--remove-policy arguments must be in the form SUBSYSTEM.KEY=VALUE" msgstr "Parametry --remove-policy muszą być w formacie PODSYSTEM.KLUCZ=WARTOŚĆ" #: common/flatpak-context.c:1595 -#, c-format msgid "--remove-policy values can't start with \"!\"" msgstr "Wartości --remove-policy nie mogą zaczynać się od znaku „!”" @@ -4559,47 +4539,47 @@ msgstr "Dostęp do katalogu domowego nie zostanie udzielony: %s" msgid "Unable to provide a temporary home directory in the sandbox: %s" msgstr "Nie można dostarczyć tymczasowego katalogu domowego w piaskownicy: %s" -#: common/flatpak-dir.c:425 +#: common/flatpak-dir.c:436 #, c-format msgid "Configured collection ID ‘%s’ not in summary file" msgstr "" "Identyfikator skonfigurowanej kolekcji „%s” nie jest w pliku podsumowania" -#: common/flatpak-dir.c:563 +#: common/flatpak-dir.c:574 #, c-format msgid "Unable to load summary from remote %s: %s" msgstr "Nie można wczytać podsumowania z repozytorium %s: %s" -#: common/flatpak-dir.c:712 common/flatpak-dir.c:784 +#: common/flatpak-dir.c:723 common/flatpak-dir.c:795 #, c-format msgid "No such ref '%s' in remote %s" msgstr "Brak odniesienia „%s” w repozytorium %s" -#: common/flatpak-dir.c:769 common/flatpak-dir.c:906 common/flatpak-dir.c:935 -#: common/flatpak-dir.c:947 +#: common/flatpak-dir.c:780 common/flatpak-dir.c:917 common/flatpak-dir.c:946 +#: common/flatpak-dir.c:958 #, c-format msgid "No entry for %s in remote %s summary flatpak cache" msgstr "" "Brak wpisu dla %s w pamięci podręcznej Flatpak podsumowania repozytorium %s" -#: common/flatpak-dir.c:924 +#: common/flatpak-dir.c:935 #, c-format msgid "No summary or Flatpak cache available for remote %s" msgstr "" "Brak dostępnego podsumowania lub pamięci podręcznej Flatpak dla repozytorium " "%s" -#: common/flatpak-dir.c:952 +#: common/flatpak-dir.c:963 #, c-format msgid "Missing xa.data in summary for remote %s" msgstr "Brak „xa.data” w podsumowaniu dla repozytorium %s" -#: common/flatpak-dir.c:958 common/flatpak-dir.c:1375 +#: common/flatpak-dir.c:969 common/flatpak-dir.c:1364 #, c-format msgid "Unsupported summary version %d for remote %s" msgstr "Nieobsługiwana wersja podsumowania %d dla repozytorium %s" -#: common/flatpak-dir.c:1045 +#: common/flatpak-dir.c:1056 msgid "Remote OCI index has no registry uri" msgstr "Indeks OCI repozytorium nie ma adresu URI rejestru" @@ -4608,380 +4588,371 @@ msgstr "Indeks OCI repozytorium nie ma adresu URI rejestru" msgid "Couldn't find ref %s in remote %s" msgstr "Nie można odnaleźć odniesienia %s w repozytorium %s" -#: common/flatpak-dir.c:1131 common/flatpak-dir.c:6044 -#: common/flatpak-oci-registry.c:3493 common/flatpak-oci-registry.c:3498 -msgid "Image is not a manifest" -msgstr "Obraz nie jest w manifeście" - -#: common/flatpak-dir.c:1152 common/flatpak-dir.c:1225 +#: common/flatpak-dir.c:1131 common/flatpak-dir.c:1214 #, c-format msgid "Commit has no requested ref ‘%s’ in ref binding metadata" msgstr "" "Zatwierdzenie nie ma żądanego odniesienia „%s” w metadanych dowiązania " "odniesienia" -#: common/flatpak-dir.c:1256 +#: common/flatpak-dir.c:1245 #, c-format msgid "Configured collection ID ‘%s’ not in binding metadata" msgstr "" "Identyfikator skonfigurowanej kolekcji „%s” nie jest w metadanych dowiązania" -#: common/flatpak-dir.c:1292 common/flatpak-dir.c:5032 -#: common/flatpak-dir.c:5953 common/flatpak-dir.c:6021 +#: common/flatpak-dir.c:1281 common/flatpak-dir.c:5420 #, c-format msgid "Couldn't find latest checksum for ref %s in remote %s" msgstr "" "Nie można odnaleźć najnowszej sumy kontrolnej dla odniesienia %s " "w repozytorium %s" -#: common/flatpak-dir.c:1345 common/flatpak-dir.c:1381 +#: common/flatpak-dir.c:1334 common/flatpak-dir.c:1370 #, c-format msgid "No entry for %s in remote %s summary flatpak sparse cache" msgstr "" "Brak wpisu dla %s w rozsianej pamięci podręcznej Flatpak podsumowania " "repozytorium %s" -#: common/flatpak-dir.c:1970 +#: common/flatpak-dir.c:2358 #, c-format msgid "Commit metadata for %s not matching expected metadata" msgstr "" "Metadane zatwierdzenia dla %s nie zgadzają się z oczekiwanymi metadanymi" -#: common/flatpak-dir.c:2235 +#: common/flatpak-dir.c:2623 msgid "Unable to connect to system bus" msgstr "Nie można połączyć się z magistralą systemu" -#: common/flatpak-dir.c:2830 +#: common/flatpak-dir.c:3218 msgid "User installation" msgstr "Instalacja użytkownika" -#: common/flatpak-dir.c:2837 +#: common/flatpak-dir.c:3225 #, c-format msgid "System (%s) installation" msgstr "Instalacja systemowa (%s)" -#: common/flatpak-dir.c:2883 +#: common/flatpak-dir.c:3271 #, c-format msgid "No overrides found for %s" msgstr "Nie odnaleziono zastępników dla %s" -#: common/flatpak-dir.c:3036 +#: common/flatpak-dir.c:3424 #, c-format msgid "%s (commit %s) not installed" msgstr "Nie zainstalowano %s (zatwierdzenie %s)" -#: common/flatpak-dir.c:4059 +#: common/flatpak-dir.c:4447 #, c-format msgid "Error parsing system flatpakrepo file for %s: %s" msgstr "Błąd podczas przetwarzania pliku repozytorium Flatpak dla %s: %s" -#: common/flatpak-dir.c:4134 +#: common/flatpak-dir.c:4522 #, c-format msgid "While opening repository %s: " msgstr "Podczas otwierania repozytorium %s: " -#: common/flatpak-dir.c:4395 +#: common/flatpak-dir.c:4783 #, c-format msgid "The config key %s is not set" msgstr "Klucz konfiguracji %s nie jest ustawiony" -#: common/flatpak-dir.c:4528 +#: common/flatpak-dir.c:4916 #, c-format msgid "No current %s pattern matching %s" msgstr "Brak obecnych wzorów %s pasujących do %s" -#: common/flatpak-dir.c:4810 +#: common/flatpak-dir.c:5198 msgid "No appstream commit to deploy" msgstr "Brak zatwierdzenia AppStream do wdrożenia" -#: common/flatpak-dir.c:5328 common/flatpak-dir.c:6378 -#: common/flatpak-dir.c:9971 common/flatpak-dir.c:10677 +#: common/flatpak-dir.c:5716 common/flatpak-dir.c:6708 +#: common/flatpak-dir.c:10313 common/flatpak-dir.c:11025 msgid "Can't pull from untrusted non-gpg verified remote" msgstr "" "Nie można pobrać z niezaufanego, niesprawdzonego przez GPG repozytorium" -#: common/flatpak-dir.c:5740 common/flatpak-dir.c:5777 +#: common/flatpak-dir.c:6128 common/flatpak-dir.c:6165 msgid "Extra data not supported for non-gpg-verified local system installs" msgstr "" "Dodatkowe dane nie są obsługiwane dla niesprawdzonych przez GPG lokalnych " "instalacji systemowych" -#: common/flatpak-dir.c:5806 +#: common/flatpak-dir.c:6194 #, c-format msgid "Invalid checksum for extra data uri %s" msgstr "Nieprawidłowa suma kontrolna dla adresu URI dodatkowych danych %s" -#: common/flatpak-dir.c:5811 +#: common/flatpak-dir.c:6199 #, c-format msgid "Empty name for extra data uri %s" msgstr "Pusta nazwa dla adresu URI %s dodatkowych danych" -#: common/flatpak-dir.c:5818 +#: common/flatpak-dir.c:6206 #, c-format msgid "Unsupported extra data uri %s" msgstr "Nieobsługiwany adres URI %s dodatkowych danych" -#: common/flatpak-dir.c:5832 +#: common/flatpak-dir.c:6220 #, c-format msgid "Failed to load local extra-data %s: %s" msgstr "Wczytanie lokalnych dodatkowych danych %s się nie powiodło: %s" -#: common/flatpak-dir.c:5835 +#: common/flatpak-dir.c:6223 #, c-format msgid "Wrong size for extra-data %s" msgstr "Błędny rozmiar dodatkowych danych %s" -#: common/flatpak-dir.c:5850 +#: common/flatpak-dir.c:6238 #, c-format msgid "While downloading %s: " msgstr "Podczas pobierania %s: " -#: common/flatpak-dir.c:5857 +#: common/flatpak-dir.c:6245 #, c-format msgid "Wrong size for extra data %s" msgstr "Błędny rozmiar dodatkowych danych %s" -#: common/flatpak-dir.c:5866 +#: common/flatpak-dir.c:6254 #, c-format msgid "Invalid checksum for extra data %s" msgstr "Nieprawidłowa suma kontrolna dodatkowych danych %s" -#: common/flatpak-dir.c:5961 common/flatpak-dir.c:8816 -#: common/flatpak-dir.c:10555 -#, c-format -msgid "%s commit %s already installed" -msgstr "Już zainstalowano %s, zatwierdzenie %s" - -#: common/flatpak-dir.c:6208 common/flatpak-dir.c:6461 +#: common/flatpak-dir.c:6538 common/flatpak-dir.c:6791 #, c-format msgid "While pulling %s from remote %s: " msgstr "Podczas pobierania %s z repozytorium %s: " -#: common/flatpak-dir.c:6402 common/flatpak-repo-utils.c:3906 +#: common/flatpak-dir.c:6732 common/flatpak-repo-utils.c:3909 msgid "GPG signatures found, but none are in trusted keyring" msgstr "Odnaleziono podpisy GPG, ale żadne nie są w zaufanej bazie kluczy" -#: common/flatpak-dir.c:6419 +#: common/flatpak-dir.c:6749 #, c-format msgid "Commit for ‘%s’ has no ref binding" msgstr "Zatwierdzenie dla „%s” nie ma dowiązania odniesienia" -#: common/flatpak-dir.c:6424 +#: common/flatpak-dir.c:6754 #, c-format msgid "Commit for ‘%s’ is not in expected bound refs: %s" msgstr "" "Zatwierdzenie dla „%s” nie jest w oczekiwanych dowiązanych odniesieniach: %s" -#: common/flatpak-dir.c:6600 +#: common/flatpak-dir.c:6930 msgid "Only applications can be made current" msgstr "Tylko programy mogą być ustawione jako bieżące" -#: common/flatpak-dir.c:7304 +#: common/flatpak-dir.c:7634 msgid "Not enough memory" msgstr "Za mało pamięci" -#: common/flatpak-dir.c:7323 +#: common/flatpak-dir.c:7653 msgid "Failed to read from exported file" msgstr "Odczytanie z wyeksportowanego pliku się nie powiodło" -#: common/flatpak-dir.c:7513 +#: common/flatpak-dir.c:7843 msgid "Error reading mimetype xml file" msgstr "Błąd podczas odczytywania pliku XML typu MIME" -#: common/flatpak-dir.c:7518 +#: common/flatpak-dir.c:7848 msgid "Invalid mimetype xml file" msgstr "Nieprawidłowy plik XML typu MIME" -#: common/flatpak-dir.c:7604 +#: common/flatpak-dir.c:7934 #, c-format msgid "D-Bus service file '%s' has wrong name" msgstr "Plik usługi D-Bus „%s” ma błędną nazwę" -#: common/flatpak-dir.c:7759 +#: common/flatpak-dir.c:8089 #, c-format msgid "Invalid Exec argument %s" msgstr "Nieprawidłowy parametr Exec %s" -#: common/flatpak-dir.c:8226 +#: common/flatpak-dir.c:8556 msgid "While getting detached metadata: " msgstr "Podczas pobierania odłączonych metadanych: " -#: common/flatpak-dir.c:8231 common/flatpak-dir.c:8236 -#: common/flatpak-dir.c:8240 +#: common/flatpak-dir.c:8561 common/flatpak-dir.c:8566 +#: common/flatpak-dir.c:8570 msgid "Extra data missing in detached metadata" msgstr "Brak dodatkowych danych w odłączonych metadanych" -#: common/flatpak-dir.c:8244 +#: common/flatpak-dir.c:8574 msgid "While creating extradir: " msgstr "Podczas tworzenia dodatkowego katalogu: " -#: common/flatpak-dir.c:8265 common/flatpak-dir.c:8298 +#: common/flatpak-dir.c:8595 common/flatpak-dir.c:8628 msgid "Invalid checksum for extra data" msgstr "Nieprawidłowa suma kontrolna dodatkowych danych" -#: common/flatpak-dir.c:8294 +#: common/flatpak-dir.c:8624 msgid "Wrong size for extra data" msgstr "Błędny rozmiar dodatkowych danych" -#: common/flatpak-dir.c:8307 +#: common/flatpak-dir.c:8637 #, c-format msgid "While writing extra data file '%s': " msgstr "Podczas zapisywania pliku dodatkowych danych „%s”: " -#: common/flatpak-dir.c:8315 +#: common/flatpak-dir.c:8645 #, c-format msgid "Extra data %s missing in detached metadata" msgstr "Brak dodatkowych danych %s w odłączonych metadanych" -#: common/flatpak-dir.c:8413 -#, fuzzy, c-format +#: common/flatpak-dir.c:8743 msgid "Unable to get runtime key from metadata" -msgstr "Używa alternatywnego pliku dla metadanych" +msgstr "Nie można uzyskać klucza środowiska wykonawczego z metadanych" -#: common/flatpak-dir.c:8526 +#: common/flatpak-dir.c:8856 #, c-format msgid "apply_extra script failed, exit status %d" msgstr "Skrypt „apply_extra” się nie powiódł, stan wyjścia %d" #. Translators: The placeholder is for an app ref. -#: common/flatpak-dir.c:8693 +#: common/flatpak-dir.c:9023 #, c-format msgid "Installing %s is not allowed by the policy set by your administrator" msgstr "" "Instalacja programu %s jest zabroniona przez zasady ustawione przez " "administratora" -#: common/flatpak-dir.c:8792 +#: common/flatpak-dir.c:9122 #, c-format msgid "While trying to resolve ref %s: " msgstr "Podczas rozwiązywania odniesienia %s: " -#: common/flatpak-dir.c:8804 +#: common/flatpak-dir.c:9134 #, c-format msgid "%s is not available" msgstr "%s jest niedostępne" -#: common/flatpak-dir.c:8823 +#: common/flatpak-dir.c:9146 common/flatpak-dir.c:10902 +#, c-format +msgid "%s commit %s already installed" +msgstr "Już zainstalowano %s, zatwierdzenie %s" + +#: common/flatpak-dir.c:9153 msgid "Can't create deploy directory" msgstr "Nie można utworzyć katalogu wdrażania" -#: common/flatpak-dir.c:8831 +#: common/flatpak-dir.c:9161 #, c-format msgid "Failed to read commit %s: " msgstr "Odczytanie zatwierdzenia %s się nie powiodło: " -#: common/flatpak-dir.c:8852 +#: common/flatpak-dir.c:9182 #, c-format msgid "While trying to checkout %s into %s: " msgstr "Podczas wymeldowywania %s do %s: " -#: common/flatpak-dir.c:8871 +#: common/flatpak-dir.c:9201 msgid "While trying to checkout metadata subpath: " msgstr "Podczas wymeldowywania podścieżki metadanych: " -#: common/flatpak-dir.c:8903 +#: common/flatpak-dir.c:9233 #, c-format msgid "While trying to checkout subpath ‘%s’: " msgstr "Podczas wymeldowywania podścieżki „%s”: " -#: common/flatpak-dir.c:8913 +#: common/flatpak-dir.c:9243 msgid "While trying to remove existing extra dir: " msgstr "Podczas usuwania istniejącego dodatkowego katalogu: " -#: common/flatpak-dir.c:8924 +#: common/flatpak-dir.c:9254 msgid "While trying to apply extra data: " msgstr "Podczas zastosowywania dodatkowych danych: " -#: common/flatpak-dir.c:8951 +#: common/flatpak-dir.c:9281 #, c-format msgid "Invalid commit ref %s: " msgstr "Nieprawidłowe odniesienie zatwierdzenia %s: " -#: common/flatpak-dir.c:8959 common/flatpak-dir.c:8971 +#: common/flatpak-dir.c:9289 common/flatpak-dir.c:9301 #, c-format msgid "Deployed ref %s does not match commit (%s)" msgstr "Wdrożone odniesienie %s nie pasuje do zatwierdzenia (%s)" -#: common/flatpak-dir.c:8965 +#: common/flatpak-dir.c:9295 #, c-format msgid "Deployed ref %s branch does not match commit (%s)" msgstr "Gałąź wdrożonego odniesienia %s nie pasuje do zatwierdzenia (%s)" -#: common/flatpak-dir.c:9226 common/flatpak-installation.c:1912 +#: common/flatpak-dir.c:9557 common/flatpak-installation.c:1912 #, c-format msgid "%s branch %s already installed" msgstr "Już zainstalowano %s, gałąź %s" -#: common/flatpak-dir.c:10075 +#: common/flatpak-dir.c:10417 #, c-format msgid "Could not unmount revokefs-fuse filesystem at %s: " msgstr "Nie można odmontować systemu plików revokefs-fuse w %s: " -#: common/flatpak-dir.c:10362 +#: common/flatpak-dir.c:10709 #, c-format msgid "This version of %s is already installed" msgstr "Ta wersja programu %s jest już zainstalowana" -#: common/flatpak-dir.c:10369 -#, c-format +#: common/flatpak-dir.c:10716 msgid "Can't change remote during bundle install" msgstr "Nie można zmienić repozytorium podczas instalacji pakietu" -#: common/flatpak-dir.c:10630 +#: common/flatpak-dir.c:10978 msgid "Can't update to a specific commit without root permissions" msgstr "Nie można zaktualizować do podanego zatwierdzenia bez uprawnień roota" -#: common/flatpak-dir.c:10910 +#: common/flatpak-dir.c:11259 #, c-format msgid "Can't remove %s, it is needed for: %s" msgstr "Nie można usunąć %s, jest wymagane dla: %s" -#: common/flatpak-dir.c:10966 common/flatpak-installation.c:2068 +#: common/flatpak-dir.c:11319 common/flatpak-installation.c:2068 #, c-format msgid "%s branch %s is not installed" msgstr "Nie zainstalowano %s, gałęzi %s" -#: common/flatpak-dir.c:11219 +#: common/flatpak-dir.c:11572 #, c-format msgid "%s commit %s not installed" msgstr "Nie zainstalowano %s, zatwierdzenie %s" -#: common/flatpak-dir.c:11555 +#: common/flatpak-dir.c:11908 #, c-format msgid "Pruning repo failed: %s" msgstr "Usuwanie nieużywanych obiektów z repozytorium się nie powiodło: %s" -#: common/flatpak-dir.c:11723 common/flatpak-dir.c:11729 +#: common/flatpak-dir.c:12076 common/flatpak-dir.c:12082 #, c-format msgid "Failed to load filter '%s'" msgstr "Wczytanie filtru „%s” się nie powiodło" -#: common/flatpak-dir.c:11735 +#: common/flatpak-dir.c:12088 #, c-format msgid "Failed to parse filter '%s'" msgstr "Przetworzenie filtru „%s” się nie powiodło" -#: common/flatpak-dir.c:12017 +#: common/flatpak-dir.c:12370 msgid "Failed to write summary cache: " msgstr "Zapisanie pamięci podręcznej podsumowań się nie powiodło: " -#: common/flatpak-dir.c:12036 +#: common/flatpak-dir.c:12389 #, c-format msgid "No oci summary cached for remote '%s'" msgstr "Brak podsumowania OCI w pamięci podręcznej dla repozytorium „%s”" -#: common/flatpak-dir.c:12261 +#: common/flatpak-dir.c:12614 #, c-format msgid "No cached summary for remote '%s'" msgstr "Brak podsumowania w pamięci podręcznej dla repozytorium „%s”" -#: common/flatpak-dir.c:12302 +#: common/flatpak-dir.c:12655 #, c-format msgid "Invalid checksum for indexed summary %s read from %s" msgstr "" "Nieprawidłowa suma kontrolna zindeksowanego podsumowania %s odczytanego z %s" -#: common/flatpak-dir.c:12375 +#: common/flatpak-dir.c:12728 #, c-format msgid "" "Remote listing for %s not available; server has no summary file. Check the " @@ -4991,106 +4962,105 @@ msgstr "" "podsumowania. Proszę sprawdzić, czy adres URL przekazywany do remote-add " "jest prawidłowy." -#: common/flatpak-dir.c:12752 +#: common/flatpak-dir.c:13105 #, c-format msgid "Invalid checksum for indexed summary %s for remote '%s'" msgstr "" "Nieprawidłowa suma kontrolna zindeksowanego podsumowania %s dla repozytorium " "„%s”" -#: common/flatpak-dir.c:13375 +#: common/flatpak-dir.c:13732 #, c-format msgid "Multiple branches available for %s, you must specify one of: " msgstr "Dla %s dostępnych jest wiele gałęzi, należy podać jedną z: " -#: common/flatpak-dir.c:13441 +#: common/flatpak-dir.c:13798 #, c-format msgid "Nothing matches %s" msgstr "Nic nie pasuje do %s" -#: common/flatpak-dir.c:13549 +#: common/flatpak-dir.c:13906 #, c-format msgid "Can't find ref %s%s%s%s%s" msgstr "Nie można odnaleźć odniesienia %s%s%s%s%s" -#: common/flatpak-dir.c:13592 +#: common/flatpak-dir.c:13949 #, c-format msgid "Error searching remote %s: %s" msgstr "Błąd podczas wyszukiwania repozytorium %s: %s" -#: common/flatpak-dir.c:13689 +#: common/flatpak-dir.c:14046 #, c-format msgid "Error searching local repository: %s" msgstr "Błąd podczas wyszukiwania lokalnego repozytorium: %s" -#: common/flatpak-dir.c:13826 +#: common/flatpak-dir.c:14183 #, c-format msgid "%s/%s/%s not installed" msgstr "Nie zainstalowano %s/%s/%s" -#: common/flatpak-dir.c:14029 +#: common/flatpak-dir.c:14386 #, c-format msgid "Could not find installation %s" msgstr "Nie można odnaleźć instalacji %s" -#: common/flatpak-dir.c:14574 +#: common/flatpak-dir.c:14931 #, c-format msgid "Invalid file format, no %s group" msgstr "Nieprawidłowy format pliku, brak grupy %s" -#: common/flatpak-dir.c:14579 common/flatpak-repo-utils.c:2861 +#: common/flatpak-dir.c:14936 common/flatpak-repo-utils.c:2861 #, c-format msgid "Invalid version %s, only 1 supported" msgstr "Nieprawidłowa wersja %s, obsługiwana jest tylko wersja 1" -#: common/flatpak-dir.c:14584 common/flatpak-dir.c:14589 +#: common/flatpak-dir.c:14941 common/flatpak-dir.c:14946 #, c-format msgid "Invalid file format, no %s specified" msgstr "Nieprawidłowy format pliku, nie podano %s" #. Check some minimal size so we don't get crap -#: common/flatpak-dir.c:14609 +#: common/flatpak-dir.c:14966 msgid "Invalid file format, gpg key invalid" msgstr "Nieprawidłowy format pliku, nieprawidłowy klucz GPG" -#: common/flatpak-dir.c:14637 common/flatpak-repo-utils.c:2934 +#: common/flatpak-dir.c:14994 common/flatpak-repo-utils.c:2937 msgid "Collection ID requires GPG key to be provided" msgstr "Identyfikator kolekcji wymaga dostarczenia klucza GPG" -#: common/flatpak-dir.c:14680 +#: common/flatpak-dir.c:15037 #, c-format msgid "Runtime %s, branch %s is already installed" msgstr "Już zainstalowano środowisko wykonawcze %s, gałąź %s" -#: common/flatpak-dir.c:14681 +#: common/flatpak-dir.c:15038 #, c-format msgid "App %s, branch %s is already installed" msgstr "Już zainstalowano program %s, gałąź %s" -#: common/flatpak-dir.c:14914 +#: common/flatpak-dir.c:15271 #, c-format msgid "Can't remove remote '%s' with installed ref %s (at least)" msgstr "" "Nie można usunąć repozytorium „%s” z zainstalowanym odniesieniem %s (co " "najmniej)" -#: common/flatpak-dir.c:15013 +#: common/flatpak-dir.c:15370 #, c-format msgid "Invalid character '/' in remote name: %s" msgstr "Nieprawidłowy znak „/” w nazwie repozytorium: %s" -#: common/flatpak-dir.c:15019 +#: common/flatpak-dir.c:15376 #, c-format msgid "No configuration for remote %s specified" msgstr "Nie podano konfiguracji dla repozytorium %s" -#: common/flatpak-dir.c:16516 +#: common/flatpak-dir.c:16873 #, c-format msgid "Skipping deletion of mirror ref (%s, %s)…\n" msgstr "Pomijanie usuwania odniesienia serwera lustrzanego (%s, %s)…\n" #: common/flatpak-exports.c:916 -#, c-format msgid "An absolute path is required" msgstr "Wymagana jest ścieżka bezwzględna" @@ -5144,6 +5114,24 @@ msgstr "„%s” nie jest liczbą bez znaku" msgid "Number “%s” is out of bounds [%s, %s]" msgstr "Liczba „%s” jest poza zakresem [%s, %s]" +#: common/flatpak-image-source.c:94 common/flatpak-image-source.c:102 +msgid "Image is not a manifest" +msgstr "Obraz nie jest w manifeście" + +#: common/flatpak-image-source.c:117 +msgid "No org.flatpak.ref found in image" +msgstr "W obrazie nie odnaleziono org.flatpak.ref" + +#: common/flatpak-image-source.c:142 +#, c-format +msgid "Ref '%s' not found in registry" +msgstr "Nie odnaleziono odniesienia „%s” w rejestrze" + +#: common/flatpak-image-source.c:151 +msgid "Multiple images in registry, specify a ref with --ref" +msgstr "" +"Wiele obrazów w rejestrze, należy podać odniesienie za pomocą opcji --ref" + #: common/flatpak-installation.c:835 #, c-format msgid "Ref %s not installed" @@ -5190,72 +5178,72 @@ msgstr "Nie można utworzyć pliku %s" msgid "Unable to update symbolic link %s/%s" msgstr "Nie można zaktualizować dowiązania symbolicznego %s/%s" -#: common/flatpak-oci-registry.c:1021 +#: common/flatpak-oci-registry.c:1235 msgid "Only Bearer authentication supported" msgstr "Obsługiwane jest tylko uwierzytelnianie na okaziciela" -#: common/flatpak-oci-registry.c:1030 +#: common/flatpak-oci-registry.c:1244 msgid "Only realm in authentication request" msgstr "Tylko obszar w żądaniu uwierzytelnienia" -#: common/flatpak-oci-registry.c:1037 +#: common/flatpak-oci-registry.c:1251 msgid "Invalid realm in authentication request" msgstr "Nieprawidłowy obszar w żądaniu uwierzytelnienia" -#: common/flatpak-oci-registry.c:1107 +#: common/flatpak-oci-registry.c:1321 #, c-format msgid "Authorization failed: %s" msgstr "Upoważnienie się nie powiodło: %s" -#: common/flatpak-oci-registry.c:1109 +#: common/flatpak-oci-registry.c:1323 msgid "Authorization failed" msgstr "Upoważnienie się nie powiodło" -#: common/flatpak-oci-registry.c:1113 +#: common/flatpak-oci-registry.c:1327 #, c-format msgid "Unexpected response status %d when requesting token: %s" msgstr "Nieoczekiwany stan odpowiedzi %d podczas żądania tokena: %s" -#: common/flatpak-oci-registry.c:1124 +#: common/flatpak-oci-registry.c:1338 msgid "Invalid authentication request response" msgstr "Nieprawidłowa odpowiedź żądania uwierzytelnienia" -#: common/flatpak-oci-registry.c:1721 common/flatpak-oci-registry.c:1774 -#: common/flatpak-oci-registry.c:1803 common/flatpak-oci-registry.c:1858 -#: common/flatpak-oci-registry.c:1914 common/flatpak-oci-registry.c:1992 +#: common/flatpak-oci-registry.c:1925 common/flatpak-oci-registry.c:1977 +#: common/flatpak-oci-registry.c:2006 common/flatpak-oci-registry.c:2061 +#: common/flatpak-oci-registry.c:2117 common/flatpak-oci-registry.c:2195 msgid "Invalid delta file format" msgstr "Nieprawidłowy format pliku delty" -#: common/flatpak-oci-registry.c:2496 +#: common/flatpak-oci-registry.c:2699 #, c-format msgid "No gpg key found with ID %s (homedir: %s)" msgstr "Nie odnaleziono klucza GPG z identyfikatorem %s (katalog domowy: %s)" -#: common/flatpak-oci-registry.c:2503 +#: common/flatpak-oci-registry.c:2706 #, c-format msgid "Unable to lookup key ID %s: %d" msgstr "Nie można wyszukać identyfikatora klucza %s: %d" -#: common/flatpak-oci-registry.c:2511 +#: common/flatpak-oci-registry.c:2714 #, c-format msgid "Error signing commit: %d" msgstr "Błąd podczas podpisywania zatwierdzenia: %d" -#: common/flatpak-oci-registry.c:3512 common/flatpak-oci-registry.c:3671 +#: common/flatpak-oci-registry.c:3694 common/flatpak-oci-registry.c:3851 msgid "Invalid OCI image config" msgstr "Nieprawidłowa konfiguracja obrazu OCI" -#: common/flatpak-oci-registry.c:3574 common/flatpak-oci-registry.c:3820 +#: common/flatpak-oci-registry.c:3756 common/flatpak-oci-registry.c:4000 #, c-format msgid "Wrong layer checksum, expected %s, was %s" msgstr "Błędna suma kontrolna warstwy, oczekiwano %s, wynosi %s" -#: common/flatpak-oci-registry.c:3654 +#: common/flatpak-oci-registry.c:3828 #, c-format msgid "No ref specified for OCI image %s" msgstr "Nie podano odniesienia dla obrazu OCI %s" -#: common/flatpak-oci-registry.c:3660 +#: common/flatpak-oci-registry.c:3838 #, c-format msgid "Wrong ref (%s) specified for OCI image %s, expected %s" msgstr "Podano błędne odniesienie (%s) dla obrazu OCI %s, oczekiwano %s" @@ -5441,7 +5429,6 @@ msgstr "" "identyfikator kolekcji" #: common/flatpak-repo-utils.c:344 -#, c-format msgid "No extra data sources" msgstr "Brak źródeł dodatkowych danych" @@ -5459,112 +5446,120 @@ msgstr "Nieprawidłowe %s: brak klucza „%s”" msgid "Invalid gpg key" msgstr "Nieprawidłowy klucz GPG" -#: common/flatpak-repo-utils.c:3237 +#: common/flatpak-repo-utils.c:3240 #, c-format msgid "Error copying 64x64 icon for component %s: %s\n" msgstr "Błąd podczas kopiowania ikony 64×64 dla składnika %s: %s\n" -#: common/flatpak-repo-utils.c:3243 +#: common/flatpak-repo-utils.c:3246 #, c-format msgid "Error copying 128x128 icon for component %s: %s\n" msgstr "Błąd podczas kopiowania ikony 128×128 dla składnika %s: %s\n" -#: common/flatpak-repo-utils.c:3382 +#: common/flatpak-repo-utils.c:3385 #, c-format msgid "%s is end-of-life, ignoring for appstream" msgstr "%s jest niewspierane, ignorowanie dla AppStream" -#: common/flatpak-repo-utils.c:3417 +#: common/flatpak-repo-utils.c:3420 #, c-format msgid "No appstream data for %s: %s\n" msgstr "Brak danych AppStream dla %s: %s\n" -#: common/flatpak-repo-utils.c:3764 +#: common/flatpak-repo-utils.c:3767 msgid "Invalid bundle, no ref in metadata" msgstr "Nieprawidłowy pakiet, brak odniesienia w metadanych" -#: common/flatpak-repo-utils.c:3866 +#: common/flatpak-repo-utils.c:3869 #, c-format msgid "Collection ‘%s’ of bundle doesn’t match collection ‘%s’ of remote" msgstr "Kolekcja „%s” pakietu nie zgadza się z kolekcją „%s” repozytorium" -#: common/flatpak-repo-utils.c:3943 +#: common/flatpak-repo-utils.c:3946 msgid "Metadata in header and app are inconsistent" msgstr "Metadane w nagłówku i programie są niespójne" -#: common/flatpak-run.c:855 +#: common/flatpak-run.c:865 msgid "No systemd user session available, cgroups not available" msgstr "Brak dostępnej sesji użytkownika systemd, cgroups nie są dostępne" -#: common/flatpak-run.c:1395 +#: common/flatpak-run.c:1405 msgid "Unable to allocate instance id" msgstr "Nie można przydzielić identyfikatora wystąpienia" -#: common/flatpak-run.c:1531 common/flatpak-run.c:1541 +#: common/flatpak-run.c:1541 common/flatpak-run.c:1551 #, c-format msgid "Failed to open flatpak-info file: %s" msgstr "Otwarcie pliku „flatpak-info” się nie powiodło: %s" -#: common/flatpak-run.c:1570 +#: common/flatpak-run.c:1580 #, c-format msgid "Failed to open bwrapinfo.json file: %s" msgstr "Otwarcie pliku „bwrapinfo.json” się nie powiodło: %s" -#: common/flatpak-run.c:1595 +#: common/flatpak-run.c:1605 #, c-format msgid "Failed to write to instance id fd: %s" msgstr "Zapisanie do FD identyfikatora wystąpienia się nie powiodło: %s" -#: common/flatpak-run.c:1990 +#: common/flatpak-run.c:2000 msgid "Initialize seccomp failed" msgstr "Inicjacja seccomp się nie powiodła" -#: common/flatpak-run.c:2029 +#: common/flatpak-run.c:2039 #, c-format msgid "Failed to add architecture to seccomp filter: %s" msgstr "Dodanie architektury do filtru seccomp się nie powiodło: %s" -#: common/flatpak-run.c:2037 +#: common/flatpak-run.c:2047 #, c-format msgid "Failed to add multiarch architecture to seccomp filter: %s" msgstr "" "Dodanie wieloarchitekturowej architektury do filtru seccomp się nie " "powiodło: %s" -#: common/flatpak-run.c:2069 common/flatpak-run.c:2086 -#: common/flatpak-run.c:2108 +#: common/flatpak-run.c:2079 common/flatpak-run.c:2096 +#: common/flatpak-run.c:2118 #, c-format msgid "Failed to block syscall %d: %s" msgstr "Zablokowanie wywołania systemowego %d się nie powiodło: %s" -#: common/flatpak-run.c:2141 +#: common/flatpak-run.c:2151 #, c-format msgid "Failed to export bpf: %s" msgstr "Wyeksportowanie bpf się nie powiodło: %s" -#: common/flatpak-run.c:2440 +#: common/flatpak-run.c:2453 #, c-format msgid "Failed to open ‘%s’" msgstr "Otwarcie „%s” się nie powiodło" -#: common/flatpak-run.c:2727 +#: common/flatpak-run.c:2463 +#, c-format +msgid "" +"Directory forwarding needs version 4 of the document portal (have version %d)" +msgstr "" +"Przekazywanie katalogów wymaga 4. wersji portalu dokumentów (obecna wersja " +"to %d)" + +#: common/flatpak-run.c:2781 #, c-format msgid "ldconfig failed, exit status %d" msgstr "ldconfig się nie powiodło, stan wyjścia %d" -#: common/flatpak-run.c:2734 +#: common/flatpak-run.c:2788 msgid "Can't open generated ld.so.cache" msgstr "Nie można otworzyć utworzonego ld.so.cache" #. Translators: The placeholder is for an app ref. -#: common/flatpak-run.c:2857 +#: common/flatpak-run.c:2911 #, c-format msgid "Running %s is not allowed by the policy set by your administrator" msgstr "" "Uruchomienie programu %s jest zabronione przez zasady ustawione przez " "administratora" -#: common/flatpak-run.c:2964 +#: common/flatpak-run.c:3018 msgid "" "\"flatpak run\" is not intended to be run as `sudo flatpak run`. Use `sudo " "-i` or `su -l` instead and invoke \"flatpak run\" from inside the new shell." @@ -5573,19 +5568,19 @@ msgstr "" "użyć „sudo -i” lub „su -l” zamiast tego i wywołać „flatpak run” z nowej " "powłoki." -#: common/flatpak-run.c:3154 +#: common/flatpak-run.c:3208 #, c-format msgid "Failed to migrate from %s: %s" msgstr "Migracja z %s się nie powiodła: %s" -#: common/flatpak-run.c:3175 +#: common/flatpak-run.c:3229 #, c-format msgid "Failed to migrate old app data directory %s to new name %s: %s" msgstr "" "Migracja poprzedniego katalogu danych programu %s do nowej nazwy %s się nie " "powiodła: %s" -#: common/flatpak-run.c:3184 +#: common/flatpak-run.c:3238 #, c-format msgid "Failed to create symlink while migrating %s: %s" msgstr "" @@ -5603,53 +5598,59 @@ msgstr "Utworzenie potoku synchronizacji się nie powiodło" msgid "Failed to sync with dbus proxy" msgstr "Synchronizacja z pośrednikiem D-Bus się nie powiodła" -#: common/flatpak-transaction.c:2210 +#: common/flatpak-transaction.c:2232 #, c-format msgid "Warning: Problem looking for related refs: %s" msgstr "Ostrzeżenie: problem podczas wyszukiwania powiązanych odniesień: %s" -#: common/flatpak-transaction.c:2428 +#: common/flatpak-transaction.c:2450 #, c-format msgid "The application %s requires the runtime %s which was not found" msgstr "Program %s wymaga środowiska wykonawczego %s, którego nie odnaleziono" -#: common/flatpak-transaction.c:2444 +#: common/flatpak-transaction.c:2466 #, c-format msgid "The application %s requires the runtime %s which is not installed" msgstr "" "Program %s wymaga środowiska wykonawczego %s, które nie jest zainstalowane" -#: common/flatpak-transaction.c:2576 +#: common/flatpak-transaction.c:2598 #, c-format msgid "Can't uninstall %s which is needed by %s" msgstr "Nie można odinstalować %s, które jest wymagane przez %s" -#: common/flatpak-transaction.c:2673 +#: common/flatpak-transaction.c:2697 #, c-format msgid "Remote %s disabled, ignoring %s update" msgstr "Repozytorium %s jest wyłączone, ignorowanie aktualizacji %s" -#: common/flatpak-transaction.c:2706 +#: common/flatpak-transaction.c:2730 #, c-format msgid "%s is already installed" msgstr "Już zainstalowano %s" -#: common/flatpak-transaction.c:2709 +#: common/flatpak-transaction.c:2733 #, c-format msgid "%s is already installed from remote %s" msgstr "%s jest już zainstalowane z repozytorium %s" -#: common/flatpak-transaction.c:3020 +#: common/flatpak-transaction.c:3077 #, c-format msgid "Invalid .flatpakref: %s" msgstr "Nieprawidłowy plik .flatpakref: %s" -#: common/flatpak-transaction.c:3135 +#: common/flatpak-transaction.c:3118 +msgid "Warning: Could not mark already installed apps as preinstalled" +msgstr "" +"Ostrzeżenie: nie można oznaczyć już zainstalowanych programów jako " +"zainstalowane standardowo" + +#: common/flatpak-transaction.c:3320 #, c-format msgid "Error updating remote metadata for '%s': %s" msgstr "Błąd podczas aktualizowania metadanych repozytorium dla „%s”: %s" -#: common/flatpak-transaction.c:3624 +#: common/flatpak-transaction.c:3819 #, c-format msgid "" "Warning: Treating remote fetch error as non-fatal since %s is already " @@ -5658,55 +5659,55 @@ msgstr "" "Ostrzeżenie: traktowanie błędu pobierania repozytorium jako niekrytycznego, " "ponieważ %s jest już zainstalowane: %s" -#: common/flatpak-transaction.c:3950 +#: common/flatpak-transaction.c:4145 #, c-format msgid "No authenticator installed for remote '%s'" msgstr "Nie zainstalowano programu uwierzytelniającego dla repozytorium „%s”" -#: common/flatpak-transaction.c:4054 common/flatpak-transaction.c:4061 +#: common/flatpak-transaction.c:4249 common/flatpak-transaction.c:4256 #, c-format msgid "Failed to get tokens for ref: %s" msgstr "Uzyskanie tokenów dla odniesienia się nie powiodło: %s" -#: common/flatpak-transaction.c:4056 common/flatpak-transaction.c:4063 +#: common/flatpak-transaction.c:4251 common/flatpak-transaction.c:4258 msgid "Failed to get tokens for ref" msgstr "Uzyskanie tokenów dla odniesienia się nie powiodło" -#: common/flatpak-transaction.c:4321 +#: common/flatpak-transaction.c:4516 #, c-format msgid "Ref %s from %s matches more than one transaction operation" msgstr "Odniesienie %s z %s pasuje do więcej niż jednej transakcji" -#: common/flatpak-transaction.c:4322 common/flatpak-transaction.c:4332 +#: common/flatpak-transaction.c:4517 common/flatpak-transaction.c:4527 msgid "any remote" msgstr "dowolnego repozytorium" -#: common/flatpak-transaction.c:4331 +#: common/flatpak-transaction.c:4526 #, c-format msgid "No transaction operation found for ref %s from %s" msgstr "Nie odnaleziono transakcji dla odniesienia %s z %s" -#: common/flatpak-transaction.c:4454 +#: common/flatpak-transaction.c:4649 #, c-format msgid "Flatpakrepo URL %s not file, HTTP or HTTPS" msgstr "" "Adres URL repozytorium Flatpak %s nie jest adresem „file”, HTTP ani HTTPS" -#: common/flatpak-transaction.c:4460 +#: common/flatpak-transaction.c:4655 #, c-format msgid "Can't load dependent file %s: " msgstr "Nie można wczytać zależnego pliku %s: " -#: common/flatpak-transaction.c:4468 +#: common/flatpak-transaction.c:4663 #, c-format msgid "Invalid .flatpakrepo: %s" msgstr "Nieprawidłowy plik .flatpakrepo: %s" -#: common/flatpak-transaction.c:5121 +#: common/flatpak-transaction.c:5390 msgid "Transaction already executed" msgstr "Transakcja została już wykonana" -#: common/flatpak-transaction.c:5136 +#: common/flatpak-transaction.c:5405 msgid "" "Refusing to operate on a user installation as root! This can lead to " "incorrect file ownership and permission errors." @@ -5714,16 +5715,16 @@ msgstr "" "Odmowa działania na instalacji użytkownika jako root. Może to spowodować " "niepoprawnych właścicieli plików i błędy uprawnień." -#: common/flatpak-transaction.c:5228 common/flatpak-transaction.c:5241 +#: common/flatpak-transaction.c:5503 common/flatpak-transaction.c:5516 msgid "Aborted by user" msgstr "Przerwane przez użytkownika" -#: common/flatpak-transaction.c:5266 +#: common/flatpak-transaction.c:5541 #, c-format msgid "Skipping %s due to previous error" msgstr "Pomijanie %s z powodu poprzedniego błędu" -#: common/flatpak-transaction.c:5320 +#: common/flatpak-transaction.c:5595 #, c-format msgid "Aborted due to failure (%s)" msgstr "Przerwano z powodu niepowodzenia (%s)" @@ -5771,42 +5772,35 @@ msgid "URI is not absolute, and no base URI was provided" msgstr "Adres URI nie jest bezwzględny i nie podano podstawy adresu URI" #: common/flatpak-usb.c:83 -#, c-format msgid "USB device query 'all' must not have data" msgstr "Zapytanie „all” urządzenia USB nie może mieć danych" #: common/flatpak-usb.c:102 -#, c-format msgid "USB query rule 'cls' must be in the form CLASS:SUBCLASS or CLASS:*" msgstr "" "Reguła „cls” zapytania USB musi być w formie KLASA:PODKLASA lub KLASA:*" #: common/flatpak-usb.c:111 -#, c-format msgid "Invalid USB class" msgstr "Nieprawidłowa klasa USB" #: common/flatpak-usb.c:125 -#, c-format msgid "Invalid USB subclass" msgstr "Nieprawidłowa podklasa USB" #: common/flatpak-usb.c:141 common/flatpak-usb.c:148 -#, c-format msgid "USB query rule 'dev' must have a valid 4-digit hexadecimal product id" msgstr "" "Reguła „dev” zapytania USB musi mieć prawidłowy czterocyfrowy szesnastkowy " "identyfikator produktu" #: common/flatpak-usb.c:164 common/flatpak-usb.c:171 -#, c-format msgid "USB query rule 'vnd' must have a valid 4-digit hexadecimal vendor id" msgstr "" "Reguła „vnd” zapytania USB musi mieć prawidłowy czterocyfrowy szesnastkowy " "identyfikator producenta" #: common/flatpak-usb.c:205 -#, c-format msgid "USB device queries must be in the form TYPE:DATA" msgstr "Zapytania urządzeń USB muszą być w formie TYP:DANE" @@ -5816,22 +5810,18 @@ msgid "Unknown USB query rule %s" msgstr "Nieznana reguła zapytania USB %s" #: common/flatpak-usb.c:248 -#, c-format msgid "Empty USB query" msgstr "Puste zapytanie USB" #: common/flatpak-usb.c:274 -#, c-format msgid "Multiple USB query rules of the same type is not supported" msgstr "Wiele reguł zapytań USB tego samego typu nie jest obsługiwanych" #: common/flatpak-usb.c:283 -#, c-format msgid "'all' must not contain extra query rules" msgstr "„all” nie może zawierać dodatkowych reguł zapytań" #: common/flatpak-usb.c:291 -#, c-format msgid "USB queries with 'dev' must also specify vendors" msgstr "Zapytania USB z „dev” muszą także określać producentów" @@ -5895,7 +5885,6 @@ msgid "Invalid token" msgstr "Nieprawidłowy token" #: portal/flatpak-portal.c:2337 -#, c-format msgid "No portal support found" msgstr "Nie odnaleziono obsługi portali" @@ -5923,19 +5912,16 @@ msgstr "" "prywatności." #: portal/flatpak-portal.c:2388 -#, c-format msgid "Application update not allowed" msgstr "Aktualizacja programu jest zabroniona" #: portal/flatpak-portal.c:2546 -#, c-format msgid "Self update not supported, new version requires new permissions" msgstr "" "Samodzielna aktualizacja nie jest obsługiwana, nowa wersja wymaga nowych " "uprawnień" #: portal/flatpak-portal.c:2728 portal/flatpak-portal.c:2745 -#, c-format msgid "Update ended unexpectedly" msgstr "Aktualizacja została nieoczekiwanie zakończona" @@ -6151,9 +6137,8 @@ msgstr "Wymagane jest uwierzytelnienie, aby zaktualizować metadane" #. * Set the malcontent `is-system-installation-allowed` property of #. all users’ parental controls policies to true. #: system-helper/org.freedesktop.Flatpak.policy.in:287 -#, fuzzy msgid "Override parental controls for installs" -msgstr "Zastąpienie kontroli rodzicielskiej" +msgstr "Zastąpienie kontroli rodzicielskiej dla instalacji" #: system-helper/org.freedesktop.Flatpak.policy.in:288 msgid "" @@ -6177,15 +6162,13 @@ msgstr "" #. installing an update which has radically different content from the #. version of the app which the parent originally vetted and installed. #: system-helper/org.freedesktop.Flatpak.policy.in:313 -#, fuzzy msgid "Override parental controls for updates" -msgstr "Zastąpienie kontroli rodzicielskiej" +msgstr "Zastąpienie kontroli rodzicielskiej dla aktualizacji" #: system-helper/org.freedesktop.Flatpak.policy.in:314 -#, fuzzy msgid "" "Authentication is required to update software which is restricted by your " "parental controls policy" msgstr "" -"Wymagane jest uwierzytelnienie, aby zainstalować oprogramowanie ograniczane " +"Wymagane jest uwierzytelnienie, aby zaktualizować oprogramowanie ograniczane " "przez zasady kontroli rodzicielskiej" From 76266177ab6dc9bcd5d40479a7dc21bc466c8013 Mon Sep 17 00:00:00 2001 From: Georges Basile Stavracas Neto Date: Mon, 1 Sep 2025 07:21:16 -0300 Subject: [PATCH 34/53] ci: Add flatpak-1.16.x to branch allowlist This lets CI run for the flatpak-1.16.x branch. Needs backporting to fully work. --- .github/workflows/check.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index 21f2c89bff..405e79eb5f 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -12,6 +12,7 @@ on: - flatpak-1.10.x - flatpak-1.12.x - flatpak-1.14.x + - flatpak-1.16.x pull_request: paths-ignore: - README.md @@ -31,6 +32,7 @@ on: - flatpak-1.10.x - flatpak-1.12.x - flatpak-1.14.x + - flatpak-1.16.x merge_group: types: - checks_requested From 2c7b9342cc387ca07d8447e5d4a24d5d65404704 Mon Sep 17 00:00:00 2001 From: "Owen W. Taylor" Date: Thu, 28 Aug 2025 16:48:52 +0200 Subject: [PATCH 35/53] image-source: Pass token to flatpak_image_source_new_remote() Since flatpak_image_source_new_remote() already tries to load files from the registry, having a separate flatpak_image_source_set_token() doesn't work - when the token is set, it's already too late to be passed along with the initial requests. --- common/flatpak-dir.c | 4 +--- common/flatpak-image-source-private.h | 3 +-- common/flatpak-image-source.c | 10 +++------- 3 files changed, 5 insertions(+), 12 deletions(-) diff --git a/common/flatpak-dir.c b/common/flatpak-dir.c index 2041b5ae0f..210c79c401 100644 --- a/common/flatpak-dir.c +++ b/common/flatpak-dir.c @@ -1078,12 +1078,10 @@ flatpak_remote_state_new_image_source (FlatpakRemoteState *self, if (registry_uri == NULL) return NULL; - image_source = flatpak_image_source_new_remote (registry_uri, oci_repository, digest, NULL, error); + image_source = flatpak_image_source_new_remote (registry_uri, oci_repository, digest, token, NULL, error); if (image_source == NULL) return NULL; - flatpak_image_source_set_token (image_source, token); - return g_steal_pointer (&image_source); } diff --git a/common/flatpak-image-source-private.h b/common/flatpak-image-source-private.h index 94e4cc1aa7..beca07b04b 100644 --- a/common/flatpak-image-source-private.h +++ b/common/flatpak-image-source-private.h @@ -39,14 +39,13 @@ FlatpakImageSource *flatpak_image_source_new_local (GFile *file, FlatpakImageSource *flatpak_image_source_new_remote (const char *uri, const char *oci_repository, const char *digest, + const char *token, GCancellable *cancellable, GError **error); FlatpakImageSource *flatpak_image_source_new_for_location (const char *location, GCancellable *cancellable, GError **error); -void flatpak_image_source_set_token (FlatpakImageSource *self, - const char *token); void flatpak_image_source_set_delta_url (FlatpakImageSource *self, const char *delta_url); diff --git a/common/flatpak-image-source.c b/common/flatpak-image-source.c index 2454d4a5eb..3844d37ea6 100644 --- a/common/flatpak-image-source.c +++ b/common/flatpak-image-source.c @@ -177,6 +177,7 @@ FlatpakImageSource * flatpak_image_source_new_remote (const char *uri, const char *oci_repository, const char *digest, + const char *token, GCancellable *cancellable, GError **error) { @@ -186,6 +187,8 @@ flatpak_image_source_new_remote (const char *uri, if (!registry) return NULL; + flatpak_oci_registry_set_token (registry, token); + return flatpak_image_source_new (registry, oci_repository, digest, cancellable, error); } @@ -325,13 +328,6 @@ flatpak_image_source_new_for_location (const char *location, } } -void -flatpak_image_source_set_token (FlatpakImageSource *self, - const char *token) -{ - flatpak_oci_registry_set_token (self->registry, token); -} - void flatpak_image_source_set_delta_url (FlatpakImageSource *self, const char *delta_url) From d944d9afb6d9388e503c9edbd2c29e19dcf99b67 Mon Sep 17 00:00:00 2001 From: Sebastian Wick Date: Thu, 28 Aug 2025 16:56:54 +0200 Subject: [PATCH 36/53] dir: Propagate errors from flatpak_remote_state_fetch_image_source --- common/flatpak-dir.c | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/common/flatpak-dir.c b/common/flatpak-dir.c index 210c79c401..8976c9bf78 100644 --- a/common/flatpak-dir.c +++ b/common/flatpak-dir.c @@ -6326,8 +6326,15 @@ flatpak_dir_mirror_oci (FlatpakDir *self, if (opt_image_source) image_source = g_object_ref (opt_image_source); - else - image_source = flatpak_remote_state_fetch_image_source (state, self, ref, opt_rev, token, cancellable, error); + + if (!image_source) + { + image_source = flatpak_remote_state_fetch_image_source (state, self, + ref, opt_rev, token, + cancellable, error); + if (image_source == NULL) + return FALSE; + } flatpak_progress_start_oci_pull (progress); @@ -6367,8 +6374,15 @@ flatpak_dir_pull_oci (FlatpakDir *self, if (opt_image_source) image_source = g_object_ref (opt_image_source); - else - image_source = flatpak_remote_state_fetch_image_source (state, self, ref, opt_rev, token, cancellable, error); + + if (!image_source) + { + image_source = flatpak_remote_state_fetch_image_source (state, self, + ref, opt_rev, token, + cancellable, error); + if (image_source == NULL) + return FALSE; + } oci_digest = flatpak_image_source_get_digest (image_source); From 3773617f3054eeb3fc10476a29c24de6424d92db Mon Sep 17 00:00:00 2001 From: Sebastian Wick Date: Thu, 28 Aug 2025 18:13:03 +0200 Subject: [PATCH 37/53] oci: Actually only return the only manifest in get_only_manifest Instead of using flatpak_oci_manifest_descriptor_get_ref which requires the `org.opencontainers.image.ref.name` annotation, get any valid manifest, and make sure to return NULL if there are multiple valid manifests. Closes: https://github.com/flatpak/flatpak/issues/6081 --- common/flatpak-json-oci.c | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/common/flatpak-json-oci.c b/common/flatpak-json-oci.c index 3a339a0268..e748ed9bef 100644 --- a/common/flatpak-json-oci.c +++ b/common/flatpak-json-oci.c @@ -553,28 +553,28 @@ flatpak_oci_index_get_manifest (FlatpakOciIndex *self, FlatpakOciManifestDescriptor * flatpak_oci_index_get_only_manifest (FlatpakOciIndex *self) { - int i, found = -1; + FlatpakOciManifestDescriptor *manifest = NULL; if (self->manifests == NULL) return NULL; - for (i = 0; self->manifests[i] != NULL; i++) + for (size_t i = 0; self->manifests[i] != NULL; i++) { - const char *m_ref = flatpak_oci_manifest_descriptor_get_ref (self->manifests[i]); + FlatpakOciManifestDescriptor *m = self->manifests[i]; - if (m_ref == NULL) + if (m->parent.mediatype == NULL || + (strcmp (m->parent.mediatype, FLATPAK_OCI_MEDIA_TYPE_IMAGE_MANIFEST) != 0 && + strcmp (m->parent.mediatype, FLATPAK_DOCKER_MEDIA_TYPE_IMAGE_MANIFEST2) != 0)) continue; - if (found == -1) - found = i; - else + /* multiple manifests */ + if (manifest != NULL) return NULL; - } - if (found >= 0) - return self->manifests[found]; + manifest = m; + } - return NULL; + return manifest; } FlatpakOciManifestDescriptor * From f8474ea78886631d12c89f7fdefcc71039aee17c Mon Sep 17 00:00:00 2001 From: Sijmen Date: Wed, 25 Jun 2025 17:34:20 +0200 Subject: [PATCH 38/53] i18n: Update dutch translations --- po/nl.po | 532 +++++++++++++++++++++++++++++++++---------------------- 1 file changed, 320 insertions(+), 212 deletions(-) diff --git a/po/nl.po b/po/nl.po index ca17925cbc..970c1bb161 100644 --- a/po/nl.po +++ b/po/nl.po @@ -256,7 +256,7 @@ msgstr "Geen uitbreidingspunt overeenkomend met %s in %s" #: app/flatpak-builtins-build.c:568 #, c-format msgid "Missing '=' in bind mount option '%s'" -msgstr "Ontbrekende ‘=’ in bindingskoppeloptie ‘%s’" +msgstr "Ontbrekende ‘=’ in bindingskoppelingsoptie ‘%s’" #: app/flatpak-builtins-build.c:609 common/flatpak-run.c:3599 #, c-format @@ -982,10 +982,13 @@ msgid "" "Permanently deploy collection ID to client remote configurations, only for " "sideload support" msgstr "" +"Collectie-ID permanent uitrollen naar remote-configuraties van clients." +"Alleen voor ondersteuning voor sideloaden" #: app/flatpak-builtins-build-update-repo.c:78 msgid "Permanently deploy collection ID to client remote configurations" msgstr "" +"Collectie-ID permanent uitrollen naar remote-configuraties van clients" #: app/flatpak-builtins-build-update-repo.c:79 msgid "Name of authenticator for this repository" @@ -1201,11 +1204,15 @@ msgid "" "Warning: Related ref ‘%s’ is partially installed. Use --allow-partial to " "suppress this message.\n" msgstr "" +"Waarschuwing: De verwante ref ‘%s’ is gedeeltelijk geïnstalleerd. " +"Gebruik --allow-partial om dit bericht te onderdrukken.\n" #: app/flatpak-builtins-create-usb.c:158 #, c-format msgid "Warning: Omitting related ref ‘%s’ because it is not installed.\n" msgstr "" +"Waarschuwing: De verwante ref ‘%s’ wordt overgeslagen omdat deze niet is " +"geïnstalleerd.\n" #: app/flatpak-builtins-create-usb.c:175 #, c-format @@ -1213,11 +1220,15 @@ msgid "" "Warning: Omitting related ref ‘%s’ because its remote ‘%s’ does not have a " "collection ID set.\n" msgstr "" +"Waarschuwing: De verwante referentie ‘%s’ wordt overgeslagen omdat de remote " +"‘%s’ geen collectie-ID heeft ingesteld.\n" #: app/flatpak-builtins-create-usb.c:187 #, c-format msgid "Warning: Omitting related ref ‘%s’ because it's extra-data.\n" msgstr "" +"Waarschuwing: De verwante ref ‘%s’ wordt overgeslagen omdat het om " +"extra-data gaat.\n" #: app/flatpak-builtins-create-usb.c:262 app/flatpak-builtins-create-usb.c:637 #, c-format @@ -1225,29 +1236,36 @@ msgid "" "Remote ‘%s’ does not have a collection ID set, which is required for P2P " "distribution of ‘%s’." msgstr "" +"De remote ‘%s’ heeft geen ingestelde collectie-ID, wat vereist is voor " +"P2P-distributie van ‘%s’." #: app/flatpak-builtins-create-usb.c:272 #, c-format msgid "Warning: Omitting ref ‘%s’ (runtime of ‘%s’) because it's extra-data.\n" msgstr "" +"Waarschuwing: De ref ‘%s’ (runtime van ‘%s’) wordt overgeslagen omdat het om " +"extra-data gaat.\n" #: app/flatpak-builtins-create-usb.c:484 msgid "MOUNT-PATH [REF…] - Copy apps or runtimes onto removable media" -msgstr "" +msgstr "AANKOPPELPAD [REF…] - Kopieer apps of runtimes naar verwijderbare media" #: app/flatpak-builtins-create-usb.c:493 msgid "MOUNT-PATH and REF must be specified" -msgstr "" +msgstr "AANKOPPELPAD en REF moeten worden opgegeven" #: app/flatpak-builtins-create-usb.c:607 #, c-format msgid "Ref ‘%s’ found in multiple installations: %s. You must specify one." msgstr "" +"De ref ‘%s’ is gevonden in meerdere installaties: %s. Er moet er één " +"gespecificeerd worden." #: app/flatpak-builtins-create-usb.c:620 #, c-format msgid "Refs must all be in the same installation (found in %s and %s)." msgstr "" +"Alle refs moeten zich in dezelfde installatie bevinden (gevonden in %s en %s)." #: app/flatpak-builtins-create-usb.c:670 #, c-format @@ -1255,21 +1273,28 @@ msgid "" "Warning: Ref ‘%s’ is partially installed. Use --allow-partial to suppress " "this message.\n" msgstr "" +"Waarschuwing: De ref ‘%s’ is gedeeltelijk geïnstalleerd. Gebruik " +"--allow-partial om dit bericht te onderdrukken.\n" #: app/flatpak-builtins-create-usb.c:681 #, c-format msgid "Installed ref ‘%s’ is extra-data, and cannot be distributed offline" msgstr "" +"De geïnstalleerde ref ‘%s’ is extra-data, en kan niet offline worden " +"gedistribueerd" #: app/flatpak-builtins-create-usb.c:721 #, c-format msgid "Warning: Couldn't update repo metadata for remote ‘%s’: %s\n" msgstr "" +"Waarschuwing: Kon pakketbron-metadata niet bijwerken voor remote ‘%s’: %s\n" #: app/flatpak-builtins-create-usb.c:751 #, c-format msgid "Warning: Couldn't update appstream data for remote ‘%s’ arch ‘%s’: %s\n" msgstr "" +"Waarschuwing: Kon appstream-data niet bijwerken voor remote ‘%s’, arch ‘%s’: " +"%s\n" #. Print a warning if both appstream and appstream2 are missing #: app/flatpak-builtins-create-usb.c:784 @@ -1277,12 +1302,16 @@ msgstr "" msgid "" "Warning: Couldn't find appstream data for remote ‘%s’ arch ‘%s’: %s; %s\n" msgstr "" +"Waarschuwing: Kon appstream-data niet vinden voor remote ‘%s’, arch ‘%s’: " +"%s\n" #. Appstream2 is only for efficiency, so just print a debug message #: app/flatpak-builtins-create-usb.c:790 #, c-format msgid "Couldn't find appstream2 data for remote ‘%s’ arch ‘%s’: %s\n" msgstr "" +"Waarschuwing: Kon appstream2-data niet vinden voor remote ‘%s’, arch ‘%s’: " +"%s\n" #: app/flatpak-builtins-document-export.c:62 msgid "Create a unique document reference" @@ -1290,11 +1319,11 @@ msgstr "Een unieke documentreferentie aanmaken" #: app/flatpak-builtins-document-export.c:63 msgid "Make the document transient for the current session" -msgstr "" +msgstr "Dit document transiënt maken voor de huidige sessie" #: app/flatpak-builtins-document-export.c:64 msgid "Don't require the file to exist already" -msgstr "" +msgstr "Vereis niet dat het bestand al bestaat" #: app/flatpak-builtins-document-export.c:65 msgid "Give the app read permissions" @@ -1879,11 +1908,11 @@ msgstr "onbekend" #: app/flatpak-builtins-install.c:67 msgid "Don't pull, only install from local cache" -msgstr "" +msgstr "Niet ophalen, alleen installeren vanaf lokale cache" #: app/flatpak-builtins-install.c:68 app/flatpak-builtins-update.c:60 msgid "Don't deploy, only download to local cache" -msgstr "" +msgstr "Niet deployen, alleen downloaden naar lokale cache" #: app/flatpak-builtins-install.c:69 msgid "Don't install related refs" @@ -1895,7 +1924,7 @@ msgstr "Runtime-afhankelijkheden niet verifiëren/installeren" #: app/flatpak-builtins-install.c:71 msgid "Don't automatically pin explicit installs" -msgstr "" +msgstr "Expliciete installaties niet automatisch vastpinnen" #: app/flatpak-builtins-install.c:72 app/flatpak-builtins-update.c:63 msgid "Don't use static deltas" @@ -1904,23 +1933,26 @@ msgstr "Geen statische delta’s gebruiken" #: app/flatpak-builtins-install.c:75 msgid "Additionally install the SDK used to build the given refs" msgstr "" +"Installeer ook de SDK die is gebruikt om de opgegeven refs te bouwen" #: app/flatpak-builtins-install.c:76 msgid "" "Additionally install the debug info for the given refs and their dependencies" msgstr "" +"Installeer ook de debug-info voor de gegeven refs en hun afhankelijkheden" #: app/flatpak-builtins-install.c:77 msgid "Assume LOCATION is a .flatpak single-file bundle" -msgstr "" +msgstr "Neem aan dat LOCATIE een .flatpak-single-file-bundel is" #: app/flatpak-builtins-install.c:78 msgid "Assume LOCATION is a .flatpakref application description" -msgstr "" +msgstr "Neem aan dat LOCATIE een .flatpakref-applicatie-beschrijving is" #: app/flatpak-builtins-install.c:79 msgid "Check bundle signatures with GPG key from FILE (- for stdin)" msgstr "" +"Controleer bundelhandtekeningen met de GPG-sleutel uit BESTAND (- voor stdin)" #: app/flatpak-builtins-install.c:80 msgid "Only install this subpath" @@ -1947,15 +1979,15 @@ msgstr "Installatie bijwerken indien reeds geïnstalleerd" #. Translators: A sideload is when you install from a local USB drive rather than the Internet. #: app/flatpak-builtins-install.c:86 app/flatpak-builtins-update.c:71 msgid "Use this local repo for sideloads" -msgstr "" +msgstr "Gebruik deze lokale repo voor sideloads" #: app/flatpak-builtins-install.c:145 msgid "Bundle filename must be specified" -msgstr "" +msgstr "Bundelbestandsnaam moet worden gespecificeerd" #: app/flatpak-builtins-install.c:155 msgid "Remote bundles are not supported" -msgstr "" +msgstr "Remotebundels zijn niet ondersteund" #: app/flatpak-builtins-install.c:214 msgid "Filename or uri must be specified" @@ -1963,7 +1995,7 @@ msgstr "Bestandsnaam of URI moet worden opgegeven" #: app/flatpak-builtins-install.c:296 msgid "[LOCATION/REMOTE] [REF…] - Install applications or runtimes" -msgstr "" +msgstr "[LOCATIE/REMOTE] [REF…] - Installeer applicaties of runtimes" #: app/flatpak-builtins-install.c:322 msgid "At least one REF must be specified" @@ -2369,11 +2401,11 @@ msgstr "GPG-verificatie uitschakelen" #: app/flatpak-builtins-remote-add.c:72 app/flatpak-builtins-remote-modify.c:78 msgid "Mark the remote as don't enumerate" -msgstr "Remote markeren als ‘niet opsommen’" +msgstr "Remote markeren als niet te enumereren" #: app/flatpak-builtins-remote-add.c:73 app/flatpak-builtins-remote-modify.c:79 msgid "Mark the remote as don't use for deps" -msgstr "Remote markeren als ‘niet voor afhankelijkheden gebruiken’" +msgstr "Remote markeren als niet te gebruiken voor afhankelijkheden" #: app/flatpak-builtins-remote-add.c:74 app/flatpak-builtins-remote-modify.c:80 msgid "Set priority (default 1, higher is more prioritized)" @@ -2417,11 +2449,11 @@ msgstr "Standaard-branch om te gebruiken voor deze remote" #: app/flatpak-builtins-remote-add.c:83 app/flatpak-builtins-remote-modify.c:88 msgid "Import GPG key from FILE (- for stdin)" -msgstr "GPG-sleutel van BESTAND importeren (- voor stdin)" +msgstr "GPG-sleutel uit BESTAND importeren (- voor stdin)" #: app/flatpak-builtins-remote-add.c:84 app/flatpak-builtins-remote-modify.c:90 msgid "Set path to local filter FILE" -msgstr "Pad instellen naar lokaal filterBESTAND" +msgstr "Pad instellen naar lokaal filter-BESTAND" #: app/flatpak-builtins-remote-add.c:85 app/flatpak-builtins-remote-modify.c:91 msgid "Disable the remote" @@ -2483,25 +2515,25 @@ msgstr "Remote verwijderen zelfs indien in gebruik" #: app/flatpak-builtins-remote-delete.c:53 msgid "NAME - Delete a remote repository" -msgstr "" +msgstr "NAAM - Verwijder een externe pakketbron" #: app/flatpak-builtins-remote-delete.c:100 #, c-format msgid "The following refs are installed from remote '%s':" -msgstr "" +msgstr "De volgende refs zijn geïnstalleerd vanaf remote '%s':" #: app/flatpak-builtins-remote-delete.c:101 msgid "Remove them?" -msgstr "Wilt u ze verwijderen?" +msgstr "Deze verwijderen?" #: app/flatpak-builtins-remote-delete.c:103 #, c-format msgid "Can't remove remote '%s' with installed refs" -msgstr "" +msgstr "Kan remote '%s' met geïnstalleerde refs niet verwijderen" #: app/flatpak-builtins-remote-info.c:55 msgid "Commit to show info for" -msgstr "" +msgstr "Committen om informatie te tonen voor" #: app/flatpak-builtins-remote-info.c:58 msgid "Display log" @@ -2513,21 +2545,23 @@ msgstr "Bovenliggende tonen" #: app/flatpak-builtins-remote-info.c:65 app/flatpak-builtins-remote-ls.c:59 msgid "Use local caches even if they are stale" -msgstr "" +msgstr "Gebruik lokale caches, zelfs als ze verouderd zijn" #. Translators: A sideload is when you install from a local USB drive rather than the Internet. #: app/flatpak-builtins-remote-info.c:67 app/flatpak-builtins-remote-ls.c:61 msgid "Only list refs available as sideloads" -msgstr "" +msgstr "Geef alleen refs weer die beschikbaar zijn als sideloads" #: app/flatpak-builtins-remote-info.c:114 msgid "" " REMOTE REF - Show information about an application or runtime in a remote" msgstr "" +" REMOTE REF - Toon informatie over een applicatie of een runtime in een " +"remote" #: app/flatpak-builtins-remote-info.c:125 msgid "REMOTE and REF must be specified" -msgstr "" +msgstr "REMOTE en REF moeten worden opgegeven" #: app/flatpak-builtins-remote-info.c:247 #: app/flatpak-builtins-remote-info.c:282 @@ -2650,11 +2684,11 @@ msgstr "Enkel toepassingen tonen" #: app/flatpak-builtins-remote-ls.c:54 msgid "Show only those where updates are available" -msgstr "" +msgstr "Toon alleen runtimes waarvoor updates beschikbaar zijn" #: app/flatpak-builtins-remote-ls.c:55 msgid "Limit to this arch (* for all)" -msgstr "" +msgstr "Beperk tot deze arch (* voor alle)" #: app/flatpak-builtins-remote-ls.c:75 msgid "Show the runtime" @@ -2670,7 +2704,7 @@ msgstr "Downloadgrootte tonen" #: app/flatpak-builtins-remote-ls.c:389 msgid " [REMOTE or URI] - Show available runtimes and applications" -msgstr "" +msgstr " [REMOTE of URI] - Toon beschikbare runtimes en applicaties" #: app/flatpak-builtins-remote-modify.c:66 msgid "Enable GPG verification" @@ -2678,11 +2712,11 @@ msgstr "GPG-verificatie inschakelen" #: app/flatpak-builtins-remote-modify.c:67 msgid "Mark the remote as enumerate" -msgstr "" +msgstr "Remote markeren als te enumereren" #: app/flatpak-builtins-remote-modify.c:68 msgid "Mark the remote as used for dependencies" -msgstr "" +msgstr "Remote markeren als te gebruiken voor afhankelijkheden" #: app/flatpak-builtins-remote-modify.c:69 msgid "Set a new url" @@ -2710,30 +2744,30 @@ msgstr "Authenticator-opties" #: app/flatpak-builtins-remote-modify.c:96 msgid "Follow the redirect set in the summary file" -msgstr "" +msgstr "Omleidingsset in samenvattingsbestand volgen" #: app/flatpak-builtins-remote-modify.c:298 msgid "NAME - Modify a remote repository" -msgstr "" +msgstr "NAAM - Pas een externe pakketbron aan" #: app/flatpak-builtins-remote-modify.c:308 msgid "Remote NAME must be specified" -msgstr "" +msgstr "Remote NAAM moet worden opgegeven" #: app/flatpak-builtins-remote-modify.c:319 #, c-format msgid "Updating extra metadata from remote summary for %s\n" -msgstr "" +msgstr "Extra metadata van remote-samenvatting van %s bijwerken\n" #: app/flatpak-builtins-remote-modify.c:322 #, c-format msgid "Error updating extra metadata for '%s': %s\n" -msgstr "" +msgstr "Fout bij bijwerken van extra metadata van '%s': %s\n" #: app/flatpak-builtins-remote-modify.c:323 #, c-format msgid "Could not update extra metadata for %s" -msgstr "" +msgstr "Kon extra metadata van %s niet bijwerken" #: app/flatpak-builtins-repair.c:43 msgid "Don't make any changes" @@ -2776,22 +2810,22 @@ msgstr "Ongeldige commit %s wordt verwijderd: %s\n" #: app/flatpak-builtins-repair.c:261 #, c-format msgid "Commit should be marked partial: %s\n" -msgstr "" +msgstr "Commit moet als gedeeltelijk gemarkeerd worden: %s\n" #: app/flatpak-builtins-repair.c:264 #, c-format msgid "Marking commit as partial: %s\n" -msgstr "" +msgstr "Commit wordt als gedeeltelijk gemarkeerd: %s\n" #: app/flatpak-builtins-repair.c:293 #, c-format msgid "Problems loading data for %s: %s\n" -msgstr "" +msgstr "Problemen met laden van gegevens voor %s: %s\n" #: app/flatpak-builtins-repair.c:306 #, c-format msgid "Error reinstalling %s: %s\n" -msgstr "" +msgstr "Fout bij herinstalleren van %s: %s\n" #: app/flatpak-builtins-repair.c:327 msgid "- Repair a flatpak installation" @@ -2800,62 +2834,62 @@ msgstr "- Een Flatpak-installatie herstellen" #: app/flatpak-builtins-repair.c:406 #, c-format msgid "Removing non-deployed ref %s…\n" -msgstr "" +msgstr "Niet-uitgerolde ref %s wordt verwijderd…\n" #: app/flatpak-builtins-repair.c:411 #, c-format msgid "Skipping non-deployed ref %s…\n" -msgstr "" +msgstr "Niet-uitgerolde ref %s wordt overgeslagen…\n" #: app/flatpak-builtins-repair.c:429 #, c-format msgid "[%d/%d] Verifying %s…\n" -msgstr "" +msgstr "[%d/%d] %s verifieren…\n" #: app/flatpak-builtins-repair.c:435 #, c-format msgid "Dry run: " -msgstr "" +msgstr "Dry-run: " #: app/flatpak-builtins-repair.c:440 #, c-format msgid "Deleting ref %s due to missing objects\n" -msgstr "" +msgstr "Ref %s wordt verwijderd vanwege ontbrekende objecten\n" #: app/flatpak-builtins-repair.c:444 #, c-format msgid "Deleting ref %s due to invalid objects\n" -msgstr "" +msgstr "Ref %s wordt verwijderd vanwege ongeldige objecten\n" #: app/flatpak-builtins-repair.c:448 #, c-format msgid "Deleting ref %s due to %d\n" -msgstr "" +msgstr "Ref %s wordt verwijderd vanwege %d\n" #: app/flatpak-builtins-repair.c:464 #, c-format msgid "Checking remotes...\n" -msgstr "" +msgstr "Remotes controleren…\n" #: app/flatpak-builtins-repair.c:482 #, c-format msgid "Remote %s for ref %s is missing\n" -msgstr "" +msgstr "Remote %s voor ref %s ontbreekt\n" #: app/flatpak-builtins-repair.c:484 #, c-format msgid "Remote %s for ref %s is disabled\n" -msgstr "" +msgstr "Remote %s voor ref %s is uitgeschakeld\n" #: app/flatpak-builtins-repair.c:490 #, c-format msgid "Pruning objects\n" -msgstr "" +msgstr "Objecten opschonen\n" #: app/flatpak-builtins-repair.c:498 #, c-format msgid "Erasing .removed\n" -msgstr "" +msgstr ".removed verwijderen\n" #: app/flatpak-builtins-repair.c:523 #, c-format @@ -2865,27 +2899,27 @@ msgstr "Refs herinstalleren\n" #: app/flatpak-builtins-repair.c:525 #, c-format msgid "Reinstalling removed refs\n" -msgstr "" +msgstr "Verwijderde refs herinstalleren\n" #: app/flatpak-builtins-repair.c:550 #, c-format msgid "While removing appstream for %s: " -msgstr "" +msgstr "Tijdens het verwijderen van de appstream voor %s: " #: app/flatpak-builtins-repair.c:557 #, c-format msgid "While deploying appstream for %s: " -msgstr "" +msgstr "Tijdens het uitrollen van de appstream voor %s: " #: app/flatpak-builtins-repo.c:105 #, c-format msgid "Repo mode: %s\n" -msgstr "" +msgstr "Bronmodus: %s\n" #: app/flatpak-builtins-repo.c:112 #, c-format msgid "Indexed summaries: %s\n" -msgstr "" +msgstr "Geïndexeerde samenvattingen: %s\n" #: app/flatpak-builtins-repo.c:112 app/flatpak-builtins-repo.c:138 #: app/flatpak-builtins-repo.c:171 @@ -2999,27 +3033,27 @@ msgstr "Geschiedenislengte" #: app/flatpak-builtins-repo.c:709 msgid "Print general information about the repository" -msgstr "" +msgstr "Algemene informatie tonen over de bron" #: app/flatpak-builtins-repo.c:710 msgid "List the branches in the repository" -msgstr "" +msgstr "Branches in de bron tonen" #: app/flatpak-builtins-repo.c:711 msgid "Print metadata for a branch" -msgstr "" +msgstr "Metadata van een branch tonen" #: app/flatpak-builtins-repo.c:712 msgid "Show commits for a branch" -msgstr "" +msgstr "Commits van een branch tonen" #: app/flatpak-builtins-repo.c:713 msgid "Print information about the repo subsets" -msgstr "" +msgstr "Informatie tonen over de bron-subsets" #: app/flatpak-builtins-repo.c:714 msgid "Limit information to subsets with this prefix" -msgstr "" +msgstr "Informatie tot subsets met deze prefix limiteren" #: app/flatpak-builtins-repo.c:729 msgid "LOCATION - Repository maintenance" @@ -3060,71 +3094,73 @@ msgstr "Aanroepen van toegankelijkheidsbus niet omleiden" #: app/flatpak-builtins-run.c:77 msgid "Proxy accessibility bus calls (default except when sandboxed)" msgstr "" +"Aanroepen naar toegankelijkheidsbus proxyen (standaard, behalve wanneer " +"gesandboxed)" #: app/flatpak-builtins-run.c:78 msgid "Don't proxy session bus calls" -msgstr "" +msgstr "Sessiebusaanroepen niet proxyen" #: app/flatpak-builtins-run.c:79 msgid "Proxy session bus calls (default except when sandboxed)" -msgstr "" +msgstr "Sessiebusaanroepen proxyen (standaard, behalve wanneer gesandboxed)" #: app/flatpak-builtins-run.c:80 msgid "Don't start portals" -msgstr "" +msgstr "Geen portalen starten" #: app/flatpak-builtins-run.c:81 msgid "Enable file forwarding" -msgstr "" +msgstr "Bestandsdoorschakeling inschakelen" #: app/flatpak-builtins-run.c:82 msgid "Run specified commit" -msgstr "" +msgstr "Opgegeven commit uitvoeren" #: app/flatpak-builtins-run.c:83 msgid "Use specified runtime commit" -msgstr "" +msgstr "Opgegeven runtime-commit gebruiken" #: app/flatpak-builtins-run.c:84 msgid "Run completely sandboxed" -msgstr "" +msgstr "Compleet gesandboxed uitvoeren" #: app/flatpak-builtins-run.c:86 msgid "Use PID as parent pid for sharing namespaces" -msgstr "" +msgstr "PID als bovenliggende PID gebruiken voor het delen van namespaces" #: app/flatpak-builtins-run.c:87 msgid "Make processes visible in parent namespace" -msgstr "" +msgstr "Maak processen zichtbaar in bovenliggende namespace" #: app/flatpak-builtins-run.c:88 msgid "Share process ID namespace with parent" -msgstr "" +msgstr "Deel proces-ID-namespace met bovenliggende" #: app/flatpak-builtins-run.c:89 msgid "Write the instance ID to the given file descriptor" -msgstr "" +msgstr "Schrijf instantie-ID weg naar de opgegeven bestanddescriptor" #: app/flatpak-builtins-run.c:90 msgid "Use PATH instead of the app's /app" -msgstr "" +msgstr "Gebruik PAD in plaats van de /app van de applicatie" #: app/flatpak-builtins-run.c:91 msgid "Use PATH instead of the runtime's /usr" -msgstr "" +msgstr "Gebruik PAD in plaats van de /usr van de runtime" #: app/flatpak-builtins-run.c:117 msgid "APP [ARGUMENT…] - Run an app" -msgstr "" +msgstr "APP [ARGUMENT…] - Voer een app uit" #: app/flatpak-builtins-run.c:268 #, c-format msgid "runtime/%s/%s/%s not installed" -msgstr "" +msgstr "runtime/%s/%s/%s is niet geïnstalleerd" #: app/flatpak-builtins-search.c:36 msgid "Arch to search for" -msgstr "" +msgstr "Arch om voor te zoeken" #: app/flatpak-builtins-search.c:47 msgid "Remotes" @@ -3136,11 +3172,11 @@ msgstr "De remotes tonen" #: app/flatpak-builtins-search.c:242 msgid "TEXT - Search remote apps/runtimes for text" -msgstr "" +msgstr "TEKST - Zoek in remote apps/runtimes voor tekst" #: app/flatpak-builtins-search.c:253 msgid "TEXT must be specified" -msgstr "" +msgstr "TEKST moet worden opgegeven" #: app/flatpak-builtins-search.c:336 msgid "No matches found" @@ -3148,15 +3184,15 @@ msgstr "Geen overeenkomsten gevonden" #: app/flatpak-builtins-uninstall.c:54 msgid "Arch to uninstall" -msgstr "" +msgstr "Arch om te deïnstalleren" #: app/flatpak-builtins-uninstall.c:55 msgid "Keep ref in local repository" -msgstr "" +msgstr "Ref in lokale bron behouden" #: app/flatpak-builtins-uninstall.c:56 msgid "Don't uninstall related refs" -msgstr "" +msgstr "Gerelateerde refs niet deïnstalleren" #: app/flatpak-builtins-uninstall.c:57 msgid "Remove files even if running" @@ -3182,12 +3218,13 @@ msgstr "Gegevens voor %s verwijderen?" #: app/flatpak-builtins-uninstall.c:220 #, c-format msgid "Info: applications using the extension %s%s%s branch %s%s%s:\n" -msgstr "" +msgstr "Info: applicaties die extensie %s%s%s, branch %s%s%s gebruiken:\n" #: app/flatpak-builtins-uninstall.c:223 #, c-format msgid "Info: applications using the runtime %s%s%s branch %s%s%s:\n" msgstr "" +"Info: applicaties die de runtime %s%s%s, met branch %s%s%s gebruiken:\n" #: app/flatpak-builtins-uninstall.c:238 msgid "Really remove?" @@ -3195,19 +3232,19 @@ msgstr "Echt verwijderen?" #: app/flatpak-builtins-uninstall.c:255 msgid "[REF…] - Uninstall applications or runtimes" -msgstr "" +msgstr "[REF…] - Applicates of runtimes deïnstalleren" #: app/flatpak-builtins-uninstall.c:264 msgid "Must specify at least one REF, --unused, --all or --delete-data" -msgstr "" +msgstr "Er moet minimaal één REF, of --unused, --all of --delete-data, worden opgeven" #: app/flatpak-builtins-uninstall.c:267 msgid "Must not specify REFs when using --all" -msgstr "" +msgstr "Er mogen geen REFs worden opgeven in combinatie met --all" #: app/flatpak-builtins-uninstall.c:270 msgid "Must not specify REFs when using --unused" -msgstr "" +msgstr "Er mogen geen REFs worden opgegeven in combinatie met --unused" #: app/flatpak-builtins-uninstall.c:336 #, c-format @@ -3216,6 +3253,9 @@ msgid "" "These runtimes in installation '%s' are pinned and won't be removed; see " "flatpak-pin(1):\n" msgstr "" +"\n" +"Deze runtimes in installatie '%s' zijn gepind en zullen niet worden " +"verwijderd; zie flatpak-pin(1):\n" #: app/flatpak-builtins-uninstall.c:370 #, c-format @@ -3253,15 +3293,15 @@ msgstr "Architectuur om voor bij te werken" #: app/flatpak-builtins-update.c:57 msgid "Commit to deploy" -msgstr "" +msgstr "Commit om uit te rollen" #: app/flatpak-builtins-update.c:58 msgid "Remove old files even if running" -msgstr "" +msgstr "Oude bestanden verwijderen, zelfs als het programma wordt uitgevoerd" #: app/flatpak-builtins-update.c:59 msgid "Don't pull, only update from local cache" -msgstr "" +msgstr "Niet ophalen, aleen bijwerken vanaf lokale cache" #: app/flatpak-builtins-update.c:61 msgid "Don't update related refs" @@ -3281,7 +3321,7 @@ msgstr "[REF…] - Toepassingen of runtimes bijwerken" #: app/flatpak-builtins-update.c:121 msgid "With --commit, only one REF may be specified" -msgstr "" +msgstr "In combinatie met --commit mag er slechts één REF worden opgegeven" #: app/flatpak-builtins-update.c:162 #, c-format @@ -3314,6 +3354,8 @@ msgstr "Welke wilt u gebruiken (0 om af te breken)?" #, c-format msgid "No remote chosen to resolve ‘%s’ which exists in multiple installations" msgstr "" +"Geen remote gekozen om ‘%s’, welke in meerdere installaties voorkomt, mee op " +"te lossen" #: app/flatpak-builtins-utils.c:354 #, c-format @@ -3321,11 +3363,13 @@ msgid "" "Remote \"%s\" not found\n" "Hint: Use flatpak remote-add to add a remote" msgstr "" +"Remote \"%s\" niet gevonden\n" +"Hint: Gebruik flatpak remote-add om een remote toe te voegen" #: app/flatpak-builtins-utils.c:360 #, c-format msgid "Remote \"%s\" not found in the %s installation" -msgstr "" +msgstr "Remote \"%s\" niet gevonden in de %s-installatie" #. default to yes on Enter #: app/flatpak-builtins-utils.c:422 @@ -3334,53 +3378,55 @@ msgid "" "Found ref ‘%s’ in remote ‘%s’ (%s).\n" "Use this ref?" msgstr "" +"Ref ‘%s’ in remote ‘%s’ (%s) gevonden.\n" +"Deze ref gebruiken?" #: app/flatpak-builtins-utils.c:426 app/flatpak-builtins-utils.c:436 #: app/flatpak-builtins-utils.c:510 app/flatpak-builtins-utils.c:531 #, c-format msgid "No ref chosen to resolve matches for ‘%s’" -msgstr "" +msgstr "Geen ref gekozen om overeenkomsten voor ‘%s’ mee op te lossen" #: app/flatpak-builtins-utils.c:432 #, c-format msgid "Similar refs found for ‘%s’ in remote ‘%s’ (%s):" -msgstr "" +msgstr "Vergelijkbare refs gevonden voor ‘%s’ in remote ‘%s’" #. default to yes on Enter #: app/flatpak-builtins-utils.c:506 #, c-format msgid "Found installed ref ‘%s’ (%s). Is this correct?" -msgstr "" +msgstr "Geïnstalleerde ref ‘%s’ (%s) gevonden. Is dit correct?" #: app/flatpak-builtins-utils.c:522 #, c-format msgid "All of the above" -msgstr "Alle bovenstaande" +msgstr "Alle bovenstaanden" #: app/flatpak-builtins-utils.c:523 #, c-format msgid "Similar installed refs found for ‘%s’:" -msgstr "" +msgstr "Vergelijkbare geïnstalleerde refs gevonden voor ‘%s’:" #: app/flatpak-builtins-utils.c:581 #, c-format msgid "Remotes found with refs similar to ‘%s’:" -msgstr "Remotes gevonden met refs gelijkaardig aan ‘%s’:" +msgstr "Remotes gevonden met refs vergelijkbaar met ‘%s’:" #: app/flatpak-builtins-utils.c:584 #, c-format msgid "No remote chosen to resolve matches for ‘%s’" -msgstr "" +msgstr "Geen remote gekozen om overeenkomsten voor ‘%s’ mee op te lossen" #: app/flatpak-builtins-utils.c:680 app/flatpak-builtins-utils.c:683 #, c-format msgid "Updating appstream data for user remote %s" -msgstr "" +msgstr "Appstream-data bijwerken voor gebruikersremote %s" #: app/flatpak-builtins-utils.c:690 app/flatpak-builtins-utils.c:693 #, c-format msgid "Updating appstream data for remote %s" -msgstr "" +msgstr "Appstream-data bijwerken voor remote %s" #: app/flatpak-builtins-utils.c:701 app/flatpak-builtins-utils.c:703 msgid "Error updating" @@ -3464,6 +3510,9 @@ msgid "" "applications.\n" "Should the remote be kept for future installations?" msgstr "" +"De remote '%s', waarnaar gerefereerd wordt door '%s' op locatie %s, bevat " +"aanvullende applicaties.\n" +"Moet deze remote behouden worden voor toekomstige installaties?" #. default to yes on Enter #: app/flatpak-cli-transaction.c:147 @@ -3473,6 +3522,9 @@ msgid "" " %s\n" "Configure this as new remote '%s'" msgstr "" +"De applicatie %s is afhankelijk van runtimes van:\n" +" %s\n" +"Deze remote als nieuwe remote '%s' configureren?" #: app/flatpak-cli-transaction.c:411 msgid "Installing…" @@ -3600,6 +3652,9 @@ msgid "" "Info: (pinned) runtime %s%s%s branch %s%s%s is end-of-life, in favor of " "%s%s%s branch %s%s%s\n" msgstr "" +"\n" +"Info: (gepinde) runtime %s%s%s branch %s%s%s is end-of-life en is vervangen " +"door %s%s%s branch %s%s%s\n" #: app/flatpak-cli-transaction.c:762 #, c-format @@ -3608,6 +3663,9 @@ msgid "" "Info: runtime %s%s%s branch %s%s%s is end-of-life, in favor of %s%s%s branch " "%s%s%s\n" msgstr "" +"\n" +"Info: runtime %s%s%s branch %s%s%s is end-of-life en is vervangen door " +"%s%s%s branch %s%s%s\n" #: app/flatpak-cli-transaction.c:765 #, c-format @@ -3616,6 +3674,9 @@ msgid "" "Info: app %s%s%s branch %s%s%s is end-of-life, in favor of %s%s%s branch " "%s%s%s\n" msgstr "" +"\n" +"Info: app %s%s%s branch %s%s%s is end-of-life en is vervangen door %s%s%s " +"branch %s%s%s\n" #. Only runtimes can be pinned #: app/flatpak-cli-transaction.c:777 @@ -3624,6 +3685,8 @@ msgid "" "\n" "Info: (pinned) runtime %s%s%s branch %s%s%s is end-of-life, with reason:\n" msgstr "" +"\n" +"Info: (gepinde) runtime %s%s%s branch %s%s%s is end-of-life, met reden:\n" #: app/flatpak-cli-transaction.c:783 #, c-format @@ -3631,6 +3694,8 @@ msgid "" "\n" "Info: runtime %s%s%s branch %s%s%s is end-of-life, with reason:\n" msgstr "" +"\n" +"Info: runtime %s%s%s branch %s%s%s is end-of-life, met reden:\n" #: app/flatpak-cli-transaction.c:786 #, c-format @@ -3638,16 +3703,18 @@ msgid "" "\n" "Info: app %s%s%s branch %s%s%s is end-of-life, with reason:\n" msgstr "" +"\n" +"Info: app %s%s%s branch %s%s%s is end-of-life, met reden:\n" #: app/flatpak-cli-transaction.c:960 #, c-format msgid "Info: applications using this extension:\n" -msgstr "" +msgstr "Info: applicaties die deze extensie gebruiken:\n" #: app/flatpak-cli-transaction.c:962 #, c-format msgid "Info: applications using this runtime:\n" -msgstr "" +msgstr "Info: applicaties die deze runtime gebruiken:\n" #: app/flatpak-cli-transaction.c:981 msgid "Replace?" @@ -3954,7 +4021,7 @@ msgstr "Nieuwe commit aanmaken gebaseerd op bestaande ref" #: app/flatpak-main.c:144 msgid "Show information about a repo" -msgstr "Informatie over een repo tonen" +msgstr "Informatie over een pakketbron tonen" #: app/flatpak-main.c:161 msgid "Show debug information, -vv for more detail" @@ -3994,15 +4061,15 @@ msgstr "Enkel de systeeminstallatie toevoegen met --print-updated-env" #: app/flatpak-main.c:179 msgid "Work on the user installation" -msgstr "" +msgstr "Werken met de gebruikersinstallatie" #: app/flatpak-main.c:180 msgid "Work on the system-wide installation (default)" -msgstr "" +msgstr "Werken met de systeembrede installatie (standaard)" #: app/flatpak-main.c:181 msgid "Work on a non-default system-wide installation" -msgstr "" +msgstr "Werken met een niet-standaard systeembrede installatie" #: app/flatpak-main.c:211 msgid "Builtin Commands:" @@ -4015,6 +4082,10 @@ msgid "" "XDG_DATA_DIRS environment variable, so applications installed by Flatpak may " "not appear on your desktop until the session is restarted." msgstr "" +"Houd er rekening mee dat de mappen %s niet in het zoekpad staan dat is " +"ingesteld via de omgevingsvariabele XDG_DATA_DIRS. Hierdoor verschijnen door " +"Flatpak geïnstalleerde applicaties mogelijk niet op je bureaublad totdat je " +"de sessie opnieuw start." #: app/flatpak-main.c:311 #, c-format @@ -4023,17 +4094,26 @@ msgid "" "XDG_DATA_DIRS environment variable, so applications installed by Flatpak may " "not appear on your desktop until the session is restarted." msgstr "" +"Houd er rekening mee dat de map %s niet in het zoekpad staat dat is " +"ingesteld via de omgevingsvariabele XDG_DATA_DIRS. Hierdoor verschijnen door " +"Flatpak geïnstalleerde applicaties mogelijk niet op je bureaublad totdat je " +"de sessie opnieuw start." #: app/flatpak-main.c:380 msgid "" "Refusing to operate under sudo with --user. Omit sudo to operate on the user " "installation, or use a root shell to operate on the root user's installation." msgstr "" +"--user kan niet worden gebruikt met sudo. Laat sudo weg om met de " +"gebruikersinstallatie te werken, of gebruik een root-shell voor die van de " +"rootgebruiker." #: app/flatpak-main.c:452 msgid "" "Multiple installations specified for a command that works on one installation" msgstr "" +"Meerdere installaties opgegeven voor een commando dat werkt met één " +"installatie" #: app/flatpak-main.c:503 app/flatpak-main.c:690 #, c-format @@ -4196,6 +4276,8 @@ msgstr "Bestandssysteemlocatie ‘%s’ bevat ‘..’" msgid "" "--filesystem=/ is not available, use --filesystem=host for a similar result" msgstr "" +"--filesystem=/ is niet beschikbaar; gebruik --filesystem=host voor een " +"vergelijkbaar resultaat" #: common/flatpak-context.c:1036 #, c-format @@ -4203,6 +4285,8 @@ msgid "" "Unknown filesystem location %s, valid locations are: host, host-os, host-" "etc, home, xdg-*[/…], ~/dir, /dir" msgstr "" +"Onbekende bestandssysteemlocatie %s; geldige locaties zijn: host, host-os, " +"host-etc, home, xdg-*[/…], ~/dir, /dir" #: common/flatpak-context.c:1324 #, c-format @@ -4212,27 +4296,31 @@ msgstr "Ongeldig omgevingsformaat %s" #: common/flatpak-context.c:1412 #, c-format msgid "Environment variable name must not contain '=': %s" -msgstr "" +msgstr "Naam van omgevingsvariabele mag geen '=' bevatten: %s" #: common/flatpak-context.c:1540 common/flatpak-context.c:1548 #, c-format msgid "--add-policy arguments must be in the form SUBSYSTEM.KEY=VALUE" msgstr "" +"Argumenten voor --add-policy moeten in het formaat " +"SUBSYSTEEM.SLEUTEL=WAARDE zijn" #: common/flatpak-context.c:1555 #, c-format msgid "--add-policy values can't start with \"!\"" -msgstr "" +msgstr "Waarden voor --add-policy kunnen niet beginnen met \"!\"" #: common/flatpak-context.c:1580 common/flatpak-context.c:1588 #, c-format msgid "--remove-policy arguments must be in the form SUBSYSTEM.KEY=VALUE" msgstr "" +"Argumenten voor --remove-policy moeten in het formaat " +"SUBSYSTEEM.SLEUTEL=WAARDE zijn" #: common/flatpak-context.c:1595 #, c-format msgid "--remove-policy values can't start with \"!\"" -msgstr "" +msgstr "Waarden voor --remove-policy kunnen niet beginnen met \"!\"" #: common/flatpak-context.c:1670 msgid "Share with host" @@ -4308,7 +4396,7 @@ msgstr "VAR=WAARDE" #: common/flatpak-context.c:1681 msgid "Read environment variables in env -0 format from FD" -msgstr "" +msgstr "Lees omgevingsvariabelen in ‘env -0’-formaat vanaf FD" #: common/flatpak-context.c:1681 msgid "FD" @@ -4324,7 +4412,7 @@ msgstr "VAR" #: common/flatpak-context.c:1683 msgid "Allow app to own name on the session bus" -msgstr "" +msgstr "Sta app toe naam te bezitten op de sessiebus" #: common/flatpak-context.c:1683 common/flatpak-context.c:1684 #: common/flatpak-context.c:1685 common/flatpak-context.c:1686 @@ -4335,31 +4423,31 @@ msgstr "DBUS-NAAM" #: common/flatpak-context.c:1684 msgid "Allow app to talk to name on the session bus" -msgstr "" +msgstr "Sta app toe om met naam te communiceren op de sessiebus" #: common/flatpak-context.c:1685 msgid "Don't allow app to talk to name on the session bus" -msgstr "" +msgstr "Sta app niet toe om met naam te communiceren op de sessiebus" #: common/flatpak-context.c:1686 msgid "Allow app to own name on the system bus" -msgstr "" +msgstr "Sta app toe om naam te bezitten op de systeembus" #: common/flatpak-context.c:1687 msgid "Allow app to talk to name on the system bus" -msgstr "" +msgstr "Sta app toe om te communiceren met naam op de systeembus" #: common/flatpak-context.c:1688 msgid "Don't allow app to talk to name on the system bus" -msgstr "" +msgstr "Sta app niet toe om te communiceren met naam op de systeembus" #: common/flatpak-context.c:1689 msgid "Allow app to own name on the a11y bus" -msgstr "" +msgstr "Sta app toe om naam te bezitten op de toegankelijkheidsbus" #: common/flatpak-context.c:1690 msgid "Add generic policy option" -msgstr "" +msgstr "Voeg generieke beleidoptie toe" #: common/flatpak-context.c:1690 common/flatpak-context.c:1691 msgid "SUBSYSTEM.KEY=VALUE" @@ -4367,31 +4455,31 @@ msgstr "SUBSYSTEEM.SLEUTEL=WAARDE" #: common/flatpak-context.c:1691 msgid "Remove generic policy option" -msgstr "Optie voor algemeen beieid verwijderen" +msgstr "Algemeen beleidoptie verwijderen" #: common/flatpak-context.c:1692 msgid "Add USB device to enumerables" -msgstr "" +msgstr "Voeg USB-apparaat toe aan lijst van enumereerbare USB-apparaten" #: common/flatpak-context.c:1692 common/flatpak-context.c:1693 msgid "VENDOR_ID:PRODUCT_ID" -msgstr "" +msgstr "LEVERANCIER_ID:PRODUCT_ID" #: common/flatpak-context.c:1693 msgid "Add USB device to hidden list" -msgstr "" +msgstr "Voeg USB-apparaat toe aan lijst met verborgen apparaten" #: common/flatpak-context.c:1694 msgid "A list of USB devices that are enumerable" -msgstr "" +msgstr "Lijst van enumereerbare USB-apparaten" #: common/flatpak-context.c:1694 msgid "LIST" -msgstr "" +msgstr "LIJST" #: common/flatpak-context.c:1695 msgid "File containing a list of USB devices to make enumerable" -msgstr "" +msgstr "Bestand met een lijst van USB-apparaten om enumereerbaar te maken" #: common/flatpak-context.c:1695 common/flatpak-context.c:1696 msgid "FILENAME" @@ -4404,17 +4492,17 @@ msgstr "Subpad van persoonlijke map behouden" #. This is not needed/used anymore, so hidden, but we accept it for backwards compat #: common/flatpak-context.c:1698 msgid "Don't require a running session (no cgroups creation)" -msgstr "" +msgstr "Vereis geen actieve sessie (cgroups worden niet aangemaakt)" #: common/flatpak-context.c:2817 #, c-format msgid "Not replacing \"%s\" with tmpfs: %s" -msgstr "" +msgstr "Kan ‘%s’ niet vervangen door tmpfs: %s" #: common/flatpak-context.c:2825 #, c-format msgid "Not sharing \"%s\" with sandbox: %s" -msgstr "" +msgstr "Kan ‘%s’ niet delen met de sandbox: %s" #. Even if the error is one that we would normally silence, like #. * the path not existing, it seems reasonable to make more of a fuss @@ -4423,57 +4511,58 @@ msgstr "" #: common/flatpak-context.c:2921 #, c-format msgid "Not allowing home directory access: %s" -msgstr "" +msgstr "Geen toegang toegestaan tot thuismap: %s" #: common/flatpak-context.c:3150 #, c-format msgid "Unable to provide a temporary home directory in the sandbox: %s" -msgstr "" +msgstr "Kan geen tijdelijke thuismap bieden in de sandbox: %s" #: common/flatpak-dir.c:425 #, c-format msgid "Configured collection ID ‘%s’ not in summary file" -msgstr "" +msgstr "Ingestelde collectie-ID ‘%s’ komt niet voor in het samenvattingsbestand" #: common/flatpak-dir.c:563 #, c-format msgid "Unable to load summary from remote %s: %s" -msgstr "" +msgstr "Kan samenvatting van remote ‘%s’ niet laden: %s" #: common/flatpak-dir.c:712 common/flatpak-dir.c:784 #, c-format msgid "No such ref '%s' in remote %s" -msgstr "" +msgstr "Ref ‘%s’ bestaat niet in remote ‘%s’" +# Ik snap deze foutmelding niet helemaal, letterlijk vertaald -Sijmen #: common/flatpak-dir.c:769 common/flatpak-dir.c:906 common/flatpak-dir.c:935 #: common/flatpak-dir.c:947 #, c-format msgid "No entry for %s in remote %s summary flatpak cache" -msgstr "" +msgstr "Geen item voor ‘%s’ in externe %s samenvattingsflatpak-cache" #: common/flatpak-dir.c:924 #, c-format msgid "No summary or Flatpak cache available for remote %s" -msgstr "" +msgstr "Geen samenvattings- of flatpak-cache beschikbaar voor remote ‘%s’" #: common/flatpak-dir.c:952 #, c-format msgid "Missing xa.data in summary for remote %s" -msgstr "" +msgstr "xa.data ontbreekt in samenvatting van remote ‘%s’" #: common/flatpak-dir.c:958 common/flatpak-dir.c:1375 #, c-format msgid "Unsupported summary version %d for remote %s" -msgstr "" +msgstr "Niet-ondersteunde samenvattingsversie %d voor remote %s" #: common/flatpak-dir.c:1045 msgid "Remote OCI index has no registry uri" -msgstr "" +msgstr "OCI-index van remote heeft geen registry-uri" #: common/flatpak-dir.c:1114 #, c-format msgid "Couldn't find ref %s in remote %s" -msgstr "" +msgstr "Kon ref %s niet vinden in remote %s" #: common/flatpak-dir.c:1131 common/flatpak-dir.c:6044 #: common/flatpak-oci-registry.c:3493 common/flatpak-oci-registry.c:3498 @@ -4483,32 +4572,34 @@ msgstr "Image is geen manifest" #: common/flatpak-dir.c:1152 common/flatpak-dir.c:1225 #, c-format msgid "Commit has no requested ref ‘%s’ in ref binding metadata" -msgstr "" +msgstr "Commit heeft geen gevraagde ref ‘%s’ in ref-binding-metadata" #: common/flatpak-dir.c:1256 #, c-format msgid "Configured collection ID ‘%s’ not in binding metadata" -msgstr "" +msgstr "Ingestelde collectie-ID ‘%s’ niet in binding-metadata" #: common/flatpak-dir.c:1292 common/flatpak-dir.c:5032 #: common/flatpak-dir.c:5953 common/flatpak-dir.c:6021 #, c-format msgid "Couldn't find latest checksum for ref %s in remote %s" msgstr "" +"Kon nieuwste controlesom voor ref %s niet vinden in remote %s" +# Ik snap deze foutmelding niet helemaal, letterlijk vertaald -Sijmen #: common/flatpak-dir.c:1345 common/flatpak-dir.c:1381 #, c-format msgid "No entry for %s in remote %s summary flatpak sparse cache" -msgstr "" +msgstr "Geen item voor ‘%s’ in externe %s samenvattingsflatpak-sparse-cache" #: common/flatpak-dir.c:1970 #, c-format msgid "Commit metadata for %s not matching expected metadata" -msgstr "" +msgstr "Commit-metadata voor %s komt niet overeen met de verwachte metadata" #: common/flatpak-dir.c:2235 msgid "Unable to connect to system bus" -msgstr "Kon niet verbinden met systembus" +msgstr "Kon niet verbinden met systeembus" #: common/flatpak-dir.c:2830 msgid "User installation" @@ -4547,89 +4638,93 @@ msgstr "De configuratiesleutel %s is niet ingesteld" #: common/flatpak-dir.c:4528 #, c-format msgid "No current %s pattern matching %s" -msgstr "" +msgstr "Geen huidige %s-patroon dat overeenkomt met %s" #: common/flatpak-dir.c:4810 msgid "No appstream commit to deploy" -msgstr "" +msgstr "Geen appstream-commit om uit te rollen" #: common/flatpak-dir.c:5328 common/flatpak-dir.c:6378 #: common/flatpak-dir.c:9971 common/flatpak-dir.c:10677 msgid "Can't pull from untrusted non-gpg verified remote" -msgstr "" +msgstr "Kan niet van onvertrouwde, niet-gpg-geverifieerde remote" #: common/flatpak-dir.c:5740 common/flatpak-dir.c:5777 msgid "Extra data not supported for non-gpg-verified local system installs" msgstr "" +"Extra-data niet ondersteund voor niet-gpg-geverifieerde lokale " +"systeeminstallaties" #: common/flatpak-dir.c:5806 #, c-format msgid "Invalid checksum for extra data uri %s" -msgstr "" +msgstr "Ongeldige controlesom voor extra-data-uri %s" #: common/flatpak-dir.c:5811 #, c-format msgid "Empty name for extra data uri %s" -msgstr "" +msgstr "Lege naam voor extra-data-uri %s" #: common/flatpak-dir.c:5818 #, c-format msgid "Unsupported extra data uri %s" -msgstr "" +msgstr "Niet-ondersteunde extra-data-uri %s" #: common/flatpak-dir.c:5832 #, c-format msgid "Failed to load local extra-data %s: %s" -msgstr "" +msgstr "Kon lokale extra-data %s niet laden: %s" #: common/flatpak-dir.c:5835 #, c-format msgid "Wrong size for extra-data %s" -msgstr "" +msgstr "Onjuiste grootte voor extra-data %s" #: common/flatpak-dir.c:5850 #, c-format msgid "While downloading %s: " -msgstr "" +msgstr "Tijdens het downloaden van %s: " #: common/flatpak-dir.c:5857 #, c-format msgid "Wrong size for extra data %s" -msgstr "" +msgstr "Onjuiste grootte voor extra-data %s" #: common/flatpak-dir.c:5866 #, c-format msgid "Invalid checksum for extra data %s" -msgstr "" +msgstr "Ongeldige controlesom voor extra-data %s" #: common/flatpak-dir.c:5961 common/flatpak-dir.c:8816 #: common/flatpak-dir.c:10555 #, c-format msgid "%s commit %s already installed" -msgstr "" +msgstr "%s commit %s is al geïnstalleerd" #: common/flatpak-dir.c:6208 common/flatpak-dir.c:6461 #, c-format msgid "While pulling %s from remote %s: " -msgstr "" +msgstr "Tijdens het ophalen van %s van remote %s: " #: common/flatpak-dir.c:6402 common/flatpak-repo-utils.c:3906 msgid "GPG signatures found, but none are in trusted keyring" msgstr "" +"GPG-handtekeningen gevonden, maar geen daarvan staat in de vertrouwde " +"sleutelbos" #: common/flatpak-dir.c:6419 #, c-format msgid "Commit for ‘%s’ has no ref binding" -msgstr "" +msgstr "Commit voor ‘%s’ heeft geen ref-binding" #: common/flatpak-dir.c:6424 #, c-format msgid "Commit for ‘%s’ is not in expected bound refs: %s" -msgstr "" +msgstr "Commit voor ‘%s’ staat niet in verwachte bound-refs: %s" #: common/flatpak-dir.c:6600 msgid "Only applications can be made current" -msgstr "" +msgstr "Alleen applicaties kunnen als huidig gemarkeerd worden" #: common/flatpak-dir.c:7304 msgid "Not enough memory" @@ -4655,38 +4750,38 @@ msgstr "D-Bus-servicebestand ‘%s’ heeft een ongeldige naam" #: common/flatpak-dir.c:7759 #, c-format msgid "Invalid Exec argument %s" -msgstr "" +msgstr "Ongeldig Exec-argument %s" #: common/flatpak-dir.c:8226 msgid "While getting detached metadata: " -msgstr "" +msgstr "Tijdens het ophalen van losgekoppelde metadata: " #: common/flatpak-dir.c:8231 common/flatpak-dir.c:8236 #: common/flatpak-dir.c:8240 msgid "Extra data missing in detached metadata" -msgstr "" +msgstr "Extra-data ontbreekt in losgekoppelde metadata" #: common/flatpak-dir.c:8244 msgid "While creating extradir: " -msgstr "" +msgstr "Tijdens het aanmaken van extradir: " #: common/flatpak-dir.c:8265 common/flatpak-dir.c:8298 msgid "Invalid checksum for extra data" -msgstr "" +msgstr "Ongeldige controlesom voor extra-data" #: common/flatpak-dir.c:8294 msgid "Wrong size for extra data" -msgstr "" +msgstr "Incorrecte grootte voor extra-data" #: common/flatpak-dir.c:8307 #, c-format msgid "While writing extra data file '%s': " -msgstr "" +msgstr "Tijdens het wegschrijven van extra-data-bestand ‘%s’: " #: common/flatpak-dir.c:8315 #, c-format msgid "Extra data %s missing in detached metadata" -msgstr "" +msgstr "Extra-data %s ontbreekt in losgekoppelde metadata" #: common/flatpak-dir.c:8413 #, fuzzy, c-format @@ -4696,18 +4791,20 @@ msgstr "Alternatief bestand voor metadata gebruiken" #: common/flatpak-dir.c:8526 #, c-format msgid "apply_extra script failed, exit status %d" -msgstr "" +msgstr "apply_extra-script is mislukt, afsluitstatus %d" #. Translators: The placeholder is for an app ref. #: common/flatpak-dir.c:8693 #, c-format msgid "Installing %s is not allowed by the policy set by your administrator" msgstr "" +"Het installeren van %s is niet toegestaan volgens het beleid dat door de " +"systeembeheerder is ingesteld" #: common/flatpak-dir.c:8792 #, c-format msgid "While trying to resolve ref %s: " -msgstr "" +msgstr "Bij het proberen op te lossen van ref %s: " #: common/flatpak-dir.c:8804 #, c-format @@ -4716,88 +4813,88 @@ msgstr "%s is niet beschikbaar" #: common/flatpak-dir.c:8823 msgid "Can't create deploy directory" -msgstr "" +msgstr "Kan geen lege uitrolmap aanmaken" #: common/flatpak-dir.c:8831 #, c-format msgid "Failed to read commit %s: " -msgstr "" +msgstr "Lezen van commit %s is mislukt: " #: common/flatpak-dir.c:8852 #, c-format msgid "While trying to checkout %s into %s: " -msgstr "" +msgstr "Tijdens het proberen uit te checken van %s naar %s: " #: common/flatpak-dir.c:8871 msgid "While trying to checkout metadata subpath: " -msgstr "" +msgstr "Tijdens het proberen uit te checken van het metadata-subpad: " #: common/flatpak-dir.c:8903 #, c-format msgid "While trying to checkout subpath ‘%s’: " -msgstr "" +msgstr "Tijdens het proberen uit te checken van subpad ‘%s’: " #: common/flatpak-dir.c:8913 msgid "While trying to remove existing extra dir: " -msgstr "" +msgstr "Tijdens het proberen te verwijderen van bestaande extra-map: " #: common/flatpak-dir.c:8924 msgid "While trying to apply extra data: " -msgstr "" +msgstr "Tijdens het proberen toe te passen van extra-data: " #: common/flatpak-dir.c:8951 #, c-format msgid "Invalid commit ref %s: " -msgstr "" +msgstr "Ongeldige commit-ref %s: " #: common/flatpak-dir.c:8959 common/flatpak-dir.c:8971 #, c-format msgid "Deployed ref %s does not match commit (%s)" -msgstr "" +msgstr "Uitgerolde ref %s komt niet overeen met commit (%s)" #: common/flatpak-dir.c:8965 #, c-format msgid "Deployed ref %s branch does not match commit (%s)" -msgstr "" +msgstr "Uitgerolde branch van ref %s komt niet overeen met commit (%s)" #: common/flatpak-dir.c:9226 common/flatpak-installation.c:1912 #, c-format msgid "%s branch %s already installed" -msgstr "" +msgstr "%s-branch %s is al geïnstalleerd" #: common/flatpak-dir.c:10075 #, c-format msgid "Could not unmount revokefs-fuse filesystem at %s: " -msgstr "" +msgstr "Kon revokefs-fuse-bestandssysteem op %s niet afkoppelen: " #: common/flatpak-dir.c:10362 #, c-format msgid "This version of %s is already installed" -msgstr "Deze versie van %s is reeds geïnstalleerd" +msgstr "Deze versie van %s is al geïnstalleerd" #: common/flatpak-dir.c:10369 #, c-format msgid "Can't change remote during bundle install" -msgstr "" +msgstr "Kan remote niet wijzigen tijdens bundelinstallatie" #: common/flatpak-dir.c:10630 msgid "Can't update to a specific commit without root permissions" -msgstr "" +msgstr "Kan niet bijewerken naar een specifieke commit zonder root-rechten" #: common/flatpak-dir.c:10910 #, c-format msgid "Can't remove %s, it is needed for: %s" -msgstr "" +msgstr "Kan %s niet verwijderen; het is nodig voor: %s" #: common/flatpak-dir.c:10966 common/flatpak-installation.c:2068 #, c-format msgid "%s branch %s is not installed" -msgstr "" +msgstr "%s-branch %s is niet geïnstalleerd" #: common/flatpak-dir.c:11219 #, c-format msgid "%s commit %s not installed" -msgstr "" +msgstr "%s-commit %s is niet geïnstalleerd" #: common/flatpak-dir.c:11555 #, c-format @@ -4816,22 +4913,23 @@ msgstr "Parsen van filter ‘%s’ mislukt" #: common/flatpak-dir.c:12017 msgid "Failed to write summary cache: " -msgstr "" +msgstr "Wegschrijven van samenvattingscache mislukt: " #: common/flatpak-dir.c:12036 #, c-format msgid "No oci summary cached for remote '%s'" -msgstr "" +msgstr "Geen oci-samenvatting gecachet voor remote ‘%s’" #: common/flatpak-dir.c:12261 #, c-format msgid "No cached summary for remote '%s'" -msgstr "" +msgstr "Geen gecachete samenvatting voor remote ‘%s’" #: common/flatpak-dir.c:12302 #, c-format msgid "Invalid checksum for indexed summary %s read from %s" msgstr "" +"Ongeldige controlesom voor de geïndexeerde samenvatting %s, gelezen vanaf %s" #: common/flatpak-dir.c:12375 #, c-format @@ -4839,16 +4937,21 @@ msgid "" "Remote listing for %s not available; server has no summary file. Check the " "URL passed to remote-add was valid." msgstr "" +"Remote listing voor %s niet beschikbaar; server heeft geen " +"samenvattingsbestand. Controleer of de URL die aan remote-add is meegegeven " +"geldig is." #: common/flatpak-dir.c:12752 #, c-format msgid "Invalid checksum for indexed summary %s for remote '%s'" msgstr "" +"Ongeldige controlesom voor geïndexeerde samenvatting %s voor remote ‘%s’" #: common/flatpak-dir.c:13375 #, c-format msgid "Multiple branches available for %s, you must specify one of: " msgstr "" +"Meerdere branches beschikbaar voor %s. Er moet er één opgegeven worden uit: " #: common/flatpak-dir.c:13441 #, c-format @@ -4858,17 +4961,17 @@ msgstr "Geen overeenkomsten met %s" #: common/flatpak-dir.c:13549 #, c-format msgid "Can't find ref %s%s%s%s%s" -msgstr "" +msgstr "Kan ref %s%s%s%s%s niet vinden" #: common/flatpak-dir.c:13592 #, c-format msgid "Error searching remote %s: %s" -msgstr "" +msgstr "Fout bij zoeken in remote %s: %s" #: common/flatpak-dir.c:13689 #, c-format msgid "Error searching local repository: %s" -msgstr "" +msgstr "Fout bij zoeken in lokale bron: %s" #: common/flatpak-dir.c:13826 #, c-format @@ -4917,7 +5020,7 @@ msgstr "Toepassing %s, branch %s is reeds geïnstalleerd" #: common/flatpak-dir.c:14914 #, c-format msgid "Can't remove remote '%s' with installed ref %s (at least)" -msgstr "" +msgstr "Kan remote ‘%s’ niet verwijderen met geïnstalleerde ref %s (o.a.)" #: common/flatpak-dir.c:15013 #, c-format @@ -4927,12 +5030,12 @@ msgstr "Ongeldig teken ‘/’ in remote-naam: %s" #: common/flatpak-dir.c:15019 #, c-format msgid "No configuration for remote %s specified" -msgstr "" +msgstr "Geen configuratie opgegeven voor remote %s" #: common/flatpak-dir.c:16516 #, c-format msgid "Skipping deletion of mirror ref (%s, %s)…\n" -msgstr "" +msgstr "Verwijderen van mirror-ref (%s, %s) wordt overgeslagen…\n" #: common/flatpak-exports.c:916 #, c-format @@ -4962,7 +5065,7 @@ msgstr "Kan bestandssysteeminformatie voor ‘%s’ niet verkrijgen: %s" #: common/flatpak-exports.c:965 #, c-format msgid "Ignoring blocking autofs path \"%s\"" -msgstr "" +msgstr "Blokkerend autofs-pad ‘%s’ wordt genegeerd" #: common/flatpak-exports.c:981 common/flatpak-exports.c:994 #: common/flatpak-exports.c:1007 @@ -5614,62 +5717,67 @@ msgstr "URI is niet absoluut, en er is geen basis-URI opgegeven" #: common/flatpak-usb.c:83 #, c-format msgid "USB device query 'all' must not have data" -msgstr "" +msgstr "USB-apparaatquery ‘all’ mag geen gegevens bevatten" #: common/flatpak-usb.c:102 #, c-format msgid "USB query rule 'cls' must be in the form CLASS:SUBCLASS or CLASS:*" msgstr "" +"USB-queryregel ‘cls’ moet in het formaat KLASSE:SUBKLASSE of KLASSE:* zijn" #: common/flatpak-usb.c:111 #, fuzzy, c-format msgid "Invalid USB class" -msgstr "Ongeldige ID %s: %s" +msgstr "Ongeldige USB-klasse" #: common/flatpak-usb.c:125 #, c-format msgid "Invalid USB subclass" -msgstr "" +msgstr "Ongeldige USB-subklasse" #: common/flatpak-usb.c:141 common/flatpak-usb.c:148 #, c-format msgid "USB query rule 'dev' must have a valid 4-digit hexadecimal product id" msgstr "" +"USB-queryregel ‘dev’ moet een geldig 4-cijferig hexadecimaal product-id " +"bevatten" #: common/flatpak-usb.c:164 common/flatpak-usb.c:171 #, c-format msgid "USB query rule 'vnd' must have a valid 4-digit hexadecimal vendor id" msgstr "" +"USB-queryregel ‘vnd’ moet een geldig 4-cijferig hexadecimaal levaranciers-id " +"bevatten" #: common/flatpak-usb.c:205 #, c-format msgid "USB device queries must be in the form TYPE:DATA" -msgstr "" +msgstr "USB-apparaatquery's moeten in het formaat TYPE:GEGEVENS zijn" #: common/flatpak-usb.c:225 #, c-format msgid "Unknown USB query rule %s" -msgstr "" +msgstr "Onbekende USB-queryregel %s" #: common/flatpak-usb.c:248 #, c-format msgid "Empty USB query" -msgstr "" +msgstr "Lege USB-query" #: common/flatpak-usb.c:274 #, c-format msgid "Multiple USB query rules of the same type is not supported" -msgstr "" +msgstr "Meerdere USB-queryregels van hetzelfde type worden niet ondersteund" #: common/flatpak-usb.c:283 #, c-format msgid "'all' must not contain extra query rules" -msgstr "" +msgstr "‘all’ mag geen extra queryregels bevatten" #: common/flatpak-usb.c:291 #, c-format msgid "USB queries with 'dev' must also specify vendors" -msgstr "" +msgstr "USB-queries met ‘dev’ moet ook leveranciers specificeren" #: common/flatpak-utils.c:668 msgid "Glob can't match apps" @@ -5733,7 +5841,7 @@ msgstr "Ongeldige token" #: portal/flatpak-portal.c:2337 #, c-format msgid "No portal support found" -msgstr "Geen portal-ondersteuning gevonden" +msgstr "Geen ondersteuning voor portalen gevonden" #: portal/flatpak-portal.c:2343 msgid "Deny" From 5d1eaacb26a0efedad5da3d44c429a67cddbc9e9 Mon Sep 17 00:00:00 2001 From: Sijmen Date: Wed, 25 Jun 2025 23:55:51 +0200 Subject: [PATCH 39/53] i18n: Improve dutch translation consistency, with small fixes --- po/nl.po | 114 +++++++++++++++++++++++++++---------------------------- 1 file changed, 57 insertions(+), 57 deletions(-) diff --git a/po/nl.po b/po/nl.po index 970c1bb161..33d0981ab2 100644 --- a/po/nl.po +++ b/po/nl.po @@ -3,6 +3,7 @@ # This file is distributed under the same license as the flatpak package. # Philip Goto , 2023. # Nathan Follens , 2023 +# Sijmen Schoon , 2025 # msgid "" msgstr "" @@ -92,7 +93,7 @@ msgstr "SLEUTEL-ID" #: app/flatpak-builtins-build-sign.c:45 #: app/flatpak-builtins-build-update-repo.c:85 msgid "GPG Homedir to use when looking for keyrings" -msgstr "GPG-map om te gebruiken bij het zoeken naar sleutelbossen" +msgstr "GPG-thuismap om te gebruiken bij het zoeken naar sleutelbossen" #: app/flatpak-builtins-build-bundle.c:64 #: app/flatpak-builtins-build-commit-from.c:69 @@ -101,7 +102,7 @@ msgstr "GPG-map om te gebruiken bij het zoeken naar sleutelbossen" #: app/flatpak-builtins-build-sign.c:45 #: app/flatpak-builtins-build-update-repo.c:85 msgid "HOMEDIR" -msgstr "MAP" +msgstr "THUISMAP" #: app/flatpak-builtins-build-bundle.c:65 msgid "OSTree commit to create a delta bundle from" @@ -220,7 +221,7 @@ msgstr "Processen beëindigen wanneer het bovenliggende proces is beëindigd" #: app/flatpak-builtins-build.c:56 msgid "Export application homedir directory to build" -msgstr "Toepassingsmap exporteren om te compileren" +msgstr "Thuismap van toepassing exporteren om te bouwen" #: app/flatpak-builtins-build.c:57 app/flatpak-builtins-run.c:73 msgid "Log session bus calls" @@ -232,7 +233,7 @@ msgstr "Systeembusaanroepen bijhouden" #: app/flatpak-builtins-build.c:208 msgid "DIRECTORY [COMMAND [ARGUMENT…]] - Build in directory" -msgstr "MAP [OPDRACHT [ARGUMENT…]] - Compileren in map" +msgstr "MAP [OPDRACHT [ARGUMENT…]] - Bouwen in map" #: app/flatpak-builtins-build.c:231 app/flatpak-builtins-build-finish.c:655 msgid "DIRECTORY must be specified" @@ -270,7 +271,7 @@ msgstr "Map van source-pakketbron" #: app/flatpak-builtins-build-commit-from.c:58 msgid "SRC-REPO" -msgstr "SRC-BRON" +msgstr "SRC-PAKKETBRON" #: app/flatpak-builtins-build-commit-from.c:59 msgid "Source repo ref" @@ -370,11 +371,11 @@ msgstr "Geen samenvattingsindex genereren" #: app/flatpak-builtins-build-commit-from.c:278 msgid "DST-REPO [DST-REF…] - Make a new commit from existing commits" -msgstr "DST-BRON [DST-REF…] - Nieuwe commit aanmaken van bestaande commits" +msgstr "DST-PAKKETBRON [DST-REF…] - Nieuwe commit aanmaken van bestaande commits" #: app/flatpak-builtins-build-commit-from.c:285 msgid "DST-REPO must be specified" -msgstr "DST-BRON moet worden opgegeven" +msgstr "DST-PAKKETBRON moet worden opgegeven" #: app/flatpak-builtins-build-commit-from.c:293 msgid "" @@ -495,7 +496,7 @@ msgstr "WAARSCHUWING: Kan Exec-sleutel in %s niet vinden: %s\n" #, c-format msgid "WARNING: Binary not found for Exec line in %s: %s\n" msgstr "" -"WAARSCHUWING: programmabestand voor Exec-regel in %s niet gevonden: %s\n" +"WAARSCHUWING: Programmabestand voor Exec-regel in %s niet gevonden: %s\n" #: app/flatpak-builtins-build-export.c:529 #, c-format @@ -667,7 +668,6 @@ msgstr "GROEP=SLEUTEL[=WAARDE]" msgid "Don't inherit permissions from runtime" msgstr "Rechten niet overnemen van runtime" -# Het is mij soms niet duidelijk om wat voor soort ‘extension’ het gaat. In dit geval gok ik bestandsextensie, maar dit is misschien iets om na het inzenden te corrigeren. - Philip #: app/flatpak-builtins-build-finish.c:155 #, c-format msgid "Not exporting %s, wrong extension\n" @@ -686,7 +686,7 @@ msgstr "%s exporteren\n" #: app/flatpak-builtins-build-finish.c:439 #, c-format msgid "More than one executable found\n" -msgstr "Meer dan één programmabestand gevonden\n" +msgstr "Meer dan één uitvoerbaar bestand gevonden\n" #: app/flatpak-builtins-build-finish.c:450 #, c-format @@ -696,7 +696,7 @@ msgstr "%s wordt als opdracht gebruikt\n" #: app/flatpak-builtins-build-finish.c:455 #, c-format msgid "No executable found\n" -msgstr "Geen programmabestand gevonden\n" +msgstr "Geen uitvoerbaar bestand gevonden\n" #: app/flatpak-builtins-build-finish.c:510 #, c-format @@ -823,7 +823,7 @@ msgstr "UITBREIDING" #: app/flatpak-builtins-build-init.c:58 msgid "Extension tag to use if building extension" -msgstr "Uitbreidings-tag om te gebruiken bij compileren van uitbreiding" +msgstr "Uitbreidings-tag om te gebruiken bij het bouwen van uitbreiding" #: app/flatpak-builtins-build-init.c:58 msgid "EXTENSION_TAG" @@ -923,7 +923,7 @@ msgstr "Geen GPG-sleutel-ID’s opgegeven" #: app/flatpak-builtins-build-update-repo.c:68 msgid "Redirect this repo to a new URL" -msgstr "Deze bron doorverwijzen naar een nieuwe URL" +msgstr "Deze pakketbron doorverwijzen naar een nieuwe URL" #: app/flatpak-builtins-build-update-repo.c:69 msgid "A nice name to use for this repository" @@ -1424,7 +1424,7 @@ msgstr "Toepassing" #: app/flatpak-builtins-document-list.c:50 msgid "Show applications with permission" -msgstr "Toepassingen met recht tonen" +msgstr "Toepassingen met toestemming tonen" #: app/flatpak-builtins-document-list.c:51 #: app/flatpak-builtins-permission-list.c:179 @@ -1947,7 +1947,7 @@ msgstr "Neem aan dat LOCATIE een .flatpak-single-file-bundel is" #: app/flatpak-builtins-install.c:78 msgid "Assume LOCATION is a .flatpakref application description" -msgstr "Neem aan dat LOCATIE een .flatpakref-applicatie-beschrijving is" +msgstr "Neem aan dat LOCATIE een .flatpakref-toepassingsbeschrijving is" #: app/flatpak-builtins-install.c:79 msgid "Check bundle signatures with GPG key from FILE (- for stdin)" @@ -1979,7 +1979,7 @@ msgstr "Installatie bijwerken indien reeds geïnstalleerd" #. Translators: A sideload is when you install from a local USB drive rather than the Internet. #: app/flatpak-builtins-install.c:86 app/flatpak-builtins-update.c:71 msgid "Use this local repo for sideloads" -msgstr "Gebruik deze lokale repo voor sideloads" +msgstr "Gebruik deze lokale pakketbron voor sideloads" #: app/flatpak-builtins-install.c:145 msgid "Bundle filename must be specified" @@ -1995,7 +1995,7 @@ msgstr "Bestandsnaam of URI moet worden opgegeven" #: app/flatpak-builtins-install.c:296 msgid "[LOCATION/REMOTE] [REF…] - Install applications or runtimes" -msgstr "[LOCATIE/REMOTE] [REF…] - Installeer applicaties of runtimes" +msgstr "[LOCATIE/REMOTE] [REF…] - Installeer toepassingen of runtimes" #: app/flatpak-builtins-install.c:322 msgid "At least one REF must be specified" @@ -2341,11 +2341,11 @@ msgstr "PID van het zandbakproces tonen" #: app/flatpak-builtins-ps.c:52 app/flatpak-builtins-search.c:46 msgid "Show the application branch" -msgstr "Toepassings-branch tonen" +msgstr "Toepassingsbranch tonen" #: app/flatpak-builtins-ps.c:53 msgid "Show the application commit" -msgstr "Toepassings-commit tonen" +msgstr "Toepassingscommit tonen" #: app/flatpak-builtins-ps.c:54 msgid "Show the runtime ID" @@ -2393,7 +2393,7 @@ msgstr "Niets doen als de opgegeven remote bestaat" #: app/flatpak-builtins-remote-add.c:66 msgid "LOCATION specifies a configuration file, not the repo location" -msgstr "LOCATIE geeft een configuratiebestand aan, niet de bronlocatie" +msgstr "LOCATIE geeft een configuratiebestand aan, niet de pakketbronlocatie" #: app/flatpak-builtins-remote-add.c:71 app/flatpak-builtins-remote-modify.c:77 msgid "Disable GPG verification" @@ -2556,7 +2556,7 @@ msgstr "Geef alleen refs weer die beschikbaar zijn als sideloads" msgid "" " REMOTE REF - Show information about an application or runtime in a remote" msgstr "" -" REMOTE REF - Toon informatie over een applicatie of een runtime in een " +" REMOTE REF - Toon informatie over een toepassing of een runtime in een " "remote" #: app/flatpak-builtins-remote-info.c:125 @@ -2704,7 +2704,7 @@ msgstr "Downloadgrootte tonen" #: app/flatpak-builtins-remote-ls.c:389 msgid " [REMOTE or URI] - Show available runtimes and applications" -msgstr " [REMOTE of URI] - Toon beschikbare runtimes en applicaties" +msgstr " [REMOTE of URI] - Toon beschikbare runtimes en toepassingen" #: app/flatpak-builtins-remote-modify.c:66 msgid "Enable GPG verification" @@ -2914,7 +2914,7 @@ msgstr "Tijdens het uitrollen van de appstream voor %s: " #: app/flatpak-builtins-repo.c:105 #, c-format msgid "Repo mode: %s\n" -msgstr "Bronmodus: %s\n" +msgstr "Modus van pakketbron: %s\n" #: app/flatpak-builtins-repo.c:112 #, c-format @@ -3033,11 +3033,11 @@ msgstr "Geschiedenislengte" #: app/flatpak-builtins-repo.c:709 msgid "Print general information about the repository" -msgstr "Algemene informatie tonen over de bron" +msgstr "Algemene informatie tonen over de pakketbron" #: app/flatpak-builtins-repo.c:710 msgid "List the branches in the repository" -msgstr "Branches in de bron tonen" +msgstr "Branches in de pakketbron tonen" #: app/flatpak-builtins-repo.c:711 msgid "Print metadata for a branch" @@ -3049,7 +3049,7 @@ msgstr "Commits van een branch tonen" #: app/flatpak-builtins-repo.c:713 msgid "Print information about the repo subsets" -msgstr "Informatie tonen over de bron-subsets" +msgstr "Informatie tonen over de pakketbron-subsets" #: app/flatpak-builtins-repo.c:714 msgid "Limit information to subsets with this prefix" @@ -3143,7 +3143,7 @@ msgstr "Schrijf instantie-ID weg naar de opgegeven bestanddescriptor" #: app/flatpak-builtins-run.c:90 msgid "Use PATH instead of the app's /app" -msgstr "Gebruik PAD in plaats van de /app van de applicatie" +msgstr "Gebruik PAD in plaats van de /app van de toepassing" #: app/flatpak-builtins-run.c:91 msgid "Use PATH instead of the runtime's /usr" @@ -3184,15 +3184,15 @@ msgstr "Geen overeenkomsten gevonden" #: app/flatpak-builtins-uninstall.c:54 msgid "Arch to uninstall" -msgstr "Arch om te deïnstalleren" +msgstr "Arch om te de-installeren" #: app/flatpak-builtins-uninstall.c:55 msgid "Keep ref in local repository" -msgstr "Ref in lokale bron behouden" +msgstr "Ref in lokale pakketbron behouden" #: app/flatpak-builtins-uninstall.c:56 msgid "Don't uninstall related refs" -msgstr "Gerelateerde refs niet deïnstalleren" +msgstr "Gerelateerde refs niet de-installeren" #: app/flatpak-builtins-uninstall.c:57 msgid "Remove files even if running" @@ -3218,13 +3218,13 @@ msgstr "Gegevens voor %s verwijderen?" #: app/flatpak-builtins-uninstall.c:220 #, c-format msgid "Info: applications using the extension %s%s%s branch %s%s%s:\n" -msgstr "Info: applicaties die extensie %s%s%s, branch %s%s%s gebruiken:\n" +msgstr "Info: toepassingen die extensie %s%s%s, branch %s%s%s gebruiken:\n" #: app/flatpak-builtins-uninstall.c:223 #, c-format msgid "Info: applications using the runtime %s%s%s branch %s%s%s:\n" msgstr "" -"Info: applicaties die de runtime %s%s%s, met branch %s%s%s gebruiken:\n" +"Info: toepassingen die de runtime %s%s%s, met branch %s%s%s gebruiken:\n" #: app/flatpak-builtins-uninstall.c:238 msgid "Really remove?" @@ -3232,7 +3232,7 @@ msgstr "Echt verwijderen?" #: app/flatpak-builtins-uninstall.c:255 msgid "[REF…] - Uninstall applications or runtimes" -msgstr "[REF…] - Applicates of runtimes deïnstalleren" +msgstr "[REF…] - Toepassingen of runtimes de-installeren" #: app/flatpak-builtins-uninstall.c:264 msgid "Must specify at least one REF, --unused, --all or --delete-data" @@ -3297,7 +3297,7 @@ msgstr "Commit om uit te rollen" #: app/flatpak-builtins-update.c:58 msgid "Remove old files even if running" -msgstr "Oude bestanden verwijderen, zelfs als het programma wordt uitgevoerd" +msgstr "Oude bestanden verwijderen, zelfs als de toepassing wordt uitgevoerd" #: app/flatpak-builtins-update.c:59 msgid "Don't pull, only update from local cache" @@ -3511,7 +3511,7 @@ msgid "" "Should the remote be kept for future installations?" msgstr "" "De remote '%s', waarnaar gerefereerd wordt door '%s' op locatie %s, bevat " -"aanvullende applicaties.\n" +"aanvullende toepassingen.\n" "Moet deze remote behouden worden voor toekomstige installaties?" #. default to yes on Enter @@ -3522,7 +3522,7 @@ msgid "" " %s\n" "Configure this as new remote '%s'" msgstr "" -"De applicatie %s is afhankelijk van runtimes van:\n" +"De toepassing %s is afhankelijk van runtimes van:\n" " %s\n" "Deze remote als nieuwe remote '%s' configureren?" @@ -3709,12 +3709,12 @@ msgstr "" #: app/flatpak-cli-transaction.c:960 #, c-format msgid "Info: applications using this extension:\n" -msgstr "Info: applicaties die deze extensie gebruiken:\n" +msgstr "Info: toepassingen die deze extensie gebruiken:\n" #: app/flatpak-cli-transaction.c:962 #, c-format msgid "Info: applications using this runtime:\n" -msgstr "Info: applicaties die deze runtime gebruiken:\n" +msgstr "Info: toepassingen die deze runtime gebruiken:\n" #: app/flatpak-cli-transaction.c:981 msgid "Replace?" @@ -3776,7 +3776,7 @@ msgstr "Veranderingen voltooid" #: app/flatpak-cli-transaction.c:1709 msgid "Uninstall complete." -msgstr "Verwijdering voltooid" +msgstr "De-installatie voltooid" #: app/flatpak-cli-transaction.c:1711 msgid "Installation complete." @@ -3807,7 +3807,7 @@ msgstr "Geïnstalleerde toepassing of runtime bijwerken" #: app/flatpak-main.c:81 msgid "Uninstall an installed application or runtime" -msgstr "Geïnstalleerde toepassing of runtime verwijderen" +msgstr "Geïnstalleerde toepassing of runtime de-installeren" #: app/flatpak-main.c:84 msgid "Mask out updates and automatic installation" @@ -3948,7 +3948,7 @@ msgid "" " Manage remote repositories" msgstr "" "\n" -"Externe pakketbronnen beheren" +" Externe pakketbronnen beheren" #: app/flatpak-main.c:125 msgid "List all configured remotes" @@ -3981,7 +3981,7 @@ msgid "" " Build applications" msgstr "" "\n" -"Toepassingen compileren" +" Toepassingen bouwen" #: app/flatpak-main.c:135 msgid "Initialize a directory for building" @@ -4084,7 +4084,7 @@ msgid "" msgstr "" "Houd er rekening mee dat de mappen %s niet in het zoekpad staan dat is " "ingesteld via de omgevingsvariabele XDG_DATA_DIRS. Hierdoor verschijnen door " -"Flatpak geïnstalleerde applicaties mogelijk niet op je bureaublad totdat je " +"Flatpak geïnstalleerde toepassingen mogelijk niet op je bureaublad totdat je " "de sessie opnieuw start." #: app/flatpak-main.c:311 @@ -4096,7 +4096,7 @@ msgid "" msgstr "" "Houd er rekening mee dat de map %s niet in het zoekpad staat dat is " "ingesteld via de omgevingsvariabele XDG_DATA_DIRS. Hierdoor verschijnen door " -"Flatpak geïnstalleerde applicaties mogelijk niet op je bureaublad totdat je " +"Flatpak geïnstalleerde toepassingen mogelijk niet op je bureaublad totdat je " "de sessie opnieuw start." #: app/flatpak-main.c:380 @@ -4151,7 +4151,7 @@ msgstr "%s bijwerken\n" #: app/flatpak-quiet-transaction.c:85 #, c-format msgid "Uninstalling %s\n" -msgstr "%s verwijderen\n" +msgstr "%s de-installeren\n" #: app/flatpak-quiet-transaction.c:107 #, c-format @@ -4186,12 +4186,12 @@ msgstr "Fout: Bundel %s installeren mislukt: %s\n" #: app/flatpak-quiet-transaction.c:134 #, c-format msgid "Warning: Failed to uninstall %s: %s\n" -msgstr "Waarschuwing: %s verwijderen mislukt: %s\n" +msgstr "Waarschuwing: %s de-installeren mislukt: %s\n" #: app/flatpak-quiet-transaction.c:137 #, c-format msgid "Error: Failed to uninstall %s: %s\n" -msgstr "Fout: %s verwijderen mislukt: %s\n" +msgstr "Fout: %s de-installeren mislukt: %s\n" #: app/flatpak-quiet-transaction.c:166 common/flatpak-dir.c:10535 #, c-format @@ -4724,7 +4724,7 @@ msgstr "Commit voor ‘%s’ staat niet in verwachte bound-refs: %s" #: common/flatpak-dir.c:6600 msgid "Only applications can be made current" -msgstr "Alleen applicaties kunnen als huidig gemarkeerd worden" +msgstr "Alleen toepassingen kunnen als huidig gemarkeerd worden" #: common/flatpak-dir.c:7304 msgid "Not enough memory" @@ -4899,7 +4899,7 @@ msgstr "%s-commit %s is niet geïnstalleerd" #: common/flatpak-dir.c:11555 #, c-format msgid "Pruning repo failed: %s" -msgstr "Opruimen van bron mislukt: %s" +msgstr "Opruimen van pakketbron mislukt: %s" #: common/flatpak-dir.c:11723 common/flatpak-dir.c:11729 #, c-format @@ -4971,7 +4971,7 @@ msgstr "Fout bij zoeken in remote %s: %s" #: common/flatpak-dir.c:13689 #, c-format msgid "Error searching local repository: %s" -msgstr "Fout bij zoeken in lokale bron: %s" +msgstr "Fout bij zoeken in lokale pakketbron: %s" #: common/flatpak-dir.c:13826 #, c-format @@ -5178,7 +5178,7 @@ msgstr "Ongeldig deltabestandsformaat" #: common/flatpak-oci-registry.c:2496 #, c-format msgid "No gpg key found with ID %s (homedir: %s)" -msgstr "Geen GPG-sleutel gevonden met ID %s (map: %s)" +msgstr "Geen GPG-sleutel gevonden met ID %s (thuismap: %s)" #: common/flatpak-oci-registry.c:2503 #, c-format @@ -5567,7 +5567,7 @@ msgstr "De toepassing %s vereist de runtime %s, welke niet is geïnstalleerd" #: common/flatpak-transaction.c:2576 #, c-format msgid "Can't uninstall %s which is needed by %s" -msgstr "Kan %s niet verwijderen, deze is benodigd door %s" +msgstr "Kan %s niet de-installeren, deze is benodigd door %s" #: common/flatpak-transaction.c:2673 #, c-format @@ -5972,7 +5972,7 @@ msgstr "Authenticatie is vereist om software te installeren van $(path)" #. in the wheel group to uninstall without authenticating. #: system-helper/org.freedesktop.Flatpak.policy.in:144 msgid "Uninstall runtime" -msgstr "Runtime verwijderen" +msgstr "Runtime de-installeren" #: system-helper/org.freedesktop.Flatpak.policy.in:145 msgid "Authentication is required to uninstall software" @@ -5985,7 +5985,7 @@ msgstr "Authenticatie is vereist om software te verwijderen" #. in the wheel group to uninstall without authenticating. #: system-helper/org.freedesktop.Flatpak.policy.in:161 msgid "Uninstall app" -msgstr "Toepassing verwijderen" +msgstr "Toepassing de-installeren" #: system-helper/org.freedesktop.Flatpak.policy.in:162 msgid "Authentication is required to uninstall $(ref)" @@ -6000,7 +6000,7 @@ msgstr "Remote configureren" #: system-helper/org.freedesktop.Flatpak.policy.in:178 msgid "Authentication is required to configure software repositories" -msgstr "Authenticatie is vereist om softwarebronnen te configureren" +msgstr "Authenticatie is vereist om softwarepakketbronnen te configureren" #. SECURITY: #. - Normal users need admin authentication to configure the system-wide @@ -6091,7 +6091,7 @@ msgstr "Authenticatie is vereist om metagegevens bij te werken" #: system-helper/org.freedesktop.Flatpak.policy.in:287 #, fuzzy msgid "Override parental controls for installs" -msgstr "Ouderlijk toezicht overschrijven" +msgstr "Ouderlijk toezicht overschrijven voor installaties" #: system-helper/org.freedesktop.Flatpak.policy.in:288 msgid "" @@ -6117,7 +6117,7 @@ msgstr "" #: system-helper/org.freedesktop.Flatpak.policy.in:313 #, fuzzy msgid "Override parental controls for updates" -msgstr "Ouderlijk toezicht overschrijven" +msgstr "Ouderlijk toezicht overschrijven voor updates" #: system-helper/org.freedesktop.Flatpak.policy.in:314 #, fuzzy From 16aaa8e3b30db4d6a4ff862ab9441ce18d48ac43 Mon Sep 17 00:00:00 2001 From: Jordan Petridis Date: Mon, 1 Sep 2025 15:04:07 +0300 Subject: [PATCH 40/53] ci: Use a regex to define the stable branches Avoid doing it manually for each stable branch, and needing extra steps to create a stable branch. https://docs.github.com/en/actions/reference/workflows-and-actions/workflow-syntax#filter-pattern-cheat-sheet --- .github/workflows/check.yml | 20 ++------------------ 1 file changed, 2 insertions(+), 18 deletions(-) diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index 405e79eb5f..30f5603aa9 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -4,15 +4,7 @@ on: push: branches: - main - - flatpak-1.0.x - - flatpak-1.2.x - - flatpak-1.4.x - - flatpak-1.6.x - - flatpak-1.8.x - - flatpak-1.10.x - - flatpak-1.12.x - - flatpak-1.14.x - - flatpak-1.16.x + - 'flatpak-1.[0-9]+.x' pull_request: paths-ignore: - README.md @@ -24,15 +16,7 @@ on: - uncrustify.sh branches: - main - - flatpak-1.0.x - - flatpak-1.2.x - - flatpak-1.4.x - - flatpak-1.6.x - - flatpak-1.8.x - - flatpak-1.10.x - - flatpak-1.12.x - - flatpak-1.14.x - - flatpak-1.16.x + - 'flatpak-1.[0-9]+.x' merge_group: types: - checks_requested From adfa84ab09b32c081d94d2ba12f2c1d5cbc14a65 Mon Sep 17 00:00:00 2001 From: lumingzh Date: Tue, 2 Sep 2025 10:41:35 +0800 Subject: [PATCH 41/53] update Chinese translation --- po/zh_CN.po | 794 +++++++++++++++++++++++++--------------------------- 1 file changed, 385 insertions(+), 409 deletions(-) diff --git a/po/zh_CN.po b/po/zh_CN.po index faa037aaf7..37df3d8254 100644 --- a/po/zh_CN.po +++ b/po/zh_CN.po @@ -1,14 +1,14 @@ # Chinese (China) translation for flatpak. # Copyright (C) 2021 flatpak's COPYRIGHT HOLDER # This file is distributed under the same license as the flatpak package. -# lumingzh , 2021-2024. +# lumingzh , 2021-2025. # msgid "" msgstr "" "Project-Id-Version: flatpak master\n" "Report-Msgid-Bugs-To: https://github.com/flatpak/flatpak/issues\n" -"POT-Creation-Date: 2025-05-08 13:08-0300\n" -"PO-Revision-Date: 2024-10-27 08:17+0800\n" +"POT-Creation-Date: 2025-09-01 15:27+0000\n" +"PO-Revision-Date: 2025-09-02 10:39+0800\n" "Last-Translator: lumingzh \n" "Language-Team: Chinese (China) \n" "Language: zh_CN\n" @@ -16,7 +16,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Gtranslator 47.0\n" +"X-Generator: Gtranslator 48.0\n" #: app/flatpak-builtins-build-bundle.c:58 msgid "Export runtime instead of app" @@ -29,7 +29,7 @@ msgstr "要打包的架构" #: app/flatpak-builtins-build-bundle.c:59 #: app/flatpak-builtins-build-export.c:62 app/flatpak-builtins-build-init.c:53 #: app/flatpak-builtins-build-sign.c:42 app/flatpak-builtins-create-usb.c:46 -#: app/flatpak-builtins-info.c:55 app/flatpak-builtins-install.c:66 +#: app/flatpak-builtins-info.c:55 app/flatpak-builtins-install.c:67 #: app/flatpak-builtins-list.c:49 app/flatpak-builtins-make-current.c:38 #: app/flatpak-builtins-remote-info.c:54 app/flatpak-builtins-remote-ls.c:55 #: app/flatpak-builtins-run.c:66 app/flatpak-builtins-search.c:36 @@ -65,7 +65,7 @@ msgstr "从文件添加 GPG 密钥(- 用于 stdin)" #: app/flatpak-builtins-build-bundle.c:62 app/flatpak-builtins-build.c:54 #: app/flatpak-builtins-build-export.c:67 #: app/flatpak-builtins-build-update-repo.c:83 -#: app/flatpak-builtins-install.c:79 app/flatpak-builtins-remote-add.c:83 +#: app/flatpak-builtins-install.c:81 app/flatpak-builtins-remote-add.c:83 #: app/flatpak-builtins-remote-add.c:84 app/flatpak-builtins-remote-modify.c:88 #: app/flatpak-builtins-remote-modify.c:90 msgid "FILE" @@ -78,7 +78,7 @@ msgstr "签名 OCI 镜像使用的 GPG 密钥身份标识" #: app/flatpak-builtins-build-bundle.c:63 #: app/flatpak-builtins-build-commit-from.c:68 #: app/flatpak-builtins-build-export.c:68 -#: app/flatpak-builtins-build-import-bundle.c:48 +#: app/flatpak-builtins-build-import-bundle.c:49 #: app/flatpak-builtins-build-sign.c:44 #: app/flatpak-builtins-build-update-repo.c:84 msgid "KEY-ID" @@ -87,7 +87,7 @@ msgstr "KEY-ID" #: app/flatpak-builtins-build-bundle.c:64 #: app/flatpak-builtins-build-commit-from.c:69 #: app/flatpak-builtins-build-export.c:71 -#: app/flatpak-builtins-build-import-bundle.c:49 +#: app/flatpak-builtins-build-import-bundle.c:50 #: app/flatpak-builtins-build-sign.c:45 #: app/flatpak-builtins-build-update-repo.c:85 msgid "GPG Homedir to use when looking for keyrings" @@ -96,7 +96,7 @@ msgstr "查找密钥环时使用的 GPG 主目录" #: app/flatpak-builtins-build-bundle.c:64 #: app/flatpak-builtins-build-commit-from.c:69 #: app/flatpak-builtins-build-export.c:71 -#: app/flatpak-builtins-build-import-bundle.c:49 +#: app/flatpak-builtins-build-import-bundle.c:50 #: app/flatpak-builtins-build-sign.c:45 #: app/flatpak-builtins-build-update-repo.c:85 msgid "HOMEDIR" @@ -127,16 +127,16 @@ msgstr "必须指定位置、文件名和名称" #: app/flatpak-builtins-build-bundle.c:631 #: app/flatpak-builtins-build-export.c:844 -#: app/flatpak-builtins-build-import-bundle.c:191 +#: app/flatpak-builtins-build-import-bundle.c:136 #: app/flatpak-builtins-build-init.c:217 app/flatpak-builtins-build-sign.c:76 #: app/flatpak-builtins-document-export.c:112 #: app/flatpak-builtins-document-info.c:75 -#: app/flatpak-builtins-document-list.c:182 +#: app/flatpak-builtins-document-list.c:189 #: app/flatpak-builtins-document-unexport.c:70 #: app/flatpak-builtins-history.c:480 app/flatpak-builtins-info.c:130 -#: app/flatpak-builtins-install.c:148 app/flatpak-builtins-install.c:217 -#: app/flatpak-builtins-list.c:417 app/flatpak-builtins-make-current.c:72 -#: app/flatpak-builtins-override.c:73 +#: app/flatpak-builtins-install.c:180 app/flatpak-builtins-install.c:233 +#: app/flatpak-builtins-install.c:294 app/flatpak-builtins-list.c:417 +#: app/flatpak-builtins-make-current.c:72 app/flatpak-builtins-override.c:73 #: app/flatpak-builtins-permission-list.c:159 #: app/flatpak-builtins-permission-remove.c:132 #: app/flatpak-builtins-remote-add.c:318 @@ -148,7 +148,7 @@ msgstr "参数太多" #: app/flatpak-builtins-build-bundle.c:646 #: app/flatpak-builtins-build-commit-from.c:338 #: app/flatpak-builtins-build-commit-from.c:351 -#: app/flatpak-builtins-build-import-bundle.c:200 +#: app/flatpak-builtins-build-import-bundle.c:145 #, c-format msgid "'%s' is not a valid repository" msgstr "“%s”不是有效的仓库" @@ -159,20 +159,20 @@ msgid "'%s' is not a valid repository: " msgstr "“%s”不是有效的仓库:" #: app/flatpak-builtins-build-bundle.c:661 app/flatpak-builtins-build-sign.c:88 -#: common/flatpak-dir.c:13280 +#: common/flatpak-dir.c:13649 #, c-format msgid "'%s' is not a valid name: %s" msgstr "“%s”不是有效的名称:%s" #: app/flatpak-builtins-build-bundle.c:664 #: app/flatpak-builtins-build-export.c:865 app/flatpak-builtins-build-sign.c:91 -#: common/flatpak-dir.c:13286 +#: common/flatpak-dir.c:13655 #, c-format msgid "'%s' is not a valid branch name: %s" msgstr "“%s”不是有效的分支名称:%s" #: app/flatpak-builtins-build-bundle.c:678 -#: app/flatpak-builtins-build-import-bundle.c:204 +#: app/flatpak-builtins-build-import-bundle.c:149 #: app/flatpak-builtins-build-init.c:281 #, c-format msgid "'%s' is not a valid filename" @@ -227,35 +227,34 @@ msgstr "日志会话总线调用" msgid "Log system bus calls" msgstr "日志系统总线调用" -#: app/flatpak-builtins-build.c:208 +#: app/flatpak-builtins-build.c:219 msgid "DIRECTORY [COMMAND [ARGUMENT…]] - Build in directory" msgstr "目录 [命令 [参数…]] - 在目录中构建" -#: app/flatpak-builtins-build.c:231 app/flatpak-builtins-build-finish.c:655 +#: app/flatpak-builtins-build.c:242 app/flatpak-builtins-build-finish.c:655 msgid "DIRECTORY must be specified" msgstr "必须指定目录" -#: app/flatpak-builtins-build.c:242 app/flatpak-builtins-build-export.c:887 +#: app/flatpak-builtins-build.c:253 app/flatpak-builtins-build-export.c:887 #, c-format msgid "Build directory %s not initialized, use flatpak build-init" msgstr "构建目录 %s 未初始化,使用 flatpak build-init" -#: app/flatpak-builtins-build.c:261 +#: app/flatpak-builtins-build.c:272 msgid "metadata invalid, not application or runtime" msgstr "元数据无效,不是应用或运行时" -#: app/flatpak-builtins-build.c:392 +#: app/flatpak-builtins-build.c:403 #, c-format msgid "No extension point matching %s in %s" msgstr "在 %2$s 中没有匹配 %1$s 的扩展点" -#: app/flatpak-builtins-build.c:568 +#: app/flatpak-builtins-build.c:581 #, c-format msgid "Missing '=' in bind mount option '%s'" msgstr "在绑定挂载选项“%s”中缺少“=”" -#: app/flatpak-builtins-build.c:609 common/flatpak-run.c:3599 -#, c-format +#: app/flatpak-builtins-build.c:622 common/flatpak-run.c:3653 msgid "Unable to start app" msgstr "无法启动应用" @@ -297,20 +296,20 @@ msgstr "正文" #: app/flatpak-builtins-build-commit-from.c:66 #: app/flatpak-builtins-build-export.c:64 -#: app/flatpak-builtins-build-import-bundle.c:50 +#: app/flatpak-builtins-build-import-bundle.c:51 msgid "Update the appstream branch" msgstr "更新 appstream 分支" #: app/flatpak-builtins-build-commit-from.c:67 #: app/flatpak-builtins-build-export.c:65 -#: app/flatpak-builtins-build-import-bundle.c:51 +#: app/flatpak-builtins-build-import-bundle.c:52 #: app/flatpak-builtins-build-update-repo.c:87 msgid "Don't update the summary" msgstr "不更新摘要" #: app/flatpak-builtins-build-commit-from.c:68 #: app/flatpak-builtins-build-export.c:68 -#: app/flatpak-builtins-build-import-bundle.c:48 +#: app/flatpak-builtins-build-import-bundle.c:49 #: app/flatpak-builtins-build-sign.c:44 msgid "GPG Key ID to sign the commit with" msgstr "签署提交时使用的 GPG 密钥身份标识" @@ -356,7 +355,7 @@ msgstr "时间戳" #: app/flatpak-builtins-build-commit-from.c:75 #: app/flatpak-builtins-build-export.c:80 -#: app/flatpak-builtins-build-import-bundle.c:52 +#: app/flatpak-builtins-build-import-bundle.c:53 #: app/flatpak-builtins-build-update-repo.c:97 msgid "Don't generate a summary index" msgstr "不生成摘要索引" @@ -505,7 +504,6 @@ msgid "Unable to find basename in %s, specify a name explicitly" msgstr "在 %s 中找不到基本名称,请明确指定名称" #: app/flatpak-builtins-build-export.c:746 -#, c-format msgid "No slashes allowed in extra data name" msgstr "在额外数据名称中不允许有斜线符号" @@ -515,7 +513,6 @@ msgid "Invalid format for sha256 checksum: '%s'" msgstr "SHA256 校验和的格式无效:“%s”" #: app/flatpak-builtins-build-export.c:768 -#, c-format msgid "Extra data sizes of zero not supported" msgstr "不支持零的额外数据大小" @@ -565,7 +562,6 @@ msgid "Content Written: %u\n" msgstr "写入内容:%u\n" #: app/flatpak-builtins-build-export.c:1171 -#, c-format msgid "Content Bytes Written:" msgstr "写入内容字节:" @@ -574,7 +570,7 @@ msgid "Command to set" msgstr "要设置的命令" #: app/flatpak-builtins-build-finish.c:52 app/flatpak-builtins-run.c:67 -#: app/flatpak-main.c:208 +#: app/flatpak-main.c:209 msgid "COMMAND" msgstr "命令" @@ -609,7 +605,7 @@ msgstr "移除扩展点信息" #: app/flatpak-builtins-build-finish.c:57 #: app/flatpak-builtins-build-update-repo.c:79 app/flatpak-builtins-info.c:58 #: app/flatpak-builtins-remote-add.c:86 app/flatpak-builtins-remote-modify.c:92 -#: app/flatpak-main.c:181 +#: app/flatpak-main.c:182 msgid "NAME" msgstr "名称" @@ -669,7 +665,6 @@ msgid "Exporting %s\n" msgstr "正在导出 %s\n" #: app/flatpak-builtins-build-finish.c:439 -#, c-format msgid "More than one executable found\n" msgstr "找到多个可执行文件\n" @@ -679,7 +674,6 @@ msgid "Using %s as command\n" msgstr "使用 %s 作为命令\n" #: app/flatpak-builtins-build-finish.c:455 -#, c-format msgid "No executable found\n" msgstr "未发现可执行文件\n" @@ -729,42 +723,32 @@ msgid "Build directory %s already finalized" msgstr "构建目录 %s 已完成" #: app/flatpak-builtins-build-finish.c:701 -#, c-format msgid "Please review the exported files and the metadata\n" msgstr "请审阅导出的文件和元数据\n" -#: app/flatpak-builtins-build-import-bundle.c:46 +#: app/flatpak-builtins-build-import-bundle.c:47 msgid "Override the ref used for the imported bundle" msgstr "覆盖用于导入包的引用" -#: app/flatpak-builtins-build-import-bundle.c:46 +#: app/flatpak-builtins-build-import-bundle.c:47 msgid "REF" msgstr "引用" -#: app/flatpak-builtins-build-import-bundle.c:47 +#: app/flatpak-builtins-build-import-bundle.c:48 msgid "Import oci image instead of flatpak bundle" msgstr "导入 OCI 镜像而不是 flatpak 捆绑包" -#: app/flatpak-builtins-build-import-bundle.c:86 -#, c-format -msgid "Ref '%s' not found in registry" -msgstr "在注册表中未发现引用“%s”" - -#: app/flatpak-builtins-build-import-bundle.c:95 -msgid "Multiple images in registry, specify a ref with --ref" -msgstr "注册表中有多个镜像,使用 --ref 指定一个引用" - -#: app/flatpak-builtins-build-import-bundle.c:132 -#: app/flatpak-builtins-build-import-bundle.c:160 +#: app/flatpak-builtins-build-import-bundle.c:77 +#: app/flatpak-builtins-build-import-bundle.c:105 #, c-format msgid "Importing %s (%s)\n" msgstr "正在导入 %s(%s)\n" -#: app/flatpak-builtins-build-import-bundle.c:181 +#: app/flatpak-builtins-build-import-bundle.c:126 msgid "LOCATION FILENAME - Import a file bundle into a local repository" msgstr "位置 文件名 - 导入文件捆绑包至本地仓库" -#: app/flatpak-builtins-build-import-bundle.c:188 +#: app/flatpak-builtins-build-import-bundle.c:133 msgid "LOCATION and FILENAME must be specified" msgstr "必须指定位置和文件名" @@ -875,13 +859,13 @@ msgstr "“%s”不是有效的应用名称:%s" msgid "Build directory %s already initialized" msgstr "构建目录 %s 已初始化" -#: app/flatpak-builtins-build-sign.c:42 app/flatpak-builtins-install.c:66 +#: app/flatpak-builtins-build-sign.c:42 app/flatpak-builtins-install.c:67 #: app/flatpak-builtins-remote-info.c:54 msgid "Arch to install for" msgstr "安装目标的架构" #: app/flatpak-builtins-build-sign.c:43 app/flatpak-builtins-create-usb.c:48 -#: app/flatpak-builtins-install.c:73 app/flatpak-builtins-remote-info.c:56 +#: app/flatpak-builtins-install.c:74 app/flatpak-builtins-remote-info.c:56 #: app/flatpak-builtins-uninstall.c:58 app/flatpak-builtins-update.c:64 msgid "Look for runtime with the specified name" msgstr "使用指定名称查找运行时" @@ -1057,12 +1041,10 @@ msgid "LOCATION - Update repository metadata" msgstr "位置 - 更新仓库元数据" #: app/flatpak-builtins-build-update-repo.c:609 -#, c-format msgid "Updating appstream branch\n" msgstr "更新 appstream 分支\n" #: app/flatpak-builtins-build-update-repo.c:638 -#, c-format msgid "Updating summary\n" msgstr "更新摘要\n" @@ -1072,7 +1054,6 @@ msgid "Total objects: %u\n" msgstr "对象总计:%u\n" #: app/flatpak-builtins-build-update-repo.c:666 -#, c-format msgid "No unreachable objects\n" msgstr "没有无法访问的对象\n" @@ -1148,7 +1129,7 @@ msgstr "只能使用 --list、--get、--set 或 --unset 之一" msgid "Must specify one of --list, --get, --set or --unset" msgstr "必须指定 --list、--get、--set 或 --unset 之一" -#: app/flatpak-builtins-create-usb.c:45 app/flatpak-builtins-install.c:74 +#: app/flatpak-builtins-create-usb.c:45 app/flatpak-builtins-install.c:75 #: app/flatpak-builtins-remote-info.c:57 app/flatpak-builtins-uninstall.c:59 #: app/flatpak-builtins-update.c:65 msgid "Look for app with the specified name" @@ -1323,7 +1304,6 @@ msgstr "文件 - 获取关于导出文件的信息" #: app/flatpak-builtins-document-info.c:100 #: app/flatpak-builtins-document-unexport.c:92 -#, c-format msgid "Not exported\n" msgstr "未导出\n" @@ -1378,7 +1358,11 @@ msgstr "权限" msgid "Show permissions for applications" msgstr "显示应用程序的权限" -#: app/flatpak-builtins-document-list.c:171 +#: app/flatpak-builtins-document-list.c:159 +msgid "No documents found\n" +msgstr "未找到文档\n" + +#: app/flatpak-builtins-document-list.c:178 msgid "[APPID] - List exported files" msgstr "[应用标识] - 列出导出的文件" @@ -1610,12 +1594,10 @@ msgid " - Show history" msgstr " - 显示历史" #: app/flatpak-builtins-history.c:488 -#, c-format msgid "Failed to parse the --since option" msgstr "解析 --since 选项失败" #: app/flatpak-builtins-history.c:499 -#, c-format msgid "Failed to parse the --until option" msgstr "解析 --until 选项失败" @@ -1667,10 +1649,10 @@ msgstr "显示权限" msgid "Query file access" msgstr "查询文件访问" -#: app/flatpak-builtins-info.c:67 app/flatpak-builtins-install.c:80 -#: app/flatpak-builtins-install.c:86 app/flatpak-builtins-run.c:90 -#: app/flatpak-builtins-run.c:91 app/flatpak-builtins-update.c:67 -#: app/flatpak-builtins-update.c:71 +#: app/flatpak-builtins-info.c:67 app/flatpak-builtins-install.c:82 +#: app/flatpak-builtins-install.c:88 app/flatpak-builtins-preinstall.c:68 +#: app/flatpak-builtins-run.c:90 app/flatpak-builtins-run.c:91 +#: app/flatpak-builtins-update.c:67 app/flatpak-builtins-update.c:71 msgid "PATH" msgstr "路径" @@ -1696,7 +1678,6 @@ msgid "ref not present in origin" msgstr "引用在来源中不存在" #: app/flatpak-builtins-info.c:211 app/flatpak-builtins-remote-info.c:217 -#, c-format msgid "Warning: Commit has no flatpak metadata\n" msgstr "警告:提交中没有 flatpak 元数据\n" @@ -1842,125 +1823,136 @@ msgstr "无人维护" msgid "unknown" msgstr "未知" -#: app/flatpak-builtins-install.c:67 +#: app/flatpak-builtins-install.c:68 app/flatpak-builtins-preinstall.c:57 msgid "Don't pull, only install from local cache" msgstr "不要提取,仅从本地缓存安装" -#: app/flatpak-builtins-install.c:68 app/flatpak-builtins-update.c:60 +#: app/flatpak-builtins-install.c:69 app/flatpak-builtins-preinstall.c:58 +#: app/flatpak-builtins-update.c:60 msgid "Don't deploy, only download to local cache" msgstr "不要部署,仅下载到本地缓存" -#: app/flatpak-builtins-install.c:69 +#: app/flatpak-builtins-install.c:70 app/flatpak-builtins-preinstall.c:59 msgid "Don't install related refs" msgstr "不要安装相关的引用" -#: app/flatpak-builtins-install.c:70 app/flatpak-builtins-update.c:62 +#: app/flatpak-builtins-install.c:71 app/flatpak-builtins-preinstall.c:60 +#: app/flatpak-builtins-update.c:62 msgid "Don't verify/install runtime dependencies" msgstr "不要验证/安装运行时依赖" -#: app/flatpak-builtins-install.c:71 +#: app/flatpak-builtins-install.c:72 msgid "Don't automatically pin explicit installs" msgstr "不要自动置顶明确的安装" -#: app/flatpak-builtins-install.c:72 app/flatpak-builtins-update.c:63 +#: app/flatpak-builtins-install.c:73 app/flatpak-builtins-preinstall.c:61 +#: app/flatpak-builtins-update.c:63 msgid "Don't use static deltas" msgstr "不要使用静态增量" -#: app/flatpak-builtins-install.c:75 +#: app/flatpak-builtins-install.c:76 app/flatpak-builtins-preinstall.c:62 msgid "Additionally install the SDK used to build the given refs" msgstr "附带安装用于构建给定引用的 SDK" -#: app/flatpak-builtins-install.c:76 +#: app/flatpak-builtins-install.c:77 app/flatpak-builtins-preinstall.c:63 msgid "" "Additionally install the debug info for the given refs and their dependencies" msgstr "另外 为给定的引用及其依赖安装调试信息包" -#: app/flatpak-builtins-install.c:77 +#: app/flatpak-builtins-install.c:78 msgid "Assume LOCATION is a .flatpak single-file bundle" msgstr "假定位置是 .flatpak 单文件捆绑包" -#: app/flatpak-builtins-install.c:78 +#: app/flatpak-builtins-install.c:79 msgid "Assume LOCATION is a .flatpakref application description" msgstr "假定位置是 .flatpakref 应用描述" -#: app/flatpak-builtins-install.c:79 +#: app/flatpak-builtins-install.c:80 +msgid "Assume LOCATION is containers-transports(5) reference to an OCI image" +msgstr "假定位置是引用至 OCI 镜像的 containers-transports(5)" + +#: app/flatpak-builtins-install.c:81 msgid "Check bundle signatures with GPG key from FILE (- for stdin)" msgstr "用来自文件(- 用于 stdin)的 GPG 密钥检查捆绑包签名" -#: app/flatpak-builtins-install.c:80 +#: app/flatpak-builtins-install.c:82 msgid "Only install this subpath" msgstr "仅安装此子路径" -#: app/flatpak-builtins-install.c:81 app/flatpak-builtins-uninstall.c:63 -#: app/flatpak-builtins-update.c:68 +#: app/flatpak-builtins-install.c:83 app/flatpak-builtins-preinstall.c:64 +#: app/flatpak-builtins-uninstall.c:63 app/flatpak-builtins-update.c:68 msgid "Automatically answer yes for all questions" msgstr "对所有问题自动回答是" -#: app/flatpak-builtins-install.c:82 +#: app/flatpak-builtins-install.c:84 app/flatpak-builtins-preinstall.c:65 msgid "Uninstall first if already installed" msgstr "如果已安装会先卸载" -#: app/flatpak-builtins-install.c:83 app/flatpak-builtins-uninstall.c:64 -#: app/flatpak-builtins-update.c:69 +#: app/flatpak-builtins-install.c:85 app/flatpak-builtins-preinstall.c:66 +#: app/flatpak-builtins-uninstall.c:64 app/flatpak-builtins-update.c:69 msgid "Produce minimal output and don't ask questions" msgstr "显示最少的输出信息且不会询问问题" -#: app/flatpak-builtins-install.c:84 +#: app/flatpak-builtins-install.c:86 msgid "Update install if already installed" msgstr "如果已经安装会更新安装" #. Translators: A sideload is when you install from a local USB drive rather than the Internet. -#: app/flatpak-builtins-install.c:86 app/flatpak-builtins-update.c:71 +#: app/flatpak-builtins-install.c:88 app/flatpak-builtins-preinstall.c:68 +#: app/flatpak-builtins-update.c:71 msgid "Use this local repo for sideloads" msgstr "对侧载使用该本地仓库" -#: app/flatpak-builtins-install.c:145 +#: app/flatpak-builtins-install.c:177 msgid "Bundle filename must be specified" msgstr "必须指定捆绑包文件名" -#: app/flatpak-builtins-install.c:155 +#: app/flatpak-builtins-install.c:187 msgid "Remote bundles are not supported" msgstr "不支持远程捆绑包" -#: app/flatpak-builtins-install.c:214 +#: app/flatpak-builtins-install.c:230 msgid "Filename or uri must be specified" msgstr "必须指定文件名或网址" -#: app/flatpak-builtins-install.c:296 +#: app/flatpak-builtins-install.c:291 +msgid "Image location must be specified" +msgstr "必须指定镜像位置" + +#: app/flatpak-builtins-install.c:341 msgid "[LOCATION/REMOTE] [REF…] - Install applications or runtimes" msgstr "[位置/远程] [引用…] - 安装应用程序或运行时" -#: app/flatpak-builtins-install.c:322 +#: app/flatpak-builtins-install.c:374 msgid "At least one REF must be specified" msgstr "必须至少指定一个引用" -#: app/flatpak-builtins-install.c:336 -#, c-format +#: app/flatpak-builtins-install.c:388 msgid "Looking for matches…\n" msgstr "寻找匹配项…\n" -#: app/flatpak-builtins-install.c:457 +#: app/flatpak-builtins-install.c:509 #, c-format msgid "No remote refs found for ‘%s’" msgstr "未发现用于“%s”的远程引用" -#: app/flatpak-builtins-install.c:533 app/flatpak-builtins-uninstall.c:405 +#: app/flatpak-builtins-install.c:569 app/flatpak-builtins-uninstall.c:405 #: common/flatpak-ref-utils.c:689 common/flatpak-ref-utils.c:1595 #, c-format msgid "Invalid branch %s: %s" msgstr "无效的分支 %s:%s" -#: app/flatpak-builtins-install.c:566 +#: app/flatpak-builtins-install.c:602 #, c-format msgid "Nothing matches %s in local repository for remote %s" msgstr "未在用于远程仓库 %2$s 的本地仓库中发现 %1$s 的匹配项" -#: app/flatpak-builtins-install.c:568 +#: app/flatpak-builtins-install.c:604 #, c-format msgid "Nothing matches %s in remote %s" msgstr "未在远程仓库 %2$s 中发现 %1$s 的匹配项" -#: app/flatpak-builtins-install.c:589 +#: app/flatpak-builtins-install.c:625 #, c-format msgid "Skipping: %s\n" msgstr "正在跳过:%s\n" @@ -2137,12 +2129,10 @@ msgid "" msgstr "[匹配模式…] - 禁用更新和自动安装匹配模式" #: app/flatpak-builtins-mask.c:73 -#, c-format msgid "No masked patterns\n" msgstr "没有屏蔽的匹配模式\n" #: app/flatpak-builtins-mask.c:78 -#, c-format msgid "Masked patterns:\n" msgstr "屏蔽的匹配模式:\n" @@ -2234,15 +2224,21 @@ msgid "[PATTERN…] - disable automatic removal of runtimes matching patterns" msgstr "[匹配模式…] - 禁用对匹配匹配模式的运行时的自动移除" #: app/flatpak-builtins-pin.c:75 -#, c-format msgid "No pinned patterns\n" msgstr "没有置顶的匹配模式\n" #: app/flatpak-builtins-pin.c:80 -#, c-format msgid "Pinned patterns:\n" msgstr "置顶的匹配模式:\n" +#: app/flatpak-builtins-preinstall.c:80 +msgid "- Install flatpaks that are part of the operating system" +msgstr "- 安装视为操作系统一部分的 flatpak" + +#: app/flatpak-builtins-preinstall.c:118 app/flatpak-builtins-update.c:274 +msgid "Nothing to do.\n" +msgstr "无事可做。\n" + #: app/flatpak-builtins-ps.c:47 msgid "Instance" msgstr "实例" @@ -2408,7 +2404,7 @@ msgstr "不要跟随摘要文件中设置的重定向" msgid "Can't load uri %s: %s\n" msgstr "无法加载网址 %s:%s\n" -#: app/flatpak-builtins-remote-add.c:271 common/flatpak-dir.c:4052 +#: app/flatpak-builtins-remote-add.c:271 common/flatpak-dir.c:4438 #, c-format msgid "Can't load file %s: %s\n" msgstr "无法加载文件 %s:%s\n" @@ -2773,7 +2769,6 @@ msgid "[%d/%d] Verifying %s…\n" msgstr "[%d/%d] 正在校验 %s…\n" #: app/flatpak-builtins-repair.c:435 -#, c-format msgid "Dry run: " msgstr "演练:" @@ -2793,7 +2788,6 @@ msgid "Deleting ref %s due to %d\n" msgstr "由于 %2$d 正在删除引用 %1$s\n" #: app/flatpak-builtins-repair.c:464 -#, c-format msgid "Checking remotes...\n" msgstr "正在检查远程仓库…\n" @@ -2808,22 +2802,18 @@ msgid "Remote %s for ref %s is disabled\n" msgstr "引用 %2$s 的远程仓库 %1$s 已禁用\n" #: app/flatpak-builtins-repair.c:490 -#, c-format msgid "Pruning objects\n" msgstr "正在修剪对象\n" #: app/flatpak-builtins-repair.c:498 -#, c-format msgid "Erasing .removed\n" msgstr "正在擦除 .removed\n" #: app/flatpak-builtins-repair.c:523 -#, c-format msgid "Reinstalling refs\n" msgstr "重新安装引用\n" #: app/flatpak-builtins-repair.c:525 -#, c-format msgid "Reinstalling removed refs\n" msgstr "重新安装已移除的引用\n" @@ -2858,7 +2848,6 @@ msgid "false" msgstr "失败的" #: app/flatpak-builtins-repo.c:120 -#, c-format msgid "Subsummaries: " msgstr "子摘要:" @@ -3180,7 +3169,6 @@ msgstr "" "这些运行时在安装“%s”中是置顶的且不会被移除;查阅 flatpak-pin(1):\n" #: app/flatpak-builtins-uninstall.c:370 -#, c-format msgid "Nothing unused to uninstall\n" msgstr "无可卸载的未使用项目\n" @@ -3205,10 +3193,13 @@ msgid "Warning: %s is not installed\n" msgstr "警告:%s 未安装\n" #: app/flatpak-builtins-uninstall.c:490 -#, c-format msgid "None of the specified refs are installed" msgstr "指定的引用都没有安装" +#: app/flatpak-builtins-uninstall.c:599 +msgid "No app data to delete\n" +msgstr "无可删除的应用数据\n" + #: app/flatpak-builtins-update.c:56 msgid "Arch to update for" msgstr "要更新的架构" @@ -3246,7 +3237,6 @@ msgid "With --commit, only one REF may be specified" msgstr "带有 --commit,仅可指定一个引用" #: app/flatpak-builtins-update.c:162 -#, c-format msgid "Looking for updates…\n" msgstr "正在查找更新…\n" @@ -3255,11 +3245,6 @@ msgstr "正在查找更新…\n" msgid "Unable to update %s: %s\n" msgstr "无法更新 %s:%s\n" -#: app/flatpak-builtins-update.c:274 -#, c-format -msgid "Nothing to do.\n" -msgstr "无事可做。\n" - #: app/flatpak-builtins-utils.c:342 #, c-format msgid "Remote ‘%s’ found in multiple installations:" @@ -3318,7 +3303,6 @@ msgid "Found installed ref ‘%s’ (%s). Is this correct?" msgstr "找到已安装的引用“%s”(%s)。这结果正确吗?" #: app/flatpak-builtins-utils.c:522 -#, c-format msgid "All of the above" msgstr "上面全部" @@ -3622,12 +3606,10 @@ msgstr "" "信息:应用 %s%s%s 分支 %s%s%s 已结束生命周期,原因:\n" #: app/flatpak-cli-transaction.c:960 -#, c-format msgid "Info: applications using this extension:\n" msgstr "信息:使用该扩展的应用程序:\n" #: app/flatpak-cli-transaction.c:962 -#, c-format msgid "Info: applications using this runtime:\n" msgstr "信息:使用该运行时的应用程序:\n" @@ -3636,7 +3618,6 @@ msgid "Replace?" msgstr "替换吗?" #: app/flatpak-cli-transaction.c:984 app/flatpak-quiet-transaction.c:247 -#, c-format msgid "Updating to rebased version\n" msgstr "正在更新到重新建基版本\n" @@ -3755,8 +3736,12 @@ msgstr "修复 flatpak 安装" msgid "Put applications or runtimes onto removable media" msgstr "将应用程序或运行时放到可移动媒体上" +#: app/flatpak-main.c:92 +msgid "Install flatpaks that are part of the operating system" +msgstr "安装视为操作系统一部分的 flatpak" + #. translators: please keep the leading newline and space -#: app/flatpak-main.c:94 +#: app/flatpak-main.c:95 msgid "" "\n" " Find applications and runtimes" @@ -3764,12 +3749,12 @@ msgstr "" "\n" "查找应用程序和运行时" -#: app/flatpak-main.c:95 +#: app/flatpak-main.c:96 msgid "Search for remote apps/runtimes" msgstr "搜索远程仓库的应用/运行时" #. translators: please keep the leading newline and space -#: app/flatpak-main.c:98 +#: app/flatpak-main.c:99 msgid "" "\n" " Manage running applications" @@ -3777,32 +3762,32 @@ msgstr "" "\n" "管理正在运行的应用程序" -#: app/flatpak-main.c:99 +#: app/flatpak-main.c:100 msgid "Run an application" msgstr "运行应用程序" -#: app/flatpak-main.c:100 +#: app/flatpak-main.c:101 msgid "Override permissions for an application" msgstr "覆盖应用程序的权限" -#: app/flatpak-main.c:101 +#: app/flatpak-main.c:102 msgid "Specify default version to run" msgstr "指定要运行的默认版本" -#: app/flatpak-main.c:102 +#: app/flatpak-main.c:103 msgid "Enter the namespace of a running application" msgstr "进入正在运行应用程序的命名空间" -#: app/flatpak-main.c:103 +#: app/flatpak-main.c:104 msgid "Enumerate running applications" msgstr "列举正在运行的应用程序" -#: app/flatpak-main.c:104 +#: app/flatpak-main.c:105 msgid "Stop a running application" msgstr "停止正在运行的应用程序" #. translators: please keep the leading newline and space -#: app/flatpak-main.c:107 +#: app/flatpak-main.c:108 msgid "" "\n" " Manage file access" @@ -3810,24 +3795,24 @@ msgstr "" "\n" "管理文件访问" -#: app/flatpak-main.c:108 +#: app/flatpak-main.c:109 msgid "List exported files" msgstr "列出导出的文件" -#: app/flatpak-main.c:109 +#: app/flatpak-main.c:110 msgid "Grant an application access to a specific file" msgstr "同意应用程序对特定文件的访问" -#: app/flatpak-main.c:110 +#: app/flatpak-main.c:111 msgid "Revoke access to a specific file" msgstr "撤消对特定文件的访问" -#: app/flatpak-main.c:111 +#: app/flatpak-main.c:112 msgid "Show information about a specific file" msgstr "显示有关特定文件的信息" #. translators: please keep the leading newline and space -#: app/flatpak-main.c:115 +#: app/flatpak-main.c:116 msgid "" "\n" " Manage dynamic permissions" @@ -3835,28 +3820,28 @@ msgstr "" "\n" "管理动态权限" -#: app/flatpak-main.c:116 +#: app/flatpak-main.c:117 msgid "List permissions" msgstr "列出权限" -#: app/flatpak-main.c:117 +#: app/flatpak-main.c:118 msgid "Remove item from permission store" msgstr "从权限存储中移除项目" -#: app/flatpak-main.c:119 +#: app/flatpak-main.c:120 msgid "Set permissions" msgstr "设置权限" -#: app/flatpak-main.c:120 +#: app/flatpak-main.c:121 msgid "Show app permissions" msgstr "显示应用权限" -#: app/flatpak-main.c:121 +#: app/flatpak-main.c:122 msgid "Reset app permissions" msgstr "重置应用权限" #. translators: please keep the leading newline and space -#: app/flatpak-main.c:124 +#: app/flatpak-main.c:125 msgid "" "\n" " Manage remote repositories" @@ -3864,32 +3849,32 @@ msgstr "" "\n" "管理远程仓库" -#: app/flatpak-main.c:125 +#: app/flatpak-main.c:126 msgid "List all configured remotes" msgstr "列出所有已配置的远程仓库" -#: app/flatpak-main.c:126 +#: app/flatpak-main.c:127 msgid "Add a new remote repository (by URL)" msgstr "添加新的远程仓库(通过网址)" -#: app/flatpak-main.c:127 +#: app/flatpak-main.c:128 msgid "Modify properties of a configured remote" msgstr "修改已配置远程仓库的属性" -#: app/flatpak-main.c:128 +#: app/flatpak-main.c:129 msgid "Delete a configured remote" msgstr "删除已配置的远程仓库" -#: app/flatpak-main.c:130 +#: app/flatpak-main.c:131 msgid "List contents of a configured remote" msgstr "列出已配置远程仓库的内容" -#: app/flatpak-main.c:131 +#: app/flatpak-main.c:132 msgid "Show information about a remote app or runtime" msgstr "显示远程仓库中应用或运行时的有关信息" #. translators: please keep the leading newline and space -#: app/flatpak-main.c:134 +#: app/flatpak-main.c:135 msgid "" "\n" " Build applications" @@ -3897,99 +3882,99 @@ msgstr "" "\n" "构建应用程序" -#: app/flatpak-main.c:135 +#: app/flatpak-main.c:136 msgid "Initialize a directory for building" msgstr "初始化用于构建的目录" -#: app/flatpak-main.c:136 +#: app/flatpak-main.c:137 msgid "Run a build command inside the build dir" msgstr "在构建目录中运行构建命令" -#: app/flatpak-main.c:137 +#: app/flatpak-main.c:138 msgid "Finish a build dir for export" msgstr "完成导出的构建目录" -#: app/flatpak-main.c:138 +#: app/flatpak-main.c:139 msgid "Export a build dir to a repository" msgstr "将构建目录导出到仓库" -#: app/flatpak-main.c:139 +#: app/flatpak-main.c:140 msgid "Create a bundle file from a ref in a local repository" msgstr "从本地仓库中的引用创建捆绑包文件" -#: app/flatpak-main.c:140 +#: app/flatpak-main.c:141 msgid "Import a bundle file" msgstr "导入捆绑包文件" -#: app/flatpak-main.c:141 +#: app/flatpak-main.c:142 msgid "Sign an application or runtime" msgstr "签署应用程序或运行时" -#: app/flatpak-main.c:142 +#: app/flatpak-main.c:143 msgid "Update the summary file in a repository" msgstr "更新仓库中的摘要文件" -#: app/flatpak-main.c:143 +#: app/flatpak-main.c:144 msgid "Create new commit based on existing ref" msgstr "基于现有引用创建新的提交" -#: app/flatpak-main.c:144 +#: app/flatpak-main.c:145 msgid "Show information about a repo" msgstr "显示仓库的有关信息" -#: app/flatpak-main.c:161 +#: app/flatpak-main.c:162 msgid "Show debug information, -vv for more detail" msgstr "显示调试信息,-vv 显示更多详情" -#: app/flatpak-main.c:162 +#: app/flatpak-main.c:163 msgid "Show OSTree debug information" msgstr "显示 OSTree 调试信息" -#: app/flatpak-main.c:168 +#: app/flatpak-main.c:169 msgid "Print version information and exit" msgstr "打印版本信息并退出" -#: app/flatpak-main.c:169 +#: app/flatpak-main.c:170 msgid "Print default arch and exit" msgstr "显示默认架构并退出" -#: app/flatpak-main.c:170 +#: app/flatpak-main.c:171 msgid "Print supported arches and exit" msgstr "显示支持架构并退出" -#: app/flatpak-main.c:171 +#: app/flatpak-main.c:172 msgid "Print active gl drivers and exit" msgstr "显示激活 gl 驱动并退出" -#: app/flatpak-main.c:172 +#: app/flatpak-main.c:173 msgid "Print paths for system installations and exit" msgstr "显示系统安装路径并退出" -#: app/flatpak-main.c:173 +#: app/flatpak-main.c:174 msgid "Print the updated environment needed to run flatpaks" msgstr "显示运行 flatpak 应用所需的已更新环境" -#: app/flatpak-main.c:174 +#: app/flatpak-main.c:175 msgid "Only include the system installation with --print-updated-env" msgstr "仅包含带有 --print-updated-env 的系统安装" -#: app/flatpak-main.c:179 +#: app/flatpak-main.c:180 msgid "Work on the user installation" msgstr "用于用户级安装" -#: app/flatpak-main.c:180 +#: app/flatpak-main.c:181 msgid "Work on the system-wide installation (default)" msgstr "用于系统级安装(默认)" -#: app/flatpak-main.c:181 +#: app/flatpak-main.c:182 msgid "Work on a non-default system-wide installation" msgstr "用于非默认系统级安装" -#: app/flatpak-main.c:211 +#: app/flatpak-main.c:212 msgid "Builtin Commands:" msgstr "内置命令:" -#: app/flatpak-main.c:297 +#: app/flatpak-main.c:298 #, c-format msgid "" "Note that the directories %s are not in the search path set by the " @@ -3999,7 +3984,7 @@ msgstr "" "请注意 %s 目录不在由 XDG_DATA_DIRS 环境变量设置的搜索路径中,因此通过 " "Flatpak 安装的应用在会话重启前可能不会出现在您的桌面。" -#: app/flatpak-main.c:311 +#: app/flatpak-main.c:312 #, c-format msgid "" "Note that the directory %s is not in the search path set by the " @@ -4009,7 +3994,7 @@ msgstr "" "请注意 %s 目录不在由 XDG_DATA_DIRS 环境变量设置的搜索路径中,因此通过 " "Flatpak 安装的应用在会话重启前可能不会出现在您的桌面。" -#: app/flatpak-main.c:380 +#: app/flatpak-main.c:381 msgid "" "Refusing to operate under sudo with --user. Omit sudo to operate on the user " "installation, or use a root shell to operate on the root user's installation." @@ -4017,31 +4002,31 @@ msgstr "" "拒绝在 sudo 下带 --user 操作。在用户级安装时删去 sudo,或者在根用户级安装时使" "用根 shell 操作。" -#: app/flatpak-main.c:452 +#: app/flatpak-main.c:453 msgid "" "Multiple installations specified for a command that works on one installation" msgstr "为在用于一个安装的命令指定了多个安装" -#: app/flatpak-main.c:503 app/flatpak-main.c:690 +#: app/flatpak-main.c:504 app/flatpak-main.c:691 #, c-format msgid "See '%s --help'" msgstr "参见“%s --help”" -#: app/flatpak-main.c:699 +#: app/flatpak-main.c:700 #, c-format msgid "'%s' is not a flatpak command. Did you mean '%s%s'?" msgstr "“%s”不是 flatpak 命令。您的意思是“%s%s”吗?" -#: app/flatpak-main.c:702 +#: app/flatpak-main.c:703 #, c-format msgid "'%s' is not a flatpak command" msgstr "“%s”不是 flatpak 命令" -#: app/flatpak-main.c:817 +#: app/flatpak-main.c:818 msgid "No command specified" msgstr "未指定命令" -#: app/flatpak-main.c:976 +#: app/flatpak-main.c:977 msgid "error:" msgstr "错误:" @@ -4100,16 +4085,16 @@ msgstr "警告:卸载 %s 失败:%s\n" msgid "Error: Failed to uninstall %s: %s\n" msgstr "错误:卸载 %s 失败:%s\n" -#: app/flatpak-quiet-transaction.c:166 common/flatpak-dir.c:10535 +#: app/flatpak-quiet-transaction.c:166 common/flatpak-dir.c:10894 #, c-format msgid "%s already installed" msgstr "%s 已安装" #: app/flatpak-quiet-transaction.c:168 common/flatpak-dir-utils.c:166 -#: common/flatpak-dir-utils.c:259 common/flatpak-dir.c:3033 -#: common/flatpak-dir.c:3732 common/flatpak-dir.c:15888 -#: common/flatpak-dir.c:16178 common/flatpak-transaction.c:2669 -#: common/flatpak-transaction.c:2724 +#: common/flatpak-dir-utils.c:259 common/flatpak-dir.c:3419 +#: common/flatpak-dir.c:4118 common/flatpak-dir.c:16257 +#: common/flatpak-dir.c:16547 common/flatpak-transaction.c:2693 +#: common/flatpak-transaction.c:2748 #, c-format msgid "%s not installed" msgstr "%s 未安装" @@ -4179,7 +4164,6 @@ msgid "Filesystem location \"%s\" contains \"..\"" msgstr "文件系统位置“%s”包含“..”" #: common/flatpak-context.c:1002 -#, c-format msgid "" "--filesystem=/ is not available, use --filesystem=host for a similar result" msgstr "--filesystem=/ 不可用,使用 --filesystem=host 获得相似结果" @@ -4204,22 +4188,18 @@ msgid "Environment variable name must not contain '=': %s" msgstr "环境变量名称不能包含“=”:%s" #: common/flatpak-context.c:1540 common/flatpak-context.c:1548 -#, c-format msgid "--add-policy arguments must be in the form SUBSYSTEM.KEY=VALUE" msgstr "--add-policy 参数的格式必须为 SUBSYSTEM.KEY=VALUE" #: common/flatpak-context.c:1555 -#, c-format msgid "--add-policy values can't start with \"!\"" msgstr "--add-policy 值不能以“!”开头" #: common/flatpak-context.c:1580 common/flatpak-context.c:1588 -#, c-format msgid "--remove-policy arguments must be in the form SUBSYSTEM.KEY=VALUE" msgstr "--remove-policy 参数的格式必须为 SUBSYSTEM.KEY=VALUE" #: common/flatpak-context.c:1595 -#, c-format msgid "--remove-policy values can't start with \"!\"" msgstr "--remove-policy 值不能以“!”开头" @@ -4371,7 +4351,6 @@ msgid "Add USB device to hidden list" msgstr "添加 USB 设备至隐藏列表" #: common/flatpak-context.c:1694 -#, fuzzy msgid "A list of USB devices that are enumerable" msgstr "可枚举的 USB 设备列表" @@ -4380,9 +4359,8 @@ msgid "LIST" msgstr "列表" #: common/flatpak-context.c:1695 -#, fuzzy msgid "File containing a list of USB devices to make enumerable" -msgstr "包含可枚举 USB 设备列表的文件" +msgstr "包含可使其枚举的 USB 设备列表的文件" #: common/flatpak-context.c:1695 common/flatpak-context.c:1696 msgid "FILENAME" @@ -4421,410 +4399,401 @@ msgstr "不允许访问主目录:%s" msgid "Unable to provide a temporary home directory in the sandbox: %s" msgstr "无法在沙盒中提供临时主目录:%s" -#: common/flatpak-dir.c:425 +#: common/flatpak-dir.c:436 #, c-format msgid "Configured collection ID ‘%s’ not in summary file" msgstr "已配置的集合标识“%s”不在摘要文件中" -#: common/flatpak-dir.c:563 +#: common/flatpak-dir.c:574 #, c-format msgid "Unable to load summary from remote %s: %s" msgstr "无法从远程仓库 %s 加载摘要:%s" -#: common/flatpak-dir.c:712 common/flatpak-dir.c:784 +#: common/flatpak-dir.c:723 common/flatpak-dir.c:795 #, c-format msgid "No such ref '%s' in remote %s" msgstr "在远程仓库 %2$s 中没有引用“%1$s”" -#: common/flatpak-dir.c:769 common/flatpak-dir.c:906 common/flatpak-dir.c:935 -#: common/flatpak-dir.c:947 +#: common/flatpak-dir.c:780 common/flatpak-dir.c:917 common/flatpak-dir.c:946 +#: common/flatpak-dir.c:958 #, c-format msgid "No entry for %s in remote %s summary flatpak cache" msgstr "在远程仓库 %2$s 摘要 flatpak 缓存中没有 %1$s 的条目" -#: common/flatpak-dir.c:924 +#: common/flatpak-dir.c:935 #, c-format msgid "No summary or Flatpak cache available for remote %s" msgstr "远程仓库 %s 没有可用的摘要或 Flatpak 缓存" -#: common/flatpak-dir.c:952 +#: common/flatpak-dir.c:963 #, c-format msgid "Missing xa.data in summary for remote %s" msgstr "远程仓库 %s 的摘要中缺失 xa.data" -#: common/flatpak-dir.c:958 common/flatpak-dir.c:1375 +#: common/flatpak-dir.c:969 common/flatpak-dir.c:1362 #, c-format msgid "Unsupported summary version %d for remote %s" msgstr "不支持用于远程仓库 %2$s 的摘要版本 %1$d" -#: common/flatpak-dir.c:1045 +#: common/flatpak-dir.c:1056 msgid "Remote OCI index has no registry uri" msgstr "远程 OCI 索引没有注册网址" -#: common/flatpak-dir.c:1114 +#: common/flatpak-dir.c:1112 #, c-format msgid "Couldn't find ref %s in remote %s" msgstr "在远程仓库 %2$s 中无法找到引用 %1$s" -#: common/flatpak-dir.c:1131 common/flatpak-dir.c:6044 -#: common/flatpak-oci-registry.c:3493 common/flatpak-oci-registry.c:3498 -msgid "Image is not a manifest" -msgstr "镜像不是清单" - -#: common/flatpak-dir.c:1152 common/flatpak-dir.c:1225 +#: common/flatpak-dir.c:1129 common/flatpak-dir.c:1212 #, c-format msgid "Commit has no requested ref ‘%s’ in ref binding metadata" msgstr "提交在引用绑定元数据中没有请求的引用“%s”" -#: common/flatpak-dir.c:1256 +#: common/flatpak-dir.c:1243 #, c-format msgid "Configured collection ID ‘%s’ not in binding metadata" msgstr "已配置的集合标识“%s”不在绑定元数据中" -#: common/flatpak-dir.c:1292 common/flatpak-dir.c:5032 -#: common/flatpak-dir.c:5953 common/flatpak-dir.c:6021 +#: common/flatpak-dir.c:1279 common/flatpak-dir.c:5418 #, c-format msgid "Couldn't find latest checksum for ref %s in remote %s" msgstr "无法在远程仓库 %2$s 中找到引用 %1$s 的最新校验和" -#: common/flatpak-dir.c:1345 common/flatpak-dir.c:1381 +#: common/flatpak-dir.c:1332 common/flatpak-dir.c:1368 #, c-format msgid "No entry for %s in remote %s summary flatpak sparse cache" msgstr "在远程仓库 %2$s 摘要 flatpak 解析缓存中没有 %1$s 的条目" -#: common/flatpak-dir.c:1970 +#: common/flatpak-dir.c:2356 #, c-format msgid "Commit metadata for %s not matching expected metadata" msgstr "用于 %s 的提交元数据与预期不匹配" -#: common/flatpak-dir.c:2235 +#: common/flatpak-dir.c:2621 msgid "Unable to connect to system bus" msgstr "无法连接到系统总线" -#: common/flatpak-dir.c:2830 +#: common/flatpak-dir.c:3216 msgid "User installation" msgstr "用户级安装" -#: common/flatpak-dir.c:2837 +#: common/flatpak-dir.c:3223 #, c-format msgid "System (%s) installation" msgstr "系统级(%s)安装" -#: common/flatpak-dir.c:2883 +#: common/flatpak-dir.c:3269 #, c-format msgid "No overrides found for %s" msgstr "找不到 %s 的覆盖" -#: common/flatpak-dir.c:3036 +#: common/flatpak-dir.c:3422 #, c-format msgid "%s (commit %s) not installed" msgstr "%s(提交 %s)未安装" -#: common/flatpak-dir.c:4059 +#: common/flatpak-dir.c:4445 #, c-format msgid "Error parsing system flatpakrepo file for %s: %s" msgstr "解析 %s 的系统 flatpakrepo 文件时出错:%s" -#: common/flatpak-dir.c:4134 +#: common/flatpak-dir.c:4520 #, c-format msgid "While opening repository %s: " msgstr "打开仓库 %s 时:" -#: common/flatpak-dir.c:4395 +#: common/flatpak-dir.c:4781 #, c-format msgid "The config key %s is not set" msgstr "未设置配置密钥 %s" -#: common/flatpak-dir.c:4528 +#: common/flatpak-dir.c:4914 #, c-format msgid "No current %s pattern matching %s" msgstr "当前 %s 没有匹配模式 %s" -#: common/flatpak-dir.c:4810 +#: common/flatpak-dir.c:5196 msgid "No appstream commit to deploy" msgstr "没有 appstream 提交可部署" -#: common/flatpak-dir.c:5328 common/flatpak-dir.c:6378 -#: common/flatpak-dir.c:9971 common/flatpak-dir.c:10677 +#: common/flatpak-dir.c:5714 common/flatpak-dir.c:6720 +#: common/flatpak-dir.c:10325 common/flatpak-dir.c:11037 msgid "Can't pull from untrusted non-gpg verified remote" msgstr "无法从不信任的无 GPG 校验的远程仓库提取" -#: common/flatpak-dir.c:5740 common/flatpak-dir.c:5777 +#: common/flatpak-dir.c:6126 common/flatpak-dir.c:6163 msgid "Extra data not supported for non-gpg-verified local system installs" msgstr "无 GPG 校验的本地系统级安装不支持额外数据" -#: common/flatpak-dir.c:5806 +#: common/flatpak-dir.c:6192 #, c-format msgid "Invalid checksum for extra data uri %s" msgstr "额外数据网址 %s 校验和无效" -#: common/flatpak-dir.c:5811 +#: common/flatpak-dir.c:6197 #, c-format msgid "Empty name for extra data uri %s" msgstr "额外数据网址 %s 的空白名称" -#: common/flatpak-dir.c:5818 +#: common/flatpak-dir.c:6204 #, c-format msgid "Unsupported extra data uri %s" msgstr "不支持的额外数据网址 %s" -#: common/flatpak-dir.c:5832 +#: common/flatpak-dir.c:6218 #, c-format msgid "Failed to load local extra-data %s: %s" msgstr "加载本地额外数据 %s 失败:%s" -#: common/flatpak-dir.c:5835 +#: common/flatpak-dir.c:6221 #, c-format msgid "Wrong size for extra-data %s" msgstr "额外数据 %s 的大小错误" -#: common/flatpak-dir.c:5850 +#: common/flatpak-dir.c:6236 #, c-format msgid "While downloading %s: " msgstr "下载 %s 时:" -#: common/flatpak-dir.c:5857 +#: common/flatpak-dir.c:6243 #, c-format msgid "Wrong size for extra data %s" msgstr "额外数据 %s 的大小错误" -#: common/flatpak-dir.c:5866 +#: common/flatpak-dir.c:6252 #, c-format msgid "Invalid checksum for extra data %s" msgstr "额外数据 %s 的校验和无效" -#: common/flatpak-dir.c:5961 common/flatpak-dir.c:8816 -#: common/flatpak-dir.c:10555 -#, c-format -msgid "%s commit %s already installed" -msgstr "%s 提交 %s 已安装" - -#: common/flatpak-dir.c:6208 common/flatpak-dir.c:6461 +#: common/flatpak-dir.c:6550 common/flatpak-dir.c:6803 #, c-format msgid "While pulling %s from remote %s: " msgstr "从远程仓库 %2$s 提取 %1$s 时:" -#: common/flatpak-dir.c:6402 common/flatpak-repo-utils.c:3906 +#: common/flatpak-dir.c:6744 common/flatpak-repo-utils.c:3909 msgid "GPG signatures found, but none are in trusted keyring" msgstr "找到 GPG 签名,但都不在信任的密钥环中" -#: common/flatpak-dir.c:6419 +#: common/flatpak-dir.c:6761 #, c-format msgid "Commit for ‘%s’ has no ref binding" msgstr "“%s”的提交没有引用绑定" -#: common/flatpak-dir.c:6424 +#: common/flatpak-dir.c:6766 #, c-format msgid "Commit for ‘%s’ is not in expected bound refs: %s" msgstr "“%s”的提交不在预期的绑定引用中:%s" -#: common/flatpak-dir.c:6600 +#: common/flatpak-dir.c:6942 msgid "Only applications can be made current" msgstr "仅应用程序可被作为当前" -#: common/flatpak-dir.c:7304 +#: common/flatpak-dir.c:7646 msgid "Not enough memory" msgstr "内存不足" -#: common/flatpak-dir.c:7323 +#: common/flatpak-dir.c:7665 msgid "Failed to read from exported file" msgstr "从导出的文件读取失败" -#: common/flatpak-dir.c:7513 +#: common/flatpak-dir.c:7855 msgid "Error reading mimetype xml file" msgstr "读取 mimetype xml 文件时出错" -#: common/flatpak-dir.c:7518 +#: common/flatpak-dir.c:7860 msgid "Invalid mimetype xml file" msgstr "无效的 mimetype xml 文件" -#: common/flatpak-dir.c:7604 +#: common/flatpak-dir.c:7946 #, c-format msgid "D-Bus service file '%s' has wrong name" msgstr "D-Bus 服务文件“%s”名称错误" -#: common/flatpak-dir.c:7759 +#: common/flatpak-dir.c:8101 #, c-format msgid "Invalid Exec argument %s" msgstr "无效的执行参数 %s" -#: common/flatpak-dir.c:8226 +#: common/flatpak-dir.c:8568 msgid "While getting detached metadata: " msgstr "获取分离的元数据时:" -#: common/flatpak-dir.c:8231 common/flatpak-dir.c:8236 -#: common/flatpak-dir.c:8240 +#: common/flatpak-dir.c:8573 common/flatpak-dir.c:8578 +#: common/flatpak-dir.c:8582 msgid "Extra data missing in detached metadata" msgstr "分离的元数据中缺少额外的数据" -#: common/flatpak-dir.c:8244 +#: common/flatpak-dir.c:8586 msgid "While creating extradir: " msgstr "创建 extradir 时:" -#: common/flatpak-dir.c:8265 common/flatpak-dir.c:8298 +#: common/flatpak-dir.c:8607 common/flatpak-dir.c:8640 msgid "Invalid checksum for extra data" msgstr "额外数据的校验和无效" -#: common/flatpak-dir.c:8294 +#: common/flatpak-dir.c:8636 msgid "Wrong size for extra data" msgstr "额外数据的大小错误" -#: common/flatpak-dir.c:8307 +#: common/flatpak-dir.c:8649 #, c-format msgid "While writing extra data file '%s': " msgstr "写入额外数据文件“%s”时:" -#: common/flatpak-dir.c:8315 +#: common/flatpak-dir.c:8657 #, c-format msgid "Extra data %s missing in detached metadata" msgstr "分离的元数据中缺少额外的数据 %s" -#: common/flatpak-dir.c:8413 -#, fuzzy, c-format +#: common/flatpak-dir.c:8755 msgid "Unable to get runtime key from metadata" -msgstr "为元数据使用替代文件" +msgstr "无法从元数据获取运行时密钥" -#: common/flatpak-dir.c:8526 +#: common/flatpak-dir.c:8868 #, c-format msgid "apply_extra script failed, exit status %d" msgstr "apply_extra 脚本失败,退出状态为 %d" #. Translators: The placeholder is for an app ref. -#: common/flatpak-dir.c:8693 +#: common/flatpak-dir.c:9035 #, c-format msgid "Installing %s is not allowed by the policy set by your administrator" msgstr "您的管理员设置的策略不允许安装 %s" -#: common/flatpak-dir.c:8792 +#: common/flatpak-dir.c:9134 #, c-format msgid "While trying to resolve ref %s: " msgstr "尝试解决引用 %s 时:" -#: common/flatpak-dir.c:8804 +#: common/flatpak-dir.c:9146 #, c-format msgid "%s is not available" msgstr "%s 不可用" -#: common/flatpak-dir.c:8823 +#: common/flatpak-dir.c:9158 common/flatpak-dir.c:10914 +#, c-format +msgid "%s commit %s already installed" +msgstr "%s 提交 %s 已安装" + +#: common/flatpak-dir.c:9165 msgid "Can't create deploy directory" msgstr "无法创建部署目录" -#: common/flatpak-dir.c:8831 +#: common/flatpak-dir.c:9173 #, c-format msgid "Failed to read commit %s: " msgstr "读取提交 %s 失败:" -#: common/flatpak-dir.c:8852 +#: common/flatpak-dir.c:9194 #, c-format msgid "While trying to checkout %s into %s: " msgstr "尝试检验 %s 至 %s 时:" -#: common/flatpak-dir.c:8871 +#: common/flatpak-dir.c:9213 msgid "While trying to checkout metadata subpath: " msgstr "尝试检验元数据子路径时:" -#: common/flatpak-dir.c:8903 +#: common/flatpak-dir.c:9245 #, c-format msgid "While trying to checkout subpath ‘%s’: " msgstr "尝试检验子路径“%s”时:" -#: common/flatpak-dir.c:8913 +#: common/flatpak-dir.c:9255 msgid "While trying to remove existing extra dir: " msgstr "尝试移除现存额外目录时:" -#: common/flatpak-dir.c:8924 +#: common/flatpak-dir.c:9266 msgid "While trying to apply extra data: " msgstr "尝试应用额外数据时:" -#: common/flatpak-dir.c:8951 +#: common/flatpak-dir.c:9293 #, c-format msgid "Invalid commit ref %s: " msgstr "无效的提交引用 %s:" -#: common/flatpak-dir.c:8959 common/flatpak-dir.c:8971 +#: common/flatpak-dir.c:9301 common/flatpak-dir.c:9313 #, c-format msgid "Deployed ref %s does not match commit (%s)" msgstr "已部署的引用 %s 不匹配提交(%s)" -#: common/flatpak-dir.c:8965 +#: common/flatpak-dir.c:9307 #, c-format msgid "Deployed ref %s branch does not match commit (%s)" msgstr "已部署的引用 %s 分支不匹配提交(%s)" -#: common/flatpak-dir.c:9226 common/flatpak-installation.c:1912 +#: common/flatpak-dir.c:9569 common/flatpak-installation.c:1912 #, c-format msgid "%s branch %s already installed" msgstr "%s 分支 %s 已安装" -#: common/flatpak-dir.c:10075 +#: common/flatpak-dir.c:10429 #, c-format msgid "Could not unmount revokefs-fuse filesystem at %s: " msgstr "无法取消挂载位于 %s 的 revokefs-fuse 文件系统:" -#: common/flatpak-dir.c:10362 +#: common/flatpak-dir.c:10721 #, c-format msgid "This version of %s is already installed" msgstr "此版本的 %s 已安装" -#: common/flatpak-dir.c:10369 -#, c-format +#: common/flatpak-dir.c:10728 msgid "Can't change remote during bundle install" msgstr "捆绑包安装期间无法更改远程仓库" -#: common/flatpak-dir.c:10630 +#: common/flatpak-dir.c:10990 msgid "Can't update to a specific commit without root permissions" msgstr "没有 root 权限无法更新至指定提交" -#: common/flatpak-dir.c:10910 +#: common/flatpak-dir.c:11271 #, c-format msgid "Can't remove %s, it is needed for: %s" msgstr "无法移除 %s,需要它的有:%s" -#: common/flatpak-dir.c:10966 common/flatpak-installation.c:2068 +#: common/flatpak-dir.c:11331 common/flatpak-installation.c:2068 #, c-format msgid "%s branch %s is not installed" msgstr "%s 分支 %s 未安装" -#: common/flatpak-dir.c:11219 +#: common/flatpak-dir.c:11584 #, c-format msgid "%s commit %s not installed" msgstr "%s 提交 %s 未安装" -#: common/flatpak-dir.c:11555 +#: common/flatpak-dir.c:11920 #, c-format msgid "Pruning repo failed: %s" msgstr "修剪仓库失败:%s" -#: common/flatpak-dir.c:11723 common/flatpak-dir.c:11729 +#: common/flatpak-dir.c:12088 common/flatpak-dir.c:12094 #, c-format msgid "Failed to load filter '%s'" msgstr "加载筛选器“%s”失败" -#: common/flatpak-dir.c:11735 +#: common/flatpak-dir.c:12100 #, c-format msgid "Failed to parse filter '%s'" msgstr "解析筛选器“%s”失败" -#: common/flatpak-dir.c:12017 +#: common/flatpak-dir.c:12382 msgid "Failed to write summary cache: " msgstr "写入摘要缓存失败:" -#: common/flatpak-dir.c:12036 +#: common/flatpak-dir.c:12401 #, c-format msgid "No oci summary cached for remote '%s'" msgstr "远程仓库“%s”没有已缓存的 OCI 摘要" -#: common/flatpak-dir.c:12261 +#: common/flatpak-dir.c:12626 #, c-format msgid "No cached summary for remote '%s'" msgstr "远程仓库“%s”没有已缓存的摘要" -#: common/flatpak-dir.c:12302 +#: common/flatpak-dir.c:12667 #, c-format msgid "Invalid checksum for indexed summary %s read from %s" msgstr "从“%2$s”读取的已索引摘要 %1$s 的校验和无效" -#: common/flatpak-dir.c:12375 +#: common/flatpak-dir.c:12740 #, c-format msgid "" "Remote listing for %s not available; server has no summary file. Check the " @@ -4833,102 +4802,101 @@ msgstr "" "%s 的远程列表不可用;服务器没有摘要文件。请检查传递给 remote-add 的网址是否有" "效。" -#: common/flatpak-dir.c:12752 +#: common/flatpak-dir.c:13117 #, c-format msgid "Invalid checksum for indexed summary %s for remote '%s'" msgstr "远程仓库“%2$s”的已索引摘要 %1$s 的校验和无效" -#: common/flatpak-dir.c:13375 +#: common/flatpak-dir.c:13744 #, c-format msgid "Multiple branches available for %s, you must specify one of: " msgstr "%s 有多个可用分支,您必须指定一个:" -#: common/flatpak-dir.c:13441 +#: common/flatpak-dir.c:13810 #, c-format msgid "Nothing matches %s" msgstr "没有 %s 的匹配项" -#: common/flatpak-dir.c:13549 +#: common/flatpak-dir.c:13918 #, c-format msgid "Can't find ref %s%s%s%s%s" msgstr "无法找到引用 %s%s%s%s%s" -#: common/flatpak-dir.c:13592 +#: common/flatpak-dir.c:13961 #, c-format msgid "Error searching remote %s: %s" msgstr "搜索远程仓库 %s 时出错:%s" -#: common/flatpak-dir.c:13689 +#: common/flatpak-dir.c:14058 #, c-format msgid "Error searching local repository: %s" msgstr "搜索本地仓库时出错:%s" -#: common/flatpak-dir.c:13826 +#: common/flatpak-dir.c:14195 #, c-format msgid "%s/%s/%s not installed" msgstr "%s/%s/%s 未安装" -#: common/flatpak-dir.c:14029 +#: common/flatpak-dir.c:14398 #, c-format msgid "Could not find installation %s" msgstr "无法找到安装 %s" -#: common/flatpak-dir.c:14574 +#: common/flatpak-dir.c:14943 #, c-format msgid "Invalid file format, no %s group" msgstr "无效的文件格式,没有 %s 组" -#: common/flatpak-dir.c:14579 common/flatpak-repo-utils.c:2861 +#: common/flatpak-dir.c:14948 common/flatpak-repo-utils.c:2861 #, c-format msgid "Invalid version %s, only 1 supported" msgstr "无效的版本 %s,仅支持 1" -#: common/flatpak-dir.c:14584 common/flatpak-dir.c:14589 +#: common/flatpak-dir.c:14953 common/flatpak-dir.c:14958 #, c-format msgid "Invalid file format, no %s specified" msgstr "无效的文件格式,没有指定 %s" #. Check some minimal size so we don't get crap -#: common/flatpak-dir.c:14609 +#: common/flatpak-dir.c:14978 msgid "Invalid file format, gpg key invalid" msgstr "无效的文件格式,GPG 密钥无效" -#: common/flatpak-dir.c:14637 common/flatpak-repo-utils.c:2934 +#: common/flatpak-dir.c:15006 common/flatpak-repo-utils.c:2937 msgid "Collection ID requires GPG key to be provided" msgstr "集合标识要求提供 GPG 密钥" -#: common/flatpak-dir.c:14680 +#: common/flatpak-dir.c:15049 #, c-format msgid "Runtime %s, branch %s is already installed" msgstr "运行时 %s、分支 %s 已安装" -#: common/flatpak-dir.c:14681 +#: common/flatpak-dir.c:15050 #, c-format msgid "App %s, branch %s is already installed" msgstr "应用 %s、分支 %s 已安装" -#: common/flatpak-dir.c:14914 +#: common/flatpak-dir.c:15283 #, c-format msgid "Can't remove remote '%s' with installed ref %s (at least)" msgstr "无法移除具有已安装引用 %2$s(至少)的远程仓库“%1$s”" -#: common/flatpak-dir.c:15013 +#: common/flatpak-dir.c:15382 #, c-format msgid "Invalid character '/' in remote name: %s" msgstr "远程仓库名称中有无效字符“/”:%s" -#: common/flatpak-dir.c:15019 +#: common/flatpak-dir.c:15388 #, c-format msgid "No configuration for remote %s specified" msgstr "没有为远程仓库 %s 指定配置" -#: common/flatpak-dir.c:16516 +#: common/flatpak-dir.c:16885 #, c-format msgid "Skipping deletion of mirror ref (%s, %s)…\n" msgstr "正在跳过删除镜像引用(%s,%s)…\n" #: common/flatpak-exports.c:916 -#, c-format msgid "An absolute path is required" msgstr "需要绝对路径" @@ -4982,6 +4950,23 @@ msgstr "“%s”不是未签名的数字" msgid "Number “%s” is out of bounds [%s, %s]" msgstr "数字“%s”超出范围 [%s, %s]" +#: common/flatpak-image-source.c:94 common/flatpak-image-source.c:102 +msgid "Image is not a manifest" +msgstr "镜像不是清单" + +#: common/flatpak-image-source.c:117 +msgid "No org.flatpak.ref found in image" +msgstr "未在镜像中找到 org.flatpak.ref" + +#: common/flatpak-image-source.c:142 +#, c-format +msgid "Ref '%s' not found in registry" +msgstr "在注册表中未发现引用“%s”" + +#: common/flatpak-image-source.c:151 +msgid "Multiple images in registry, specify a ref with --ref" +msgstr "注册表中有多个镜像,使用 --ref 指定一个引用" + #: common/flatpak-installation.c:835 #, c-format msgid "Ref %s not installed" @@ -5028,72 +5013,72 @@ msgstr "无法创建文件 %s" msgid "Unable to update symbolic link %s/%s" msgstr "无法更新符号链接 %s/%s" -#: common/flatpak-oci-registry.c:1021 +#: common/flatpak-oci-registry.c:1238 msgid "Only Bearer authentication supported" msgstr "仅支持 Bearer 身份验证" -#: common/flatpak-oci-registry.c:1030 +#: common/flatpak-oci-registry.c:1247 msgid "Only realm in authentication request" msgstr "身份验证中仅请求领域" -#: common/flatpak-oci-registry.c:1037 +#: common/flatpak-oci-registry.c:1254 msgid "Invalid realm in authentication request" msgstr "身份验证中请求的领域无效" -#: common/flatpak-oci-registry.c:1107 +#: common/flatpak-oci-registry.c:1324 #, c-format msgid "Authorization failed: %s" msgstr "身份验证失败:%s" -#: common/flatpak-oci-registry.c:1109 +#: common/flatpak-oci-registry.c:1326 msgid "Authorization failed" msgstr "身份验证失败" -#: common/flatpak-oci-registry.c:1113 +#: common/flatpak-oci-registry.c:1330 #, c-format msgid "Unexpected response status %d when requesting token: %s" msgstr "请求令牌时遇到意料之外的响应状态 %d:%s" -#: common/flatpak-oci-registry.c:1124 +#: common/flatpak-oci-registry.c:1341 msgid "Invalid authentication request response" msgstr "无效的身份验证请求响应" -#: common/flatpak-oci-registry.c:1721 common/flatpak-oci-registry.c:1774 -#: common/flatpak-oci-registry.c:1803 common/flatpak-oci-registry.c:1858 -#: common/flatpak-oci-registry.c:1914 common/flatpak-oci-registry.c:1992 +#: common/flatpak-oci-registry.c:1928 common/flatpak-oci-registry.c:1980 +#: common/flatpak-oci-registry.c:2009 common/flatpak-oci-registry.c:2064 +#: common/flatpak-oci-registry.c:2120 common/flatpak-oci-registry.c:2198 msgid "Invalid delta file format" msgstr "无效的增量文件格式" -#: common/flatpak-oci-registry.c:2496 +#: common/flatpak-oci-registry.c:2702 #, c-format msgid "No gpg key found with ID %s (homedir: %s)" msgstr "未找到身份标识 %s 的 GPG 密钥(主目录:%s)" -#: common/flatpak-oci-registry.c:2503 +#: common/flatpak-oci-registry.c:2709 #, c-format msgid "Unable to lookup key ID %s: %d" msgstr "无法查找密钥标识 %s:%d" -#: common/flatpak-oci-registry.c:2511 +#: common/flatpak-oci-registry.c:2717 #, c-format msgid "Error signing commit: %d" msgstr "签署提交时出错:%d" -#: common/flatpak-oci-registry.c:3512 common/flatpak-oci-registry.c:3671 +#: common/flatpak-oci-registry.c:3697 common/flatpak-oci-registry.c:3854 msgid "Invalid OCI image config" msgstr "无效的 OCI 镜像配置" -#: common/flatpak-oci-registry.c:3574 common/flatpak-oci-registry.c:3820 +#: common/flatpak-oci-registry.c:3759 common/flatpak-oci-registry.c:4003 #, c-format msgid "Wrong layer checksum, expected %s, was %s" msgstr "错误的层校验和,预期为 %s,实际为 %s" -#: common/flatpak-oci-registry.c:3654 +#: common/flatpak-oci-registry.c:3831 #, c-format msgid "No ref specified for OCI image %s" msgstr "没有为 OCI 镜像 %s 指定引用" -#: common/flatpak-oci-registry.c:3660 +#: common/flatpak-oci-registry.c:3841 #, c-format msgid "Wrong ref (%s) specified for OCI image %s, expected %s" msgstr "为 OCI 镜像 %2$s 指定了错误的引用(%1$s),预期为 %3$s" @@ -5277,7 +5262,6 @@ msgid "GPG verification must be enabled when a collection ID is set" msgstr "设置集合标识时必须启用 GPG 校验" #: common/flatpak-repo-utils.c:344 -#, c-format msgid "No extra data sources" msgstr "没有额外的数据源" @@ -5295,126 +5279,132 @@ msgstr "无效的 %s:缺失“%s”键" msgid "Invalid gpg key" msgstr "无效的 GPG 密钥" -#: common/flatpak-repo-utils.c:3237 +#: common/flatpak-repo-utils.c:3240 #, c-format msgid "Error copying 64x64 icon for component %s: %s\n" msgstr "复制组件 %s 的 64x64 图标时出错:%s\n" -#: common/flatpak-repo-utils.c:3243 +#: common/flatpak-repo-utils.c:3246 #, c-format msgid "Error copying 128x128 icon for component %s: %s\n" msgstr "复制组件 %s 的 128x128 图标时出错:%s\n" -#: common/flatpak-repo-utils.c:3382 +#: common/flatpak-repo-utils.c:3385 #, c-format msgid "%s is end-of-life, ignoring for appstream" msgstr "%s 寿命完结,将为 appstream 忽略" -#: common/flatpak-repo-utils.c:3417 +#: common/flatpak-repo-utils.c:3420 #, c-format msgid "No appstream data for %s: %s\n" msgstr "没有 %s 的 appstream 数据:%s\n" -#: common/flatpak-repo-utils.c:3764 +#: common/flatpak-repo-utils.c:3767 msgid "Invalid bundle, no ref in metadata" msgstr "无效捆绑包,元数据中没有引用" -#: common/flatpak-repo-utils.c:3866 +#: common/flatpak-repo-utils.c:3869 #, c-format msgid "Collection ‘%s’ of bundle doesn’t match collection ‘%s’ of remote" msgstr "捆绑包集合“%s”不匹配远程仓库的集合“%s”" -#: common/flatpak-repo-utils.c:3943 +#: common/flatpak-repo-utils.c:3946 msgid "Metadata in header and app are inconsistent" msgstr "标头和应用中的元数据不一致" -#: common/flatpak-run.c:855 +#: common/flatpak-run.c:865 msgid "No systemd user session available, cgroups not available" msgstr "没有可用的 systemd 用户会话,cgroups 不可用" -#: common/flatpak-run.c:1395 +#: common/flatpak-run.c:1405 msgid "Unable to allocate instance id" msgstr "无法分配实例标识" -#: common/flatpak-run.c:1531 common/flatpak-run.c:1541 +#: common/flatpak-run.c:1541 common/flatpak-run.c:1551 #, c-format msgid "Failed to open flatpak-info file: %s" msgstr "打开 flatpak-info 文件失败:%s" -#: common/flatpak-run.c:1570 +#: common/flatpak-run.c:1580 #, c-format msgid "Failed to open bwrapinfo.json file: %s" msgstr "打开 bwrapinfo.json 文件失败:%s" -#: common/flatpak-run.c:1595 +#: common/flatpak-run.c:1605 #, c-format msgid "Failed to write to instance id fd: %s" msgstr "写入实例标识 FD 失败:%s" -#: common/flatpak-run.c:1990 +#: common/flatpak-run.c:2000 msgid "Initialize seccomp failed" msgstr "初始化 seccomp 失败" -#: common/flatpak-run.c:2029 +#: common/flatpak-run.c:2039 #, c-format msgid "Failed to add architecture to seccomp filter: %s" msgstr "将架构添加到 seccomp 筛选器失败:%s" -#: common/flatpak-run.c:2037 +#: common/flatpak-run.c:2047 #, c-format msgid "Failed to add multiarch architecture to seccomp filter: %s" msgstr "将多体系结构添加到 seccomp 筛选器失败:%s" -#: common/flatpak-run.c:2069 common/flatpak-run.c:2086 -#: common/flatpak-run.c:2108 +#: common/flatpak-run.c:2079 common/flatpak-run.c:2096 +#: common/flatpak-run.c:2118 #, c-format msgid "Failed to block syscall %d: %s" msgstr "封锁系统调用 %d 失败:%s" -#: common/flatpak-run.c:2141 +#: common/flatpak-run.c:2151 #, c-format msgid "Failed to export bpf: %s" msgstr "导出 bpf 失败:%s" -#: common/flatpak-run.c:2440 +#: common/flatpak-run.c:2453 #, c-format msgid "Failed to open ‘%s’" msgstr "打开“%s”失败" -#: common/flatpak-run.c:2727 +#: common/flatpak-run.c:2463 +#, c-format +msgid "" +"Directory forwarding needs version 4 of the document portal (have version %d)" +msgstr "目录转发需要版本 4 的文档门户(拥有版本 %d)" + +#: common/flatpak-run.c:2781 #, c-format msgid "ldconfig failed, exit status %d" msgstr "ldconfig 失败,退出状态为 %d" -#: common/flatpak-run.c:2734 +#: common/flatpak-run.c:2788 msgid "Can't open generated ld.so.cache" msgstr "无法打开生成的 ld.so.cache" #. Translators: The placeholder is for an app ref. -#: common/flatpak-run.c:2857 +#: common/flatpak-run.c:2911 #, c-format msgid "Running %s is not allowed by the policy set by your administrator" msgstr "您的管理员设置的策略不允许运行 %s" -#: common/flatpak-run.c:2964 +#: common/flatpak-run.c:3018 msgid "" -"\"flatpak run\" is not intended to be run as `sudo flatpak run`. Use `sudo " -"-i` or `su -l` instead and invoke \"flatpak run\" from inside the new shell." +"\"flatpak run\" is not intended to be run as `sudo flatpak run`. Use `sudo -" +"i` or `su -l` instead and invoke \"flatpak run\" from inside the new shell." msgstr "" "“flatpak run”不是设计为以“sudo flatpak run”运行的。使用“sudo -i”或者“su -l”代" "替且从新的 shell 内部调用“flatpak run”。" -#: common/flatpak-run.c:3154 +#: common/flatpak-run.c:3208 #, c-format msgid "Failed to migrate from %s: %s" msgstr "从 %s 迁移失败:%s" -#: common/flatpak-run.c:3175 +#: common/flatpak-run.c:3229 #, c-format msgid "Failed to migrate old app data directory %s to new name %s: %s" msgstr "将旧应用数据目录 %s 迁移至新名称 %s 失败:%s" -#: common/flatpak-run.c:3184 +#: common/flatpak-run.c:3238 #, c-format msgid "Failed to create symlink while migrating %s: %s" msgstr "迁移 %s 时创建符号链接失败:%s" @@ -5431,121 +5421,125 @@ msgstr "无法创建同步管道" msgid "Failed to sync with dbus proxy" msgstr "与 dbus 代理同步失败" -#: common/flatpak-transaction.c:2210 +#: common/flatpak-transaction.c:2232 #, c-format msgid "Warning: Problem looking for related refs: %s" msgstr "警告:查找相关引用时遇到问题:%s" -#: common/flatpak-transaction.c:2428 +#: common/flatpak-transaction.c:2450 #, c-format msgid "The application %s requires the runtime %s which was not found" msgstr "应用程序 %s 需要的运行时 %s 未找到" -#: common/flatpak-transaction.c:2444 +#: common/flatpak-transaction.c:2466 #, c-format msgid "The application %s requires the runtime %s which is not installed" msgstr "应用程序 %s 需要的运行时 %s 未安装" -#: common/flatpak-transaction.c:2576 +#: common/flatpak-transaction.c:2598 #, c-format msgid "Can't uninstall %s which is needed by %s" msgstr "无法卸载 %2$s 需要的 %1$s" -#: common/flatpak-transaction.c:2673 +#: common/flatpak-transaction.c:2697 #, c-format msgid "Remote %s disabled, ignoring %s update" msgstr "远程仓库 %s 被禁用,将忽略 %s 更新" -#: common/flatpak-transaction.c:2706 +#: common/flatpak-transaction.c:2730 #, c-format msgid "%s is already installed" msgstr "%s 已安装" -#: common/flatpak-transaction.c:2709 +#: common/flatpak-transaction.c:2733 #, c-format msgid "%s is already installed from remote %s" msgstr "已经从远程仓库 %2$s 安装了 %1$s" -#: common/flatpak-transaction.c:3020 +#: common/flatpak-transaction.c:3077 #, c-format msgid "Invalid .flatpakref: %s" msgstr "无效的 .flatpakref:%s" -#: common/flatpak-transaction.c:3135 +#: common/flatpak-transaction.c:3118 +msgid "Warning: Could not mark already installed apps as preinstalled" +msgstr "警告:无法将已经安装的应用标记为预安装的" + +#: common/flatpak-transaction.c:3320 #, c-format msgid "Error updating remote metadata for '%s': %s" msgstr "更新“%s”的远程仓库元数据时出错:%s" -#: common/flatpak-transaction.c:3624 +#: common/flatpak-transaction.c:3819 #, c-format msgid "" "Warning: Treating remote fetch error as non-fatal since %s is already " "installed: %s" msgstr "警告:既然 %s 已经安装将把远程获取错误作为非致命性错误处理:%s" -#: common/flatpak-transaction.c:3950 +#: common/flatpak-transaction.c:4145 #, c-format msgid "No authenticator installed for remote '%s'" msgstr "没有为远程仓库“%s”安装身份验证器" -#: common/flatpak-transaction.c:4054 common/flatpak-transaction.c:4061 +#: common/flatpak-transaction.c:4249 common/flatpak-transaction.c:4256 #, c-format msgid "Failed to get tokens for ref: %s" msgstr "为引用获取令牌失败:%s" -#: common/flatpak-transaction.c:4056 common/flatpak-transaction.c:4063 +#: common/flatpak-transaction.c:4251 common/flatpak-transaction.c:4258 msgid "Failed to get tokens for ref" msgstr "为引用获取令牌失败" -#: common/flatpak-transaction.c:4321 +#: common/flatpak-transaction.c:4516 #, c-format msgid "Ref %s from %s matches more than one transaction operation" msgstr "来自 %2$s 的引用 %1$s 匹配了多于一个处理操作" -#: common/flatpak-transaction.c:4322 common/flatpak-transaction.c:4332 +#: common/flatpak-transaction.c:4517 common/flatpak-transaction.c:4527 msgid "any remote" msgstr "任何远程仓库" -#: common/flatpak-transaction.c:4331 +#: common/flatpak-transaction.c:4526 #, c-format msgid "No transaction operation found for ref %s from %s" msgstr "未发现用于来自 %2$s 应用 %1$s 的处理操作" -#: common/flatpak-transaction.c:4454 +#: common/flatpak-transaction.c:4649 #, c-format msgid "Flatpakrepo URL %s not file, HTTP or HTTPS" msgstr "Flatpakrepo 网址 %s 不是文件、HTTP 或 HTTPS" -#: common/flatpak-transaction.c:4460 +#: common/flatpak-transaction.c:4655 #, c-format msgid "Can't load dependent file %s: " msgstr "无法加载依赖文件 %s:" -#: common/flatpak-transaction.c:4468 +#: common/flatpak-transaction.c:4663 #, c-format msgid "Invalid .flatpakrepo: %s" msgstr "无效的 .flatpakrepo:%s" -#: common/flatpak-transaction.c:5121 +#: common/flatpak-transaction.c:5390 msgid "Transaction already executed" msgstr "事务已被执行" -#: common/flatpak-transaction.c:5136 +#: common/flatpak-transaction.c:5405 msgid "" "Refusing to operate on a user installation as root! This can lead to " "incorrect file ownership and permission errors." msgstr "拒绝以 root 执行用户级安装!这会导致错误的文件归属和权限错误。" -#: common/flatpak-transaction.c:5228 common/flatpak-transaction.c:5241 +#: common/flatpak-transaction.c:5503 common/flatpak-transaction.c:5516 msgid "Aborted by user" msgstr "被用户中止" -#: common/flatpak-transaction.c:5266 +#: common/flatpak-transaction.c:5541 #, c-format msgid "Skipping %s due to previous error" msgstr "由于先前的错误,正在跳过 %s" -#: common/flatpak-transaction.c:5320 +#: common/flatpak-transaction.c:5595 #, c-format msgid "Aborted due to failure (%s)" msgstr "因失败而中止(%s)" @@ -5593,37 +5587,30 @@ msgid "URI is not absolute, and no base URI was provided" msgstr "URI 不是绝对路径,且未提供基础 URI" #: common/flatpak-usb.c:83 -#, c-format msgid "USB device query 'all' must not have data" msgstr "USB 设备查询“all”不能具有数据" #: common/flatpak-usb.c:102 -#, c-format msgid "USB query rule 'cls' must be in the form CLASS:SUBCLASS or CLASS:*" msgstr "USB 查询规则“cls”必须为 CLASS:SUBCLASS 或 CLASS:* 的形式" #: common/flatpak-usb.c:111 -#, c-format msgid "Invalid USB class" msgstr "无效的 USB 类" #: common/flatpak-usb.c:125 -#, c-format msgid "Invalid USB subclass" msgstr "无效的 USB 子类" #: common/flatpak-usb.c:141 common/flatpak-usb.c:148 -#, c-format msgid "USB query rule 'dev' must have a valid 4-digit hexadecimal product id" msgstr "USB 查询规则“dev”必须具有有效的 4 位数 16 进制产品标识符" #: common/flatpak-usb.c:164 common/flatpak-usb.c:171 -#, c-format msgid "USB query rule 'vnd' must have a valid 4-digit hexadecimal vendor id" msgstr "USB 查询规则“vnd”必须具有有效的 4 位数 16 进制厂商标识符" #: common/flatpak-usb.c:205 -#, c-format msgid "USB device queries must be in the form TYPE:DATA" msgstr "USB 设备查询必须为 TYPE:DATA 的形式" @@ -5633,22 +5620,18 @@ msgid "Unknown USB query rule %s" msgstr "未知的 USB 查询规则 %s" #: common/flatpak-usb.c:248 -#, c-format msgid "Empty USB query" msgstr "空的 USB 查询" #: common/flatpak-usb.c:274 -#, c-format msgid "Multiple USB query rules of the same type is not supported" msgstr "不支持同一类型的多 USB 查询规则" #: common/flatpak-usb.c:283 -#, c-format msgid "'all' must not contain extra query rules" msgstr "“all”不能包含额外查询规则" #: common/flatpak-usb.c:291 -#, c-format msgid "USB queries with 'dev' must also specify vendors" msgstr "使用“dev”的 USB 查询必须同时指定厂商" @@ -5712,7 +5695,6 @@ msgid "Invalid token" msgstr "无效的令牌" #: portal/flatpak-portal.c:2337 -#, c-format msgid "No portal support found" msgstr "未发现传送门支持" @@ -5738,17 +5720,14 @@ msgid "Update access can be changed any time from the privacy settings." msgstr "您可以随时通过隐私设置更改更新访问。" #: portal/flatpak-portal.c:2388 -#, c-format msgid "Application update not allowed" msgstr "不允许更新应用程序" #: portal/flatpak-portal.c:2546 -#, c-format msgid "Self update not supported, new version requires new permissions" msgstr "不支持自我更新,新版本需要新的权限" #: portal/flatpak-portal.c:2728 portal/flatpak-portal.c:2745 -#, c-format msgid "Update ended unexpectedly" msgstr "更新意外结束" @@ -5959,9 +5938,8 @@ msgstr "更新元数据需要身份验证" #. * Set the malcontent `is-system-installation-allowed` property of #. all users’ parental controls policies to true. #: system-helper/org.freedesktop.Flatpak.policy.in:287 -#, fuzzy msgid "Override parental controls for installs" -msgstr "覆盖家长控制" +msgstr "为安装覆盖家长控制" #: system-helper/org.freedesktop.Flatpak.policy.in:288 msgid "" @@ -5983,16 +5961,14 @@ msgstr "安装受您的家长控制策略限制的软件需要身份验证" #. installing an update which has radically different content from the #. version of the app which the parent originally vetted and installed. #: system-helper/org.freedesktop.Flatpak.policy.in:313 -#, fuzzy msgid "Override parental controls for updates" -msgstr "覆盖家长控制" +msgstr "为更新覆盖家长控制" #: system-helper/org.freedesktop.Flatpak.policy.in:314 -#, fuzzy msgid "" "Authentication is required to update software which is restricted by your " "parental controls policy" -msgstr "安装受您的家长控制策略限制的软件需要身份验证" +msgstr "更新受您的家长控制策略限制的软件需要身份验证" #, c-format #~ msgid "" From 5eea3304146964ccf044d6c76e872b3c333a1112 Mon Sep 17 00:00:00 2001 From: AsciiWolf Date: Tue, 2 Sep 2025 15:46:34 +0200 Subject: [PATCH 42/53] Update Czech translation --- po/cs.po | 802 +++++++++++++++++++++++++++---------------------------- 1 file changed, 391 insertions(+), 411 deletions(-) diff --git a/po/cs.po b/po/cs.po index fc92103f5a..3a32a48b7e 100644 --- a/po/cs.po +++ b/po/cs.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: flatpak master\n" "Report-Msgid-Bugs-To: https://github.com/flatpak/flatpak/issues\n" -"POT-Creation-Date: 2025-05-08 13:08-0300\n" -"PO-Revision-Date: 2024-09-12 23:44+0200\n" +"POT-Creation-Date: 2025-09-02 03:26+0000\n" +"PO-Revision-Date: 2025-09-02 15:46+0200\n" "Last-Translator: Daniel Rusek \n" "Language-Team: Czech \n" "Language: cs\n" @@ -16,7 +16,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" -"X-Generator: Poedit 3.5\n" +"X-Generator: Poedit 3.7\n" #: app/flatpak-builtins-build-bundle.c:58 msgid "Export runtime instead of app" @@ -29,7 +29,7 @@ msgstr "Architektura, pro kterou se má vytvořit balík" #: app/flatpak-builtins-build-bundle.c:59 #: app/flatpak-builtins-build-export.c:62 app/flatpak-builtins-build-init.c:53 #: app/flatpak-builtins-build-sign.c:42 app/flatpak-builtins-create-usb.c:46 -#: app/flatpak-builtins-info.c:55 app/flatpak-builtins-install.c:66 +#: app/flatpak-builtins-info.c:55 app/flatpak-builtins-install.c:67 #: app/flatpak-builtins-list.c:49 app/flatpak-builtins-make-current.c:38 #: app/flatpak-builtins-remote-info.c:54 app/flatpak-builtins-remote-ls.c:55 #: app/flatpak-builtins-run.c:66 app/flatpak-builtins-search.c:36 @@ -65,7 +65,7 @@ msgstr "Přidat klíč GPG ze SOUBORU (- pro standardní vstup)" #: app/flatpak-builtins-build-bundle.c:62 app/flatpak-builtins-build.c:54 #: app/flatpak-builtins-build-export.c:67 #: app/flatpak-builtins-build-update-repo.c:83 -#: app/flatpak-builtins-install.c:79 app/flatpak-builtins-remote-add.c:83 +#: app/flatpak-builtins-install.c:81 app/flatpak-builtins-remote-add.c:83 #: app/flatpak-builtins-remote-add.c:84 app/flatpak-builtins-remote-modify.c:88 #: app/flatpak-builtins-remote-modify.c:90 msgid "FILE" @@ -78,7 +78,7 @@ msgstr "ID klíče GPG pro podepsání OCI obrazu" #: app/flatpak-builtins-build-bundle.c:63 #: app/flatpak-builtins-build-commit-from.c:68 #: app/flatpak-builtins-build-export.c:68 -#: app/flatpak-builtins-build-import-bundle.c:48 +#: app/flatpak-builtins-build-import-bundle.c:49 #: app/flatpak-builtins-build-sign.c:44 #: app/flatpak-builtins-build-update-repo.c:84 msgid "KEY-ID" @@ -87,7 +87,7 @@ msgstr "KLÍČ-ID" #: app/flatpak-builtins-build-bundle.c:64 #: app/flatpak-builtins-build-commit-from.c:69 #: app/flatpak-builtins-build-export.c:71 -#: app/flatpak-builtins-build-import-bundle.c:49 +#: app/flatpak-builtins-build-import-bundle.c:50 #: app/flatpak-builtins-build-sign.c:45 #: app/flatpak-builtins-build-update-repo.c:85 msgid "GPG Homedir to use when looking for keyrings" @@ -96,7 +96,7 @@ msgstr "Domovský adresář pro použití při hledání klíčenek" #: app/flatpak-builtins-build-bundle.c:64 #: app/flatpak-builtins-build-commit-from.c:69 #: app/flatpak-builtins-build-export.c:71 -#: app/flatpak-builtins-build-import-bundle.c:49 +#: app/flatpak-builtins-build-import-bundle.c:50 #: app/flatpak-builtins-build-sign.c:45 #: app/flatpak-builtins-build-update-repo.c:85 msgid "HOMEDIR" @@ -129,16 +129,16 @@ msgstr "UMÍSTĚNÍ, NÁZEV_SOUBORU A NÁZEV musí být určeny" #: app/flatpak-builtins-build-bundle.c:631 #: app/flatpak-builtins-build-export.c:844 -#: app/flatpak-builtins-build-import-bundle.c:191 +#: app/flatpak-builtins-build-import-bundle.c:136 #: app/flatpak-builtins-build-init.c:217 app/flatpak-builtins-build-sign.c:76 #: app/flatpak-builtins-document-export.c:112 #: app/flatpak-builtins-document-info.c:75 -#: app/flatpak-builtins-document-list.c:182 +#: app/flatpak-builtins-document-list.c:189 #: app/flatpak-builtins-document-unexport.c:70 #: app/flatpak-builtins-history.c:480 app/flatpak-builtins-info.c:130 -#: app/flatpak-builtins-install.c:148 app/flatpak-builtins-install.c:217 -#: app/flatpak-builtins-list.c:417 app/flatpak-builtins-make-current.c:72 -#: app/flatpak-builtins-override.c:73 +#: app/flatpak-builtins-install.c:180 app/flatpak-builtins-install.c:233 +#: app/flatpak-builtins-install.c:294 app/flatpak-builtins-list.c:417 +#: app/flatpak-builtins-make-current.c:72 app/flatpak-builtins-override.c:73 #: app/flatpak-builtins-permission-list.c:159 #: app/flatpak-builtins-permission-remove.c:132 #: app/flatpak-builtins-remote-add.c:318 @@ -150,7 +150,7 @@ msgstr "Příliš mnoho parametrů" #: app/flatpak-builtins-build-bundle.c:646 #: app/flatpak-builtins-build-commit-from.c:338 #: app/flatpak-builtins-build-commit-from.c:351 -#: app/flatpak-builtins-build-import-bundle.c:200 +#: app/flatpak-builtins-build-import-bundle.c:145 #, c-format msgid "'%s' is not a valid repository" msgstr "„%s“ není platným repozitářem" @@ -161,20 +161,20 @@ msgid "'%s' is not a valid repository: " msgstr "„%s“ není platným repozitářem: " #: app/flatpak-builtins-build-bundle.c:661 app/flatpak-builtins-build-sign.c:88 -#: common/flatpak-dir.c:13280 +#: common/flatpak-dir.c:13649 #, c-format msgid "'%s' is not a valid name: %s" msgstr "„%s“ není platným názvem: %s" #: app/flatpak-builtins-build-bundle.c:664 #: app/flatpak-builtins-build-export.c:865 app/flatpak-builtins-build-sign.c:91 -#: common/flatpak-dir.c:13286 +#: common/flatpak-dir.c:13655 #, c-format msgid "'%s' is not a valid branch name: %s" msgstr "„%s“ není platným názvem větve: %s" #: app/flatpak-builtins-build-bundle.c:678 -#: app/flatpak-builtins-build-import-bundle.c:204 +#: app/flatpak-builtins-build-import-bundle.c:149 #: app/flatpak-builtins-build-init.c:281 #, c-format msgid "'%s' is not a valid filename" @@ -229,35 +229,34 @@ msgstr "Zaznamenávat volání sběrnice sezení" msgid "Log system bus calls" msgstr "Zaznamenávat volání systémové sběrnice" -#: app/flatpak-builtins-build.c:208 +#: app/flatpak-builtins-build.c:219 msgid "DIRECTORY [COMMAND [ARGUMENT…]] - Build in directory" msgstr "ADRESÁŘ [PŘÍKAZ [ARGUMENT…]] - Sestavit v adresáři" -#: app/flatpak-builtins-build.c:231 app/flatpak-builtins-build-finish.c:655 +#: app/flatpak-builtins-build.c:242 app/flatpak-builtins-build-finish.c:655 msgid "DIRECTORY must be specified" msgstr "ADRESÁŘ musí být určen" -#: app/flatpak-builtins-build.c:242 app/flatpak-builtins-build-export.c:887 +#: app/flatpak-builtins-build.c:253 app/flatpak-builtins-build-export.c:887 #, c-format msgid "Build directory %s not initialized, use flatpak build-init" msgstr "Adresář sestavení %s neinicializován, použijte flatpak build-init" -#: app/flatpak-builtins-build.c:261 +#: app/flatpak-builtins-build.c:272 msgid "metadata invalid, not application or runtime" msgstr "neplatná metadata, není aplikace nebo prostředí" -#: app/flatpak-builtins-build.c:392 +#: app/flatpak-builtins-build.c:403 #, c-format msgid "No extension point matching %s in %s" msgstr "" -#: app/flatpak-builtins-build.c:568 +#: app/flatpak-builtins-build.c:581 #, c-format msgid "Missing '=' in bind mount option '%s'" msgstr "" -#: app/flatpak-builtins-build.c:609 common/flatpak-run.c:3599 -#, c-format +#: app/flatpak-builtins-build.c:622 common/flatpak-run.c:3653 msgid "Unable to start app" msgstr "Nelze spustit aplikaci" @@ -299,20 +298,20 @@ msgstr "TĚLO" #: app/flatpak-builtins-build-commit-from.c:66 #: app/flatpak-builtins-build-export.c:64 -#: app/flatpak-builtins-build-import-bundle.c:50 +#: app/flatpak-builtins-build-import-bundle.c:51 msgid "Update the appstream branch" msgstr "Aktualizovat appstream větev" #: app/flatpak-builtins-build-commit-from.c:67 #: app/flatpak-builtins-build-export.c:65 -#: app/flatpak-builtins-build-import-bundle.c:51 +#: app/flatpak-builtins-build-import-bundle.c:52 #: app/flatpak-builtins-build-update-repo.c:87 msgid "Don't update the summary" msgstr "Neaktualizovat shrnutí" #: app/flatpak-builtins-build-commit-from.c:68 #: app/flatpak-builtins-build-export.c:68 -#: app/flatpak-builtins-build-import-bundle.c:48 +#: app/flatpak-builtins-build-import-bundle.c:49 #: app/flatpak-builtins-build-sign.c:44 msgid "GPG Key ID to sign the commit with" msgstr "ID klíče GPG pro podepsání commitu" @@ -360,7 +359,7 @@ msgstr "TIMESTAMP" #: app/flatpak-builtins-build-commit-from.c:75 #: app/flatpak-builtins-build-export.c:80 -#: app/flatpak-builtins-build-import-bundle.c:52 +#: app/flatpak-builtins-build-import-bundle.c:53 #: app/flatpak-builtins-build-update-repo.c:97 msgid "Don't generate a summary index" msgstr "Negenerovat index shrnutí" @@ -510,7 +509,6 @@ msgid "Unable to find basename in %s, specify a name explicitly" msgstr "" #: app/flatpak-builtins-build-export.c:746 -#, c-format msgid "No slashes allowed in extra data name" msgstr "V názvu souboru dodatečných dat nejsou povolena lomítka" @@ -520,7 +518,6 @@ msgid "Invalid format for sha256 checksum: '%s'" msgstr "Neplatný formát pro kontrolní součet sha256: „%s“" #: app/flatpak-builtins-build-export.c:768 -#, c-format msgid "Extra data sizes of zero not supported" msgstr "Dodatečná data s nulovou velikostí nejsou podporována" @@ -570,7 +567,6 @@ msgid "Content Written: %u\n" msgstr "Zapsaný obsah: %u\n" #: app/flatpak-builtins-build-export.c:1171 -#, c-format msgid "Content Bytes Written:" msgstr "Zapsáno bajtů obsahu:" @@ -579,7 +575,7 @@ msgid "Command to set" msgstr "Příkaz, který se má nastavit" #: app/flatpak-builtins-build-finish.c:52 app/flatpak-builtins-run.c:67 -#: app/flatpak-main.c:208 +#: app/flatpak-main.c:209 msgid "COMMAND" msgstr "PŘÍKAZ" @@ -614,7 +610,7 @@ msgstr "" #: app/flatpak-builtins-build-finish.c:57 #: app/flatpak-builtins-build-update-repo.c:79 app/flatpak-builtins-info.c:58 #: app/flatpak-builtins-remote-add.c:86 app/flatpak-builtins-remote-modify.c:92 -#: app/flatpak-main.c:181 +#: app/flatpak-main.c:182 msgid "NAME" msgstr "NÁZEV" @@ -672,7 +668,6 @@ msgid "Exporting %s\n" msgstr "Exportuje se %s\n" #: app/flatpak-builtins-build-finish.c:439 -#, c-format msgid "More than one executable found\n" msgstr "Nalezen více než jeden spustitelný soubor\n" @@ -682,7 +677,6 @@ msgid "Using %s as command\n" msgstr "Používá se %s jako příkaz\n" #: app/flatpak-builtins-build-finish.c:455 -#, c-format msgid "No executable found\n" msgstr "Nenalezen žádný spustitelný soubor\n" @@ -732,43 +726,33 @@ msgid "Build directory %s already finalized" msgstr "Adresář sestavení %s je již uzavřen" #: app/flatpak-builtins-build-finish.c:701 -#, c-format msgid "Please review the exported files and the metadata\n" msgstr "Zkontrolujte prosím exportované soubory a metadata\n" -#: app/flatpak-builtins-build-import-bundle.c:46 +#: app/flatpak-builtins-build-import-bundle.c:47 msgid "Override the ref used for the imported bundle" msgstr "" -#: app/flatpak-builtins-build-import-bundle.c:46 +#: app/flatpak-builtins-build-import-bundle.c:47 msgid "REF" msgstr "REF" -#: app/flatpak-builtins-build-import-bundle.c:47 +#: app/flatpak-builtins-build-import-bundle.c:48 msgid "Import oci image instead of flatpak bundle" msgstr "Importovat oci obraz namísto flatpak balíku" -#: app/flatpak-builtins-build-import-bundle.c:86 -#, c-format -msgid "Ref '%s' not found in registry" -msgstr "Ref „%s“ nebyl nalezen v registru" - -#: app/flatpak-builtins-build-import-bundle.c:95 -msgid "Multiple images in registry, specify a ref with --ref" -msgstr "Více obrazů v registru, určete ref pomocí --ref" - -#: app/flatpak-builtins-build-import-bundle.c:132 -#: app/flatpak-builtins-build-import-bundle.c:160 +#: app/flatpak-builtins-build-import-bundle.c:77 +#: app/flatpak-builtins-build-import-bundle.c:105 #, c-format msgid "Importing %s (%s)\n" msgstr "Importuje se %s (%s)\n" -#: app/flatpak-builtins-build-import-bundle.c:181 +#: app/flatpak-builtins-build-import-bundle.c:126 msgid "LOCATION FILENAME - Import a file bundle into a local repository" msgstr "" "UMÍSTĚNÍ NÁZEV_SOUBORU - Importovat soubor balíku do místního repozitáře" -#: app/flatpak-builtins-build-import-bundle.c:188 +#: app/flatpak-builtins-build-import-bundle.c:133 msgid "LOCATION and FILENAME must be specified" msgstr "UMÍSTĚNÍ a NÁZEV_SOUBORU musí být určeny" @@ -882,13 +866,13 @@ msgstr "„%s“ není platným názvem aplikace: %s" msgid "Build directory %s already initialized" msgstr "Adresář sestavení %s je již inicializován" -#: app/flatpak-builtins-build-sign.c:42 app/flatpak-builtins-install.c:66 +#: app/flatpak-builtins-build-sign.c:42 app/flatpak-builtins-install.c:67 #: app/flatpak-builtins-remote-info.c:54 msgid "Arch to install for" msgstr "Architektura, pro kterou se má instalovat" #: app/flatpak-builtins-build-sign.c:43 app/flatpak-builtins-create-usb.c:48 -#: app/flatpak-builtins-install.c:73 app/flatpak-builtins-remote-info.c:56 +#: app/flatpak-builtins-install.c:74 app/flatpak-builtins-remote-info.c:56 #: app/flatpak-builtins-uninstall.c:58 app/flatpak-builtins-update.c:64 msgid "Look for runtime with the specified name" msgstr "Hledat prostředí s určeným názvem" @@ -1064,12 +1048,10 @@ msgid "LOCATION - Update repository metadata" msgstr "UMÍSTĚNÍ - Aktualizovat metadata repozitáře" #: app/flatpak-builtins-build-update-repo.c:609 -#, c-format msgid "Updating appstream branch\n" msgstr "Aktualizace appstream větve\n" #: app/flatpak-builtins-build-update-repo.c:638 -#, c-format msgid "Updating summary\n" msgstr "Aktualizace shrnutí\n" @@ -1079,7 +1061,6 @@ msgid "Total objects: %u\n" msgstr "Celkový počet objektů: %u\n" #: app/flatpak-builtins-build-update-repo.c:666 -#, c-format msgid "No unreachable objects\n" msgstr "Žádné nedostupné objekty\n" @@ -1155,7 +1136,7 @@ msgstr "Můžete určit pouze jedno z --list, --get, --set nebo --unset" msgid "Must specify one of --list, --get, --set or --unset" msgstr "Musíte určit jedno z --list, --get, --set nebo --unset" -#: app/flatpak-builtins-create-usb.c:45 app/flatpak-builtins-install.c:74 +#: app/flatpak-builtins-create-usb.c:45 app/flatpak-builtins-install.c:75 #: app/flatpak-builtins-remote-info.c:57 app/flatpak-builtins-uninstall.c:59 #: app/flatpak-builtins-update.c:65 msgid "Look for app with the specified name" @@ -1352,7 +1333,6 @@ msgstr "SOUBOR - Získat informace o exportovaném souboru" #: app/flatpak-builtins-document-info.c:100 #: app/flatpak-builtins-document-unexport.c:92 -#, c-format msgid "Not exported\n" msgstr "Neexportováno\n" @@ -1407,7 +1387,12 @@ msgstr "Oprávnění" msgid "Show permissions for applications" msgstr "Zobrazit oprávnění pro aplikace" -#: app/flatpak-builtins-document-list.c:171 +#: app/flatpak-builtins-document-list.c:159 +#| msgid "No matches found" +msgid "No documents found\n" +msgstr "Nenalezeny žádné dokumenty\n" + +#: app/flatpak-builtins-document-list.c:178 msgid "[APPID] - List exported files" msgstr "[APPID] - Zobrazit exportované soubory" @@ -1642,12 +1627,10 @@ msgid " - Show history" msgstr " - Zobrazit historii" #: app/flatpak-builtins-history.c:488 -#, c-format msgid "Failed to parse the --since option" msgstr "Nelze zpracovat volbu --since" #: app/flatpak-builtins-history.c:499 -#, c-format msgid "Failed to parse the --until option" msgstr "Nelze zpracovat volbu --until" @@ -1699,10 +1682,10 @@ msgstr "Zobrazit oprávnění" msgid "Query file access" msgstr "Dotázat se na přístup k souborům" -#: app/flatpak-builtins-info.c:67 app/flatpak-builtins-install.c:80 -#: app/flatpak-builtins-install.c:86 app/flatpak-builtins-run.c:90 -#: app/flatpak-builtins-run.c:91 app/flatpak-builtins-update.c:67 -#: app/flatpak-builtins-update.c:71 +#: app/flatpak-builtins-info.c:67 app/flatpak-builtins-install.c:82 +#: app/flatpak-builtins-install.c:88 app/flatpak-builtins-preinstall.c:68 +#: app/flatpak-builtins-run.c:90 app/flatpak-builtins-run.c:91 +#: app/flatpak-builtins-update.c:67 app/flatpak-builtins-update.c:71 msgid "PATH" msgstr "CESTA" @@ -1729,7 +1712,6 @@ msgid "ref not present in origin" msgstr "" #: app/flatpak-builtins-info.c:211 app/flatpak-builtins-remote-info.c:217 -#, c-format msgid "Warning: Commit has no flatpak metadata\n" msgstr "Varování: Commit nemá žádná flatpak metadata\n" @@ -1875,126 +1857,138 @@ msgstr "neudržováno" msgid "unknown" msgstr "neznámé" -#: app/flatpak-builtins-install.c:67 +#: app/flatpak-builtins-install.c:68 app/flatpak-builtins-preinstall.c:57 msgid "Don't pull, only install from local cache" msgstr "Nedělat pull, pouze instalovat z místní cache" -#: app/flatpak-builtins-install.c:68 app/flatpak-builtins-update.c:60 +#: app/flatpak-builtins-install.c:69 app/flatpak-builtins-preinstall.c:58 +#: app/flatpak-builtins-update.c:60 msgid "Don't deploy, only download to local cache" msgstr "Nedělat nasazení, pouze stáhnout do místní cache" -#: app/flatpak-builtins-install.c:69 +#: app/flatpak-builtins-install.c:70 app/flatpak-builtins-preinstall.c:59 msgid "Don't install related refs" msgstr "Neinstalovat související refy" -#: app/flatpak-builtins-install.c:70 app/flatpak-builtins-update.c:62 +#: app/flatpak-builtins-install.c:71 app/flatpak-builtins-preinstall.c:60 +#: app/flatpak-builtins-update.c:62 msgid "Don't verify/install runtime dependencies" msgstr "Neověřovat/neinstalovat běhové závislosti" -#: app/flatpak-builtins-install.c:71 +#: app/flatpak-builtins-install.c:72 msgid "Don't automatically pin explicit installs" msgstr "Nepřipínat automaticky explicitní instalace" -#: app/flatpak-builtins-install.c:72 app/flatpak-builtins-update.c:63 +#: app/flatpak-builtins-install.c:73 app/flatpak-builtins-preinstall.c:61 +#: app/flatpak-builtins-update.c:63 msgid "Don't use static deltas" msgstr "Nepoužívat statické delta soubory" -#: app/flatpak-builtins-install.c:75 +#: app/flatpak-builtins-install.c:76 app/flatpak-builtins-preinstall.c:62 msgid "Additionally install the SDK used to build the given refs" msgstr "" -#: app/flatpak-builtins-install.c:76 +#: app/flatpak-builtins-install.c:77 app/flatpak-builtins-preinstall.c:63 msgid "" "Additionally install the debug info for the given refs and their dependencies" msgstr "" -#: app/flatpak-builtins-install.c:77 +#: app/flatpak-builtins-install.c:78 msgid "Assume LOCATION is a .flatpak single-file bundle" msgstr "Předpokládat, že UMÍSTĚNÍ je jednosouborový balíček .flatpak" -#: app/flatpak-builtins-install.c:78 +#: app/flatpak-builtins-install.c:79 msgid "Assume LOCATION is a .flatpakref application description" msgstr "Předpokládat, že UMÍSTĚNÍ je popis aplikace .flatpakref" -#: app/flatpak-builtins-install.c:79 +#: app/flatpak-builtins-install.c:80 +msgid "Assume LOCATION is containers-transports(5) reference to an OCI image" +msgstr "" + +#: app/flatpak-builtins-install.c:81 msgid "Check bundle signatures with GPG key from FILE (- for stdin)" msgstr "" "Zkontrolovat podpisy balíku klíčem GPG ze souboru (- pro standardní vstup)" -#: app/flatpak-builtins-install.c:80 +#: app/flatpak-builtins-install.c:82 msgid "Only install this subpath" msgstr "Instalovat pouze tuto podcestu" -#: app/flatpak-builtins-install.c:81 app/flatpak-builtins-uninstall.c:63 -#: app/flatpak-builtins-update.c:68 +#: app/flatpak-builtins-install.c:83 app/flatpak-builtins-preinstall.c:64 +#: app/flatpak-builtins-uninstall.c:63 app/flatpak-builtins-update.c:68 msgid "Automatically answer yes for all questions" msgstr "Automaticky odpovědět ano na všechny otázky" -#: app/flatpak-builtins-install.c:82 +#: app/flatpak-builtins-install.c:84 app/flatpak-builtins-preinstall.c:65 msgid "Uninstall first if already installed" msgstr "Nejprve odinstalovat, pokud je již nainstalováno" -#: app/flatpak-builtins-install.c:83 app/flatpak-builtins-uninstall.c:64 -#: app/flatpak-builtins-update.c:69 +#: app/flatpak-builtins-install.c:85 app/flatpak-builtins-preinstall.c:66 +#: app/flatpak-builtins-uninstall.c:64 app/flatpak-builtins-update.c:69 msgid "Produce minimal output and don't ask questions" msgstr "Produkovat minimální výstup a neptat se na otázky" -#: app/flatpak-builtins-install.c:84 +#: app/flatpak-builtins-install.c:86 msgid "Update install if already installed" msgstr "Aktualizovat instalaci, pokud je již nainstalováno" #. Translators: A sideload is when you install from a local USB drive rather than the Internet. -#: app/flatpak-builtins-install.c:86 app/flatpak-builtins-update.c:71 +#: app/flatpak-builtins-install.c:88 app/flatpak-builtins-preinstall.c:68 +#: app/flatpak-builtins-update.c:71 msgid "Use this local repo for sideloads" msgstr "Použít tento místní repozitář pro sideloady" -#: app/flatpak-builtins-install.c:145 +#: app/flatpak-builtins-install.c:177 msgid "Bundle filename must be specified" msgstr "Název souboru balíku musí byt určen" -#: app/flatpak-builtins-install.c:155 +#: app/flatpak-builtins-install.c:187 msgid "Remote bundles are not supported" msgstr "Vzdálené balíky nejsou podporovány" -#: app/flatpak-builtins-install.c:214 +#: app/flatpak-builtins-install.c:230 msgid "Filename or uri must be specified" msgstr "Název souboru nebo uri musí být určen" -#: app/flatpak-builtins-install.c:296 +#: app/flatpak-builtins-install.c:291 +#| msgid "At least one REF must be specified" +msgid "Image location must be specified" +msgstr "" + +#: app/flatpak-builtins-install.c:341 msgid "[LOCATION/REMOTE] [REF…] - Install applications or runtimes" msgstr "[UMÍSTĚNÍ/VZDÁLENÉ] [REF…] - Instalovat aplikace nebo prostředí" -#: app/flatpak-builtins-install.c:322 +#: app/flatpak-builtins-install.c:374 msgid "At least one REF must be specified" msgstr "Alespoň jeden REF musí být určen" -#: app/flatpak-builtins-install.c:336 -#, c-format +#: app/flatpak-builtins-install.c:388 msgid "Looking for matches…\n" msgstr "Vyhledávají se shody…\n" -#: app/flatpak-builtins-install.c:457 +#: app/flatpak-builtins-install.c:509 #, c-format msgid "No remote refs found for ‘%s’" msgstr "Nenalezeny žádné vzdálené refy pro „%s“" -#: app/flatpak-builtins-install.c:533 app/flatpak-builtins-uninstall.c:405 +#: app/flatpak-builtins-install.c:569 app/flatpak-builtins-uninstall.c:405 #: common/flatpak-ref-utils.c:689 common/flatpak-ref-utils.c:1595 #, c-format msgid "Invalid branch %s: %s" msgstr "Neplatná větev %s: %s" -#: app/flatpak-builtins-install.c:566 +#: app/flatpak-builtins-install.c:602 #, c-format msgid "Nothing matches %s in local repository for remote %s" msgstr "Nic nevyhovuje názvu %s v místním repozitáři pro vzdálený repozitář %s" -#: app/flatpak-builtins-install.c:568 +#: app/flatpak-builtins-install.c:604 #, c-format msgid "Nothing matches %s in remote %s" msgstr "Nic nevyhovuje názvu %s ve vzdáleném repozitáři %s" -#: app/flatpak-builtins-install.c:589 +#: app/flatpak-builtins-install.c:625 #, c-format msgid "Skipping: %s\n" msgstr "Přeskakuje se: %s\n" @@ -2173,12 +2167,10 @@ msgstr "" "vzorů" #: app/flatpak-builtins-mask.c:73 -#, c-format msgid "No masked patterns\n" msgstr "Žádné maskované vzory\n" #: app/flatpak-builtins-mask.c:78 -#, c-format msgid "Masked patterns:\n" msgstr "Maskované vzory:\n" @@ -2271,15 +2263,21 @@ msgstr "" "[VZOR…] - zakázat automatické odstranění prostředí podle odpovídajících vzorů" #: app/flatpak-builtins-pin.c:75 -#, c-format msgid "No pinned patterns\n" msgstr "Žádné připnuté vzory\n" #: app/flatpak-builtins-pin.c:80 -#, c-format msgid "Pinned patterns:\n" msgstr "Připnuté vzory:\n" +#: app/flatpak-builtins-preinstall.c:80 +msgid "- Install flatpaks that are part of the operating system" +msgstr "- Nainstalovat flatpaky, které jsou součástí operačního systému" + +#: app/flatpak-builtins-preinstall.c:118 app/flatpak-builtins-update.c:274 +msgid "Nothing to do.\n" +msgstr "Není co dělat.\n" + #: app/flatpak-builtins-ps.c:47 msgid "Instance" msgstr "Instance" @@ -2448,7 +2446,7 @@ msgstr "" msgid "Can't load uri %s: %s\n" msgstr "Nelze načíst uri %s: %s\n" -#: app/flatpak-builtins-remote-add.c:271 common/flatpak-dir.c:4052 +#: app/flatpak-builtins-remote-add.c:271 common/flatpak-dir.c:4438 #, c-format msgid "Can't load file %s: %s\n" msgstr "Nelze načíst soubor %s: %s\n" @@ -2815,7 +2813,6 @@ msgid "[%d/%d] Verifying %s…\n" msgstr "[%d/%d] Ověřuje se %s…\n" #: app/flatpak-builtins-repair.c:435 -#, c-format msgid "Dry run: " msgstr "Chod naprázdno: " @@ -2835,7 +2832,6 @@ msgid "Deleting ref %s due to %d\n" msgstr "Maže se ref %s z důvodu %d\n" #: app/flatpak-builtins-repair.c:464 -#, c-format msgid "Checking remotes...\n" msgstr "Kontrolují se vzdálené repozitáře...\n" @@ -2850,22 +2846,18 @@ msgid "Remote %s for ref %s is disabled\n" msgstr "Vzdálený repozitář %s pro ref %s je zakázán\n" #: app/flatpak-builtins-repair.c:490 -#, c-format msgid "Pruning objects\n" msgstr "" #: app/flatpak-builtins-repair.c:498 -#, c-format msgid "Erasing .removed\n" msgstr "Odstraňuje se .removed\n" #: app/flatpak-builtins-repair.c:523 -#, c-format msgid "Reinstalling refs\n" msgstr "Reinstalují se refy\n" #: app/flatpak-builtins-repair.c:525 -#, c-format msgid "Reinstalling removed refs\n" msgstr "Reinstalují se odstraněné refy\n" @@ -2900,7 +2892,6 @@ msgid "false" msgstr "nepravda" #: app/flatpak-builtins-repo.c:120 -#, c-format msgid "Subsummaries: " msgstr "Podshrnutí: " @@ -3227,7 +3218,6 @@ msgstr "" "flatpak-pin(1):\n" #: app/flatpak-builtins-uninstall.c:370 -#, c-format msgid "Nothing unused to uninstall\n" msgstr "Nic nepoužívaného k odinstalaci\n" @@ -3252,10 +3242,13 @@ msgid "Warning: %s is not installed\n" msgstr "Varování: %s není nainstalováno\n" #: app/flatpak-builtins-uninstall.c:490 -#, c-format msgid "None of the specified refs are installed" msgstr "Žádný z uvedených refů není nainstalován" +#: app/flatpak-builtins-uninstall.c:599 +msgid "No app data to delete\n" +msgstr "Žádná data aplikace k odstranění\n" + #: app/flatpak-builtins-update.c:56 msgid "Arch to update for" msgstr "Architektura, pro kterou se má aktualizovat" @@ -3293,7 +3286,6 @@ msgid "With --commit, only one REF may be specified" msgstr "" #: app/flatpak-builtins-update.c:162 -#, c-format msgid "Looking for updates…\n" msgstr "Vyhledávají se aktualizace…\n" @@ -3302,11 +3294,6 @@ msgstr "Vyhledávají se aktualizace…\n" msgid "Unable to update %s: %s\n" msgstr "Nelze aktualizovat %s: %s\n" -#: app/flatpak-builtins-update.c:274 -#, c-format -msgid "Nothing to do.\n" -msgstr "Není co dělat.\n" - #: app/flatpak-builtins-utils.c:342 #, c-format msgid "Remote ‘%s’ found in multiple installations:" @@ -3367,7 +3354,6 @@ msgid "Found installed ref ‘%s’ (%s). Is this correct?" msgstr "Nalezen nainstalovaný ref „%s“ (%s). Je to správně?" #: app/flatpak-builtins-utils.c:522 -#, c-format msgid "All of the above" msgstr "Všechny výše uvedené" @@ -3677,12 +3663,10 @@ msgstr "" "Informace: aplikace %s%s%s větev %s%s%s je end-of-life, z důvodu:\n" #: app/flatpak-cli-transaction.c:960 -#, c-format msgid "Info: applications using this extension:\n" msgstr "Informace: aplikace používající toto rozšíření:\n" #: app/flatpak-cli-transaction.c:962 -#, c-format msgid "Info: applications using this runtime:\n" msgstr "Informace: aplikace používající toto prostředí:\n" @@ -3691,7 +3675,6 @@ msgid "Replace?" msgstr "Nahradit?" #: app/flatpak-cli-transaction.c:984 app/flatpak-quiet-transaction.c:247 -#, c-format msgid "Updating to rebased version\n" msgstr "Aktualizace na rebased verzi\n" @@ -3810,8 +3793,12 @@ msgstr "Opravit flatpak instalaci" msgid "Put applications or runtimes onto removable media" msgstr "Umístit aplikace nebo prostředí na vyměnitelné médium" +#: app/flatpak-main.c:92 +msgid "Install flatpaks that are part of the operating system" +msgstr "Nainstalovat flatpaky, které jsou součástí operačního systému" + #. translators: please keep the leading newline and space -#: app/flatpak-main.c:94 +#: app/flatpak-main.c:95 msgid "" "\n" " Find applications and runtimes" @@ -3819,12 +3806,12 @@ msgstr "" "\n" " Vyhledávání aplikací a prostředí" -#: app/flatpak-main.c:95 +#: app/flatpak-main.c:96 msgid "Search for remote apps/runtimes" msgstr "Hledat vzdálené aplikace/prostředí" #. translators: please keep the leading newline and space -#: app/flatpak-main.c:98 +#: app/flatpak-main.c:99 msgid "" "\n" " Manage running applications" @@ -3832,32 +3819,32 @@ msgstr "" "\n" " Správa běžících aplikací" -#: app/flatpak-main.c:99 +#: app/flatpak-main.c:100 msgid "Run an application" msgstr "Spustit aplikaci" -#: app/flatpak-main.c:100 +#: app/flatpak-main.c:101 msgid "Override permissions for an application" msgstr "Přepsat oprávnění pro aplikaci" -#: app/flatpak-main.c:101 +#: app/flatpak-main.c:102 msgid "Specify default version to run" msgstr "Určit výchozí verzi ke spuštění" -#: app/flatpak-main.c:102 +#: app/flatpak-main.c:103 msgid "Enter the namespace of a running application" msgstr "Vstoupit do jmenného prostoru běžící aplikace" -#: app/flatpak-main.c:103 +#: app/flatpak-main.c:104 msgid "Enumerate running applications" msgstr "Vypsat spuštěné aplikace" -#: app/flatpak-main.c:104 +#: app/flatpak-main.c:105 msgid "Stop a running application" msgstr "Zastavit běžící aplikaci" #. translators: please keep the leading newline and space -#: app/flatpak-main.c:107 +#: app/flatpak-main.c:108 msgid "" "\n" " Manage file access" @@ -3865,24 +3852,24 @@ msgstr "" "\n" " Správa přístupu k souborům" -#: app/flatpak-main.c:108 +#: app/flatpak-main.c:109 msgid "List exported files" msgstr "Zobrazit exportované soubory" -#: app/flatpak-main.c:109 +#: app/flatpak-main.c:110 msgid "Grant an application access to a specific file" msgstr "Udělit aplikaci přístup k určenému souboru" -#: app/flatpak-main.c:110 +#: app/flatpak-main.c:111 msgid "Revoke access to a specific file" msgstr "Zrušit přístup aplikace k určenému souboru" -#: app/flatpak-main.c:111 +#: app/flatpak-main.c:112 msgid "Show information about a specific file" msgstr "Zobrazit informace o určeném souboru" #. translators: please keep the leading newline and space -#: app/flatpak-main.c:115 +#: app/flatpak-main.c:116 msgid "" "\n" " Manage dynamic permissions" @@ -3890,28 +3877,28 @@ msgstr "" "\n" " Správa dynamických oprávnění" -#: app/flatpak-main.c:116 +#: app/flatpak-main.c:117 msgid "List permissions" msgstr "Vypsat oprávnění" -#: app/flatpak-main.c:117 +#: app/flatpak-main.c:118 msgid "Remove item from permission store" msgstr "Odstranit položku z úložiště oprávnění" -#: app/flatpak-main.c:119 +#: app/flatpak-main.c:120 msgid "Set permissions" msgstr "Nastavit oprávnění" -#: app/flatpak-main.c:120 +#: app/flatpak-main.c:121 msgid "Show app permissions" msgstr "Zobrazit oprávnění aplikace" -#: app/flatpak-main.c:121 +#: app/flatpak-main.c:122 msgid "Reset app permissions" msgstr "Resetovat oprávnění aplikace" #. translators: please keep the leading newline and space -#: app/flatpak-main.c:124 +#: app/flatpak-main.c:125 msgid "" "\n" " Manage remote repositories" @@ -3919,32 +3906,32 @@ msgstr "" "\n" " Správa vzdálených repozitářů" -#: app/flatpak-main.c:125 +#: app/flatpak-main.c:126 msgid "List all configured remotes" msgstr "Vypsat všechny nastavené vzdálené repozitáře" -#: app/flatpak-main.c:126 +#: app/flatpak-main.c:127 msgid "Add a new remote repository (by URL)" msgstr "Přidat nový vzdálený repozitář (pomocí URL)" -#: app/flatpak-main.c:127 +#: app/flatpak-main.c:128 msgid "Modify properties of a configured remote" msgstr "Měnit vlastnosti nastaveného vzdáleného repozitáře" -#: app/flatpak-main.c:128 +#: app/flatpak-main.c:129 msgid "Delete a configured remote" msgstr "Odstranit nastavený vzdálený repozitář" -#: app/flatpak-main.c:130 +#: app/flatpak-main.c:131 msgid "List contents of a configured remote" msgstr "Vypsat obsah nastaveného vzdáleného repozitáře" -#: app/flatpak-main.c:131 +#: app/flatpak-main.c:132 msgid "Show information about a remote app or runtime" msgstr "Zobrazit informace o vzdálené aplikaci či prostředí" #. translators: please keep the leading newline and space -#: app/flatpak-main.c:134 +#: app/flatpak-main.c:135 msgid "" "\n" " Build applications" @@ -3952,99 +3939,99 @@ msgstr "" "\n" " Sestavení aplikací" -#: app/flatpak-main.c:135 +#: app/flatpak-main.c:136 msgid "Initialize a directory for building" msgstr "Inicializovat adresář pro sestavení" -#: app/flatpak-main.c:136 +#: app/flatpak-main.c:137 msgid "Run a build command inside the build dir" msgstr "Spustit příkaz k sestavení uvnitř adresáře sestavení" -#: app/flatpak-main.c:137 +#: app/flatpak-main.c:138 msgid "Finish a build dir for export" msgstr "Dokončit adresář sestavení pro export" -#: app/flatpak-main.c:138 +#: app/flatpak-main.c:139 msgid "Export a build dir to a repository" msgstr "Exportovat adresář sestavení do repozitáře" -#: app/flatpak-main.c:139 +#: app/flatpak-main.c:140 msgid "Create a bundle file from a ref in a local repository" msgstr "Vytvořit soubor balíku z refu v místním repozitáři" -#: app/flatpak-main.c:140 +#: app/flatpak-main.c:141 msgid "Import a bundle file" msgstr "Importovat soubor balíku" -#: app/flatpak-main.c:141 +#: app/flatpak-main.c:142 msgid "Sign an application or runtime" msgstr "Podepsat aplikaci nebo prostředí" -#: app/flatpak-main.c:142 +#: app/flatpak-main.c:143 msgid "Update the summary file in a repository" msgstr "Aktualizovat soubor shrnutí v repozitáři" -#: app/flatpak-main.c:143 +#: app/flatpak-main.c:144 msgid "Create new commit based on existing ref" msgstr "Vytvořit nový commit založený na existujícím ref" -#: app/flatpak-main.c:144 +#: app/flatpak-main.c:145 msgid "Show information about a repo" msgstr "Zobrazit informace o repozitáři" -#: app/flatpak-main.c:161 +#: app/flatpak-main.c:162 msgid "Show debug information, -vv for more detail" msgstr "Zobrazit ladicí informace, -vv pro více detailů" -#: app/flatpak-main.c:162 +#: app/flatpak-main.c:163 msgid "Show OSTree debug information" msgstr "Zobrazit ladicí informace OSTree" -#: app/flatpak-main.c:168 +#: app/flatpak-main.c:169 msgid "Print version information and exit" msgstr "Vypsat informace o verzi a skončit" -#: app/flatpak-main.c:169 +#: app/flatpak-main.c:170 msgid "Print default arch and exit" msgstr "Vypsat výchozí architekturu a skončit" -#: app/flatpak-main.c:170 +#: app/flatpak-main.c:171 msgid "Print supported arches and exit" msgstr "Vypsat podporované architektury a skončit" -#: app/flatpak-main.c:171 +#: app/flatpak-main.c:172 msgid "Print active gl drivers and exit" msgstr "Vypsat aktivní gl ovladače a skončit" -#: app/flatpak-main.c:172 +#: app/flatpak-main.c:173 msgid "Print paths for system installations and exit" msgstr "Vypsat cesty k systémovým instalacím a skončit" -#: app/flatpak-main.c:173 +#: app/flatpak-main.c:174 msgid "Print the updated environment needed to run flatpaks" msgstr "Vypsat aktualizované prostředí požadované pro běh flatpaků" -#: app/flatpak-main.c:174 +#: app/flatpak-main.c:175 msgid "Only include the system installation with --print-updated-env" msgstr "Zahrnout pouze systémové instalace s --print-updated-env" -#: app/flatpak-main.c:179 +#: app/flatpak-main.c:180 msgid "Work on the user installation" msgstr "Pracovat na uživatelské instalaci" -#: app/flatpak-main.c:180 +#: app/flatpak-main.c:181 msgid "Work on the system-wide installation (default)" msgstr "Pracovat na systémové instalaci (výchozí)" -#: app/flatpak-main.c:181 +#: app/flatpak-main.c:182 msgid "Work on a non-default system-wide installation" msgstr "Pracovat na nevýchozí systémové instalaci" -#: app/flatpak-main.c:211 +#: app/flatpak-main.c:212 msgid "Builtin Commands:" msgstr "Vestavěné příkazy:" -#: app/flatpak-main.c:297 +#: app/flatpak-main.c:298 #, c-format msgid "" "Note that the directories %s are not in the search path set by the " @@ -4055,7 +4042,7 @@ msgstr "" "prostředí XDG_DATA_DIRS, takže aplikace nainstalované pomocí Flatpaku se " "nemusí objevit na vaší ploše, dokud nebude sezení restartováno." -#: app/flatpak-main.c:311 +#: app/flatpak-main.c:312 #, c-format msgid "" "Note that the directory %s is not in the search path set by the " @@ -4066,7 +4053,7 @@ msgstr "" "prostředí XDG_DATA_DIRS, takže aplikace nainstalované pomocí Flatpaku se " "nemusí objevit na vaší ploše, dokud nebude sezení restartováno." -#: app/flatpak-main.c:380 +#: app/flatpak-main.c:381 msgid "" "Refusing to operate under sudo with --user. Omit sudo to operate on the user " "installation, or use a root shell to operate on the root user's installation." @@ -4075,31 +4062,31 @@ msgstr "" "uživatelské instalaci, nebo použijte shell uživatele root pro operaci na " "instalaci uživatele root." -#: app/flatpak-main.c:452 +#: app/flatpak-main.c:453 msgid "" "Multiple installations specified for a command that works on one installation" msgstr "Více instalací určeno pro příkaz, který funguje na jedné instalaci" -#: app/flatpak-main.c:503 app/flatpak-main.c:690 +#: app/flatpak-main.c:504 app/flatpak-main.c:691 #, c-format msgid "See '%s --help'" msgstr "Viz „%s --help“" -#: app/flatpak-main.c:699 +#: app/flatpak-main.c:700 #, c-format msgid "'%s' is not a flatpak command. Did you mean '%s%s'?" msgstr "„%s“ není platným flatpak příkazem. Měli jste na mysli „%s%s“?" -#: app/flatpak-main.c:702 +#: app/flatpak-main.c:703 #, c-format msgid "'%s' is not a flatpak command" msgstr "„%s“ není příkaz flatpaku" -#: app/flatpak-main.c:817 +#: app/flatpak-main.c:818 msgid "No command specified" msgstr "Nebyl určen žádný příkaz" -#: app/flatpak-main.c:976 +#: app/flatpak-main.c:977 msgid "error:" msgstr "chyba:" @@ -4158,16 +4145,16 @@ msgstr "Varování: Selhala odinstalace %s: %s\n" msgid "Error: Failed to uninstall %s: %s\n" msgstr "Chyba: Selhala odinstalace %s: %s\n" -#: app/flatpak-quiet-transaction.c:166 common/flatpak-dir.c:10535 +#: app/flatpak-quiet-transaction.c:166 common/flatpak-dir.c:10894 #, c-format msgid "%s already installed" msgstr "%s je již nainstalováno" #: app/flatpak-quiet-transaction.c:168 common/flatpak-dir-utils.c:166 -#: common/flatpak-dir-utils.c:259 common/flatpak-dir.c:3033 -#: common/flatpak-dir.c:3732 common/flatpak-dir.c:15888 -#: common/flatpak-dir.c:16178 common/flatpak-transaction.c:2669 -#: common/flatpak-transaction.c:2724 +#: common/flatpak-dir-utils.c:259 common/flatpak-dir.c:3419 +#: common/flatpak-dir.c:4118 common/flatpak-dir.c:16257 +#: common/flatpak-dir.c:16547 common/flatpak-transaction.c:2693 +#: common/flatpak-transaction.c:2748 #, c-format msgid "%s not installed" msgstr "%s není nainstalováno" @@ -4237,7 +4224,6 @@ msgid "Filesystem location \"%s\" contains \"..\"" msgstr "Umístění systému souborů „%s“ obsahuje „..“" #: common/flatpak-context.c:1002 -#, c-format msgid "" "--filesystem=/ is not available, use --filesystem=host for a similar result" msgstr "" @@ -4263,22 +4249,18 @@ msgid "Environment variable name must not contain '=': %s" msgstr "Název proměnné prostředí nesmí obsahovat '=': %s" #: common/flatpak-context.c:1540 common/flatpak-context.c:1548 -#, c-format msgid "--add-policy arguments must be in the form SUBSYSTEM.KEY=VALUE" msgstr "--add-policy argumenty musí být ve formě SUBSYSTÉM.KLÍČ=HODNOTA" #: common/flatpak-context.c:1555 -#, c-format msgid "--add-policy values can't start with \"!\"" msgstr "--add-policy hodnoty nemohou začínat „!“" #: common/flatpak-context.c:1580 common/flatpak-context.c:1588 -#, c-format msgid "--remove-policy arguments must be in the form SUBSYSTEM.KEY=VALUE" msgstr "--remove-policy argumenty musí být ve formě SUBSYSTÉM.KLÍČ=HODNOTA" #: common/flatpak-context.c:1595 -#, c-format msgid "--remove-policy values can't start with \"!\"" msgstr "--remove-policy hodnoty nemohou začínat „!“" @@ -4419,27 +4401,27 @@ msgstr "Odebrat generickou volbu bezpečnostní politiky" #: common/flatpak-context.c:1692 msgid "Add USB device to enumerables" -msgstr "" +msgstr "Přidat zařízení USB do enumerovatelných" #: common/flatpak-context.c:1692 common/flatpak-context.c:1693 msgid "VENDOR_ID:PRODUCT_ID" -msgstr "" +msgstr "ID_VÝROBCE:ID_PRODUKTU" #: common/flatpak-context.c:1693 msgid "Add USB device to hidden list" -msgstr "" +msgstr "Přidat zařízení USB do skrytého seznamu" #: common/flatpak-context.c:1694 msgid "A list of USB devices that are enumerable" -msgstr "" +msgstr "Seznam zařízení USB pro enumeraci" #: common/flatpak-context.c:1694 msgid "LIST" -msgstr "" +msgstr "SEZNAM" #: common/flatpak-context.c:1695 msgid "File containing a list of USB devices to make enumerable" -msgstr "" +msgstr "Soubor obsahující seznam zařízení USB pro enumeraci" #: common/flatpak-context.c:1695 common/flatpak-context.c:1696 msgid "FILENAME" @@ -4478,517 +4460,507 @@ msgstr "Nepovolení přístupu k domovskému adresáři: %s" msgid "Unable to provide a temporary home directory in the sandbox: %s" msgstr "Selhalo poskytnutí dočasného domovského adresáře v sandboxu: %s" -#: common/flatpak-dir.c:425 +#: common/flatpak-dir.c:436 #, c-format msgid "Configured collection ID ‘%s’ not in summary file" msgstr "" -#: common/flatpak-dir.c:563 +#: common/flatpak-dir.c:574 #, c-format msgid "Unable to load summary from remote %s: %s" msgstr "Nelze načíst shrnutí ze vzdáleného repozitáře %s: %s" -#: common/flatpak-dir.c:712 common/flatpak-dir.c:784 +#: common/flatpak-dir.c:723 common/flatpak-dir.c:795 #, c-format msgid "No such ref '%s' in remote %s" msgstr "Nemohu nalézt ref „%s“ ve vzdáleném repozitáři %s" -#: common/flatpak-dir.c:769 common/flatpak-dir.c:906 common/flatpak-dir.c:935 -#: common/flatpak-dir.c:947 +#: common/flatpak-dir.c:780 common/flatpak-dir.c:917 common/flatpak-dir.c:946 +#: common/flatpak-dir.c:958 #, c-format msgid "No entry for %s in remote %s summary flatpak cache" msgstr "Žádný záznam pro %s ve flatpak cache shrnutí vzdáleného repozitáře %s" -#: common/flatpak-dir.c:924 +#: common/flatpak-dir.c:935 #, c-format msgid "No summary or Flatpak cache available for remote %s" msgstr "Žádné shrnutí nebo Flatpak cache dostupná pro vzdálený repozitář %s" -#: common/flatpak-dir.c:952 +#: common/flatpak-dir.c:963 #, c-format msgid "Missing xa.data in summary for remote %s" msgstr "Chybějící xa.data ve shrnutí pro vzdálený repozitář %s" -#: common/flatpak-dir.c:958 common/flatpak-dir.c:1375 +#: common/flatpak-dir.c:969 common/flatpak-dir.c:1362 #, c-format msgid "Unsupported summary version %d for remote %s" msgstr "Nepodporovaná verze shrnutí %d pro vzdálený repozitář %s" -#: common/flatpak-dir.c:1045 +#: common/flatpak-dir.c:1056 msgid "Remote OCI index has no registry uri" msgstr "" -#: common/flatpak-dir.c:1114 +#: common/flatpak-dir.c:1112 #, c-format msgid "Couldn't find ref %s in remote %s" msgstr "Nepodařilo se nalézt ref %s ve vzdáleném repozitáři %s" -#: common/flatpak-dir.c:1131 common/flatpak-dir.c:6044 -#: common/flatpak-oci-registry.c:3493 common/flatpak-oci-registry.c:3498 -msgid "Image is not a manifest" -msgstr "Obraz není manifest" - -#: common/flatpak-dir.c:1152 common/flatpak-dir.c:1225 +#: common/flatpak-dir.c:1129 common/flatpak-dir.c:1212 #, c-format msgid "Commit has no requested ref ‘%s’ in ref binding metadata" msgstr "" -#: common/flatpak-dir.c:1256 +#: common/flatpak-dir.c:1243 #, c-format msgid "Configured collection ID ‘%s’ not in binding metadata" msgstr "" -#: common/flatpak-dir.c:1292 common/flatpak-dir.c:5032 -#: common/flatpak-dir.c:5953 common/flatpak-dir.c:6021 +#: common/flatpak-dir.c:1279 common/flatpak-dir.c:5418 #, c-format msgid "Couldn't find latest checksum for ref %s in remote %s" msgstr "" "Nepodařilo se získat nejnovější kontrolní součet pro ref %s ve vzdáleném " "repozitáři %s" -#: common/flatpak-dir.c:1345 common/flatpak-dir.c:1381 +#: common/flatpak-dir.c:1332 common/flatpak-dir.c:1368 #, c-format msgid "No entry for %s in remote %s summary flatpak sparse cache" msgstr "Žádný záznam pro %s v řídké cache shrnutí vzdáleného repozitáře %s" -#: common/flatpak-dir.c:1970 +#: common/flatpak-dir.c:2356 #, c-format msgid "Commit metadata for %s not matching expected metadata" msgstr "" -#: common/flatpak-dir.c:2235 +#: common/flatpak-dir.c:2621 msgid "Unable to connect to system bus" msgstr "Nelze se připojit k systémové sběrnici" -#: common/flatpak-dir.c:2830 +#: common/flatpak-dir.c:3216 msgid "User installation" msgstr "Uživatelská instalace" -#: common/flatpak-dir.c:2837 +#: common/flatpak-dir.c:3223 #, c-format msgid "System (%s) installation" msgstr "Systémová (%s) instalace" -#: common/flatpak-dir.c:2883 +#: common/flatpak-dir.c:3269 #, c-format msgid "No overrides found for %s" msgstr "Žádná přepsání nenalezena pro %s" -#: common/flatpak-dir.c:3036 +#: common/flatpak-dir.c:3422 #, c-format msgid "%s (commit %s) not installed" msgstr "%s (commit %s) nenainstalováno" -#: common/flatpak-dir.c:4059 +#: common/flatpak-dir.c:4445 #, c-format msgid "Error parsing system flatpakrepo file for %s: %s" msgstr "Chyba během zpracování souboru flatpakrepo pro %s: %s" -#: common/flatpak-dir.c:4134 +#: common/flatpak-dir.c:4520 #, c-format msgid "While opening repository %s: " msgstr "Během otevírání repozitáře %s: " -#: common/flatpak-dir.c:4395 +#: common/flatpak-dir.c:4781 #, c-format msgid "The config key %s is not set" msgstr "Konfigurační klíč %s není nastaven" -#: common/flatpak-dir.c:4528 +#: common/flatpak-dir.c:4914 #, c-format msgid "No current %s pattern matching %s" msgstr "Žádný současný vzor %s odpovídající %s" -#: common/flatpak-dir.c:4810 +#: common/flatpak-dir.c:5196 msgid "No appstream commit to deploy" msgstr "Žádný appstream commit k nasazení" -#: common/flatpak-dir.c:5328 common/flatpak-dir.c:6378 -#: common/flatpak-dir.c:9971 common/flatpak-dir.c:10677 +#: common/flatpak-dir.c:5714 common/flatpak-dir.c:6720 +#: common/flatpak-dir.c:10325 common/flatpak-dir.c:11037 msgid "Can't pull from untrusted non-gpg verified remote" msgstr "" -#: common/flatpak-dir.c:5740 common/flatpak-dir.c:5777 +#: common/flatpak-dir.c:6126 common/flatpak-dir.c:6163 msgid "Extra data not supported for non-gpg-verified local system installs" msgstr "" -#: common/flatpak-dir.c:5806 +#: common/flatpak-dir.c:6192 #, c-format msgid "Invalid checksum for extra data uri %s" msgstr "Neplatný kontrolní součet pro uri dodatečných dat %s" -#: common/flatpak-dir.c:5811 +#: common/flatpak-dir.c:6197 #, c-format msgid "Empty name for extra data uri %s" msgstr "Prázdný název pro uri dodatečných dat %s" -#: common/flatpak-dir.c:5818 +#: common/flatpak-dir.c:6204 #, c-format msgid "Unsupported extra data uri %s" msgstr "Nepodporovaný uri dodatečných dat %s" -#: common/flatpak-dir.c:5832 +#: common/flatpak-dir.c:6218 #, c-format msgid "Failed to load local extra-data %s: %s" msgstr "Chyba během načítání místních dodatečných dat %s: %s" -#: common/flatpak-dir.c:5835 +#: common/flatpak-dir.c:6221 #, c-format msgid "Wrong size for extra-data %s" msgstr "Chybná velikost pro dodatečná data %s" -#: common/flatpak-dir.c:5850 +#: common/flatpak-dir.c:6236 #, c-format msgid "While downloading %s: " msgstr "Během stahování %s: " -#: common/flatpak-dir.c:5857 +#: common/flatpak-dir.c:6243 #, c-format msgid "Wrong size for extra data %s" msgstr "Chybná velikost pro dodatečná data %s" -#: common/flatpak-dir.c:5866 +#: common/flatpak-dir.c:6252 #, c-format msgid "Invalid checksum for extra data %s" msgstr "Neplatný kontrolní součet pro dodatečná data %s" -#: common/flatpak-dir.c:5961 common/flatpak-dir.c:8816 -#: common/flatpak-dir.c:10555 -#, c-format -msgid "%s commit %s already installed" -msgstr "%s commit %s je již nainstalováno" - -#: common/flatpak-dir.c:6208 common/flatpak-dir.c:6461 +#: common/flatpak-dir.c:6550 common/flatpak-dir.c:6803 #, c-format msgid "While pulling %s from remote %s: " msgstr "Během stahování %s ze vzdáleného repozitáře %s: " -#: common/flatpak-dir.c:6402 common/flatpak-repo-utils.c:3906 +#: common/flatpak-dir.c:6744 common/flatpak-repo-utils.c:3909 msgid "GPG signatures found, but none are in trusted keyring" msgstr "GPG podpisy nalezeny, ale žádný není ve svazku důvěryhodných klíčů" -#: common/flatpak-dir.c:6419 +#: common/flatpak-dir.c:6761 #, c-format msgid "Commit for ‘%s’ has no ref binding" msgstr "" -#: common/flatpak-dir.c:6424 +#: common/flatpak-dir.c:6766 #, c-format msgid "Commit for ‘%s’ is not in expected bound refs: %s" msgstr "" -#: common/flatpak-dir.c:6600 +#: common/flatpak-dir.c:6942 msgid "Only applications can be made current" msgstr "" -#: common/flatpak-dir.c:7304 +#: common/flatpak-dir.c:7646 msgid "Not enough memory" msgstr "Nedostatek paměti" -#: common/flatpak-dir.c:7323 +#: common/flatpak-dir.c:7665 msgid "Failed to read from exported file" msgstr "Selhalo čtení z exportovaného souboru" -#: common/flatpak-dir.c:7513 +#: common/flatpak-dir.c:7855 msgid "Error reading mimetype xml file" msgstr "Chyba při čtení mimetype xml souboru" -#: common/flatpak-dir.c:7518 +#: common/flatpak-dir.c:7860 msgid "Invalid mimetype xml file" msgstr "Neplatný mimetype xml soubor" -#: common/flatpak-dir.c:7604 +#: common/flatpak-dir.c:7946 #, c-format msgid "D-Bus service file '%s' has wrong name" msgstr "Soubor služby D-Bus „%s“ má neplatný název" -#: common/flatpak-dir.c:7759 +#: common/flatpak-dir.c:8101 #, c-format msgid "Invalid Exec argument %s" msgstr "Neplatný Exec argument %s" -#: common/flatpak-dir.c:8226 +#: common/flatpak-dir.c:8568 msgid "While getting detached metadata: " msgstr "" -#: common/flatpak-dir.c:8231 common/flatpak-dir.c:8236 -#: common/flatpak-dir.c:8240 +#: common/flatpak-dir.c:8573 common/flatpak-dir.c:8578 +#: common/flatpak-dir.c:8582 msgid "Extra data missing in detached metadata" msgstr "" -#: common/flatpak-dir.c:8244 +#: common/flatpak-dir.c:8586 msgid "While creating extradir: " msgstr "" -#: common/flatpak-dir.c:8265 common/flatpak-dir.c:8298 +#: common/flatpak-dir.c:8607 common/flatpak-dir.c:8640 msgid "Invalid checksum for extra data" msgstr "Neplatný kontrolní součet pro dodatečná data" -#: common/flatpak-dir.c:8294 +#: common/flatpak-dir.c:8636 msgid "Wrong size for extra data" msgstr "Chybná velikost pro dodatečná data" -#: common/flatpak-dir.c:8307 +#: common/flatpak-dir.c:8649 #, c-format msgid "While writing extra data file '%s': " msgstr "Během zapisování souboru dodatečných dat „%s“: " -#: common/flatpak-dir.c:8315 +#: common/flatpak-dir.c:8657 #, c-format msgid "Extra data %s missing in detached metadata" msgstr "" -#: common/flatpak-dir.c:8413 -#, fuzzy, c-format +#: common/flatpak-dir.c:8755 msgid "Unable to get runtime key from metadata" -msgstr "Použít alternativní soubor pro metadata" +msgstr "" -#: common/flatpak-dir.c:8526 +#: common/flatpak-dir.c:8868 #, c-format msgid "apply_extra script failed, exit status %d" msgstr "apply_extra skript selhal, návratová hodnota %d" #. Translators: The placeholder is for an app ref. -#: common/flatpak-dir.c:8693 +#: common/flatpak-dir.c:9035 #, c-format msgid "Installing %s is not allowed by the policy set by your administrator" msgstr "" "Instalace aplikace %s není povolena bezpečnostní politikou, kterou nastavil " "váš administrátor" -#: common/flatpak-dir.c:8792 +#: common/flatpak-dir.c:9134 #, c-format msgid "While trying to resolve ref %s: " msgstr "Během pokusu o vyřešení ref %s: " -#: common/flatpak-dir.c:8804 +#: common/flatpak-dir.c:9146 #, c-format msgid "%s is not available" msgstr "%s není dostupné" -#: common/flatpak-dir.c:8823 +#: common/flatpak-dir.c:9158 common/flatpak-dir.c:10914 +#, c-format +msgid "%s commit %s already installed" +msgstr "%s commit %s je již nainstalováno" + +#: common/flatpak-dir.c:9165 msgid "Can't create deploy directory" msgstr "Nemohu vytvořit adresář sestavení" -#: common/flatpak-dir.c:8831 +#: common/flatpak-dir.c:9173 #, c-format msgid "Failed to read commit %s: " msgstr "Nelze číst commit %s: " -#: common/flatpak-dir.c:8852 +#: common/flatpak-dir.c:9194 #, c-format msgid "While trying to checkout %s into %s: " msgstr "" -#: common/flatpak-dir.c:8871 +#: common/flatpak-dir.c:9213 msgid "While trying to checkout metadata subpath: " msgstr "" -#: common/flatpak-dir.c:8903 +#: common/flatpak-dir.c:9245 #, c-format msgid "While trying to checkout subpath ‘%s’: " msgstr "" -#: common/flatpak-dir.c:8913 +#: common/flatpak-dir.c:9255 msgid "While trying to remove existing extra dir: " msgstr "Během pokusu o odstranění existujícího dodatečného adresáře: " -#: common/flatpak-dir.c:8924 +#: common/flatpak-dir.c:9266 msgid "While trying to apply extra data: " msgstr "Během pokusu o aplikaci dodatečných dat: " -#: common/flatpak-dir.c:8951 +#: common/flatpak-dir.c:9293 #, c-format msgid "Invalid commit ref %s: " msgstr "Neplatný ref %s commitu: " -#: common/flatpak-dir.c:8959 common/flatpak-dir.c:8971 +#: common/flatpak-dir.c:9301 common/flatpak-dir.c:9313 #, c-format msgid "Deployed ref %s does not match commit (%s)" msgstr "" -#: common/flatpak-dir.c:8965 +#: common/flatpak-dir.c:9307 #, c-format msgid "Deployed ref %s branch does not match commit (%s)" msgstr "" -#: common/flatpak-dir.c:9226 common/flatpak-installation.c:1912 +#: common/flatpak-dir.c:9569 common/flatpak-installation.c:1912 #, c-format msgid "%s branch %s already installed" msgstr "%s větev %s je již nainstalováno" -#: common/flatpak-dir.c:10075 +#: common/flatpak-dir.c:10429 #, c-format msgid "Could not unmount revokefs-fuse filesystem at %s: " msgstr "" -#: common/flatpak-dir.c:10362 +#: common/flatpak-dir.c:10721 #, c-format msgid "This version of %s is already installed" msgstr "Tato verze aplikace %s je již nainstalována" -#: common/flatpak-dir.c:10369 -#, c-format +#: common/flatpak-dir.c:10728 msgid "Can't change remote during bundle install" msgstr "Nemohu změnit vzdálený repozitář během instalace balíčku" -#: common/flatpak-dir.c:10630 +#: common/flatpak-dir.c:10990 msgid "Can't update to a specific commit without root permissions" msgstr "Nelze aktualizovat na specifický commit bez root oprávnění" -#: common/flatpak-dir.c:10910 +#: common/flatpak-dir.c:11271 #, c-format msgid "Can't remove %s, it is needed for: %s" msgstr "Nelze odstranit %s, je požadováno pro: %s" -#: common/flatpak-dir.c:10966 common/flatpak-installation.c:2068 +#: common/flatpak-dir.c:11331 common/flatpak-installation.c:2068 #, c-format msgid "%s branch %s is not installed" msgstr "%s větev %s není nainstalováno" -#: common/flatpak-dir.c:11219 +#: common/flatpak-dir.c:11584 #, c-format msgid "%s commit %s not installed" msgstr "%s commit %s nenainstalováno" -#: common/flatpak-dir.c:11555 +#: common/flatpak-dir.c:11920 #, c-format msgid "Pruning repo failed: %s" msgstr "" -#: common/flatpak-dir.c:11723 common/flatpak-dir.c:11729 +#: common/flatpak-dir.c:12088 common/flatpak-dir.c:12094 #, c-format msgid "Failed to load filter '%s'" msgstr "Nelze načíst filtr „%s“" -#: common/flatpak-dir.c:11735 +#: common/flatpak-dir.c:12100 #, c-format msgid "Failed to parse filter '%s'" msgstr "Nelze zpracovat filtr „%s“" -#: common/flatpak-dir.c:12017 +#: common/flatpak-dir.c:12382 msgid "Failed to write summary cache: " msgstr "Nelze zapsat cache shrnutí: " -#: common/flatpak-dir.c:12036 +#: common/flatpak-dir.c:12401 #, c-format msgid "No oci summary cached for remote '%s'" msgstr "" -#: common/flatpak-dir.c:12261 +#: common/flatpak-dir.c:12626 #, c-format msgid "No cached summary for remote '%s'" msgstr "" -#: common/flatpak-dir.c:12302 +#: common/flatpak-dir.c:12667 #, c-format msgid "Invalid checksum for indexed summary %s read from %s" msgstr "" -#: common/flatpak-dir.c:12375 +#: common/flatpak-dir.c:12740 #, c-format msgid "" "Remote listing for %s not available; server has no summary file. Check the " "URL passed to remote-add was valid." msgstr "" -#: common/flatpak-dir.c:12752 +#: common/flatpak-dir.c:13117 #, c-format msgid "Invalid checksum for indexed summary %s for remote '%s'" msgstr "" -#: common/flatpak-dir.c:13375 +#: common/flatpak-dir.c:13744 #, c-format msgid "Multiple branches available for %s, you must specify one of: " msgstr "Pro %s je dostupno více větví, musíte určit jednu z nich: " -#: common/flatpak-dir.c:13441 +#: common/flatpak-dir.c:13810 #, c-format msgid "Nothing matches %s" msgstr "Nic nevyhovuje názvu %s" -#: common/flatpak-dir.c:13549 +#: common/flatpak-dir.c:13918 #, c-format msgid "Can't find ref %s%s%s%s%s" msgstr "Nemohu nalézt ref %s%s%s%s%s" -#: common/flatpak-dir.c:13592 +#: common/flatpak-dir.c:13961 #, c-format msgid "Error searching remote %s: %s" msgstr "Chyba během prohledávání vzdáleného repozitáře %s: %s" -#: common/flatpak-dir.c:13689 +#: common/flatpak-dir.c:14058 #, c-format msgid "Error searching local repository: %s" msgstr "Chyba během prohledávání místního repozitáře: %s" -#: common/flatpak-dir.c:13826 +#: common/flatpak-dir.c:14195 #, c-format msgid "%s/%s/%s not installed" msgstr "%s/%s/%s nenainstalováno" -#: common/flatpak-dir.c:14029 +#: common/flatpak-dir.c:14398 #, c-format msgid "Could not find installation %s" msgstr "Nemohu nalézt instalaci %s" -#: common/flatpak-dir.c:14574 +#: common/flatpak-dir.c:14943 #, c-format msgid "Invalid file format, no %s group" msgstr "Neplatný formát souboru, žádná skupina %s" -#: common/flatpak-dir.c:14579 common/flatpak-repo-utils.c:2861 +#: common/flatpak-dir.c:14948 common/flatpak-repo-utils.c:2861 #, c-format msgid "Invalid version %s, only 1 supported" msgstr "Neplatná verze %s, pouze 1 je podporována" -#: common/flatpak-dir.c:14584 common/flatpak-dir.c:14589 +#: common/flatpak-dir.c:14953 common/flatpak-dir.c:14958 #, c-format msgid "Invalid file format, no %s specified" msgstr "Neplatný formát souboru, %s není určen" #. Check some minimal size so we don't get crap -#: common/flatpak-dir.c:14609 +#: common/flatpak-dir.c:14978 msgid "Invalid file format, gpg key invalid" msgstr "Neplatný formát souboru, neplatný klíč gpg" -#: common/flatpak-dir.c:14637 common/flatpak-repo-utils.c:2934 +#: common/flatpak-dir.c:15006 common/flatpak-repo-utils.c:2937 msgid "Collection ID requires GPG key to be provided" msgstr "ID kolekce vyžaduje poskytnutí GPG klíče" -#: common/flatpak-dir.c:14680 +#: common/flatpak-dir.c:15049 #, c-format msgid "Runtime %s, branch %s is already installed" msgstr "Prostředí %s, větev %s je již nainstalováno" -#: common/flatpak-dir.c:14681 +#: common/flatpak-dir.c:15050 #, c-format msgid "App %s, branch %s is already installed" msgstr "Aplikace %s, větev %s je již nainstalováno" -#: common/flatpak-dir.c:14914 +#: common/flatpak-dir.c:15283 #, c-format msgid "Can't remove remote '%s' with installed ref %s (at least)" msgstr "" "Nelze odstranit vzdálený repozitář „%s“ s nainstalovaným refem %s (minimálně)" -#: common/flatpak-dir.c:15013 +#: common/flatpak-dir.c:15382 #, c-format msgid "Invalid character '/' in remote name: %s" msgstr "Neplatný znak „/“ v názvu vzdáleného repozitáře: %s" -#: common/flatpak-dir.c:15019 +#: common/flatpak-dir.c:15388 #, c-format msgid "No configuration for remote %s specified" msgstr "Neurčena žádná konfigurace pro vzdálený repozitář %s" -#: common/flatpak-dir.c:16516 +#: common/flatpak-dir.c:16885 #, c-format msgid "Skipping deletion of mirror ref (%s, %s)…\n" msgstr "" #: common/flatpak-exports.c:916 -#, c-format msgid "An absolute path is required" msgstr "Je vyžadována absolutní cesta" @@ -5042,6 +5014,23 @@ msgstr "„%s“ není číslo bez znaménka" msgid "Number “%s” is out of bounds [%s, %s]" msgstr "" +#: common/flatpak-image-source.c:94 common/flatpak-image-source.c:102 +msgid "Image is not a manifest" +msgstr "Obraz není manifest" + +#: common/flatpak-image-source.c:117 +msgid "No org.flatpak.ref found in image" +msgstr "" + +#: common/flatpak-image-source.c:142 +#, c-format +msgid "Ref '%s' not found in registry" +msgstr "Ref „%s“ nebyl nalezen v registru" + +#: common/flatpak-image-source.c:151 +msgid "Multiple images in registry, specify a ref with --ref" +msgstr "Více obrazů v registru, určete ref pomocí --ref" + #: common/flatpak-installation.c:835 #, c-format msgid "Ref %s not installed" @@ -5088,72 +5077,72 @@ msgstr "Selhalo vytvoření souboru %s" msgid "Unable to update symbolic link %s/%s" msgstr "Selhala aktualizace symbolického odkazu %s/%s" -#: common/flatpak-oci-registry.c:1021 +#: common/flatpak-oci-registry.c:1238 msgid "Only Bearer authentication supported" msgstr "" -#: common/flatpak-oci-registry.c:1030 +#: common/flatpak-oci-registry.c:1247 msgid "Only realm in authentication request" msgstr "" -#: common/flatpak-oci-registry.c:1037 +#: common/flatpak-oci-registry.c:1254 msgid "Invalid realm in authentication request" msgstr "" -#: common/flatpak-oci-registry.c:1107 +#: common/flatpak-oci-registry.c:1324 #, c-format msgid "Authorization failed: %s" msgstr "Autorizace selhala: %s" -#: common/flatpak-oci-registry.c:1109 +#: common/flatpak-oci-registry.c:1326 msgid "Authorization failed" msgstr "Autorizace selhala" -#: common/flatpak-oci-registry.c:1113 +#: common/flatpak-oci-registry.c:1330 #, c-format msgid "Unexpected response status %d when requesting token: %s" msgstr "" -#: common/flatpak-oci-registry.c:1124 +#: common/flatpak-oci-registry.c:1341 msgid "Invalid authentication request response" msgstr "" -#: common/flatpak-oci-registry.c:1721 common/flatpak-oci-registry.c:1774 -#: common/flatpak-oci-registry.c:1803 common/flatpak-oci-registry.c:1858 -#: common/flatpak-oci-registry.c:1914 common/flatpak-oci-registry.c:1992 +#: common/flatpak-oci-registry.c:1928 common/flatpak-oci-registry.c:1980 +#: common/flatpak-oci-registry.c:2009 common/flatpak-oci-registry.c:2064 +#: common/flatpak-oci-registry.c:2120 common/flatpak-oci-registry.c:2198 msgid "Invalid delta file format" msgstr "Neplatný formát souboru delta" -#: common/flatpak-oci-registry.c:2496 +#: common/flatpak-oci-registry.c:2702 #, c-format msgid "No gpg key found with ID %s (homedir: %s)" msgstr "" -#: common/flatpak-oci-registry.c:2503 +#: common/flatpak-oci-registry.c:2709 #, c-format msgid "Unable to lookup key ID %s: %d" msgstr "" -#: common/flatpak-oci-registry.c:2511 +#: common/flatpak-oci-registry.c:2717 #, c-format msgid "Error signing commit: %d" msgstr "Chyba během podepisování commitu: %d" -#: common/flatpak-oci-registry.c:3512 common/flatpak-oci-registry.c:3671 +#: common/flatpak-oci-registry.c:3697 common/flatpak-oci-registry.c:3854 msgid "Invalid OCI image config" msgstr "Neplatná konfigurace OCI obrazu" -#: common/flatpak-oci-registry.c:3574 common/flatpak-oci-registry.c:3820 +#: common/flatpak-oci-registry.c:3759 common/flatpak-oci-registry.c:4003 #, c-format msgid "Wrong layer checksum, expected %s, was %s" msgstr "" -#: common/flatpak-oci-registry.c:3654 +#: common/flatpak-oci-registry.c:3831 #, c-format msgid "No ref specified for OCI image %s" msgstr "Neurčen žádný ref pro OCI obraz %s" -#: common/flatpak-oci-registry.c:3660 +#: common/flatpak-oci-registry.c:3841 #, c-format msgid "Wrong ref (%s) specified for OCI image %s, expected %s" msgstr "Špatný ref (%s) určen pro OCI obraz %s, očekáváno %s" @@ -5337,7 +5326,6 @@ msgid "GPG verification must be enabled when a collection ID is set" msgstr "Ověřování pomocí GPG musí být povoleno, pokud je nastaveno ID kolekce" #: common/flatpak-repo-utils.c:344 -#, c-format msgid "No extra data sources" msgstr "Žádné zdroje dodatečných dat" @@ -5355,110 +5343,116 @@ msgstr "Neplatný %s: Chybí klíč „%s“" msgid "Invalid gpg key" msgstr "Neplatný klíč gpg" -#: common/flatpak-repo-utils.c:3237 +#: common/flatpak-repo-utils.c:3240 #, c-format msgid "Error copying 64x64 icon for component %s: %s\n" msgstr "Chyba během kopírování 64x64 ikony pro součást %s: %s\n" -#: common/flatpak-repo-utils.c:3243 +#: common/flatpak-repo-utils.c:3246 #, c-format msgid "Error copying 128x128 icon for component %s: %s\n" msgstr "Chyba během kopírování 128x128 ikony pro součást %s: %s\n" -#: common/flatpak-repo-utils.c:3382 +#: common/flatpak-repo-utils.c:3385 #, c-format msgid "%s is end-of-life, ignoring for appstream" msgstr "%s je end-of-life, ignoruje se pro appstream" -#: common/flatpak-repo-utils.c:3417 +#: common/flatpak-repo-utils.c:3420 #, c-format msgid "No appstream data for %s: %s\n" msgstr "Žádná appstream data pro %s: %s\n" -#: common/flatpak-repo-utils.c:3764 +#: common/flatpak-repo-utils.c:3767 msgid "Invalid bundle, no ref in metadata" msgstr "" -#: common/flatpak-repo-utils.c:3866 +#: common/flatpak-repo-utils.c:3869 #, c-format msgid "Collection ‘%s’ of bundle doesn’t match collection ‘%s’ of remote" msgstr "" -#: common/flatpak-repo-utils.c:3943 +#: common/flatpak-repo-utils.c:3946 msgid "Metadata in header and app are inconsistent" msgstr "Metadata ve hlavičce a aplikaci jsou nekonzistentní" -#: common/flatpak-run.c:855 +#: common/flatpak-run.c:865 msgid "No systemd user session available, cgroups not available" msgstr "Uživatelské sezení systemd není dostupné, cgroups nejsou dostupné" -#: common/flatpak-run.c:1395 +#: common/flatpak-run.c:1405 msgid "Unable to allocate instance id" msgstr "Selhala alokace id instance" -#: common/flatpak-run.c:1531 common/flatpak-run.c:1541 +#: common/flatpak-run.c:1541 common/flatpak-run.c:1551 #, c-format msgid "Failed to open flatpak-info file: %s" msgstr "Selhalo otevření souboru flatpak-info: %s" -#: common/flatpak-run.c:1570 +#: common/flatpak-run.c:1580 #, c-format msgid "Failed to open bwrapinfo.json file: %s" msgstr "Selhalo otevření souboru bwrapinfo.json: %s" -#: common/flatpak-run.c:1595 +#: common/flatpak-run.c:1605 #, c-format msgid "Failed to write to instance id fd: %s" msgstr "" -#: common/flatpak-run.c:1990 +#: common/flatpak-run.c:2000 msgid "Initialize seccomp failed" msgstr "Selhala inicializace seccomp" -#: common/flatpak-run.c:2029 +#: common/flatpak-run.c:2039 #, c-format msgid "Failed to add architecture to seccomp filter: %s" msgstr "Selhalo přidání architektury do seccomp filtru: %s" -#: common/flatpak-run.c:2037 +#: common/flatpak-run.c:2047 #, c-format msgid "Failed to add multiarch architecture to seccomp filter: %s" msgstr "Selhalo přidání multiarch architektury do seccomp filtru: %s" -#: common/flatpak-run.c:2069 common/flatpak-run.c:2086 -#: common/flatpak-run.c:2108 +#: common/flatpak-run.c:2079 common/flatpak-run.c:2096 +#: common/flatpak-run.c:2118 #, c-format msgid "Failed to block syscall %d: %s" msgstr "Selhalo blokování systémového volání %d: %s" -#: common/flatpak-run.c:2141 +#: common/flatpak-run.c:2151 #, c-format msgid "Failed to export bpf: %s" msgstr "Selhalo exportování bpf: %s" -#: common/flatpak-run.c:2440 +#: common/flatpak-run.c:2453 #, c-format msgid "Failed to open ‘%s’" msgstr "Selhalo otevření „%s“" -#: common/flatpak-run.c:2727 +#: common/flatpak-run.c:2463 +#, c-format +msgid "" +"Directory forwarding needs version 4 of the document portal (have version %d)" +msgstr "" + +#: common/flatpak-run.c:2781 #, c-format msgid "ldconfig failed, exit status %d" msgstr "ldconfig selhal, návratová hodnota %d" -#: common/flatpak-run.c:2734 +#: common/flatpak-run.c:2788 msgid "Can't open generated ld.so.cache" msgstr "Nelze otevřít vygenerovaný ld.so.cache" #. Translators: The placeholder is for an app ref. -#: common/flatpak-run.c:2857 +#: common/flatpak-run.c:2911 #, c-format msgid "Running %s is not allowed by the policy set by your administrator" msgstr "" "Spouštění aplikace %s není povoleno bezpečnostní politikou, kterou nastavil " "váš administrátor" -#: common/flatpak-run.c:2964 +#: common/flatpak-run.c:3018 msgid "" "\"flatpak run\" is not intended to be run as `sudo flatpak run`. Use `sudo " "-i` or `su -l` instead and invoke \"flatpak run\" from inside the new shell." @@ -5467,17 +5461,17 @@ msgstr "" "toho použijte `sudo -i` nebo `su -l` a ​​vyvolejte „flatpak run“ z nového " "shellu." -#: common/flatpak-run.c:3154 +#: common/flatpak-run.c:3208 #, c-format msgid "Failed to migrate from %s: %s" msgstr "Selhala migrace z %s: %s" -#: common/flatpak-run.c:3175 +#: common/flatpak-run.c:3229 #, c-format msgid "Failed to migrate old app data directory %s to new name %s: %s" msgstr "Selhala migrace starého adresáře dat aplikace %s na nový název %s: %s" -#: common/flatpak-run.c:3184 +#: common/flatpak-run.c:3238 #, c-format msgid "Failed to create symlink while migrating %s: %s" msgstr "Selhalo vytváření symlinku během migrace %s: %s" @@ -5494,52 +5488,56 @@ msgstr "Selhalo vytvoření synchronizační roury" msgid "Failed to sync with dbus proxy" msgstr "Selhala synchronizace s dbus proxy" -#: common/flatpak-transaction.c:2210 +#: common/flatpak-transaction.c:2232 #, c-format msgid "Warning: Problem looking for related refs: %s" msgstr "Varování: Problém při hledání souvisejících refů: %s" -#: common/flatpak-transaction.c:2428 +#: common/flatpak-transaction.c:2450 #, c-format msgid "The application %s requires the runtime %s which was not found" msgstr "Aplikace %s vyžaduje prostředí %s, které nebylo nalezeno" -#: common/flatpak-transaction.c:2444 +#: common/flatpak-transaction.c:2466 #, c-format msgid "The application %s requires the runtime %s which is not installed" msgstr "Aplikace %s vyžaduje prostředí %s, které není nainstalováno" -#: common/flatpak-transaction.c:2576 +#: common/flatpak-transaction.c:2598 #, c-format msgid "Can't uninstall %s which is needed by %s" msgstr "Nelze odinstalovat %s, který je vyžadován %s" -#: common/flatpak-transaction.c:2673 +#: common/flatpak-transaction.c:2697 #, c-format msgid "Remote %s disabled, ignoring %s update" msgstr "Vzdálený repozitář %s je zakázán, ignoruje se aktualizace %s" -#: common/flatpak-transaction.c:2706 +#: common/flatpak-transaction.c:2730 #, c-format msgid "%s is already installed" msgstr "%s je již nainstalováno" -#: common/flatpak-transaction.c:2709 +#: common/flatpak-transaction.c:2733 #, c-format msgid "%s is already installed from remote %s" msgstr "%s je již nainstalováno ze vzdáleného repozitáře %s" -#: common/flatpak-transaction.c:3020 +#: common/flatpak-transaction.c:3077 #, c-format msgid "Invalid .flatpakref: %s" msgstr "Neplatný .flatpakref: %s" -#: common/flatpak-transaction.c:3135 +#: common/flatpak-transaction.c:3118 +msgid "Warning: Could not mark already installed apps as preinstalled" +msgstr "" + +#: common/flatpak-transaction.c:3320 #, c-format msgid "Error updating remote metadata for '%s': %s" msgstr "Chyba během aktualizace vzdálených metadat pro „%s“: %s" -#: common/flatpak-transaction.c:3624 +#: common/flatpak-transaction.c:3819 #, c-format msgid "" "Warning: Treating remote fetch error as non-fatal since %s is already " @@ -5548,54 +5546,54 @@ msgstr "" "Varování: Chyba načtení vzdáleného repozitáře není považována za závažnou, " "protože %s je již nainstalováno: %s" -#: common/flatpak-transaction.c:3950 +#: common/flatpak-transaction.c:4145 #, c-format msgid "No authenticator installed for remote '%s'" msgstr "Nenainstalován žádný autentikátor pro vzdálený repozitář „%s“" -#: common/flatpak-transaction.c:4054 common/flatpak-transaction.c:4061 +#: common/flatpak-transaction.c:4249 common/flatpak-transaction.c:4256 #, c-format msgid "Failed to get tokens for ref: %s" msgstr "Selhalo získání tokenů pro ref: %s" -#: common/flatpak-transaction.c:4056 common/flatpak-transaction.c:4063 +#: common/flatpak-transaction.c:4251 common/flatpak-transaction.c:4258 msgid "Failed to get tokens for ref" msgstr "Selhalo získání tokenů pro ref" -#: common/flatpak-transaction.c:4321 +#: common/flatpak-transaction.c:4516 #, c-format msgid "Ref %s from %s matches more than one transaction operation" msgstr "" -#: common/flatpak-transaction.c:4322 common/flatpak-transaction.c:4332 +#: common/flatpak-transaction.c:4517 common/flatpak-transaction.c:4527 msgid "any remote" msgstr "libovolný vzdálený repozitář" -#: common/flatpak-transaction.c:4331 +#: common/flatpak-transaction.c:4526 #, c-format msgid "No transaction operation found for ref %s from %s" msgstr "" -#: common/flatpak-transaction.c:4454 +#: common/flatpak-transaction.c:4649 #, c-format msgid "Flatpakrepo URL %s not file, HTTP or HTTPS" msgstr "Flatpakrepo URL %s není soubor, HTTP nebo HTTPS" -#: common/flatpak-transaction.c:4460 +#: common/flatpak-transaction.c:4655 #, c-format msgid "Can't load dependent file %s: " msgstr "" -#: common/flatpak-transaction.c:4468 +#: common/flatpak-transaction.c:4663 #, c-format msgid "Invalid .flatpakrepo: %s" msgstr "Neplatné .flatpakrepo: %s" -#: common/flatpak-transaction.c:5121 +#: common/flatpak-transaction.c:5390 msgid "Transaction already executed" msgstr "Transakce již běží" -#: common/flatpak-transaction.c:5136 +#: common/flatpak-transaction.c:5405 msgid "" "Refusing to operate on a user installation as root! This can lead to " "incorrect file ownership and permission errors." @@ -5603,16 +5601,16 @@ msgstr "" "Odmítnuta operace na uživatelské instalaci jako root! Toto může vést k " "nesprávným vlastnictvím souborů a chybám s oprávněními." -#: common/flatpak-transaction.c:5228 common/flatpak-transaction.c:5241 +#: common/flatpak-transaction.c:5503 common/flatpak-transaction.c:5516 msgid "Aborted by user" msgstr "Přerušeno uživatelem" -#: common/flatpak-transaction.c:5266 +#: common/flatpak-transaction.c:5541 #, c-format msgid "Skipping %s due to previous error" msgstr "Přeskakuje se %s z důvodu předchozí chyby" -#: common/flatpak-transaction.c:5320 +#: common/flatpak-transaction.c:5595 #, c-format msgid "Aborted due to failure (%s)" msgstr "Přerušeno z důvodu selhání (%s)" @@ -5660,37 +5658,30 @@ msgid "URI is not absolute, and no base URI was provided" msgstr "URI není absolutní a nebyl poskytnut žádný základní URI" #: common/flatpak-usb.c:83 -#, c-format msgid "USB device query 'all' must not have data" msgstr "" #: common/flatpak-usb.c:102 -#, c-format msgid "USB query rule 'cls' must be in the form CLASS:SUBCLASS or CLASS:*" msgstr "" #: common/flatpak-usb.c:111 -#, fuzzy, c-format msgid "Invalid USB class" -msgstr "Neplatné id %s: %s" +msgstr "Neplatná třída USB" #: common/flatpak-usb.c:125 -#, c-format msgid "Invalid USB subclass" -msgstr "" +msgstr "Neplatná podtřída USB" #: common/flatpak-usb.c:141 common/flatpak-usb.c:148 -#, c-format msgid "USB query rule 'dev' must have a valid 4-digit hexadecimal product id" msgstr "" #: common/flatpak-usb.c:164 common/flatpak-usb.c:171 -#, c-format msgid "USB query rule 'vnd' must have a valid 4-digit hexadecimal vendor id" msgstr "" #: common/flatpak-usb.c:205 -#, c-format msgid "USB device queries must be in the form TYPE:DATA" msgstr "" @@ -5700,22 +5691,18 @@ msgid "Unknown USB query rule %s" msgstr "" #: common/flatpak-usb.c:248 -#, c-format msgid "Empty USB query" msgstr "" #: common/flatpak-usb.c:274 -#, c-format msgid "Multiple USB query rules of the same type is not supported" msgstr "" #: common/flatpak-usb.c:283 -#, c-format msgid "'all' must not contain extra query rules" msgstr "" #: common/flatpak-usb.c:291 -#, c-format msgid "USB queries with 'dev' must also specify vendors" msgstr "" @@ -5779,7 +5766,6 @@ msgid "Invalid token" msgstr "Neplatný token" #: portal/flatpak-portal.c:2337 -#, c-format msgid "No portal support found" msgstr "Nenalezena podpora portálů" @@ -5805,18 +5791,15 @@ msgid "Update access can be changed any time from the privacy settings." msgstr "Přístup k aktualizacím můžete kdykoliv změnit v nastavení soukromí." #: portal/flatpak-portal.c:2388 -#, c-format msgid "Application update not allowed" msgstr "Aktualizace aplikace nepovolena" #: portal/flatpak-portal.c:2546 -#, c-format msgid "Self update not supported, new version requires new permissions" msgstr "" "Aktualizace sebe sama není podporována, nová verze vyžaduje nové oprávnění" #: portal/flatpak-portal.c:2728 portal/flatpak-portal.c:2745 -#, c-format msgid "Update ended unexpectedly" msgstr "Aktualizace byla neočekávaně ukončena" @@ -6027,9 +6010,8 @@ msgstr "K aktualizaci metadat je vyžadováno ověření" #. * Set the malcontent `is-system-installation-allowed` property of #. all users’ parental controls policies to true. #: system-helper/org.freedesktop.Flatpak.policy.in:287 -#, fuzzy msgid "Override parental controls for installs" -msgstr "Přepsat rodičovskou kontrolu" +msgstr "Přepsat rodičovskou kontrolu pro instalace" #: system-helper/org.freedesktop.Flatpak.policy.in:288 msgid "" @@ -6053,17 +6035,15 @@ msgstr "" #. installing an update which has radically different content from the #. version of the app which the parent originally vetted and installed. #: system-helper/org.freedesktop.Flatpak.policy.in:313 -#, fuzzy msgid "Override parental controls for updates" -msgstr "Přepsat rodičovskou kontrolu" +msgstr "Přepsat rodičovskou kontrolu pro aktualizace" #: system-helper/org.freedesktop.Flatpak.policy.in:314 -#, fuzzy msgid "" "Authentication is required to update software which is restricted by your " "parental controls policy" msgstr "" -"K instalaci softwaru, který je omezen bezpečnostní politikou rodičovské " +"K aktualizaci softwaru, který je omezen bezpečnostní politikou rodičovské " "kontroly je vyžadováno ověření" #, c-format From 919d2922bf72bbbfab096d3b359be99d4ca4dd2d Mon Sep 17 00:00:00 2001 From: Mary Strodl Date: Mon, 2 Oct 2023 17:59:57 -0400 Subject: [PATCH 43/53] common: support reinstall option on bundle installations Fixes #2489 Adds and wires up a `reinstall` option to `flatpak_dir_install_bundle`. Previously, bundle install transactions would silently drop the reinstall flag. --- common/flatpak-dir-private.h | 5 +++- common/flatpak-dir.c | 41 ++++++++++++++++++++------- common/flatpak-installation.c | 2 +- common/flatpak-transaction.c | 2 +- system-helper/flatpak-system-helper.c | 4 ++- tests/test-bundle.sh | 5 ++++ 6 files changed, 44 insertions(+), 15 deletions(-) diff --git a/common/flatpak-dir-private.h b/common/flatpak-dir-private.h index 6082ccc5f4..f09e89d1b5 100644 --- a/common/flatpak-dir-private.h +++ b/common/flatpak-dir-private.h @@ -243,9 +243,11 @@ typedef enum { typedef enum { FLATPAK_HELPER_INSTALL_BUNDLE_FLAGS_NONE = 0, FLATPAK_HELPER_INSTALL_BUNDLE_FLAGS_NO_INTERACTION = 1 << 0, + FLATPAK_HELPER_INSTALL_BUNDLE_FLAGS_REINSTALL = 1 << 1, } FlatpakHelperInstallBundleFlags; -#define FLATPAK_HELPER_INSTALL_BUNDLE_FLAGS_ALL (FLATPAK_HELPER_INSTALL_BUNDLE_FLAGS_NO_INTERACTION) +#define FLATPAK_HELPER_INSTALL_BUNDLE_FLAGS_ALL (FLATPAK_HELPER_INSTALL_BUNDLE_FLAGS_NO_INTERACTION | \ + FLATPAK_HELPER_INSTALL_BUNDLE_FLAGS_REINSTALL) typedef enum { FLATPAK_HELPER_DEPLOY_APPSTREAM_FLAGS_NONE = 0, @@ -731,6 +733,7 @@ char * flatpak_dir_ensure_bundle_remote (Fla GCancellable *cancellable, GError **error); gboolean flatpak_dir_install_bundle (FlatpakDir *self, + gboolean reinstall, GFile *file, const char *remote, FlatpakDecomposed **out_ref, diff --git a/common/flatpak-dir.c b/common/flatpak-dir.c index 8976c9bf78..a45751289f 100644 --- a/common/flatpak-dir.c +++ b/common/flatpak-dir.c @@ -10658,6 +10658,7 @@ flatpak_dir_check_add_remotes_config_dir (FlatpakDir *self, gboolean flatpak_dir_install_bundle (FlatpakDir *self, + gboolean reinstall, GFile *file, const char *remote, FlatpakDecomposed **out_ref, @@ -10671,6 +10672,7 @@ flatpak_dir_install_bundle (FlatpakDir *self, g_autofree char *origin = NULL; g_autofree char *to_checksum = NULL; gboolean gpg_verify; + FlatpakHelperInstallBundleFlags install_flags = FLATPAK_HELPER_INSTALL_BUNDLE_FLAGS_NONE; if (!flatpak_dir_check_add_remotes_config_dir (self, error)) return FALSE; @@ -10679,9 +10681,13 @@ flatpak_dir_install_bundle (FlatpakDir *self, { const char *installation = flatpak_dir_get_id (self); + if (reinstall) + install_flags |= FLATPAK_HELPER_INSTALL_BUNDLE_FLAGS_REINSTALL; + if (!flatpak_dir_system_helper_call_install_bundle (self, flatpak_file_get_path_cached (file), - 0, remote, + install_flags, + remote, installation ? installation : "", &ref_str, cancellable, @@ -10716,17 +10722,30 @@ flatpak_dir_install_bundle (FlatpakDir *self, { if (strcmp (flatpak_deploy_data_get_commit (deploy_data), to_checksum) == 0) { - g_autofree char *id = flatpak_decomposed_dup_id (ref); - g_set_error (error, FLATPAK_ERROR, FLATPAK_ERROR_ALREADY_INSTALLED, - _("This version of %s is already installed"), id); - return FALSE; + if (reinstall) + { + g_clear_pointer (&deploy_data, g_bytes_unref); + } + else + { + g_autofree char *id = flatpak_decomposed_dup_id (ref); + g_set_error (error, FLATPAK_ERROR, FLATPAK_ERROR_ALREADY_INSTALLED, + _("This version of %s is already installed"), id); + return FALSE; + } } - - if (strcmp (remote, flatpak_deploy_data_get_origin (deploy_data)) != 0) + else if (strcmp (remote, flatpak_deploy_data_get_origin (deploy_data)) != 0) { - g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED, - _("Can't change remote during bundle install")); - return FALSE; + if (reinstall) + { + g_clear_pointer (&deploy_data, g_bytes_unref); + } + else + { + g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED, + _("Can't change remote during bundle install")); + return FALSE; + } } } @@ -10782,7 +10801,7 @@ flatpak_dir_install_bundle (FlatpakDir *self, } else { - if (!flatpak_dir_deploy_install (self, ref, remote, NULL, NULL, FALSE, FALSE, FALSE, cancellable, error)) + if (!flatpak_dir_deploy_install (self, ref, remote, NULL, NULL, reinstall, FALSE, FALSE, cancellable, error)) return FALSE; } diff --git a/common/flatpak-installation.c b/common/flatpak-installation.c index be7061748b..63b3b15b6e 100644 --- a/common/flatpak-installation.c +++ b/common/flatpak-installation.c @@ -1775,7 +1775,7 @@ flatpak_installation_install_bundle (FlatpakInstallation *self, if (!flatpak_dir_ensure_repo (dir_clone, cancellable, error)) return NULL; - if (!flatpak_dir_install_bundle (dir_clone, file, remote, NULL, + if (!flatpak_dir_install_bundle (dir_clone, FALSE, file, remote, NULL, cancellable, error)) return NULL; diff --git a/common/flatpak-transaction.c b/common/flatpak-transaction.c index f153a805b8..5deb52e637 100644 --- a/common/flatpak-transaction.c +++ b/common/flatpak-transaction.c @@ -5158,7 +5158,7 @@ _run_op_kind (FlatpakTransaction *self, op->resolved_metakey, error)) res = FALSE; else - res = flatpak_dir_install_bundle (priv->dir, op->bundle, + res = flatpak_dir_install_bundle (priv->dir, priv->reinstall, op->bundle, op->remote, NULL, cancellable, error); flatpak_transaction_progress_done (progress); diff --git a/system-helper/flatpak-system-helper.c b/system-helper/flatpak-system-helper.c index 623c2fa04a..4a1e47de66 100644 --- a/system-helper/flatpak-system-helper.c +++ b/system-helper/flatpak-system-helper.c @@ -973,6 +973,7 @@ handle_install_bundle (FlatpakSystemHelper *object, g_autoptr(GFile) bundle_file = g_file_new_for_path (arg_bundle_path); g_autoptr(GError) error = NULL; g_autoptr(FlatpakDecomposed) ref = NULL; + gboolean reinstall; g_info ("InstallBundle %s %u %s %s", arg_bundle_path, arg_flags, arg_remote, arg_installation); @@ -997,7 +998,8 @@ handle_install_bundle (FlatpakSystemHelper *object, return G_DBUS_METHOD_INVOCATION_HANDLED; } - if (!flatpak_dir_install_bundle (system, bundle_file, arg_remote, &ref, NULL, &error)) + reinstall = !!(arg_flags & FLATPAK_HELPER_INSTALL_BUNDLE_FLAGS_NO_INTERACTION); + if (!flatpak_dir_install_bundle (system, reinstall, bundle_file, arg_remote, &ref, NULL, &error)) { flatpak_invocation_return_error (invocation, error, "Error installing bundle"); return G_DBUS_METHOD_INVOCATION_HANDLED; diff --git a/tests/test-bundle.sh b/tests/test-bundle.sh index 63c314a8c8..157c153694 100755 --- a/tests/test-bundle.sh +++ b/tests/test-bundle.sh @@ -48,6 +48,11 @@ ok "create bundles client-side" ${FLATPAK} uninstall ${U} -y org.test.Hello >&2 ${FLATPAK} install ${U} -y --bundle bundles/hello.flatpak >&2 +# Installing again without reinstall option should fail... +! ${FLATPAK} install ${U} -y --bundle bundles/hello.flatpak >&2 +# Now with reinstall option it should pass... +${FLATPAK} install ${U} -y --bundle bundles/hello.flatpak --reinstall >&2 + # This should have installed the runtime dependency too assert_has_file $FL_DIR/repo/refs/remotes/test-repo/runtime/org.test.Platform/$ARCH/master From 2409de5105511311016fda2c60730db58ef248e8 Mon Sep 17 00:00:00 2001 From: Simon McVittie Date: Mon, 8 Sep 2025 19:56:27 +0100 Subject: [PATCH 44/53] Update NEWS Signed-off-by: Simon McVittie --- NEWS | 55 ++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 54 insertions(+), 1 deletion(-) diff --git a/NEWS b/NEWS index 5b611fdcfa..003e2fe951 100644 --- a/NEWS +++ b/NEWS @@ -2,7 +2,60 @@ Changes in 1.17.0 ~~~~~~~~~~~~~~~~~~ Released: not yet -... +Enhancements: + +* Allow directories to be forwarded to the sandboxed app as command-line + arguments. This requires xdg-desktop-portal >= 1.7.0. (#4799) + +* Allow Flatpak apps that are conceptually part of the operating system + to be preinstalled by dropping files into /etc/flatpak/preinstall.d. + To implement this, something needs to run `flatpak preinstall` or make + equivalent calls into libflatpak during system initialization. + (#5579) + +* Allow direct installation from an OCI image: + `flatpak install [--image] docker://registry.example.com/image:latest`, + `flatpak install [--image] oci:/path/to/image`, + `flatpak install [--image] oci-archive:/path/to/image.tar` + (#5972) + +* Allow OCI remotes to have a collection ID, so they can be used with + /etc/flatpak/preinstall.d + +* Show a message if `flatpak document-list` finds no documents + (#6197) + +* Show a message if `flatpak uninstall` finds nothing to uninstall + (#6197) + +* Documentation improvements (#5501, #6266) + +* Translation updates: cs (#6306), nl (#6241), pl (#6290), sl (#6279), ru (#6278), zh_CN (#6304) + +Bug fixes: + +* Fix a memory leak in flatpak-session-helper when an app with permission + to do so runs unsandboxed commands on the host (#5821) + +* Implement the --reinstall option when combined with --bundle (#2489) + +* Provide an empty /run/host/font-dirs.xml during `flatpak build` (#6137) + +* Fix assertion failures during `flatpak build-import-bundle` (#4662) + +* Fix memory leaks in OCI registry handling (#6286) + +* Fix a test failure caused by incorrect arguments to fcntl F_DUPFD_CLOEXEC + (#6291, Launchpad#2121039) + +* Don't require --ref on `flatpak build-import-bundle` from an OCI archive + (#6081) + +Internal changes: + +* Refactoring + +* CI updates Changes in 1.16.1 ~~~~~~~~~~~~~~~~~~ From f53cef00417955eebb0f3fecab82270097e2be15 Mon Sep 17 00:00:00 2001 From: joj Date: Wed, 10 Sep 2025 18:15:05 -0400 Subject: [PATCH 45/53] Enable VA-API extension for Intel GPUs if either i915 or xe is loaded Xe module supports the discrete and new integrated GPUs (the Arc series) and the i915 supports the older Intel integrated GPUs (Intel HD). Closes: https://github.com/flatpak/flatpak/issues/5248 --- common/flatpak-utils.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/flatpak-utils.c b/common/flatpak-utils.c index 99ccd51d49..c333c350ec 100644 --- a/common/flatpak-utils.c +++ b/common/flatpak-utils.c @@ -517,7 +517,7 @@ flatpak_get_have_intel_gpu (void) static int have_intel = -1; if (have_intel == -1) - have_intel = g_file_test ("/sys/module/i915", G_FILE_TEST_EXISTS); + have_intel = g_file_test ("/sys/module/i915", G_FILE_TEST_EXISTS) || g_file_test ("/sys/module/xe", G_FILE_TEST_EXISTS); return have_intel; } From 0493219ca53c7a52be391f8d90c97b8ad108c983 Mon Sep 17 00:00:00 2001 From: Harald Sitter Date: Thu, 20 Feb 2025 03:17:10 +0100 Subject: [PATCH 46/53] exports: add host-root Adapted from: https://github.com/flatpak/flatpak/pull/6125 In systemd v259, /run/host/root will be a documented location for bind mounting the host's root filesystem into a container. Ref: https://github.com/systemd/systemd/pull/38384 host-root is the sledgehammer permission for file browsers and similar apps that the user might want to give full access to. This works same as the existing host keywords by mounting into /run/host/root. applications will need adjustments to essentially treat that path as "root". Since this opens the door to all sorts of malicious software, the permission should be put under tight review in flatpak repositories. Resolves: #5723 Co-authored-by: Ryan Brue --- common/flatpak-context.c | 11 +++++++++-- common/flatpak-exports-private.h | 2 ++ common/flatpak-exports.c | 25 +++++++++++++++++++++++++ doc/flatpak-build-finish.xml | 4 ++-- doc/flatpak-build.xml | 4 ++-- doc/flatpak-metadata.xml | 20 ++++++++++++++++++++ doc/flatpak-override.xml | 2 +- doc/flatpak-run.xml | 2 +- 8 files changed, 62 insertions(+), 8 deletions(-) diff --git a/common/flatpak-context.c b/common/flatpak-context.c index c2038cd24e..dcb743292a 100644 --- a/common/flatpak-context.c +++ b/common/flatpak-context.c @@ -94,6 +94,7 @@ const char *flatpak_context_special_filesystems[] = { "host-etc", "host-os", "host-reset", + "host-root", NULL }; @@ -1033,7 +1034,7 @@ flatpak_context_parse_filesystem (const char *filesystem_and_mode, } g_set_error (error, G_OPTION_ERROR, G_OPTION_ERROR_FAILED, - _("Unknown filesystem location %s, valid locations are: host, host-os, host-etc, home, xdg-*[/…], ~/dir, /dir"), filesystem); + _("Unknown filesystem location %s, valid locations are: host, host-os, host-etc, host-root, home, xdg-*[/…], ~/dir, /dir"), filesystem); return FALSE; } @@ -2839,7 +2840,7 @@ flatpak_context_export (FlatpakContext *context, { gboolean home_access = FALSE; g_autoptr(GString) xdg_dirs_conf = NULL; - FlatpakFilesystemMode fs_mode, os_mode, etc_mode, home_mode; + FlatpakFilesystemMode fs_mode, os_mode, etc_mode, root_mode, home_mode; GHashTableIter iter; gpointer key, value; g_autoptr(GError) local_error = NULL; @@ -2906,6 +2907,12 @@ flatpak_context_export (FlatpakContext *context, if (etc_mode != FLATPAK_FILESYSTEM_MODE_NONE) flatpak_exports_add_host_etc_expose (exports, etc_mode); + root_mode = MAX (GPOINTER_TO_INT (g_hash_table_lookup (context->filesystems, "host-root")), + fs_mode); + + if (root_mode != FLATPAK_FILESYSTEM_MODE_NONE) + flatpak_exports_add_host_root_expose (exports, root_mode); + home_mode = GPOINTER_TO_INT (g_hash_table_lookup (context->filesystems, "home")); if (home_mode != FLATPAK_FILESYSTEM_MODE_NONE) { diff --git a/common/flatpak-exports-private.h b/common/flatpak-exports-private.h index 5be4978f3a..a9c474d98a 100644 --- a/common/flatpak-exports-private.h +++ b/common/flatpak-exports-private.h @@ -43,6 +43,8 @@ void flatpak_exports_add_host_etc_expose (FlatpakExports *exports, FlatpakFilesystemMode mode); void flatpak_exports_add_host_os_expose (FlatpakExports *exports, FlatpakFilesystemMode mode); +void flatpak_exports_add_host_root_expose (FlatpakExports *exports, + FlatpakFilesystemMode mode); gboolean flatpak_exports_add_path_expose (FlatpakExports *exports, FlatpakFilesystemMode mode, const char *path, diff --git a/common/flatpak-exports.c b/common/flatpak-exports.c index b6fb9d1a7a..26b7cef46d 100644 --- a/common/flatpak-exports.c +++ b/common/flatpak-exports.c @@ -157,6 +157,7 @@ struct _FlatpakExports FlatpakFilesystemMode host_etc; FlatpakFilesystemMode host_os; int host_fd; + FlatpakFilesystemMode host_root; FlatpakExportsTestFlags test_flags; }; @@ -643,6 +644,20 @@ flatpak_exports_append_bwrap_args (FlatpakExports *exports, etc_bind_mode, "/etc", "/run/host/etc", NULL); } + g_assert (exports->host_root >= FLATPAK_FILESYSTEM_MODE_NONE); + g_assert (exports->host_root <= FLATPAK_FILESYSTEM_MODE_LAST); + + if (exports->host_root != FLATPAK_FILESYSTEM_MODE_NONE) + { + const char *root_bind_mode = "--bind"; + + if (exports->host_root == FLATPAK_FILESYSTEM_MODE_READ_ONLY) + root_bind_mode = "--ro-bind"; + + flatpak_bwrap_add_args (bwrap, + root_bind_mode, "/", "/run/host/root", NULL); + } + /* As per the os-release specification https://www.freedesktop.org/software/systemd/man/os-release.html * always read-only bind-mount /etc/os-release if it exists, or /usr/lib/os-release as a fallback from * the host into the application's /run/host */ @@ -1134,3 +1149,13 @@ flatpak_exports_add_host_os_expose (FlatpakExports *exports, exports->host_os = mode; } + +void +flatpak_exports_add_host_root_expose (FlatpakExports *exports, + FlatpakFilesystemMode mode) +{ + g_return_if_fail (mode > FLATPAK_FILESYSTEM_MODE_NONE); + g_return_if_fail (mode <= FLATPAK_FILESYSTEM_MODE_LAST); + + exports->host_root = mode; +} diff --git a/doc/flatpak-build-finish.xml b/doc/flatpak-build-finish.xml index fc85fadaff..b1ec9648e5 100644 --- a/doc/flatpak-build-finish.xml +++ b/doc/flatpak-build-finish.xml @@ -234,7 +234,7 @@ Allow the application access to a subset of the filesystem. This updates the [Context] group in the metadata. - FS can be one of: home, host, host-os, host-etc, xdg-desktop, xdg-documents, xdg-download, + FS can be one of: home, host, host-os, host-etc, host-root, xdg-desktop, xdg-documents, xdg-download, xdg-music, xdg-pictures, xdg-public-share, xdg-templates, xdg-videos, xdg-run, xdg-config, xdg-cache, xdg-data, an absolute path, or a homedir-relative path like ~/dir or paths relative to the xdg dirs, like xdg-download/subdir. @@ -254,7 +254,7 @@ Remove access to the specified subset of the filesystem from the application. This overrides to the Context section from the application metadata. - FILESYSTEM can be one of: home, host, host-os, host-etc, xdg-desktop, xdg-documents, xdg-download, + FILESYSTEM can be one of: home, host, host-os, host-etc, host-root, xdg-desktop, xdg-documents, xdg-download, xdg-music, xdg-pictures, xdg-public-share, xdg-templates, xdg-videos, an absolute path, or a homedir-relative path like ~/dir. This option can be used multiple times. diff --git a/doc/flatpak-build.xml b/doc/flatpak-build.xml index be432c868a..c18b01f71d 100644 --- a/doc/flatpak-build.xml +++ b/doc/flatpak-build.xml @@ -223,7 +223,7 @@ Allow the application access to a subset of the filesystem. This overrides to the Context section from the application metadata. - FILESYSTEM can be one of: home, host, host-os, host-etc, xdg-desktop, xdg-documents, xdg-download, + FILESYSTEM can be one of: home, host, host-os, host-etc, host-root, xdg-desktop, xdg-documents, xdg-download, xdg-music, xdg-pictures, xdg-public-share, xdg-templates, xdg-videos, xdg-run, xdg-config, xdg-cache, xdg-data, an absolute path, or a homedir-relative path like ~/dir or paths relative to the xdg dirs, like xdg-download/subdir. @@ -243,7 +243,7 @@ Remove access to the specified subset of the filesystem from the application. This overrides to the Context section from the application metadata. - FILESYSTEM can be one of: home, host, host-os, host-etc, xdg-desktop, xdg-documents, xdg-download, + FILESYSTEM can be one of: home, host, host-os, host-etc, host-root xdg-desktop, xdg-documents, xdg-download, xdg-music, xdg-pictures, xdg-public-share, xdg-templates, xdg-videos, an absolute path, or a homedir-relative path like ~/dir. This option can be used multiple times. diff --git a/doc/flatpak-metadata.xml b/doc/flatpak-metadata.xml index d30d30c785..79c8594e62 100644 --- a/doc/flatpak-metadata.xml +++ b/doc/flatpak-metadata.xml @@ -344,6 +344,26 @@ Available since 1.7. + + + The complete host operating system. + + + To avoid conflicting with the Flatpak + runtime, this is mounted in the sandbox + at /run/host/root. + + + This permission is only intended to be used + as a last resort when there is no possible + alternative with other filesystem + permissions for applications that need the + entire root filesystem of the host. + + + Available since 1.17. + + , , , diff --git a/doc/flatpak-override.xml b/doc/flatpak-override.xml index a642109dfa..3d23904356 100644 --- a/doc/flatpak-override.xml +++ b/doc/flatpak-override.xml @@ -211,7 +211,7 @@ Allow the application access to a subset of the filesystem. This overrides to the Context section from the application metadata. - FILESYSTEM can be one of: home, host, host-os, host-etc, xdg-desktop, xdg-documents, xdg-download, + FILESYSTEM can be one of: home, host, host-os, host-etc, host-root, xdg-desktop, xdg-documents, xdg-download, xdg-music, xdg-pictures, xdg-public-share, xdg-templates, xdg-videos, xdg-run, xdg-config, xdg-cache, xdg-data, an absolute path, or a homedir-relative path like ~/dir or paths diff --git a/doc/flatpak-run.xml b/doc/flatpak-run.xml index 20899c8391..37a12b5143 100644 --- a/doc/flatpak-run.xml +++ b/doc/flatpak-run.xml @@ -402,7 +402,7 @@ Allow the application access to a subset of the filesystem. This overrides to the Context section from the application metadata. - FILESYSTEM can be one of: home, host, host-os, host-etc, xdg-desktop, xdg-documents, xdg-download, + FILESYSTEM can be one of: home, host, host-os, host-etc, host-root, xdg-desktop, xdg-documents, xdg-download, xdg-music, xdg-pictures, xdg-public-share, xdg-templates, xdg-videos, xdg-run, xdg-config, xdg-cache, xdg-data, an absolute path, or a homedir-relative path like ~/dir or paths From 02587b56760db2a45dcc4b4f97fab7fe86292bc0 Mon Sep 17 00:00:00 2001 From: Ryan Brue Date: Mon, 8 Sep 2025 12:13:09 -0500 Subject: [PATCH 47/53] flatpak-metadata: Note host-root symlink pitfalls Following symlinks from /run/host/root naively (for example, with realpath()) is wrong. This commit warns about this problem, and provides examples of how to avoid it when using the host-root permission, either by using https://man7.org/linux/man-pages/man2/openat2.2.html for modern kernels, or https://gitlab.steamos.cloud/steamrt/steam-runtime-tools/-/blob/65adfdd5fc812aeb5f33986755f6ff72c9612afa/steam-runtime-tools/resolve-in-sysroot.c for older kernels. Signed-off-by: Ryan Brue --- doc/flatpak-metadata.xml | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/doc/flatpak-metadata.xml b/doc/flatpak-metadata.xml index 79c8594e62..ea282ad80a 100644 --- a/doc/flatpak-metadata.xml +++ b/doc/flatpak-metadata.xml @@ -360,6 +360,25 @@ permissions for applications that need the entire root filesystem of the host. + + Please note that following symlinks under + /run/host/root naively + will result in a wrong path. For example, + using realpath() is wrong. + Instead, applications will have to implement + some way of following symlinks in a way that + behaves as if it were chroot'd into + /run/host/root. + + + There are a few ways to do this. Modern + kernels support the openat2() + call with RESOLVE_IN_ROOT. + For a more portable solution with support for + older kernels, see the implementation from + the steam-runtime-tools + as an example. + Available since 1.17. From 446afd82b05441d15216bf09aff9c68ecfe2ec27 Mon Sep 17 00:00:00 2001 From: Ryan Brue Date: Wed, 24 Sep 2025 12:56:35 -0500 Subject: [PATCH 48/53] formatting(flatpak-context): Fix a few wrong indentations Signed-off-by: Ryan Brue --- common/flatpak-context.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/common/flatpak-context.c b/common/flatpak-context.c index dcb743292a..a874317848 100644 --- a/common/flatpak-context.c +++ b/common/flatpak-context.c @@ -2896,13 +2896,13 @@ flatpak_context_export (FlatpakContext *context, } os_mode = MAX (GPOINTER_TO_INT (g_hash_table_lookup (context->filesystems, "host-os")), - fs_mode); + fs_mode); if (os_mode != FLATPAK_FILESYSTEM_MODE_NONE) flatpak_exports_add_host_os_expose (exports, os_mode); etc_mode = MAX (GPOINTER_TO_INT (g_hash_table_lookup (context->filesystems, "host-etc")), - fs_mode); + fs_mode); if (etc_mode != FLATPAK_FILESYSTEM_MODE_NONE) flatpak_exports_add_host_etc_expose (exports, etc_mode); From cd0212aa40247d8c02547679f0e3170634437426 Mon Sep 17 00:00:00 2001 From: bbhtt Date: Wed, 8 Oct 2025 18:09:07 +0530 Subject: [PATCH 49/53] utils-http: Fix an uninitialised variable warning MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixes c75ba1c7e1587300be9a418116c02d0b6bf8b34e ``` In file included from /usr/lib/aarch64-linux-gnu/glib-2.0/include/glibconfig.h:9, from /usr/include/glib-2.0/glib/gtypes.h:34, from /usr/include/glib-2.0/glib/galloca.h:34, from /usr/include/glib-2.0/glib.h:32, from /usr/include/glib-2.0/gobject/gbinding.h:30, from /usr/include/glib-2.0/glib-object.h:24, from /usr/include/glib-2.0/gio/gioenums.h:30, from /usr/include/glib-2.0/gio/giotypes.h:30, from /usr/include/glib-2.0/gio/gio.h:28, from ../common/flatpak-utils-http.c:23: In function ‘glib_autoptr_clear_GFileEnumerator’, inlined from ‘glib_autoptr_cleanup_GFileEnumerator’ at /usr/include/glib-2.0/gio/gio-autocleanups.h:69:1, inlined from ‘flatpak_get_certificates_for_uri’ at ../common/flatpak-utils-http.c:284:34: /usr/include/glib-2.0/glib/gmacros.h:1361:10: warning: ‘enumerator’ may be used uninitialized [-Wmaybe-uninitialized] 1361 | { if (_ptr) (cleanup) ((ParentName *) _ptr); } \ | ^ /usr/include/glib-2.0/glib/gmacros.h:1379:3: note: in expansion of macro ‘_GLIB_DEFINE_AUTOPTR_CLEANUP_FUNCS’ 1379 | _GLIB_DEFINE_AUTOPTR_CLEANUP_FUNCS(TypeName, TypeName, func) | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/glib-2.0/gio/gio-autocleanups.h:69:1: note: in expansion of macro ‘G_DEFINE_AUTOPTR_CLEANUP_FUNC’ 69 | G_DEFINE_AUTOPTR_CLEANUP_FUNC(GFileEnumerator, g_object_unref) | ^~~~~~~~~~~~~~~~~~~~~~~~~~~ ../common/flatpak-utils-http.c: In function ‘flatpak_get_certificates_for_uri’: ../common/flatpak-utils-http.c:284:34: note: ‘enumerator’ was declared here 284 | g_autoptr(GFileEnumerator) enumerator; ``` --- common/flatpak-utils-http.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/flatpak-utils-http.c b/common/flatpak-utils-http.c index ab7078766e..cba5e51359 100644 --- a/common/flatpak-utils-http.c +++ b/common/flatpak-utils-http.c @@ -281,7 +281,7 @@ flatpak_get_certificates_for_uri (const char *uri, { g_autoptr(GFile) certs_dir = g_file_new_for_path (certs_path[i]); g_autoptr(GFile) host_dir = g_file_get_child (certs_dir, hostport); - g_autoptr(GFileEnumerator) enumerator; + g_autoptr(GFileEnumerator) enumerator = NULL; g_autoptr(GError) local_error = NULL; enumerator = g_file_enumerate_children (host_dir, G_FILE_ATTRIBUTE_STANDARD_NAME, From 4c75a168e34fde289dafab7d7ba4ba1bfbfe77b8 Mon Sep 17 00:00:00 2001 From: Luca Boccassi Date: Thu, 9 Oct 2025 16:10:17 +0100 Subject: [PATCH 50/53] meson: switch default dbus_config_dir to /usr/share/dbus-1/ Upstream/vendor configuration files should be installed under /usr/, so that local users/admins can install overrides in /etc/. Distributions like Ubuntu are already manually configuring this, so just make it the default. --- meson.build | 2 +- meson_options.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/meson.build b/meson.build index 187d04ca57..117824ca68 100644 --- a/meson.build +++ b/meson.build @@ -126,7 +126,7 @@ endif dbus_config_dir = get_option('dbus_config_dir') if dbus_config_dir == '' - dbus_config_dir = get_option('sysconfdir') / 'dbus-1' / 'system.d' + dbus_config_dir = get_option('datadir') / 'dbus-1' / 'system.d' endif dbus_service_dir = get_option('dbus_service_dir') diff --git a/meson_options.txt b/meson_options.txt index c4f34c2df5..31797b1f7a 100644 --- a/meson_options.txt +++ b/meson_options.txt @@ -16,7 +16,7 @@ option( option( 'dbus_config_dir', type : 'string', - description : 'directory for D-Bus system configuration [$sysconfdir/dbus-1/system.d]', + description : 'directory for D-Bus system configuration [$datadir/dbus-1/system.d]', value : '', ) option( From f760f1b5392b71ee2d7636efe2194ae69b522aee Mon Sep 17 00:00:00 2001 From: Sebastian Wick Date: Fri, 29 Aug 2025 12:48:17 +0200 Subject: [PATCH 51/53] run: Add --clear-env option for clearing the outside environment --- app/flatpak-builtins-run.c | 4 ++++ common/flatpak-common-types-private.h | 3 ++- common/flatpak-run.c | 10 ++++++++++ doc/flatpak-run.xml | 18 ++++++++++++++---- 4 files changed, 30 insertions(+), 5 deletions(-) diff --git a/app/flatpak-builtins-run.c b/app/flatpak-builtins-run.c index d0a1fb0085..b5531e6ce4 100644 --- a/app/flatpak-builtins-run.c +++ b/app/flatpak-builtins-run.c @@ -61,6 +61,7 @@ static gboolean opt_parent_share_pids; static int opt_instance_id_fd = -1; static char *opt_app_path; static char *opt_usr_path; +static gboolean opt_clear_env; static GOptionEntry options[] = { { "arch", 0, 0, G_OPTION_ARG_STRING, &opt_arch, N_("Arch to use"), N_("ARCH") }, @@ -89,6 +90,7 @@ static GOptionEntry options[] = { { "instance-id-fd", 0, 0, G_OPTION_ARG_INT, &opt_instance_id_fd, N_("Write the instance ID to the given file descriptor"), NULL }, { "app-path", 0, 0, G_OPTION_ARG_FILENAME, &opt_app_path, N_("Use PATH instead of the app's /app"), N_("PATH") }, { "usr-path", 0, 0, G_OPTION_ARG_FILENAME, &opt_usr_path, N_("Use PATH instead of the runtime's /usr"), N_("PATH") }, + { "clear-env", 0, 0, G_OPTION_ARG_NONE, &opt_clear_env, N_("Clear all outside environment variables"), NULL }, { NULL } }; @@ -308,6 +310,8 @@ flatpak_builtin_run (int argc, char **argv, GCancellable *cancellable, GError ** flags |= FLATPAK_RUN_FLAG_NO_A11Y_BUS_PROXY; if (!opt_session_bus) flags |= FLATPAK_RUN_FLAG_NO_SESSION_BUS_PROXY; + if (!opt_clear_env) + flags |= FLATPAK_RUN_FLAG_CLEAR_ENV; if (!flatpak_run_app (app_deploy ? app_ref : runtime_ref, app_deploy, diff --git a/common/flatpak-common-types-private.h b/common/flatpak-common-types-private.h index d7f3913b0b..0c61e375fe 100644 --- a/common/flatpak-common-types-private.h +++ b/common/flatpak-common-types-private.h @@ -44,11 +44,12 @@ typedef enum { FLATPAK_RUN_FLAG_SANDBOX = (1 << 14), FLATPAK_RUN_FLAG_NO_DOCUMENTS_PORTAL = (1 << 15), FLATPAK_RUN_FLAG_BLUETOOTH = (1 << 16), - FLATPAK_RUN_FLAG_CANBUS = (1 << 17), + FLATPAK_RUN_FLAG_CANBUS = (1 << 17), FLATPAK_RUN_FLAG_DO_NOT_REAP = (1 << 18), FLATPAK_RUN_FLAG_NO_PROC = (1 << 19), FLATPAK_RUN_FLAG_PARENT_EXPOSE_PIDS = (1 << 20), FLATPAK_RUN_FLAG_PARENT_SHARE_PIDS = (1 << 21), + FLATPAK_RUN_FLAG_CLEAR_ENV = (1 << 22), } FlatpakRunFlags; typedef struct FlatpakDir FlatpakDir; diff --git a/common/flatpak-run.c b/common/flatpak-run.c index a64e689403..e6039ee8c7 100644 --- a/common/flatpak-run.c +++ b/common/flatpak-run.c @@ -728,6 +728,15 @@ apply_exports (char **envp, return envp; } +static void +flatpak_run_apply_env_clear (FlatpakBwrap *bwrap, gboolean clear_env) +{ + if (!clear_env) + return; + + flatpak_bwrap_add_args (bwrap, "--clearenv", NULL); +} + void flatpak_run_apply_env_default (FlatpakBwrap *bwrap, gboolean use_ld_so_cache) { @@ -3268,6 +3277,7 @@ flatpak_run_app (FlatpakDecomposed *app_ref, app_files = g_object_ref (original_app_files); } + flatpak_run_apply_env_clear (bwrap, !!(flags & FLATPAK_RUN_FLAG_CLEAR_ENV)); flatpak_run_apply_env_default (bwrap, use_ld_so_cache); flatpak_run_apply_env_vars (bwrap, app_context); flatpak_run_apply_env_prompt (bwrap, app_id); diff --git a/doc/flatpak-run.xml b/doc/flatpak-run.xml index 37a12b5143..dc2a5f6991 100644 --- a/doc/flatpak-run.xml +++ b/doc/flatpak-run.xml @@ -80,10 +80,10 @@ Environment variables are generally passed on to the sandboxed application, with - certain exceptions. The application metadata can override environment variables, - as well as the option. Apart from that, Flatpak always - unsets or overrides the following variables, since their session values - are likely to interfere with the functioning of the sandbox: + certain exceptions, if is not specified. The application + metadata can override environment variables, as well as the + option. Apart from that, Flatpak always unsets or overrides the following variables, + since their session values are likely to interfere with the functioning of the sandbox: PATH @@ -585,6 +585,16 @@ key=v1;v2; + + + + + Do not pass environment variables from the outside to the + sandboxed application. Explicitly set and unset environment + variables still get applied. + + + From a57f6bc3721059e48060e102de3367c6297e9e51 Mon Sep 17 00:00:00 2001 From: Sebastian Wick Date: Fri, 29 Aug 2025 13:21:59 +0200 Subject: [PATCH 52/53] portal: Clear the environment via flatpak arguments Instead of clearing the environment that we spawn the flatpak executable with, we use the new --clear-env. For environment variables that we inherit from the calling instance, we append them as arguments after the --clear-env so it starts from a clean slate. Closes: https://github.com/flatpak/flatpak/issues/5271 --- portal/flatpak-portal.c | 54 ++++++++++++++++++++--------------------- 1 file changed, 26 insertions(+), 28 deletions(-) diff --git a/portal/flatpak-portal.c b/portal/flatpak-portal.c index 12f2729a4a..3b70738f2a 100644 --- a/portal/flatpak-portal.c +++ b/portal/flatpak-portal.c @@ -64,7 +64,6 @@ G_DEFINE_AUTOPTR_CLEANUP_FUNC (PortalFlatpakUpdateMonitorSkeleton, g_object_unre /* Should be roughly 2 seconds */ #define CHILD_STATUS_CHECK_ATTEMPTS 20 -static GStrv original_environ = NULL; static GHashTable *client_pid_data_hash = NULL; static GDBusConnection *session_bus = NULL; static GNetworkMonitor *network_monitor = NULL; @@ -1043,17 +1042,22 @@ handle_spawn (PortalFlatpak *object, return G_DBUS_METHOD_INVOCATION_HANDLED; } - /* TODO: Ideally we should let `flatpak run` inherit the run environment - * of the instance, in case e.g. a LD_LIBRARY_PATH is needed to be able - * to run `flatpak run`, but tell it to start from a blank environment - * when running the Flatpak app; but this isn't currently possible, so - * for now we preserve existing behaviour. */ - if (arg_flags & FLATPAK_SPAWN_FLAGS_CLEAR_ENV) - { - char *empty[] = { NULL }; - env = g_strdupv (empty); - } + if ((flatpak = g_getenv ("FLATPAK_PORTAL_MOCK_FLATPAK")) != NULL) + g_ptr_array_add (flatpak_argv, g_strdup (flatpak)); + else if ((flatpak = g_getenv ("FLATPAK")) != NULL) + g_ptr_array_add (flatpak_argv, g_strdup (flatpak)); else + g_ptr_array_add (flatpak_argv, g_strdup (FLATPAK_BINDIR "/flatpak")); + + g_ptr_array_add (flatpak_argv, g_strdup ("run")); + + /* If we don't clear the env, the flatpak portal service environment would + * leak into the flatpak instance. By default we re-use the environment of + * the calling instance by passing it as arguments after the --clear-env. + */ + g_ptr_array_add (flatpak_argv, g_strdup ("--clear-env")); + + if (!(arg_flags & FLATPAK_SPAWN_FLAGS_CLEAR_ENV)) { static const char * const mock_run_environ[] = { "FOO=bar", NULL }; @@ -1066,8 +1070,8 @@ handle_spawn (PortalFlatpak *object, { if (g_error_matches (error, G_FILE_ERROR, G_FILE_ERROR_NOENT)) { - g_warning ("Environment for \"flatpak run\" was not found, falling back to current environment"); - env = g_strdupv (original_environ); + g_warning ("Environment for \"flatpak run\" was not found, " + "falling back to a clean environment"); } else { @@ -1078,17 +1082,16 @@ handle_spawn (PortalFlatpak *object, return G_DBUS_METHOD_INVOCATION_HANDLED; } } + else + { + for (i = 0; env != NULL && env[i] != NULL; i++) + { + g_string_append (env_string, env[i]); + g_string_append_c (env_string, '\0'); + } + } } - if ((flatpak = g_getenv ("FLATPAK_PORTAL_MOCK_FLATPAK")) != NULL) - g_ptr_array_add (flatpak_argv, g_strdup (flatpak)); - else if ((flatpak = g_getenv ("FLATPAK")) != NULL) - g_ptr_array_add (flatpak_argv, g_strdup (flatpak)); - else - g_ptr_array_add (flatpak_argv, g_strdup (FLATPAK_BINDIR "/flatpak")); - - g_ptr_array_add (flatpak_argv, g_strdup ("run")); - sandboxed = (arg_flags & FLATPAK_SPAWN_FLAGS_SANDBOX) != 0; if (sandboxed) @@ -1552,7 +1555,7 @@ handle_spawn (PortalFlatpak *object, * to work around a deadlock in GLib < 2.60 */ if (!g_spawn_async_with_pipes (NULL, (char **) flatpak_argv->pdata, - env, + NULL, G_SPAWN_SEARCH_PATH | G_SPAWN_DO_NOT_REAP_CHILD | G_SPAWN_LEAVE_DESCRIPTORS_OPEN, child_setup_func, &child_setup_data, &pid, @@ -3055,10 +3058,6 @@ main (int argc, { NULL } }; - /* Save the enviroment before changing anything, so that subprocesses - * can get the unchanged version */ - original_environ = g_get_environ (); - setlocale (LC_ALL, ""); g_setenv ("GIO_USE_VFS", "local", TRUE); @@ -3161,6 +3160,5 @@ main (int argc, main_loop = g_main_loop_new (NULL, FALSE); g_main_loop_run (main_loop); - g_strfreev (original_environ); return 0; } From 815301f3410499fb8c6f85ea0f99a9adc1c28487 Mon Sep 17 00:00:00 2001 From: Sebastian Wick Date: Thu, 9 Oct 2025 18:06:39 +0200 Subject: [PATCH 53/53] doc: Build libflatpak-doc.html Closes #4591 --- .github/workflows/check.yml | 11 ++++++++++- doc/reference/meson.build | 25 ++++++++++++++++++++++++- 2 files changed, 34 insertions(+), 2 deletions(-) diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index 30f5603aa9..c92cda9a2d 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -176,7 +176,8 @@ jobs: libfuse-dev ostree libostree-dev libarchive-dev libzstd-dev libcap-dev libattr1-dev libdw-dev libelf-dev python3-pyparsing \ libjson-glib-dev shared-mime-info desktop-file-utils libpolkit-agent-1-dev libpolkit-gobject-1-dev \ libseccomp-dev libsoup2.4-dev libcurl4-openssl-dev libsystemd-dev libxml2-utils libgpgme11-dev gobject-introspection \ - libgirepository1.0-dev libappstream-dev libdconf-dev clang e2fslibs-dev meson socat libxau-dev libgdk-pixbuf2.0-dev + libgirepository1.0-dev libappstream-dev libdconf-dev clang e2fslibs-dev meson socat libxau-dev libgdk-pixbuf2.0-dev \ + xmlto - name: Check out flatpak uses: actions/checkout@v4 with: @@ -195,6 +196,14 @@ jobs: run: ninja -C _build - name: Perform CodeQL Analysis uses: github/codeql-action/analyze@v3 + - name: Upload docs + uses: actions/upload-artifact@v4 + with: + if-no-files-found: error + overwrite: true + name: docs + path: | + _build/doc/ valgrind: name: Run tests in valgrind diff --git a/doc/reference/meson.build b/doc/reference/meson.build index 92f1482e7d..b9224f14ed 100644 --- a/doc/reference/meson.build +++ b/doc/reference/meson.build @@ -25,7 +25,7 @@ doc_gdbus = gnome.gdbus_codegen( docbook : 'dbus', ) -gnome.gtkdoc( +libflatpak_doc = gnome.gtkdoc( 'flatpak', main_xml : 'libflatpak-docs.xml', namespace : 'flatpak', @@ -73,3 +73,26 @@ gnome.gtkdoc( '--rebuild-types', ], ) + +if xmlto.found() + custom_target( + 'libflatpak-docs.html', + input : [ + '../xmlto-config.xsl', + ], + output : ['libflatpak-docs.html'], + depends : libflatpak_doc, + command : [ + xmlto, + '-o', meson.current_build_dir(), + ] + get_option('xmlto_flags') + [ + '--skip-validation', + 'xhtml-nochunks', + '-m', '@INPUT0@', + fs.parent(libflatpak_doc.full_path()) / 'libflatpak-docs.xml', + ], + build_by_default : true, + install : true, + install_dir : docdir, + ) +endif \ No newline at end of file