diff --git a/.gitignore b/.gitignore index b075fce5..5ada4804 100644 --- a/.gitignore +++ b/.gitignore @@ -36,10 +36,10 @@ flatpak-session-helper xdg-document-portal xdg-permission-store flatpak-builder -testdb *~ profile/flatpak.sh flatpak-dbus.[ch] +flatpak-document-dbus.[ch] flatpak-systemd-dbus.[ch] flatpak-resources.[ch] flatpak-dbus-proxy @@ -68,11 +68,24 @@ Flatpak-1.0.* /doc/flatpak-docs.xml /doc/*.1 /doc/*.5 -/test-doc-portal -/test-doc-portal.log -/test-doc-portal.trs -/testdb.log -/testdb.trs +/test-libglnx-errors +/test-libglnx-errors.log +/test-libglnx-errors.trs +/test-libglnx-fdio +/test-libglnx-fdio.log +/test-libglnx-fdio.trs +/test-libglnx-macros +/test-libglnx-macros.log +/test-libglnx-macros.trs +/test-libglnx-shutil +/test-libglnx-shutil.log +/test-libglnx-shutil.trs +/test-libglnx-xattrs +/test-libglnx-xattrs.log +/test-libglnx-xattrs.trs +/testlibrary +/testlibrary.log +/testlibrary.trs /tests/test-keyring/.gpg-v21-migrated /tests/test-keyring/private-keys-v1.d/ /tests/test-keyring/trustdb.gpg diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md new file mode 100644 index 00000000..e1400e19 --- /dev/null +++ b/CODE_OF_CONDUCT.md @@ -0,0 +1,84 @@ +# Code of Conduct + +## 1. Purpose + +A primary goal of Flatpak is to be inclusive to the largest number of contributors, with the most varied and diverse backgrounds possible. As such, we are committed to providing a friendly, safe and welcoming environment for all, regardless of gender, sexual orientation, ability, ethnicity, socioeconomic status, and religion (or lack thereof). + +This code of conduct outlines our expectations for all those who participate in our community, as well as the consequences for unacceptable behavior. + +We invite all those who participate in Flatpak to help us create safe and positive experiences for everyone. + +## 2. Open Source Citizenship + +A supplemental goal of this Code of Conduct is to increase open source citizenship by encouraging participants to recognize and strengthen the relationships between our actions and their effects on our community. + +Communities mirror the societies in which they exist and positive action is essential to counteract the many forms of inequality and abuses of power that exist in society. + +If you see someone who is making an extra effort to ensure our community is welcoming, friendly, and encourages all participants to contribute to the fullest extent, we want to know. + +## 3. Expected Behavior + +The following behaviors are expected and requested of all community members: + +* Participate in an authentic and active way. In doing so, you contribute to the health and longevity of this community. +* Exercise consideration and respect in your speech and actions. +* Attempt collaboration before conflict. +* Refrain from demeaning, discriminatory, or harassing behavior and speech. +* Be mindful of your surroundings and of your fellow participants. Alert community leaders if you notice a dangerous situation, someone in distress, or violations of this Code of Conduct, even if they seem inconsequential. +* Remember that community event venues may be shared with members of the public; please be respectful to all patrons of these locations. + +## 4. Unacceptable Behavior + +The following behaviors are considered harassment and are unacceptable within our community: + +* Violence, threats of violence or violent language directed against another person. +* Sexist, racist, homophobic, transphobic, ableist or otherwise discriminatory jokes and language. +* Posting or displaying sexually explicit or violent material. +* Posting or threatening to post other people’s personally identifying information ("doxing"). +* Personal insults, particularly those related to gender, sexual orientation, race, religion, or disability. +* Inappropriate photography or recording. +* Inappropriate physical contact. You should have someone’s consent before touching them. +* Unwelcome sexual attention. This includes, sexualized comments or jokes; inappropriate touching, groping, and unwelcomed sexual advances. +* Deliberate intimidation, stalking or following (online or in person). +* Advocating for, or encouraging, any of the above behavior. +* Sustained disruption of community events, including talks and presentations. + +## 5. Consequences of Unacceptable Behavior + +Unacceptable behavior from any community member, including sponsors and those with decision-making authority, will not be tolerated. + +Anyone asked to stop unacceptable behavior is expected to comply immediately. + +If a community member engages in unacceptable behavior, the community organizers may take any action they deem appropriate, up to and including a temporary ban or permanent expulsion from the community without warning (and without refund in the case of a paid event). + +## 6. Reporting Guidelines + +If you are subject to or witness unacceptable behavior, or have any other concerns, please notify a community organizer as soon as possible. alexander.larsson@gmail.com. + + + +Additionally, community organizers are available to help community members engage with local law enforcement or to otherwise help those experiencing unacceptable behavior feel safe. In the context of in-person events, organizers will also provide escorts as desired by the person experiencing distress. + +## 7. Addressing Grievances + +If you feel you have been falsely or unfairly accused of violating this Code of Conduct, you should notify Flatpak with a concise description of your grievance. Your grievance will be handled in accordance with our existing governing policies. + + + +## 8. Scope + +We expect all community participants (contributors, paid or otherwise; sponsors; and other guests) to abide by this Code of Conduct in all community venues–online and in-person–as well as in all one-on-one communications pertaining to community business. + +This code of conduct and its related procedures also applies to unacceptable behavior occurring outside the scope of community activities when such behavior has the potential to adversely affect the safety and well-being of community members. + +## 9. Contact info + +alexander.larsson@gmail.com + +## 10. License and attribution + +This Code of Conduct is distributed under a [Creative Commons Attribution-ShareAlike license](http://creativecommons.org/licenses/by-sa/3.0/). + +Portions of text derived from the [Django Code of Conduct](https://www.djangoproject.com/conduct/) and the [Geek Feminism Anti-Harassment Policy](http://geekfeminism.wikia.com/wiki/Conference_anti-harassment/Policy). + +Retrieved on November 22, 2016 from [http://citizencodeofconduct.org/](http://citizencodeofconduct.org/) diff --git a/Makefile.am b/Makefile.am index 96b83ab1..ce2508ff 100644 --- a/Makefile.am +++ b/Makefile.am @@ -94,8 +94,6 @@ include lib/Makefile.am.inc include session-helper/Makefile.am.inc include system-helper/Makefile.am.inc include dbus-proxy/Makefile.am.inc -include permission-store/Makefile.am.inc -include document-portal/Makefile.am.inc include tests/Makefile.am.inc if !WITH_SYSTEM_BWRAP diff --git a/NEWS b/NEWS index 5e8d5634..9125abfa 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,123 @@ +Major changes in 0.11.3 +======================= + + * Fix "open with" and flatpak run --file-forwarding crash + * Fix build with glibc 2.27 + +Major changes in 0.11.2 +======================= + + * Remove fuse dependency, since we don't ship document portal anymore + * Fix various issues with /home being a symlink to /var/home (atomic) + * Allow downgrades when using collection ids + * Search on all supported architectures + +Major changes in 0.11.1 +======================= + +This release removes the document portal and the permission store as they +have been added to xdg-desktop-portal 0.10. Packagers need to update +these two in lock-step. Flatpak technically doesn't depend on +xdg-desktop-portal, but it is recommended that the flatpak package +depends on xdg-desktop-portal in some way, because most flatpaks will +want it. + + * Remove document portal and permission store + * Add --socket=fallback-x11 permission + * Fix dbus proxy vulnerability in authentication phase + * Allow personality syscall in devel mode + * commit-from: Migrate static deltas with commit + * Add "network" storage type for installations + * Add flatpak info --show-permissions + * Add flatpak info --file-access + * search: Update appstream (if stale) before searching + * Make libflatpak work when /var/lib/flatpak is empty + * build-bundle: Add --from-commit option + * Allow appstream ids that don't end in .desktop + * Make permission handling ignore unknown permissions for forwards + compatibility + * Removed incorrect error message in update --appdata when there + was no updates + * Fix handling of abort in the duplicate remote prompt + * Fix division by zero in progress calculation + * Fix flatpak remote-info --show-metadata + * Fixed crash when installing some flatpak bundle files + * Fix installation of telegram + * remote-ls -u only considers app from the origin remote + * Fix assertion error in extra-data progress reporting + * Report nicer errors when trying to downgrade as non-root + * pulseaudio: Try to find pulseaudio socket better + * Fixed some warnings reported by coverity + * Cleaned up code by splitting up some large source files + +Major changes in 0.10.2 +======================= + + * Flatpak now requires OSTree 2017.14 + * flatpak update now updates from both system and user installations + by default. + * flatpak update is less noisy when updating appstream info. + * All the remote-* commands now by default automatically decide to use + --user or --system based on the given remote name. + * flatpak remote-ls with no remote lists the content of all remotes + * Fixed regression that made xdg-user-dirs and theme selection + for kde apps break. + * flatpak override with no argument now overrides globally, i.e. for + all apps. + * flatpak override now supports --nofilesystem properly. For example + flatpak override --nofilesystem=~/.ssh hides the ssh dir for all + apps, even those who have homedir access. + * flatpak install now takes a --reinstall argument which uninstalls + a previously installed version if necessary. This is very useful + when you want to install a new version from a different source. + * flatpak install now allows you to pass an absolute pathname as + remote name, which will create a temporary remote and install + from that. The remote will be removed when the app is uninstalled. + This is very useful during development and testing. + * Flatpak now creates CLI wrappers for all installed apps, so if you + add /var/lib/flatpak/exports/bin or ~/.local/share/flatpak/exports/bin + to your PATH you can easily start flatpak apps by their application id. + +Major changes in 0.10.1 +======================= + + * New command "flatpak remote-info" shows information about applications + in a remote. In particular the --log operation shows the history and + can be used in combination with flatpak upate --commit=XYZ to roll + back to a previous version. + * New command "flatpak search" which allows you to search the appstream + data from the commandline. + * flatpak update now upates appstream data for all confured remotes, which + is important for search to work. + * Allow automatic installation of gtk themes matching the active theme. + * Handle the case when /etc/resolv.conf is a symlink + * /usr an /etc are now expose in /run/host in the app if the app has + full filesystem access. + * flatpak remote-add now works as a user when /var/lib/flatpak is empty, + allowing flatpak to work on stateless systems. + * Add support for flatpak build --log-session/system-bus, similar to + what flatpak run already does. + * flatpak build --readonly runs with the target directory (normally /app) + mounted read-only. + * Fall back to LD_LIBRARY_PATH if a runtime doesn't have /usr/bin/ldconfig. + * Updated the support for OCI remotes. This is work in progress and still + disabled by default though. + +Major changes in 0.10 +===================== + +This is the first release in a new series of stable releases called +0.10.x. New features will be added to 0.11.x, and bugfixes will be +backported to 0.10.x. During the early phase of the 0.10.x series we +may also backport minor features, but we guarantee backwards +compatibility. + +Changes since 0.9.99 + * Added the flatpak config option which can set the language settings + * Fix issue where sometimes ld.so.conf were not generated + * /dev/mali0 is added to --device=dri + * Work around ostree static delta issues in some cases + Major changes in 0.9.99 ======================= diff --git a/README.md b/README.md index 0c66d845..d67a91bb 100644 --- a/README.md +++ b/README.md @@ -5,12 +5,23 @@ Flatpak is a system for building, distributing and running sandboxed desktop applications on Linux. -See http://flatpak.org/ for more information. +See https://flatpak.org/ for more information. -Read documentation for the flatpak [commandline tools](http://flatpak.github.io/flatpak/flatpak-docs.html) and for the libflatpak [library API](http://flatpak.github.io/flatpak/reference/html/index.html). +Community discussion happens in [#flatpak on Freenode](ircs://chat.freenode.net/flatpak) and on [the mailing list](https://lists.freedesktop.org/mailman/listinfo/flatpak). -# INSTALLATION +Read documentation for the flatpak [commandline tools](http://docs.flatpak.org/en/latest/command-reference.html) and for the libflatpak [library API](http://flatpak.github.io/flatpak/reference/html/index.html). +# Contributing + +Flatpak welcomes contributions from anyone! Here are some ways you can help: +* Fix [one of the issues](https://github.com/flatpak/flatpak/issues/) and submit a PR +* Update flatpak's translations and submit a PR +* Update flatpak's documentation, hosted at http://docs.flatpak.org and developed over in [flatpak-docs](https://github.com/flatpak/flatpak-docs) +* Find a bug and [submit a detailed report](https://github.com/flatpak/flatpak/issues/new) including your OS, flatpak version, and the steps to reproduce +* Add your favorite application to [Flathub](https://flathub.org) by writing a flatpak-builder manifest and [submitting it](https://github.com/flathub/flathub/wiki/App-Submission) +* Improve the Flatpak support in your favorite Linux distribution + +# Hacking Flatpak uses a traditional autoconf-style build mechanism. To build just do ``` ./configure [args] @@ -31,10 +42,8 @@ has a recent enough version of Bubblewrap already, you can use Bubblewrap can run in two modes, either using unprivileged user namespaces or setuid mode. This requires that the kernel supports this, -which some distributions disable. For instance, Arch completely -disables user namespaces, while Debian supports unprivileged user -namespaces, but only if you turn on the -`kernel.unprivileged_userns_clone` sysctl. +which some distributions disable. For instance, Debian and Arch +([linux](https://www.archlinux.org/packages/?name=linux) kernel v4.14.5 or later), support user namespaces with the `kernel.unprivileged_userns_clone` sysctl enabled. If unprivileged user namespaces are not available, then Bubblewrap must be built as setuid root. This is believed to be safe, as it is diff --git a/app/Makefile.am.inc b/app/Makefile.am.inc index e3d811fd..02d23f01 100644 --- a/app/Makefile.am.inc +++ b/app/Makefile.am.inc @@ -13,6 +13,7 @@ flatpak_SOURCES = \ app/flatpak-builtins-delete-remote.c \ app/flatpak-builtins-list-remotes.c \ app/flatpak-builtins-ls-remote.c \ + app/flatpak-builtins-info-remote.c \ app/flatpak-builtins-install.c \ app/flatpak-builtins-override.c \ app/flatpak-builtins-make-current.c \ @@ -37,8 +38,10 @@ flatpak_SOURCES = \ app/flatpak-builtins-document-unexport.c \ app/flatpak-builtins-document-info.c \ app/flatpak-builtins-document-list.c \ + app/flatpak-builtins-search.c \ $(NULL) -flatpak_LDADD = $(AM_LDADD) $(BASE_LIBS) $(OSTREE_LIBS) $(SOUP_LIBS) $(JSON_LIBS) libglnx.la libflatpak-common.la -flatpak_CFLAGS = $(AM_CFLAGS) $(BASE_CFLAGS) $(OSTREE_CFLAGS) $(SOUP_CFLAGS) $(JSON_CFLAGS) \ +flatpak_LDADD = $(AM_LDADD) $(BASE_LIBS) $(OSTREE_LIBS) $(SOUP_LIBS) $(JSON_LIBS) $(APPSTREAM_GLIB_LIBS) \ + libglnx.la libflatpak-common.la +flatpak_CFLAGS = $(AM_CFLAGS) $(BASE_CFLAGS) $(OSTREE_CFLAGS) $(SOUP_CFLAGS) $(JSON_CFLAGS) $(APPSTREAM_GLIB_CFLAGS) \ -DLOCALEDIR=\"$(localedir)\" diff --git a/app/flatpak-builtins-add-remote.c b/app/flatpak-builtins-add-remote.c index ecd30bf1..4d845bba 100644 --- a/app/flatpak-builtins-add-remote.c +++ b/app/flatpak-builtins-add-remote.c @@ -89,9 +89,16 @@ static GOptionEntry common_options[] = { static GKeyFile * get_config_from_opts (FlatpakDir *dir, const char *remote_name, gboolean *changed) { - GKeyFile *config = ostree_repo_copy_config (flatpak_dir_get_repo (dir)); + OstreeRepo *repo; + GKeyFile *config; g_autofree char *group = g_strdup_printf ("remote \"%s\"", remote_name); + repo = flatpak_dir_get_repo (dir); + if (repo == NULL) + config = g_key_file_new (); + else + config = ostree_repo_copy_config (repo); + if (opt_no_gpg_verify) { g_key_file_set_boolean (config, group, "gpg-verify", FALSE); @@ -298,7 +305,8 @@ flatpak_builtin_add_remote (int argc, char **argv, GCancellable *cancellable, GError **error) { g_autoptr(GOptionContext) context = NULL; - g_autoptr(FlatpakDir) dir = NULL; + g_autoptr(GPtrArray) dirs = NULL; + FlatpakDir *dir; g_autoptr(GFile) file = NULL; g_auto(GStrv) remotes = NULL; g_autofree char *remote_url = NULL; @@ -314,9 +322,13 @@ flatpak_builtin_add_remote (int argc, char **argv, g_option_context_add_main_entries (context, common_options, NULL); - if (!flatpak_option_context_parse (context, add_options, &argc, &argv, 0, &dir, cancellable, error)) + if (!flatpak_option_context_parse (context, add_options, &argc, &argv, + FLATPAK_BUILTIN_FLAG_ONE_DIR | FLATPAK_BUILTIN_FLAG_OPTIONAL_REPO, + &dirs, cancellable, error)) return FALSE; + dir = g_ptr_array_index (dirs, 0); + if (argc < 2) return usage_error (context, _("NAME must be specified"), error); @@ -371,8 +383,8 @@ flatpak_builtin_add_remote (int argc, char **argv, if (opt_oci && g_getenv ("FLATPAK_ENABLE_EXPERIMENTAL_OCI") == NULL) return flatpak_fail (error, "flatpak remote-add --oci is currently unsupported and experimental, enable it by setting the FLATPAK_ENABLE_EXPERIMENTAL_OCI env var"); - /* Default to gpg verify */ - if (!opt_no_gpg_verify) + /* Default to gpg verify, except for --oci */ + if (!opt_no_gpg_verify && !opt_oci) opt_do_gpg_verify = TRUE; config = get_config_from_opts (dir, remote_name, &changed); @@ -416,11 +428,11 @@ gboolean flatpak_complete_add_remote (FlatpakCompletion *completion) { g_autoptr(GOptionContext) context = NULL; - g_autoptr(FlatpakDir) dir = NULL; context = g_option_context_new (""); g_option_context_add_main_entries (context, common_options, NULL); - if (!flatpak_option_context_parse (context, add_options, &completion->argc, &completion->argv, 0, &dir, NULL, NULL)) + if (!flatpak_option_context_parse (context, add_options, &completion->argc, &completion->argv, + FLATPAK_BUILTIN_FLAG_ONE_DIR, NULL, NULL, NULL)) return FALSE; switch (completion->argc) @@ -442,7 +454,8 @@ gboolean flatpak_builtin_modify_remote (int argc, char **argv, GCancellable *cancellable, GError **error) { g_autoptr(GOptionContext) context = NULL; - g_autoptr(FlatpakDir) dir = NULL; + g_autoptr(GPtrArray) dirs = NULL; + g_autoptr(FlatpakDir) preferred_dir = NULL; g_autoptr(GKeyFile) config = NULL; g_autoptr(GBytes) gpg_data = NULL; const char *remote_name; @@ -453,7 +466,8 @@ flatpak_builtin_modify_remote (int argc, char **argv, GCancellable *cancellable, g_option_context_add_main_entries (context, common_options, NULL); - if (!flatpak_option_context_parse (context, modify_options, &argc, &argv, 0, &dir, cancellable, error)) + if (!flatpak_option_context_parse (context, modify_options, &argc, &argv, + FLATPAK_BUILTIN_FLAG_STANDARD_DIRS, &dirs, cancellable, error)) return FALSE; if (argc < 2) @@ -461,26 +475,26 @@ flatpak_builtin_modify_remote (int argc, char **argv, GCancellable *cancellable, remote_name = argv[1]; - if (!ostree_repo_remote_get_url (flatpak_dir_get_repo (dir), remote_name, NULL, NULL)) - return flatpak_fail (error, _("No remote %s"), remote_name); + if (!flatpak_resolve_duplicate_remotes (dirs, remote_name, &preferred_dir, cancellable, error)) + return FALSE; if (opt_update_metadata) { g_autoptr(GError) local_error = NULL; g_print (_("Updating extra metadata from remote summary for %s\n"), remote_name); - if (!flatpak_dir_update_remote_configuration (dir, remote_name, cancellable, &local_error)) + if (!flatpak_dir_update_remote_configuration (preferred_dir, remote_name, cancellable, &local_error)) { g_printerr (_("Error updating extra metadata for '%s': %s\n"), remote_name, local_error->message); return flatpak_fail (error, _("Could not update extra metadata for %s"), remote_name); } /* Reload changed configuration */ - if (!flatpak_dir_recreate_repo (dir, cancellable, error)) + if (!flatpak_dir_recreate_repo (preferred_dir, cancellable, error)) return FALSE; } - config = get_config_from_opts (dir, remote_name, &changed); + config = get_config_from_opts (preferred_dir, remote_name, &changed); if (opt_gpg_import != NULL) { @@ -493,19 +507,20 @@ flatpak_builtin_modify_remote (int argc, char **argv, GCancellable *cancellable, if (!changed) return TRUE; - return flatpak_dir_modify_remote (dir, remote_name, config, gpg_data, cancellable, error); + return flatpak_dir_modify_remote (preferred_dir, remote_name, config, gpg_data, cancellable, error); } gboolean flatpak_complete_modify_remote (FlatpakCompletion *completion) { g_autoptr(GOptionContext) context = NULL; - g_autoptr(FlatpakDir) dir = NULL; + g_autoptr(GPtrArray) dirs = NULL; int i; context = g_option_context_new (""); g_option_context_add_main_entries (context, common_options, NULL); - if (!flatpak_option_context_parse (context, modify_options, &completion->argc, &completion->argv, 0, &dir, NULL, NULL)) + if (!flatpak_option_context_parse (context, modify_options, &completion->argc, &completion->argv, + FLATPAK_BUILTIN_FLAG_STANDARD_DIRS, &dirs, NULL, NULL)) return FALSE; switch (completion->argc) @@ -517,13 +532,16 @@ flatpak_complete_modify_remote (FlatpakCompletion *completion) flatpak_complete_options (completion, modify_options); flatpak_complete_options (completion, user_entries); - { - g_auto(GStrv) remotes = flatpak_dir_list_remotes (dir, NULL, NULL); - if (remotes == NULL) - return FALSE; - for (i = 0; remotes[i] != NULL; i++) - flatpak_complete_word (completion, "%s ", remotes[i]); - } + for (i = 0; i < dirs->len; i++) + { + FlatpakDir *dir = g_ptr_array_index (dirs, i); + int j; + g_auto(GStrv) remotes = flatpak_dir_list_remotes (dir, NULL, NULL); + if (remotes == NULL) + return FALSE; + for (j = 0; remotes[j] != NULL; j++) + flatpak_complete_word (completion, "%s ", remotes[j]); + } break; } diff --git a/app/flatpak-builtins-build-bundle.c b/app/flatpak-builtins-build-bundle.c index 6de763d9..6f641858 100644 --- a/app/flatpak-builtins-build-bundle.c +++ b/app/flatpak-builtins-build-bundle.c @@ -50,6 +50,7 @@ static char **opt_gpg_file; static gboolean opt_oci = FALSE; static char **opt_gpg_key_ids; static char *opt_gpg_homedir; +static char *opt_from_commit; static GOptionEntry options[] = { { "runtime", 0, 0, G_OPTION_ARG_NONE, &opt_runtime, N_("Export runtime instead of app"), NULL }, @@ -60,7 +61,7 @@ static GOptionEntry options[] = { { "oci", 0, 0, G_OPTION_ARG_NONE, &opt_oci, N_("Export oci image instead of flatpak bundle"), NULL }, { "gpg-sign", 0, 0, G_OPTION_ARG_STRING_ARRAY, &opt_gpg_key_ids, N_("GPG Key ID to sign the OCI image with"), N_("KEY-ID") }, { "gpg-homedir", 0, 0, G_OPTION_ARG_STRING, &opt_gpg_homedir, N_("GPG Homedir to use when looking for keyrings"), N_("HOMEDIR") }, - + { "from-commit", 0, 0, G_OPTION_ARG_STRING, &opt_from_commit, N_("OSTree commit to create a delta bundle from"), N_("COMMIT") }, { NULL } }; @@ -109,6 +110,7 @@ read_gpg_data (GCancellable *cancellable, static gboolean build_bundle (OstreeRepo *repo, GFile *file, const char *name, const char *full_branch, + const char *from_commit, GCancellable *cancellable, GError **error) { GVariantBuilder metadata_builder; @@ -269,7 +271,7 @@ build_bundle (OstreeRepo *repo, GFile *file, if (!ostree_repo_static_delta_generate (repo, OSTREE_STATIC_DELTA_GENERATE_OPT_LOWLATENCY, - /* from */ NULL, + from_commit, commit_checksum, metadata, params, @@ -420,26 +422,6 @@ build_oci (OstreeRepo *repo, GFile *dir, flatpak_oci_export_annotations (manifest->annotations, manifest_desc->annotations); - if (opt_gpg_key_ids) - { - g_autoptr(FlatpakOciSignature) sig = flatpak_oci_signature_new (manifest_desc->digest, ref); - g_autoptr(GBytes) sig_bytes = flatpak_json_to_bytes (FLATPAK_JSON (sig)); - g_autoptr(GBytes) res = NULL; - g_autofree char *signature_digest = NULL; - - res = flatpak_oci_sign_data (sig_bytes, (const char **)opt_gpg_key_ids, opt_gpg_homedir, error); - if (res == NULL) - return FALSE; - - signature_digest = flatpak_oci_registry_store_blob (registry, res, cancellable, error); - if (signature_digest == NULL) - return FALSE; - - g_hash_table_replace (manifest_desc->annotations, - g_strdup ("org.flatpak.signature-digest"), - g_strdup (signature_digest)); - } - index = flatpak_oci_registry_load_index (registry, NULL, NULL, NULL, NULL); if (index == NULL) index = flatpak_oci_index_new (); @@ -521,7 +503,7 @@ flatpak_builtin_build_bundle (int argc, char **argv, GCancellable *cancellable, } else { - if (!build_bundle (repo, file, name, full_branch, cancellable, error)) + if (!build_bundle (repo, file, name, full_branch, opt_from_commit, cancellable, error)) return FALSE; } diff --git a/app/flatpak-builtins-build-commit-from.c b/app/flatpak-builtins-build-commit-from.c index 52599770..0838219d 100644 --- a/app/flatpak-builtins-build-commit-from.c +++ b/app/flatpak-builtins-build-commit-from.c @@ -57,6 +57,156 @@ static GOptionEntry options[] = { { NULL } }; +#define OSTREE_STATIC_DELTA_META_ENTRY_FORMAT "(uayttay)" +#define OSTREE_STATIC_DELTA_FALLBACK_FORMAT "(yaytt)" +#define OSTREE_STATIC_DELTA_SUPERBLOCK_FORMAT "(a{sv}tayay" OSTREE_COMMIT_GVARIANT_STRING "aya" OSTREE_STATIC_DELTA_META_ENTRY_FORMAT "a" OSTREE_STATIC_DELTA_FALLBACK_FORMAT ")" + +static char * +_ostree_get_relative_static_delta_path (const char *from, + const char *to, + const char *target) +{ + guint8 csum_to[OSTREE_SHA256_DIGEST_LEN]; + char to_b64[44]; + guint8 csum_to_copy[OSTREE_SHA256_DIGEST_LEN]; + GString *ret = g_string_new ("deltas/"); + + ostree_checksum_inplace_to_bytes (to, csum_to); + ostree_checksum_b64_inplace_from_bytes (csum_to, to_b64); + ostree_checksum_b64_inplace_to_bytes (to_b64, csum_to_copy); + + g_assert (memcmp (csum_to, csum_to_copy, OSTREE_SHA256_DIGEST_LEN) == 0); + + if (from != NULL) + { + guint8 csum_from[OSTREE_SHA256_DIGEST_LEN]; + char from_b64[44]; + + ostree_checksum_inplace_to_bytes (from, csum_from); + ostree_checksum_b64_inplace_from_bytes (csum_from, from_b64); + + g_string_append_c (ret, from_b64[0]); + g_string_append_c (ret, from_b64[1]); + g_string_append_c (ret, '/'); + g_string_append (ret, from_b64 + 2); + g_string_append_c (ret, '-'); + } + + g_string_append_c (ret, to_b64[0]); + g_string_append_c (ret, to_b64[1]); + if (from == NULL) + g_string_append_c (ret, '/'); + g_string_append (ret, to_b64 + 2); + + if (target != NULL) + { + g_string_append_c (ret, '/'); + g_string_append (ret, target); + } + + return g_string_free (ret, FALSE); +} + +static GVariant * +new_bytearray (const guchar *data, + gsize len) +{ + gpointer data_copy = g_memdup (data, len); + GVariant *ret = g_variant_new_from_data (G_VARIANT_TYPE ("ay"), data_copy, + len, FALSE, g_free, data_copy); + return ret; +} + +static gboolean +rewrite_delta (OstreeRepo *src_repo, + const char *src_commit, + OstreeRepo *dst_repo, + const char *dst_commit, + GVariant *dst_commitv, + const char *from, + GError **error) +{ + g_autoptr(GFile) src_delta_file = NULL; + g_autoptr(GFile) dst_delta_file = NULL; + g_autofree char *src_detached_key = _ostree_get_relative_static_delta_path (from, src_commit, "commitmeta"); + g_autofree char *dst_detached_key = _ostree_get_relative_static_delta_path (from, dst_commit, "commitmeta"); + g_autofree char *src_delta_dir = _ostree_get_relative_static_delta_path (from, src_commit, NULL); + g_autofree char *dst_delta_dir = _ostree_get_relative_static_delta_path (from, dst_commit, NULL); + g_autofree char *src_superblock_path = _ostree_get_relative_static_delta_path (from, src_commit, "superblock"); + g_autofree char *dst_superblock_path = _ostree_get_relative_static_delta_path (from, dst_commit, "superblock"); + GMappedFile *mfile = NULL; + g_auto(GVariantBuilder) superblock_builder = FLATPAK_VARIANT_BUILDER_INITIALIZER; + g_autoptr(GVariant) src_superblock = NULL; + g_autoptr(GVariant) dst_superblock = NULL; + g_autoptr(GBytes) bytes = NULL; + g_autoptr(GVariant) dst_detached = NULL; + g_autoptr(GVariant) src_metadata = NULL; + g_autoptr(GVariant) src_recurse = NULL; + g_autoptr(GVariant) src_parts = NULL; + g_auto(GVariantDict) dst_metadata_dict = FLATPAK_VARIANT_DICT_INITIALIZER; + int i; + + src_delta_file = g_file_resolve_relative_path (ostree_repo_get_path (src_repo), src_superblock_path); + mfile = g_mapped_file_new (flatpak_file_get_path_cached (src_delta_file), FALSE, NULL); + if (mfile == NULL) + return TRUE; /* No superblock, not an error */ + + bytes = g_mapped_file_get_bytes (mfile); + g_mapped_file_unref (mfile); + + src_superblock = g_variant_ref_sink (g_variant_new_from_bytes (G_VARIANT_TYPE (OSTREE_STATIC_DELTA_SUPERBLOCK_FORMAT), bytes, FALSE)); + + src_metadata = g_variant_get_child_value (src_superblock, 0); + src_recurse = g_variant_get_child_value (src_superblock, 5); + src_parts = g_variant_get_child_value (src_superblock, 6); + + if (g_variant_n_children (src_recurse) != 0) + return flatpak_fail (error, "Recursive deltas not supported, ignoring"); + + g_variant_builder_init (&superblock_builder, G_VARIANT_TYPE (OSTREE_STATIC_DELTA_SUPERBLOCK_FORMAT)); + + g_variant_dict_init (&dst_metadata_dict, src_metadata); + g_variant_dict_remove (&dst_metadata_dict, src_detached_key); + if (ostree_repo_read_commit_detached_metadata (dst_repo, dst_commit, &dst_detached, NULL, NULL)) + g_variant_dict_insert_value (&dst_metadata_dict, dst_detached_key, dst_detached); + + g_variant_builder_add_value (&superblock_builder, g_variant_dict_end (&dst_metadata_dict)); + g_variant_builder_add_value (&superblock_builder, g_variant_get_child_value (src_superblock, 1)); /* timestamp */ + g_variant_builder_add_value (&superblock_builder, from ? ostree_checksum_to_bytes_v (from) : new_bytearray ((guchar *)"", 0)); + g_variant_builder_add_value (&superblock_builder, ostree_checksum_to_bytes_v (dst_commit)); + g_variant_builder_add_value (&superblock_builder, dst_commitv); + g_variant_builder_add_value (&superblock_builder, src_recurse); + g_variant_builder_add_value (&superblock_builder, src_parts); + g_variant_builder_add_value (&superblock_builder, g_variant_get_child_value (src_superblock, 7)); /* fallback */ + + dst_superblock = g_variant_ref_sink (g_variant_builder_end (&superblock_builder)); + + if (!glnx_shutil_mkdir_p_at (ostree_repo_get_dfd (dst_repo), dst_delta_dir, 0755, NULL, error)) + return FALSE; + + for (i = 0; i < g_variant_n_children (src_parts); i++) + { + g_autofree char *src_part_path = g_strdup_printf ("%s/%d", src_delta_dir, i); + g_autofree char *dst_part_path = g_strdup_printf ("%s/%d", dst_delta_dir, i); + + if (!glnx_file_copy_at (ostree_repo_get_dfd (src_repo), + src_part_path, + NULL, + ostree_repo_get_dfd (dst_repo), + dst_part_path, + GLNX_FILE_COPY_OVERWRITE | GLNX_FILE_COPY_NOXATTRS, + NULL, error)) + return FALSE; + } + + dst_delta_file = g_file_resolve_relative_path (ostree_repo_get_path (dst_repo), dst_superblock_path); + if (!flatpak_variant_save (dst_delta_file, dst_superblock, NULL, error)) + return FALSE; + + return TRUE; +} + + gboolean flatpak_builtin_build_commit_from (int argc, char **argv, GCancellable *cancellable, GError **error) { @@ -224,6 +374,7 @@ flatpak_builtin_build_commit_from (int argc, char **argv, GCancellable *cancella g_autoptr(GFile) dst_parent_root = NULL; g_autoptr(GFile) src_ref_root = NULL; g_autoptr(GVariant) src_commitv = NULL; + g_autoptr(GVariant) dst_commitv = NULL; g_autoptr(OstreeMutableTree) mtree = NULL; g_autoptr(GFile) dst_root = NULL; g_autoptr(GVariant) commitv_metadata = NULL; @@ -319,6 +470,9 @@ flatpak_builtin_build_commit_from (int argc, char **argv, GCancellable *cancella g_print ("%s: %s\n", dst_ref, commit_checksum); + if (!ostree_repo_load_commit (dst_repo, commit_checksum, &dst_commitv, NULL, error)) + return FALSE; + /* This doesn't copy the detached metadata. I'm not sure if this is a problem. * The main thing there is commit signatures, and we can't copy those, as the commit hash changes. */ @@ -357,6 +511,23 @@ flatpak_builtin_build_commit_from (int argc, char **argv, GCancellable *cancella { ostree_repo_transaction_set_ref (dst_repo, NULL, dst_ref, commit_checksum); } + + /* Copy + Rewrite any deltas */ + { + const char *from[2]; + gsize j, n_from = 0; + + if (dst_parent != NULL) + from[n_from++] = dst_parent; + from[n_from++] = NULL; + + for (j = 0; j < n_from; j++) + { + g_autoptr(GError) local_error = NULL; + if (!rewrite_delta (src_repo, resolved_ref, dst_repo, commit_checksum, dst_commitv, from[j], &local_error)) + g_debug ("Failed to copy delta: %s", local_error->message); + } + } } if (!ostree_repo_commit_transaction (dst_repo, NULL, cancellable, error)) diff --git a/app/flatpak-builtins-build-export.c b/app/flatpak-builtins-build-export.c index fd5976f8..10f45031 100644 --- a/app/flatpak-builtins-build-export.c +++ b/app/flatpak-builtins-build-export.c @@ -230,7 +230,7 @@ add_file_to_mtree (GFile *file, g_file_info_set_file_type (file_info, G_FILE_TYPE_REGULAR); g_file_info_set_attribute_uint32 (file_info, "unix::uid", 0); g_file_info_set_attribute_uint32 (file_info, "unix::gid", 0); - g_file_info_set_attribute_uint32 (file_info, "unix::mode", 0100744); + g_file_info_set_attribute_uint32 (file_info, "unix::mode", 0100644); raw_input = (GInputStream *) g_file_read (file, cancellable, error); if (raw_input == NULL) @@ -822,6 +822,12 @@ flatpak_builtin_build_export (int argc, char **argv, GCancellable *cancellable, if (!ostree_repo_prepare_transaction (repo, NULL, cancellable, error)) goto out; + /* This is useful only if the target is a "bare" rep, but this happens + in flatpak-builder when commiting to the cache repo. For other repos + this is a no-op */ + if (!ostree_repo_scan_hardlinks (repo, cancellable, error)) + goto out; + mtree = ostree_mutable_tree_new (); if (!flatpak_mtree_create_root (repo, mtree, cancellable, error)) @@ -891,7 +897,7 @@ flatpak_builtin_build_export (int argc, char **argv, GCancellable *cancellable, metadata_dict_v = g_variant_ref_sink (g_variant_dict_end (&metadata_dict)); - /* required for the metadata and the AppStream commits */ + /* The timestamp is used for the commit metadata and AppStream data */ if (opt_timestamp != NULL) { if (!g_time_val_from_iso8601 (opt_timestamp, &ts)) @@ -954,7 +960,7 @@ flatpak_builtin_build_export (int argc, char **argv, GCancellable *cancellable, if (opt_update_appstream && !flatpak_repo_generate_appstream (repo, (const char **) opt_gpg_key_ids, opt_gpg_homedir, - ts.tv_sec, cancellable, error)) + (opt_timestamp != NULL) ? ts.tv_sec : 0, cancellable, error)) return FALSE; if (!opt_no_update_summary && diff --git a/app/flatpak-builtins-build-import-bundle.c b/app/flatpak-builtins-build-import-bundle.c index 1dc5f96c..2489354d 100644 --- a/app/flatpak-builtins-build-import-bundle.c +++ b/app/flatpak-builtins-build-import-bundle.c @@ -95,7 +95,7 @@ import_oci (OstreeRepo *repo, GFile *file, oci_digest = desc->parent.digest; - versioned = flatpak_oci_registry_load_versioned (registry, + versioned = flatpak_oci_registry_load_versioned (registry, NULL, oci_digest, NULL, cancellable, error); if (versioned == NULL) @@ -115,8 +115,8 @@ import_oci (OstreeRepo *repo, GFile *file, return NULL; } - commit_checksum = flatpak_pull_from_oci (repo, registry, oci_digest, manifest, - NULL, target_ref, NULL, NULL, NULL, cancellable, error); + commit_checksum = flatpak_pull_from_oci (repo, registry, NULL, oci_digest, manifest, + NULL, target_ref, NULL, NULL, cancellable, error); if (commit_checksum == NULL) return NULL; diff --git a/app/flatpak-builtins-build-init.c b/app/flatpak-builtins-build-init.c index 7d1dfb5c..06735c33 100644 --- a/app/flatpak-builtins-build-init.c +++ b/app/flatpak-builtins-build-init.c @@ -381,7 +381,6 @@ flatpak_complete_build_init (FlatpakCompletion *completion) g_autoptr(GOptionContext) context = NULL; g_autoptr(FlatpakDir) user_dir = NULL; g_autoptr(FlatpakDir) system_dir = NULL; - g_autoptr(GError) error = NULL; int i; context = g_option_context_new (""); @@ -407,6 +406,7 @@ flatpak_complete_build_init (FlatpakCompletion *completion) case 4: /* SDK */ user_dir = flatpak_dir_get_user (); { + g_autoptr(GError) error = NULL; g_auto(GStrv) refs = flatpak_dir_find_installed_refs (user_dir, NULL, NULL, opt_arch, FLATPAK_KINDS_RUNTIME, &error); if (refs == NULL) @@ -421,6 +421,7 @@ flatpak_complete_build_init (FlatpakCompletion *completion) system_dir = flatpak_dir_get_system_default (); { + g_autoptr(GError) error = NULL; g_auto(GStrv) refs = flatpak_dir_find_installed_refs (system_dir, NULL, NULL, opt_arch, FLATPAK_KINDS_RUNTIME, &error); if (refs == NULL) @@ -438,6 +439,7 @@ flatpak_complete_build_init (FlatpakCompletion *completion) case 5: /* BRANCH */ user_dir = flatpak_dir_get_user (); { + g_autoptr(GError) error = NULL; g_auto(GStrv) refs = flatpak_dir_find_installed_refs (user_dir, completion->argv[3], NULL, opt_arch, FLATPAK_KINDS_RUNTIME, &error); if (refs == NULL) @@ -452,6 +454,7 @@ flatpak_complete_build_init (FlatpakCompletion *completion) system_dir = flatpak_dir_get_system_default (); { + g_autoptr(GError) error = NULL; g_auto(GStrv) refs = flatpak_dir_find_installed_refs (system_dir, completion->argv[3], NULL, opt_arch, FLATPAK_KINDS_RUNTIME, &error); if (refs == NULL) diff --git a/app/flatpak-builtins-build.c b/app/flatpak-builtins-build.c index 72176e8e..639334ed 100644 --- a/app/flatpak-builtins-build.c +++ b/app/flatpak-builtins-build.c @@ -39,40 +39,26 @@ static char *opt_build_dir; static char **opt_bind_mounts; static char *opt_sdk_dir; static char *opt_metadata; +static gboolean opt_log_session_bus; +static gboolean opt_log_system_bus; static gboolean opt_die_with_parent; static gboolean opt_with_appdir; +static gboolean opt_readonly; static GOptionEntry options[] = { { "runtime", 'r', 0, G_OPTION_ARG_NONE, &opt_runtime, N_("Use Platform runtime rather than Sdk"), NULL }, + { "readonly", 0, 0, G_OPTION_ARG_NONE, &opt_readonly, N_("Make destination readonly"), NULL }, { "bind-mount", 0, 0, G_OPTION_ARG_STRING_ARRAY, &opt_bind_mounts, N_("Add bind mount"), N_("DEST=SRC") }, { "build-dir", 0, 0, G_OPTION_ARG_STRING, &opt_build_dir, N_("Start build in this directory"), N_("DIR") }, { "sdk-dir", 0, 0, G_OPTION_ARG_STRING, &opt_sdk_dir, N_("Where to look for custom sdk dir (defaults to 'usr')"), N_("DIR") }, { "metadata", 0, 0, G_OPTION_ARG_STRING, &opt_metadata, N_("Use alternative file for the metadata"), N_("FILE") }, { "die-with-parent", 'p', 0, G_OPTION_ARG_NONE, &opt_die_with_parent, N_("Kill processes when the parent process dies"), NULL }, { "with-appdir", 0, 0, G_OPTION_ARG_NONE, &opt_with_appdir, N_("Export application homedir directory to build"), NULL }, + { "log-session-bus", 0, 0, G_OPTION_ARG_NONE, &opt_log_session_bus, N_("Log session bus calls"), NULL }, + { "log-system-bus", 0, 0, G_OPTION_ARG_NONE, &opt_log_system_bus, N_("Log system bus calls"), NULL }, { NULL } }; -static void -add_args (GPtrArray *argv_array, ...) -{ - va_list args; - const gchar *arg; - - va_start (args, argv_array); - while ((arg = va_arg (args, const gchar *))) - g_ptr_array_add (argv_array, g_strdup (arg)); - va_end (args); -} - -static void -clear_fd (gpointer data) -{ - int *fd_p = data; - if (fd_p != NULL && *fd_p != -1) - close (*fd_p); -} - /* Unset FD_CLOEXEC on the array of fds passed in @user_data */ static void child_setup (gpointer user_data) @@ -97,6 +83,8 @@ flatpak_builtin_build (int argc, char **argv, GCancellable *cancellable, GError g_autoptr(GVariant) runtime_deploy_data = NULL; g_autoptr(FlatpakDeploy) extensionof_deploy = NULL; g_autoptr(GFile) var = NULL; + g_autoptr(GFile) var_tmp = NULL; + g_autoptr(GFile) var_lib = NULL; g_autoptr(GFile) usr = NULL; g_autoptr(GFile) res_deploy = NULL; g_autoptr(GFile) res_files = NULL; @@ -112,9 +100,8 @@ flatpak_builtin_build (int argc, char **argv, GCancellable *cancellable, GError g_autofree char *extension_tmpfs_point = NULL; g_autoptr(GKeyFile) metakey = NULL; g_autoptr(GKeyFile) runtime_metakey = NULL; - g_autoptr(GPtrArray) argv_array = NULL; - g_autoptr(GArray) fd_array = NULL; - g_auto(GStrv) envp = NULL; + g_autoptr(FlatpakBwrap) bwrap = NULL; + g_auto(GStrv) minimal_envp = NULL; gsize metadata_size; const char *directory = NULL; const char *command = "/bin/sh"; @@ -244,7 +231,11 @@ flatpak_builtin_build (int argc, char **argv, GCancellable *cancellable, GError } var = g_file_get_child (res_deploy, "var"); - if (!flatpak_mkdir_p (var, cancellable, error)) + var_tmp = g_file_get_child (var, "tmp"); + if (!flatpak_mkdir_p (var_tmp, cancellable, error)) + return FALSE; + var_lib = g_file_get_child (var, "lib"); + if (!flatpak_mkdir_p (var_lib, cancellable, error)) return FALSE; res_files = g_file_get_child (res_deploy, "files"); @@ -319,10 +310,9 @@ flatpak_builtin_build (int argc, char **argv, GCancellable *cancellable, GError extension_point = g_build_filename (bare_extension_point, x_subdir_suffix, NULL); } - argv_array = g_ptr_array_new_with_free_func (g_free); - fd_array = g_array_new (FALSE, TRUE, sizeof (int)); - g_array_set_clear_func (fd_array, clear_fd); - g_ptr_array_add (argv_array, g_strdup (flatpak_get_bwrap ())); + minimal_envp = flatpak_run_get_minimal_env (TRUE, FALSE); + bwrap = flatpak_bwrap_new (minimal_envp); + flatpak_bwrap_add_args (bwrap, flatpak_get_bwrap (), NULL); run_flags = FLATPAK_RUN_FLAG_DEVEL | FLATPAK_RUN_FLAG_NO_SESSION_HELPER | @@ -339,40 +329,46 @@ flatpak_builtin_build (int argc, char **argv, GCancellable *cancellable, GError if (!flatpak_context_get_needs_system_bus_proxy (arg_context)) run_flags |= FLATPAK_RUN_FLAG_NO_SYSTEM_BUS_PROXY; + if (opt_log_session_bus) + run_flags |= FLATPAK_RUN_FLAG_LOG_SESSION_BUS; + + if (opt_log_system_bus) + run_flags |= FLATPAK_RUN_FLAG_LOG_SYSTEM_BUS; + /* Never set up an a11y bus for builds */ run_flags |= FLATPAK_RUN_FLAG_NO_A11Y_BUS_PROXY; - if (!flatpak_run_setup_base_argv (argv_array, fd_array, runtime_files, app_id_dir, runtime_ref_parts[2], + if (!flatpak_run_setup_base_argv (bwrap, runtime_files, app_id_dir, runtime_ref_parts[2], run_flags, error)) return FALSE; - add_args (argv_array, - custom_usr ? "--bind" : "--ro-bind", flatpak_file_get_path_cached (runtime_files), "/usr", - NULL); + flatpak_bwrap_add_args (bwrap, + (custom_usr && !opt_readonly) ? "--bind" : "--ro-bind", flatpak_file_get_path_cached (runtime_files), "/usr", + NULL); if (!custom_usr) - add_args (argv_array, - "--lock-file", "/usr/.ref", - NULL); + flatpak_bwrap_add_args (bwrap, + "--lock-file", "/usr/.ref", + NULL); if (app_files) - add_args (argv_array, - app_files_ro ? "--ro-bind" : "--bind", flatpak_file_get_path_cached (app_files), "/app", - NULL); + flatpak_bwrap_add_args (bwrap, + (app_files_ro || opt_readonly) ? "--ro-bind" : "--bind", flatpak_file_get_path_cached (app_files), "/app", + NULL); else - add_args (argv_array, - "--dir", "/app", - NULL); + flatpak_bwrap_add_args (bwrap, + "--dir", "/app", + NULL); if (extension_tmpfs_point) - add_args (argv_array, - "--tmpfs", extension_tmpfs_point, - NULL); + flatpak_bwrap_add_args (bwrap, + "--tmpfs", extension_tmpfs_point, + NULL); if (extension_point) - add_args (argv_array, - "--bind", flatpak_file_get_path_cached (res_files), extension_point, - NULL); + flatpak_bwrap_add_args (bwrap, + "--bind", flatpak_file_get_path_cached (res_files), extension_point, + NULL); if (extension_point) dest = extension_point; @@ -381,12 +377,24 @@ flatpak_builtin_build (int argc, char **argv, GCancellable *cancellable, GError else dest = g_strdup ("/usr"); - add_args (argv_array, + flatpak_bwrap_add_args (bwrap, "--setenv", "FLATPAK_DEST", dest, "--setenv", "FLATPAK_ID", id, "--setenv", "FLATPAK_ARCH", runtime_ref_parts[2], NULL); + /* Persist some stuff in /var. We can't persist everything because that breaks /var things + * from the host to work. For example the /home -> /var/home on atomic. + * The interesting things to contain during the build is /var/tmp (for tempfiles shared during builds) + * and things like /var/lib/rpm, if the installation uses packages. + */ + flatpak_bwrap_add_args (bwrap, + "--bind", flatpak_file_get_path_cached (var_lib), "/var/lib", + NULL); + flatpak_bwrap_add_args (bwrap, + "--bind", flatpak_file_get_path_cached (var_tmp), "/var/tmp", + NULL); + app_context = flatpak_app_compute_permissions (metakey, runtime_metakey, error); @@ -396,15 +404,13 @@ flatpak_builtin_build (int argc, char **argv, GCancellable *cancellable, GError flatpak_context_allow_host_fs (app_context); flatpak_context_merge (app_context, arg_context); - envp = flatpak_run_get_minimal_env (TRUE, FALSE); - envp = flatpak_run_apply_env_vars (envp, app_context); + flatpak_run_apply_env_vars (bwrap, app_context); if (!custom_usr && !(is_extension && !is_app_extension) && - !flatpak_run_add_extension_args (argv_array, fd_array, &envp, runtime_metakey, runtime_ref, FALSE, &runtime_extensions, cancellable, error)) + !flatpak_run_add_extension_args (bwrap, runtime_metakey, runtime_ref, FALSE, &runtime_extensions, cancellable, error)) return FALSE; - if (!flatpak_run_add_app_info_args (argv_array, - fd_array, + if (!flatpak_run_add_app_info_args (bwrap, app_files, NULL, NULL, runtime_files, runtime_deploy_data, runtime_extensions, id, NULL, @@ -414,15 +420,10 @@ flatpak_builtin_build (int argc, char **argv, GCancellable *cancellable, GError error)) return FALSE; - if (!flatpak_run_add_environment_args (argv_array, fd_array, &envp, app_info_path, run_flags, id, + if (!flatpak_run_add_environment_args (bwrap, app_info_path, run_flags, id, app_context, app_id_dir, NULL, cancellable, error)) return FALSE; - /* After setup_base to avoid conflicts with /var symlinks */ - add_args (argv_array, - "--bind", flatpak_file_get_path_cached (var), "/var", - NULL); - for (i = 0; opt_bind_mounts != NULL && opt_bind_mounts[i] != NULL; i++) { char *split = strchr (opt_bind_mounts[i], '='); @@ -434,27 +435,28 @@ flatpak_builtin_build (int argc, char **argv, GCancellable *cancellable, GError } *split++ = 0; - add_args (argv_array, - "--bind", split, opt_bind_mounts[i], - NULL); + flatpak_bwrap_add_args (bwrap, + "--bind", split, opt_bind_mounts[i], + NULL); } if (opt_build_dir != NULL) { - add_args (argv_array, - "--chdir", opt_build_dir, - NULL); + flatpak_bwrap_add_args (bwrap, + "--chdir", opt_build_dir, + NULL); } - g_ptr_array_add (argv_array, g_strdup (command)); - for (i = 2; i < rest_argc; i++) - g_ptr_array_add (argv_array, g_strdup (argv[rest_argv_start + i])); + flatpak_bwrap_add_args (bwrap, command, NULL); + flatpak_bwrap_append_argsv (bwrap, + &argv[rest_argv_start + 2], + rest_argc - 2); - g_ptr_array_add (argv_array, NULL); + g_ptr_array_add (bwrap->argv, NULL); /* Ensure we unset O_CLOEXEC */ - child_setup (fd_array); - if (execvpe (flatpak_get_bwrap (), (char **) argv_array->pdata, envp) == -1) + child_setup (bwrap->fds); + if (execvpe (flatpak_get_bwrap (), (char **) bwrap->argv->pdata, bwrap->envp) == -1) { g_set_error (error, G_IO_ERROR, g_io_error_from_errno (errno), _("Unable to start app")); diff --git a/app/flatpak-builtins-config.c b/app/flatpak-builtins-config.c index a7dbbd1f..2494f621 100644 --- a/app/flatpak-builtins-config.c +++ b/app/flatpak-builtins-config.c @@ -198,14 +198,19 @@ gboolean flatpak_builtin_config (int argc, char **argv, GCancellable *cancellable, GError **error) { g_autoptr(GOptionContext) context = NULL; - g_autoptr(FlatpakDir) dir = NULL; + g_autoptr(GPtrArray) dirs = NULL; + FlatpakDir *dir; context = g_option_context_new (_("[KEY [VALUE]] - Manage configuration")); g_option_context_set_translation_domain (context, GETTEXT_PACKAGE); - if (!flatpak_option_context_parse (context, options, &argc, &argv, 0, &dir, cancellable, error)) + if (!flatpak_option_context_parse (context, options, &argc, &argv, + FLATPAK_BUILTIN_FLAG_ONE_DIR, + &dirs, cancellable, error)) return FALSE; + dir = g_ptr_array_index (dirs, 0); + if (opt_get) return get_config (argc, argv, dir, cancellable, error); else if (opt_set) @@ -215,7 +220,7 @@ flatpak_builtin_config (int argc, char **argv, GCancellable *cancellable, GError else if (opt_list) return list_config (argc, argv, dir, cancellable, error); else - return flatpak_fail (error, _("Must specify one on --list, --get, --set or --unset")); + return flatpak_fail (error, _("Must specify one of --list, --get, --set or --unset")); return TRUE; } @@ -224,16 +229,16 @@ gboolean flatpak_complete_config (FlatpakCompletion *completion) { g_autoptr(GOptionContext) context = NULL; - g_autoptr(FlatpakDir) dir = NULL; context = g_option_context_new (""); - if (!flatpak_option_context_parse (context, options, &completion->argc, &completion->argv, 0, &dir, NULL, NULL)) + if (!flatpak_option_context_parse (context, options, &completion->argc, &completion->argv, + FLATPAK_BUILTIN_FLAG_ONE_DIR, NULL, NULL, NULL)) return FALSE; switch (completion->argc) { case 0: - case 1: /* REMOTE */ + case 1: /* KEY */ flatpak_complete_options (completion, global_entries); flatpak_complete_options (completion, options); flatpak_complete_options (completion, user_entries); diff --git a/app/flatpak-builtins-delete-remote.c b/app/flatpak-builtins-delete-remote.c index ca4ce991..f23470ff 100644 --- a/app/flatpak-builtins-delete-remote.c +++ b/app/flatpak-builtins-delete-remote.c @@ -30,6 +30,7 @@ #include "libglnx/libglnx.h" #include "flatpak-builtins.h" +#include "flatpak-builtins-utils.h" static gboolean opt_force; @@ -43,7 +44,8 @@ gboolean flatpak_builtin_delete_remote (int argc, char **argv, GCancellable *cancellable, GError **error) { g_autoptr(GOptionContext) context = NULL; - g_autoptr(FlatpakDir) dir = NULL; + g_autoptr(GPtrArray) dirs = NULL; + g_autoptr(FlatpakDir) preferred_dir = NULL; const char *remote_name; context = g_option_context_new (_("NAME - Delete a remote repository")); @@ -51,7 +53,8 @@ flatpak_builtin_delete_remote (int argc, char **argv, GCancellable *cancellable, g_option_context_add_main_entries (context, delete_options, NULL); - if (!flatpak_option_context_parse (context, NULL, &argc, &argv, 0, &dir, cancellable, error)) + if (!flatpak_option_context_parse (context, NULL, &argc, &argv, + FLATPAK_BUILTIN_FLAG_STANDARD_DIRS, &dirs, cancellable, error)) return FALSE; if (argc < 2) @@ -62,7 +65,10 @@ flatpak_builtin_delete_remote (int argc, char **argv, GCancellable *cancellable, if (argc > 2) return usage_error (context, _("Too many arguments"), error); - if (!flatpak_dir_remove_remote (dir, opt_force, remote_name, + if (!flatpak_resolve_duplicate_remotes (dirs, remote_name, &preferred_dir, cancellable, error)) + return FALSE; + + if (!flatpak_dir_remove_remote (preferred_dir, opt_force, remote_name, cancellable, error)) return FALSE; @@ -73,11 +79,12 @@ gboolean flatpak_complete_delete_remote (FlatpakCompletion *completion) { g_autoptr(GOptionContext) context = NULL; - g_autoptr(FlatpakDir) dir = NULL; + g_autoptr(GPtrArray) dirs = NULL; int i; context = g_option_context_new (""); - if (!flatpak_option_context_parse (context, delete_options, &completion->argc, &completion->argv, 0, &dir, NULL, NULL)) + if (!flatpak_option_context_parse (context, delete_options, &completion->argc, &completion->argv, + FLATPAK_BUILTIN_FLAG_STANDARD_DIRS, &dirs, NULL, NULL)) return FALSE; switch (completion->argc) @@ -88,13 +95,16 @@ flatpak_complete_delete_remote (FlatpakCompletion *completion) flatpak_complete_options (completion, delete_options); flatpak_complete_options (completion, user_entries); - { - g_auto(GStrv) remotes = flatpak_dir_list_remotes (dir, NULL, NULL); - if (remotes == NULL) - return FALSE; - for (i = 0; remotes[i] != NULL; i++) - flatpak_complete_word (completion, "%s ", remotes[i]); - } + for (i = 0; i < dirs->len; i++) + { + FlatpakDir *dir = g_ptr_array_index (dirs, i); + int j; + g_auto(GStrv) remotes = flatpak_dir_list_remotes (dir, NULL, NULL); + if (remotes == NULL) + return FALSE; + for (j = 0; remotes[j] != NULL; j++) + flatpak_complete_word (completion, "%s ", remotes[j]); + } break; } diff --git a/app/flatpak-builtins-document-export.c b/app/flatpak-builtins-document-export.c index 1a16c7b0..46b4c944 100644 --- a/app/flatpak-builtins-document-export.c +++ b/app/flatpak-builtins-document-export.c @@ -29,7 +29,7 @@ #include #include "libglnx/libglnx.h" -#include "document-portal/xdp-dbus.h" +#include "flatpak-document-dbus.h" #include diff --git a/app/flatpak-builtins-document-info.c b/app/flatpak-builtins-document-info.c index bd7edc68..c9605456 100644 --- a/app/flatpak-builtins-document-info.c +++ b/app/flatpak-builtins-document-info.c @@ -29,7 +29,7 @@ #include #include "libglnx/libglnx.h" -#include "document-portal/xdp-dbus.h" +#include "flatpak-document-dbus.h" #include diff --git a/app/flatpak-builtins-document-list.c b/app/flatpak-builtins-document-list.c index 4644086c..48cd1afb 100644 --- a/app/flatpak-builtins-document-list.c +++ b/app/flatpak-builtins-document-list.c @@ -29,7 +29,7 @@ #include #include "libglnx/libglnx.h" -#include "document-portal/xdp-dbus.h" +#include "flatpak-document-dbus.h" #include "flatpak-builtins.h" #include "flatpak-utils.h" diff --git a/app/flatpak-builtins-document-unexport.c b/app/flatpak-builtins-document-unexport.c index 8efeeb76..82e58f38 100644 --- a/app/flatpak-builtins-document-unexport.c +++ b/app/flatpak-builtins-document-unexport.c @@ -29,7 +29,7 @@ #include #include "libglnx/libglnx.h" -#include "document-portal/xdp-dbus.h" +#include "flatpak-document-dbus.h" #include diff --git a/app/flatpak-builtins-info-remote.c b/app/flatpak-builtins-info-remote.c new file mode 100644 index 00000000..d81530a4 --- /dev/null +++ b/app/flatpak-builtins-info-remote.c @@ -0,0 +1,360 @@ +/* + * Copyright © 2017 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: + * Alexander Larsson + */ + +#include "config.h" + +#include +#include +#include +#include + +#include + +#include "libglnx/libglnx.h" + +#include "flatpak-builtins.h" +#include "flatpak-builtins-utils.h" +#include "flatpak-utils.h" +#include "flatpak-table-printer.h" + +static char *opt_arch; +static char *opt_commit; +static gboolean opt_runtime; +static gboolean opt_app; +static gboolean opt_show_ref; +static gboolean opt_show_commit; +static gboolean opt_show_parent; +static gboolean opt_show_metadata; +static gboolean opt_log; + +static GOptionEntry options[] = { + { "arch", 0, 0, G_OPTION_ARG_STRING, &opt_arch, N_("Arch to install for"), N_("ARCH") }, + { "commit", 0, 0, G_OPTION_ARG_STRING, &opt_commit, N_("Commit to show info for"), N_("COMMIT") }, + { "runtime", 0, 0, G_OPTION_ARG_NONE, &opt_runtime, N_("Look for runtime with the specified name"), NULL }, + { "app", 0, 0, G_OPTION_ARG_NONE, &opt_app, N_("Look for app with the specified name"), NULL }, + { "log", 0, 0, G_OPTION_ARG_NONE, &opt_log, N_("Display log"), NULL }, + { "show-ref", 'r', 0, G_OPTION_ARG_NONE, &opt_show_ref, N_("Show ref"), NULL }, + { "show-commit", 'c', 0, G_OPTION_ARG_NONE, &opt_show_commit, N_("Show commit"), NULL }, + { "show-parent", 'p', 0, G_OPTION_ARG_NONE, &opt_show_parent, N_("Show parent"), NULL }, + { "show-metadata", 'm', 0, G_OPTION_ARG_NONE, &opt_show_metadata, N_("Show metadata"), NULL }, + { NULL } +}; + +static void +maybe_print_space (gboolean *first) +{ + if (*first) + *first = FALSE; + else + g_print (" "); +} + +static gchar * +format_timestamp (guint64 timestamp) +{ + GDateTime *dt; + gchar *str; + + dt = g_date_time_new_from_unix_utc (timestamp); + if (dt == NULL) + return g_strdup ("?"); + + str = g_date_time_format (dt, "%Y-%m-%d %H:%M:%S +0000"); + g_date_time_unref (dt); + + return str; +} + + +gboolean +flatpak_builtin_info_remote (int argc, char **argv, GCancellable *cancellable, GError **error) +{ + g_autoptr(GOptionContext) context = NULL; + g_autoptr(GPtrArray) dirs = NULL; + g_autoptr(FlatpakDir) preferred_dir = NULL; + g_autoptr(GVariant) commit_v = NULL; + g_autoptr(GVariant) commit_metadata = NULL; + const char *remote; + const char *pref; + g_autofree char *default_branch = NULL; + FlatpakKinds kinds; + FlatpakKinds matched_kinds; + g_autofree char *id = NULL; + g_autofree char *arch = NULL; + g_autofree char *branch = NULL; + g_auto(GStrv) parts = NULL; + FlatpakKinds kind; + g_autofree char *ref = NULL; + g_autofree char *commit = NULL; + g_autofree char *parent = NULL; + const char *on = ""; + const char *off = ""; + gboolean friendly = TRUE; + const char *xa_metadata = NULL; + const char *collection_id = NULL; + g_autoptr(GKeyFile) metakey = NULL; + guint64 installed_size = 0; + guint64 download_size = 0; + g_autofree char *formatted_installed_size = NULL; + g_autofree char *formatted_download_size = NULL; + const gchar *subject; + const gchar *body; + guint64 timestamp; + g_autofree char *formatted_timestamp = NULL; + + context = g_option_context_new (_(" REMOTE REF - Show information about an application or runtime in a remote")); + g_option_context_set_translation_domain (context, GETTEXT_PACKAGE); + + if (!flatpak_option_context_parse (context, options, &argc, &argv, + FLATPAK_BUILTIN_FLAG_STANDARD_DIRS, &dirs, cancellable, error)) + return FALSE; + + if (!opt_app && !opt_runtime) + opt_app = opt_runtime = TRUE; + + if (argc < 3) + return usage_error (context, _("REMOTE and REF must be specified"), error); + + remote = argv[1]; + pref = argv[2]; + + if (!flatpak_resolve_duplicate_remotes (dirs, remote, &preferred_dir, cancellable, error)) + return FALSE; + + default_branch = flatpak_dir_get_remote_default_branch (preferred_dir, remote); + kinds = flatpak_kinds_from_bools (opt_app, opt_runtime); + + if (!flatpak_split_partial_ref_arg (pref, kinds, opt_arch, NULL, + &matched_kinds, &id, &arch, &branch, error)) + return FALSE; + + ref = flatpak_dir_find_remote_ref (preferred_dir, remote, id, branch, default_branch, arch, + matched_kinds, &kind, cancellable, error); + if (ref == NULL) + return FALSE; + + commit_v = flatpak_dir_fetch_remote_commit (preferred_dir, remote, ref, opt_commit, &commit, cancellable, error); + if (commit_v == NULL) + return FALSE; + + if (flatpak_fancy_output ()) + { + on = FLATPAK_ANSI_BOLD_ON; + off = FLATPAK_ANSI_BOLD_OFF; /* bold off */ + } + + if (opt_show_ref || opt_show_commit || opt_show_parent || opt_show_metadata) + friendly = FALSE; + + if (friendly) + { + g_variant_get (commit_v, "(a{sv}aya(say)&s&stayay)", NULL, NULL, NULL, + &subject, &body, NULL, NULL, NULL); + + parent = ostree_commit_get_parent (commit_v); + timestamp = ostree_commit_get_timestamp (commit_v); + + commit_metadata = g_variant_get_child_value (commit_v, 0); + g_variant_lookup (commit_metadata, "xa.metadata", "&s", &xa_metadata); + if (xa_metadata == NULL) + g_printerr (_("Warning: Commit has no flatpak metadata\n")); + else + { + metakey = g_key_file_new (); + if (!g_key_file_load_from_data (metakey, xa_metadata, -1, 0, error)) + return FALSE; + } + +#ifdef FLATPAK_ENABLE_P2P + g_variant_lookup (commit_metadata, "ostree.collection-binding", "&s", &collection_id); +#endif + + if (g_variant_lookup (commit_metadata, "xa.installed-size", "t", &installed_size)) + installed_size = GUINT64_FROM_BE (installed_size); + + if (g_variant_lookup (commit_metadata, "xa.download-size", "t", &download_size)) + download_size = GUINT64_FROM_BE (download_size); + + parts = g_strsplit (ref, "/", 0); + formatted_installed_size = g_format_size (installed_size); + formatted_download_size = g_format_size (download_size); + formatted_timestamp = format_timestamp (timestamp); + + g_print ("%s%s%s %s\n", on, _("Ref:"), off, ref); + g_print ("%s%s%s %s\n", on, _("ID:"), off, parts[1]); + g_print ("%s%s%s %s\n", on, _("Arch:"), off, parts[2]); + g_print ("%s%s%s %s\n", on, _("Branch:"), off, parts[3]); + if (collection_id != NULL) + g_print ("%s%s%s %s\n", on, _("Collection ID:"), off, collection_id); + g_print ("%s%s%s %s\n", on, _("Date:"), off, formatted_timestamp); + g_print ("%s%s%s %s\n", on, _("Subject:"), off, subject); + g_print ("%s%s%s %s\n", on, _("Commit:"), off, commit); + g_print ("%s%s%s %s\n", on, _("Parent:"), off, parent ? parent : "-"); + g_print ("%s%s%s %s\n", on, _("Download size:"), off, formatted_download_size); + g_print ("%s%s%s %s\n", on, _("Installed size:"), off, formatted_installed_size); + if (strcmp (parts[0], "app") == 0 && metakey != NULL) + { + g_autofree char *runtime = NULL; + runtime = g_key_file_get_string (metakey, "Application", "runtime", error); + g_print ("%s%s%s %s\n", on, _("Runtime:"), off, runtime ? runtime : "-"); + } + + if (opt_log) + { + g_autofree char *p = g_strdup (parent); + + g_print ("%s%s%s", on, _("History:\n"), off); + + while (p) + { + g_autofree char *p_parent = NULL; + const gchar *p_subject; + guint64 p_timestamp; + g_autofree char *p_formatted_timestamp = NULL; + g_autoptr(GVariant) p_commit_v = NULL; + + p_commit_v = flatpak_dir_fetch_remote_commit (preferred_dir, remote, ref, p, NULL, cancellable, NULL); + if (p_commit_v == NULL) + break; + + p_parent = ostree_commit_get_parent (p_commit_v); + p_timestamp = ostree_commit_get_timestamp (p_commit_v); + p_formatted_timestamp = format_timestamp (p_timestamp); + + g_variant_get (p_commit_v, "(a{sv}aya(say)&s&stayay)", NULL, NULL, NULL, + &p_subject, NULL, NULL, NULL, NULL); + + g_print ("%s%s%s %s\n", on, _(" Subject:"), off, p_subject); + g_print ("%s%s%s %s\n", on, _(" Date:"), off, p_formatted_timestamp); + g_print ("%s%s%s %s\n", on, _(" Commit:"), off, p); + + g_free (p); + p = g_steal_pointer (&p_parent); + if (p) + g_print ("\n"); + } + } + } + else + { + g_autoptr(GVariant) c_v = g_variant_ref (commit_v); + g_autofree char *c = g_strdup (commit); + + do + { + g_autofree char *p = ostree_commit_get_parent (c_v); + gboolean first = TRUE; + + if (opt_show_ref) + { + maybe_print_space (&first); + g_print ("%s", ref); + } + + if (opt_show_commit) + { + maybe_print_space (&first); + g_print ("%s", c); + } + + if (opt_show_parent) + { + maybe_print_space (&first); + g_print ("%s", p ? p : "-"); + } + + if (!first) + g_print ("\n"); + + if (opt_show_metadata) + { + g_autoptr(GVariant) c_m = NULL; + c_m = g_variant_get_child_value (c_v, 0); + g_variant_lookup (c_m, "xa.metadata", "&s", &xa_metadata); + if (xa_metadata == NULL) + g_printerr (_("Warning: Commit %s has no flatpak metadata\n"), c); + else + g_print ("%s", xa_metadata); + } + + g_free (c); + c = g_steal_pointer (&p); + + g_variant_unref (c_v); + c_v = NULL; + + if (c && opt_log) + c_v = flatpak_dir_fetch_remote_commit (preferred_dir, remote, ref, c, NULL, cancellable, NULL); + } + while (c_v != NULL); + } + + return TRUE; +} + +gboolean +flatpak_complete_info_remote (FlatpakCompletion *completion) +{ + g_autoptr(GOptionContext) context = NULL; + g_autoptr(GPtrArray) dirs = NULL; + FlatpakKinds kinds; + int i; + + context = g_option_context_new (""); + + if (!flatpak_option_context_parse (context, options, &completion->argc, &completion->argv, + FLATPAK_BUILTIN_FLAG_STANDARD_DIRS, &dirs, NULL, NULL)) + return FALSE; + + kinds = flatpak_kinds_from_bools (opt_app, opt_runtime); + + switch (completion->argc) + { + case 0: + case 1: /* REMOTE */ + flatpak_complete_options (completion, global_entries); + flatpak_complete_options (completion, options); + flatpak_complete_options (completion, user_entries); + + for (i = 0; i < dirs->len; i++) + { + FlatpakDir *dir = g_ptr_array_index (dirs, i); + int j; + g_auto(GStrv) remotes = flatpak_dir_list_remotes (dir, NULL, NULL); + if (remotes == NULL) + return FALSE; + for (j = 0; remotes[j] != NULL; j++) + flatpak_complete_word (completion, "%s ", remotes[j]); + } + + break; + + default: /* REF */ + for (i = 0; i < dirs->len; i++) + { + FlatpakDir *dir = g_ptr_array_index (dirs, i); + flatpak_complete_partial_ref (completion, kinds, opt_arch, dir, completion->argv[1]); + } + + break; + } + + return TRUE; +} diff --git a/app/flatpak-builtins-info.c b/app/flatpak-builtins-info.c index bcc5ec8c..2367adaf 100644 --- a/app/flatpak-builtins-info.c +++ b/app/flatpak-builtins-info.c @@ -32,6 +32,7 @@ #include "flatpak-builtins.h" #include "flatpak-utils.h" #include "flatpak-builtins-utils.h" +#include "flatpak-run.h" static gboolean opt_user; static gboolean opt_system; @@ -40,9 +41,11 @@ static gboolean opt_show_commit; static gboolean opt_show_origin; static gboolean opt_show_size; static gboolean opt_show_metadata; +static gboolean opt_show_permissions; static gboolean opt_show_extensions; static char *opt_arch; static char **opt_installations; +static char *opt_file_access; static GOptionEntry options[] = { { "arch", 0, 0, G_OPTION_ARG_STRING, &opt_arch, N_("Arch to use"), N_("ARCH") }, @@ -54,6 +57,8 @@ static GOptionEntry options[] = { { "show-origin", 'o', 0, G_OPTION_ARG_NONE, &opt_show_origin, N_("Show origin"), NULL }, { "show-size", 's', 0, G_OPTION_ARG_NONE, &opt_show_size, N_("Show size"), NULL }, { "show-metadata", 'm', 0, G_OPTION_ARG_NONE, &opt_show_metadata, N_("Show metadata"), NULL }, + { "show-permissions", 'M', 0, G_OPTION_ARG_NONE, &opt_show_permissions, N_("Show permissions"), NULL }, + { "file-access", 0, 0, G_OPTION_ARG_FILENAME, &opt_file_access, N_("Query file access"), N_("PATH") }, { "show-extensions", 'e', 0, G_OPTION_ARG_NONE, &opt_show_extensions, N_("Show extensions"), NULL }, { NULL } }; @@ -68,6 +73,22 @@ maybe_print_space (gboolean *first) g_print (" "); } +static gchar * +format_timestamp (guint64 timestamp) +{ + GDateTime *dt; + gchar *str; + + dt = g_date_time_new_from_unix_utc (timestamp); + if (dt == NULL) + return g_strdup ("?"); + + str = g_date_time_format (dt, "%Y-%m-%d %H:%M:%S +0000"); + g_date_time_unref (dt); + + return str; +} + gboolean flatpak_builtin_info (int argc, char **argv, GCancellable *cancellable, GError **error) { @@ -147,20 +168,56 @@ flatpak_builtin_info (int argc, char **argv, GCancellable *cancellable, GError * metakey = flatpak_deploy_get_metadata (deploy); - if (opt_show_ref || opt_show_origin || opt_show_commit || opt_show_size || opt_show_metadata) + if (opt_show_ref || opt_show_origin || opt_show_commit || opt_show_size || opt_show_metadata || opt_show_permissions || opt_file_access) friendly = FALSE; if (friendly) { - const char *latest = flatpak_dir_read_latest (dir, origin, ref, NULL, NULL, NULL); + g_autoptr(GVariant) commit_v = NULL; + g_autoptr(GVariant) commit_metadata = NULL; + guint64 timestamp; + g_autofree char *formatted_timestamp = NULL; + const gchar *subject = NULL; + const gchar *body = NULL; + g_autofree char *parent = NULL; + const char *latest; + const char *xa_metadata = NULL; + const char *collection_id = NULL; + + latest = flatpak_dir_read_latest (dir, origin, ref, NULL, NULL, NULL); if (latest == NULL) latest = _("ref not present in origin"); + if (ostree_repo_load_commit (flatpak_dir_get_repo (dir), commit, &commit_v, NULL, NULL)) + { + g_variant_get (commit_v, "(a{sv}aya(say)&s&stayay)", NULL, NULL, NULL, + &subject, &body, NULL, NULL, NULL); + parent = ostree_commit_get_parent (commit_v); + timestamp = ostree_commit_get_timestamp (commit_v); + formatted_timestamp = format_timestamp (timestamp); + + commit_metadata = g_variant_get_child_value (commit_v, 0); + g_variant_lookup (commit_metadata, "xa.metadata", "&s", &xa_metadata); + if (xa_metadata == NULL) + g_printerr (_("Warning: Commit has no flatpak metadata\n")); + +#ifdef FLATPAK_ENABLE_P2P + g_variant_lookup (commit_metadata, "ostree.collection-binding", "&s", &collection_id); +#endif + } + g_print ("%s%s%s %s\n", on, _("Ref:"), off, ref); g_print ("%s%s%s %s\n", on, _("ID:"), off, parts[1]); g_print ("%s%s%s %s\n", on, _("Arch:"), off, parts[2]); g_print ("%s%s%s %s\n", on, _("Branch:"), off, parts[3]); g_print ("%s%s%s %s\n", on, _("Origin:"), off, origin ? origin : "-"); + if (collection_id) + g_print ("%s%s%s %s\n", on, _("Collection ID:"), off, collection_id); + if (formatted_timestamp) + g_print ("%s%s%s %s\n", on, _("Date:"), off, formatted_timestamp); + if (subject) + g_print ("%s%s%s %s\n", on, _("Subject:"), off, subject); + if (strcmp (commit, latest) != 0) { g_print ("%s%s%s %s\n", on, _("Active commit:"), off, commit); @@ -170,6 +227,7 @@ flatpak_builtin_info (int argc, char **argv, GCancellable *cancellable, GError * g_print ("%s%s%s %s\n", on, _("Commit:"), off, commit); if (alt_id) g_print ("%s%s%s %s\n", on, _("alt-id:"), off, alt_id); + g_print ("%s%s%s %s\n", on, _("Parent:"), off, parent ? parent : "-"); g_print ("%s%s%s %s\n", on, _("Location:"), off, path); g_print ("%s%s%s %s\n", on, _("Installed size:"), off, formatted); if (strcmp (parts[0], "app") == 0) @@ -231,6 +289,42 @@ flatpak_builtin_info (int argc, char **argv, GCancellable *cancellable, GError * g_print ("%s", data); } + + if (opt_show_permissions || opt_file_access) + { + g_autoptr(FlatpakContext) context = NULL; + g_autoptr(GKeyFile) keyfile = NULL; + g_autofree gchar *contents = NULL; + + context = flatpak_context_load_for_deploy (deploy, error); + if (context == NULL) + return FALSE; + + if (opt_show_permissions) + { + keyfile = g_key_file_new (); + flatpak_context_save_metadata (context, TRUE, keyfile); + contents = g_key_file_to_data (keyfile, NULL, error); + if (contents == NULL) + return FALSE; + + g_print ("%s", contents); + } + + if (opt_file_access) + { + g_autoptr(FlatpakExports) exports = flatpak_context_get_exports (context, parts[1]); + FlatpakFilesystemMode mode; + + mode = flatpak_exports_path_get_mode (exports, opt_file_access); + if (mode == 0) + g_print ("hidden\n"); + else if (mode == FLATPAK_FILESYSTEM_MODE_READ_ONLY) + g_print ("read-only\n"); + else + g_print ("read-write\n"); + } + } } if (opt_show_extensions) @@ -289,39 +383,18 @@ gboolean flatpak_complete_info (FlatpakCompletion *completion) { g_autoptr(GOptionContext) context = NULL; - g_autoptr(FlatpakDir) user_dir = NULL; - g_autoptr(FlatpakDir) system_dir = NULL; - g_autoptr(GPtrArray) system_dirs = NULL; + g_autoptr(GPtrArray) dirs = NULL; g_autoptr(GError) error = NULL; - gboolean search_all = FALSE; FlatpakKinds kinds; int i, j; context = g_option_context_new (""); - if (!flatpak_option_context_parse (context, options, &completion->argc, &completion->argv, FLATPAK_BUILTIN_FLAG_NO_DIR, NULL, NULL, NULL)) + if (!flatpak_option_context_parse (context, options, &completion->argc, &completion->argv, + FLATPAK_BUILTIN_FLAG_ALL_DIRS, &dirs, NULL, NULL)) return FALSE; kinds = FLATPAK_KINDS_APP | FLATPAK_KINDS_RUNTIME; - if (!opt_user && !opt_system && opt_installations == NULL) - search_all = TRUE; - - if (opt_user || search_all) - user_dir = flatpak_dir_get_user (); - - if (search_all) - { - system_dirs = flatpak_dir_get_system_list (NULL, &error); - if (system_dirs == NULL) - { - flatpak_completion_debug ("find system installations error: %s", error->message); - return FALSE; - } - } - - if (opt_system) - system_dir = flatpak_dir_get_system_default (); - switch (completion->argc) { case 0: @@ -329,47 +402,16 @@ flatpak_complete_info (FlatpakCompletion *completion) flatpak_complete_options (completion, global_entries); flatpak_complete_options (completion, options); - if (user_dir) + for (i = 0; i < dirs->len; i++) { - g_auto(GStrv) refs = flatpak_dir_find_installed_refs (user_dir, NULL, NULL, opt_arch, + FlatpakDir *dir = g_ptr_array_index (dirs, i); + g_auto(GStrv) refs = flatpak_dir_find_installed_refs (dir, NULL, NULL, opt_arch, kinds, &error); if (refs == NULL) flatpak_completion_debug ("find local refs error: %s", error->message); - for (i = 0; refs != NULL && refs[i] != NULL; i++) + for (j = 0; refs != NULL && refs[j] != NULL; j++) { - g_auto(GStrv) parts = flatpak_decompose_ref (refs[i], NULL); - if (parts) - flatpak_complete_word (completion, "%s ", parts[1]); - } - } - - if (system_dirs) - { - for (i = 0; i < system_dirs->len; i++) - { - FlatpakDir *dir = g_ptr_array_index (system_dirs, i); - g_auto(GStrv) refs = flatpak_dir_find_installed_refs (dir, NULL, NULL, opt_arch, - kinds, &error); - if (refs == NULL) - flatpak_completion_debug ("find local refs error: %s", error->message); - for (j = 0; refs != NULL && refs[j] != NULL; j++) - { - g_auto(GStrv) parts = flatpak_decompose_ref (refs[j], NULL); - if (parts) - flatpak_complete_word (completion, "%s ", parts[1]); - } - } - } - - if (system_dir) - { - g_auto(GStrv) refs = flatpak_dir_find_installed_refs (system_dir, NULL, NULL, opt_arch, - kinds, &error); - if (refs == NULL) - flatpak_completion_debug ("find local refs error: %s", error->message); - for (i = 0; refs != NULL && refs[i] != NULL; i++) - { - g_auto(GStrv) parts = flatpak_decompose_ref (refs[i], NULL); + g_auto(GStrv) parts = flatpak_decompose_ref (refs[j], NULL); if (parts) flatpak_complete_word (completion, "%s ", parts[1]); } @@ -377,47 +419,16 @@ flatpak_complete_info (FlatpakCompletion *completion) break; case 2: /* BRANCH */ - if (user_dir) + for (i = 0; i < dirs->len; i++) { - g_auto(GStrv) refs = flatpak_dir_find_installed_refs (user_dir, completion->argv[1], NULL, opt_arch, + FlatpakDir *dir = g_ptr_array_index (dirs, i); + g_auto(GStrv) refs = flatpak_dir_find_installed_refs (dir, completion->argv[1], NULL, opt_arch, kinds, &error); if (refs == NULL) flatpak_completion_debug ("find remote refs error: %s", error->message); - for (i = 0; refs != NULL && refs[i] != NULL; i++) + for (j = 0; refs != NULL && refs[j] != NULL; j++) { - g_auto(GStrv) parts = flatpak_decompose_ref (refs[i], NULL); - if (parts) - flatpak_complete_word (completion, "%s ", parts[3]); - } - } - - if (system_dirs) - { - for (i = 0; i < system_dirs->len; i++) - { - FlatpakDir *dir = g_ptr_array_index (system_dirs, i); - g_auto(GStrv) refs = flatpak_dir_find_installed_refs (dir, completion->argv[1], NULL, opt_arch, - kinds, &error); - if (refs == NULL) - flatpak_completion_debug ("find remote refs error: %s", error->message); - for (j = 0; refs != NULL && refs[j] != NULL; j++) - { - g_auto(GStrv) parts = flatpak_decompose_ref (refs[j], NULL); - if (parts) - flatpak_complete_word (completion, "%s ", parts[3]); - } - } - } - - if (system_dir) - { - g_auto(GStrv) refs = flatpak_dir_find_installed_refs (system_dir, completion->argv[1], NULL, opt_arch, - kinds, &error); - if (refs == NULL) - flatpak_completion_debug ("find remote refs error: %s", error->message); - for (i = 0; refs != NULL && refs[i] != NULL; i++) - { - g_auto(GStrv) parts = flatpak_decompose_ref (refs[i], NULL); + g_auto(GStrv) parts = flatpak_decompose_ref (refs[j], NULL); if (parts) flatpak_complete_word (completion, "%s ", parts[3]); } diff --git a/app/flatpak-builtins-install.c b/app/flatpak-builtins-install.c index 6040e54b..f7666f3b 100644 --- a/app/flatpak-builtins-install.c +++ b/app/flatpak-builtins-install.c @@ -51,6 +51,7 @@ static gboolean opt_app; static gboolean opt_bundle; static gboolean opt_from; static gboolean opt_yes; +static gboolean opt_reinstall; static GOptionEntry options[] = { { "arch", 0, 0, G_OPTION_ARG_STRING, &opt_arch, N_("Arch to install for"), N_("ARCH") }, @@ -66,6 +67,7 @@ static GOptionEntry options[] = { { "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 }, + { "reinstall", 0, 0, G_OPTION_ARG_NONE, &opt_reinstall, N_("Uninstall first if already installed"), NULL }, { NULL } }; @@ -286,7 +288,7 @@ install_bundle (FlatpakDir *dir, return FALSE; transaction = flatpak_transaction_new (dir, opt_yes, opt_no_pull, opt_no_deploy, - opt_no_static_deltas, !opt_no_deps, !opt_no_related); + opt_no_static_deltas, !opt_no_deps, !opt_no_related, opt_reinstall); if (!flatpak_transaction_add_install_bundle (transaction, file, gpg_data, error)) return FALSE; @@ -333,7 +335,7 @@ handle_suggested_remote_name (FlatpakDir *dir, GBytes *data, GError **error) return TRUE; if (opt_yes || - flatpak_yes_no_prompt (_("The remote '%s', at location %s contains additional applications.\nDo you want to install other applications from here?"), + flatpak_yes_no_prompt (_("The remote '%s', at location %s contains additional applications.\nShould the remote be kept for future installations?"), suggested_name, url)) { if (opt_yes) @@ -440,7 +442,7 @@ install_from (FlatpakDir *dir, g_print (_("Installing: %s\n"), slash + 1); transaction = flatpak_transaction_new (clone, opt_yes, opt_no_pull, opt_no_deploy, - opt_no_static_deltas, !opt_no_deps, !opt_no_related); + opt_no_static_deltas, !opt_no_deps, !opt_no_related, opt_reinstall); if (!flatpak_transaction_add_install (transaction, remote, ref, (const char **)opt_subpaths, error)) return FALSE; @@ -458,8 +460,10 @@ gboolean flatpak_builtin_install (int argc, char **argv, GCancellable *cancellable, GError **error) { g_autoptr(GOptionContext) context = NULL; - g_autoptr(FlatpakDir) dir = NULL; + g_autoptr(GPtrArray) dirs = NULL; + FlatpakDir *dir; const char *remote; + g_autofree char *remote_url = NULL; char **prefs = NULL; int i, n_prefs; g_autofree char *target_branch = NULL; @@ -470,9 +474,13 @@ flatpak_builtin_install (int argc, char **argv, GCancellable *cancellable, GErro context = g_option_context_new (_("LOCATION/REMOTE [REF...] - Install applications or runtimes")); g_option_context_set_translation_domain (context, GETTEXT_PACKAGE); - if (!flatpak_option_context_parse (context, options, &argc, &argv, 0, &dir, cancellable, error)) + if (!flatpak_option_context_parse (context, options, &argc, &argv, + FLATPAK_BUILTIN_FLAG_ONE_DIR, + &dirs, cancellable, error)) return FALSE; + dir = g_ptr_array_index (dirs, 0); + if (!opt_bundle && !opt_from && argc >= 2) { if (flatpak_file_arg_has_suffix (argv[1], ".flatpakref")) @@ -490,7 +498,15 @@ flatpak_builtin_install (int argc, char **argv, GCancellable *cancellable, GErro if (argc < 3) return usage_error (context, _("REMOTE and REF must be specified"), error); - remote = argv[1]; + if (g_path_is_absolute (argv[1]) || + g_str_has_prefix (argv[1], "./")) + { + g_autoptr(GFile) remote_file = g_file_new_for_commandline_arg (argv[1]); + remote_url = g_file_get_uri (remote_file); + remote = remote_url; + } + else + remote = argv[1]; prefs = &argv[2]; n_prefs = argc - 2; @@ -505,7 +521,7 @@ flatpak_builtin_install (int argc, char **argv, GCancellable *cancellable, GErro kinds = flatpak_kinds_from_bools (opt_app, opt_runtime); transaction = flatpak_transaction_new (dir, opt_yes, opt_no_pull, opt_no_deploy, - opt_no_static_deltas, !opt_no_deps, !opt_no_related); + opt_no_static_deltas, !opt_no_deps, !opt_no_related, opt_reinstall); for (i = 0; i < n_prefs; i++) { @@ -550,14 +566,18 @@ gboolean flatpak_complete_install (FlatpakCompletion *completion) { g_autoptr(GOptionContext) context = NULL; - g_autoptr(FlatpakDir) dir = NULL; + g_autoptr(GPtrArray) dirs = NULL; + FlatpakDir *dir; FlatpakKinds kinds; int i; context = g_option_context_new (""); - if (!flatpak_option_context_parse (context, options, &completion->argc, &completion->argv, 0, &dir, NULL, NULL)) + if (!flatpak_option_context_parse (context, options, &completion->argc, &completion->argv, + FLATPAK_BUILTIN_FLAG_ONE_DIR, &dirs, NULL, NULL)) return FALSE; + dir = g_ptr_array_index (dirs, 0); + kinds = flatpak_kinds_from_bools (opt_app, opt_runtime); switch (completion->argc) diff --git a/app/flatpak-builtins-list-remotes.c b/app/flatpak-builtins-list-remotes.c index 180430ff..9228a593 100644 --- a/app/flatpak-builtins-list-remotes.c +++ b/app/flatpak-builtins-list-remotes.c @@ -34,15 +34,9 @@ #include "flatpak-table-printer.h" static gboolean opt_show_details; -static gboolean opt_user; -static gboolean opt_system; static gboolean opt_show_disabled; -static char **opt_installations; static GOptionEntry options[] = { - { "user", 0, 0, G_OPTION_ARG_NONE, &opt_user, N_("Show user installations"), NULL }, - { "system", 0, 0, G_OPTION_ARG_NONE, &opt_system, N_("Show system-wide installations"), NULL }, - { "installation", 0, 0, G_OPTION_ARG_STRING_ARRAY, &opt_installations, N_("Show specific system-wide installations"), NULL }, { "show-details", 'd', 0, G_OPTION_ARG_NONE, &opt_show_details, N_("Show remote details"), NULL }, { "show-disabled", 0, 0, G_OPTION_ARG_NONE, &opt_show_disabled, N_("Show disabled remotes"), NULL }, { NULL } @@ -59,46 +53,13 @@ flatpak_builtin_list_remotes (int argc, char **argv, GCancellable *cancellable, context = g_option_context_new (_(" - List remote repositories")); g_option_context_set_translation_domain (context, GETTEXT_PACKAGE); - if (!flatpak_option_context_parse (context, options, &argc, &argv, FLATPAK_BUILTIN_FLAG_NO_DIR, NULL, cancellable, error)) + if (!flatpak_option_context_parse (context, options, &argc, &argv, + FLATPAK_BUILTIN_FLAG_STANDARD_DIRS, &dirs, cancellable, error)) return FALSE; if (argc > 1) return usage_error (context, _("Too many arguments"), error); - if (!opt_user && !opt_system && opt_installations == NULL) - { - /* Default: All system and user remotes */ - opt_user = opt_system = TRUE; - } - - dirs = g_ptr_array_new_with_free_func ((GDestroyNotify) g_object_unref); - - if (opt_user) - g_ptr_array_add (dirs, flatpak_dir_get_user ()); - - if (opt_system) - g_ptr_array_add (dirs, flatpak_dir_get_system_default ()); - - if (opt_installations != NULL) - { - int i = 0; - - for (i = 0; opt_installations[i] != NULL; i++) - { - FlatpakDir *installation_dir = NULL; - - /* Already included the default system installation. */ - if (opt_system && g_strcmp0 (opt_installations[i], "default") == 0) - continue; - - installation_dir = flatpak_dir_get_system_by_id (opt_installations[i], cancellable, error); - if (installation_dir == NULL) - return FALSE; - - g_ptr_array_add (dirs, installation_dir); - } - } - printer = flatpak_table_printer_new (); j = 0; @@ -107,6 +68,9 @@ flatpak_builtin_list_remotes (int argc, char **argv, GCancellable *cancellable, { flatpak_table_printer_set_column_title (printer, j++, _("Title")); flatpak_table_printer_set_column_title (printer, j++, _("URL")); +#ifdef FLATPAK_ENABLE_P2P + flatpak_table_printer_set_column_title (printer, j++, _("Collection ID")); +#endif flatpak_table_printer_set_column_title (printer, j++, _("Priority")); } flatpak_table_printer_set_column_title (printer, j++, _("Options")); @@ -116,8 +80,6 @@ flatpak_builtin_list_remotes (int argc, char **argv, GCancellable *cancellable, FlatpakDir *dir = g_ptr_array_index (dirs, j); g_auto(GStrv) remotes = NULL; - flatpak_log_dir_access (dir); - remotes = flatpak_dir_list_remotes (dir, cancellable, error); if (remotes == NULL) return FALSE; @@ -128,6 +90,9 @@ flatpak_builtin_list_remotes (int argc, char **argv, GCancellable *cancellable, gboolean disabled; g_autofree char *remote_url = NULL; g_autofree char *title = NULL; +#ifdef FLATPAK_ENABLE_P2P + g_autofree char *collection_id = NULL; +#endif int prio; g_autofree char *prio_as_string = NULL; gboolean gpg_verify = TRUE; @@ -151,6 +116,14 @@ flatpak_builtin_list_remotes (int argc, char **argv, GCancellable *cancellable, else flatpak_table_printer_add_column (printer, "-"); +#ifdef FLATPAK_ENABLE_P2P + collection_id = flatpak_dir_get_remote_collection_id (dir, remote_name); + if (collection_id != NULL) + flatpak_table_printer_add_column (printer, collection_id); + else + flatpak_table_printer_add_column (printer, "-"); +#endif + prio = flatpak_dir_get_remote_prio (dir, remote_name); prio_as_string = g_strdup_printf ("%d", prio); flatpak_table_printer_add_column (printer, prio_as_string); @@ -158,9 +131,7 @@ flatpak_builtin_list_remotes (int argc, char **argv, GCancellable *cancellable, flatpak_table_printer_add_column (printer, ""); /* Options */ - if ((opt_user && opt_system) || (opt_user && opt_installations != NULL) - || (opt_system && opt_installations != NULL) - || (opt_installations != NULL && g_strv_length (opt_installations) > 1)) + if (dirs->len > 1) { g_autofree char *dir_id = flatpak_dir_get_name (dir); flatpak_table_printer_append_with_comma (printer, dir_id); @@ -194,16 +165,16 @@ gboolean flatpak_complete_list_remotes (FlatpakCompletion *completion) { g_autoptr(GOptionContext) context = NULL; - g_autoptr(FlatpakDir) dir = NULL; context = g_option_context_new (""); - if (!flatpak_option_context_parse (context, options, &completion->argc, &completion->argv, 0, &dir, NULL, NULL)) + if (!flatpak_option_context_parse (context, options, &completion->argc, &completion->argv, + FLATPAK_BUILTIN_FLAG_STANDARD_DIRS, NULL, NULL, NULL)) return FALSE; switch (completion->argc) { case 0: - case 1: /* REMOTE */ + case 1: flatpak_complete_options (completion, global_entries); flatpak_complete_options (completion, options); flatpak_complete_options (completion, user_entries); diff --git a/app/flatpak-builtins-list.c b/app/flatpak-builtins-list.c index 588a317f..6cad2f98 100644 --- a/app/flatpak-builtins-list.c +++ b/app/flatpak-builtins-list.c @@ -34,18 +34,12 @@ #include "flatpak-table-printer.h" static gboolean opt_show_details; -static gboolean opt_user; -static gboolean opt_system; static gboolean opt_runtime; static gboolean opt_app; static gboolean opt_all; -static char **opt_installations; static char *opt_arch; static GOptionEntry options[] = { - { "user", 0, 0, G_OPTION_ARG_NONE, &opt_user, N_("Show user installations"), NULL }, - { "system", 0, 0, G_OPTION_ARG_NONE, &opt_system, N_("Show system-wide installations"), NULL }, - { "installation", 0, 0, G_OPTION_ARG_STRING_ARRAY, &opt_installations, N_("Show specific system-wide installations"), NULL }, { "show-details", 'd', 0, G_OPTION_ARG_NONE, &opt_show_details, N_("Show extra information"), NULL }, { "runtime", 0, 0, G_OPTION_ARG_NONE, &opt_runtime, N_("List installed runtimes"), NULL }, { "app", 0, 0, G_OPTION_ARG_NONE, &opt_app, N_("List installed applications"), NULL }, @@ -278,87 +272,22 @@ print_table_for_refs (gboolean print_apps, GPtrArray* refs_array, const char *ar } static gboolean -print_installed_refs (gboolean app, gboolean runtime, gboolean print_system, gboolean print_user, char **installations, const char *arch, GCancellable *cancellable, GError **error) +print_installed_refs (gboolean app, gboolean runtime, GPtrArray *dirs, const char *arch, GCancellable *cancellable, GError **error) { g_autoptr(GPtrArray) refs_array = NULL; - gboolean print_all = !print_user && !print_system && (installations == NULL); + int i; refs_array = g_ptr_array_new_with_free_func ((GDestroyNotify) refs_data_free); - if (print_user || print_all) - { - g_autoptr(FlatpakDir) user_dir = NULL; - g_auto(GStrv) user_app = NULL; - g_auto(GStrv) user_runtime = NULL; - user_dir =flatpak_dir_get_user (); - flatpak_log_dir_access (user_dir); - if (!find_refs_for_dir (user_dir, app ? &user_app : NULL, runtime ? &user_runtime : NULL, cancellable, error)) + for (i = 0; i < dirs->len; i++) + { + FlatpakDir *dir = g_ptr_array_index (dirs, i); + g_auto(GStrv) apps = NULL; + g_auto(GStrv) runtimes = NULL; + + if (!find_refs_for_dir (dir, app ? &apps : NULL, runtime ? &runtimes : NULL, cancellable, error)) return FALSE; - g_ptr_array_add (refs_array, refs_data_new (user_dir, user_app, user_runtime)); - } - - if (print_all) - { - g_autoptr(GPtrArray) system_dirs = NULL; - int i; - - system_dirs = flatpak_dir_get_system_list (cancellable, error); - if (system_dirs == NULL) - return FALSE; - - for (i = 0; i < system_dirs->len; i++) - { - FlatpakDir *dir = g_ptr_array_index (system_dirs, i); - g_auto(GStrv) apps = NULL; - g_auto(GStrv) runtimes = NULL; - - flatpak_log_dir_access (dir); - - if (!find_refs_for_dir (dir, app ? &apps : NULL, runtime ? &runtimes : NULL, cancellable, error)) - return FALSE; - g_ptr_array_add (refs_array, refs_data_new (dir, apps, runtimes)); - } - } - else - { - if (print_system) - { - g_autoptr(FlatpakDir) system_dir = NULL; - g_auto(GStrv) system_app = NULL; - g_auto(GStrv) system_runtime = NULL; - - system_dir = flatpak_dir_get_system_default (); - flatpak_log_dir_access (system_dir); - if (!find_refs_for_dir (system_dir, app ? &system_app : NULL, runtime ? &system_runtime : NULL, cancellable, error)) - return FALSE; - g_ptr_array_add (refs_array, refs_data_new (system_dir, system_app, system_runtime)); - } - - if (installations != NULL) - { - g_auto(GStrv) installation_apps = NULL; - g_auto(GStrv) installation_runtimes = NULL; - int i = 0; - - for (i = 0; installations[i] != NULL; i++) - { - g_autoptr(FlatpakDir) system_dir = NULL; - - /* Already included the default system installation. */ - if (print_system && g_strcmp0 (installations[i], "default") == 0) - continue; - - system_dir = flatpak_dir_get_system_by_id (installations[i], cancellable, error); - flatpak_log_dir_access (system_dir); - if (system_dir == NULL) - return FALSE; - - if (!find_refs_for_dir (system_dir, app ? &installation_apps : NULL, runtime ? &installation_runtimes : NULL, cancellable, error)) - return FALSE; - - g_ptr_array_add (refs_array, refs_data_new (system_dir, installation_apps, installation_runtimes)); - } - } + g_ptr_array_add (refs_array, refs_data_new (dir, apps, runtimes)); } if (!print_table_for_refs (app, refs_array, arch, cancellable, error)) @@ -371,11 +300,14 @@ gboolean flatpak_builtin_list (int argc, char **argv, GCancellable *cancellable, GError **error) { g_autoptr(GOptionContext) context = NULL; + g_autoptr(GPtrArray) dirs = NULL; context = g_option_context_new (_(" - List installed apps and/or runtimes")); g_option_context_set_translation_domain (context, GETTEXT_PACKAGE); - if (!flatpak_option_context_parse (context, options, &argc, &argv, FLATPAK_BUILTIN_FLAG_NO_DIR, NULL, cancellable, error)) + if (!flatpak_option_context_parse (context, options, &argc, &argv, + FLATPAK_BUILTIN_FLAG_ALL_DIRS, + &dirs, cancellable, error)) return FALSE; if (argc > 1) @@ -388,9 +320,7 @@ flatpak_builtin_list (int argc, char **argv, GCancellable *cancellable, GError * } if (!print_installed_refs (opt_app, opt_runtime, - opt_system, - opt_user, - opt_installations, + dirs, opt_arch, cancellable, error)) return FALSE; @@ -403,5 +333,6 @@ flatpak_complete_list (FlatpakCompletion *completion) { flatpak_complete_options (completion, global_entries); flatpak_complete_options (completion, options); + flatpak_complete_options (completion, user_entries); return TRUE; } diff --git a/app/flatpak-builtins-ls-remote.c b/app/flatpak-builtins-ls-remote.c index f5e4f2bd..bfcb3233 100644 --- a/app/flatpak-builtins-ls-remote.c +++ b/app/flatpak-builtins-ls-remote.c @@ -30,6 +30,7 @@ #include "libglnx/libglnx.h" #include "flatpak-builtins.h" +#include "flatpak-builtins-utils.h" #include "flatpak-utils.h" #include "flatpak-table-printer.h" @@ -50,11 +51,33 @@ static GOptionEntry options[] = { { NULL } }; +typedef struct RemoteDirPair { + gchar *remote_name; + FlatpakDir *dir; +} RemoteDirPair; + +static void +remote_dir_pair_free (RemoteDirPair *pair) +{ + g_free (pair->remote_name); + g_object_unref (pair->dir); + g_free (pair); +} + +static RemoteDirPair * +remote_dir_pair_new (const char *remote_name, FlatpakDir *dir) +{ + RemoteDirPair *pair = g_new (RemoteDirPair, 1); + pair->remote_name = g_strdup (remote_name); + pair->dir = g_object_ref (dir); + return pair; +} + gboolean flatpak_builtin_ls_remote (int argc, char **argv, GCancellable *cancellable, GError **error) { g_autoptr(GOptionContext) context = NULL; - g_autoptr(FlatpakDir) dir = NULL; + g_autoptr(GPtrArray) dirs = NULL; GHashTableIter refs_iter; GHashTableIter iter; gpointer refs_key; @@ -66,15 +89,15 @@ flatpak_builtin_ls_remote (int argc, char **argv, GCancellable *cancellable, GEr int i; const char **arches = flatpak_get_arches (); const char *opt_arches[] = {NULL, NULL}; - g_auto(GStrv) remotes = NULL; gboolean has_remote; g_autoptr(GHashTable) pref_hash = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL); - g_autoptr(GHashTable) refs_hash = g_hash_table_new_full(g_direct_hash, g_direct_equal, (GDestroyNotify)g_hash_table_unref, g_free); + g_autoptr(GHashTable) refs_hash = g_hash_table_new_full(g_direct_hash, g_direct_equal, (GDestroyNotify)g_hash_table_unref, (GDestroyNotify)remote_dir_pair_free); - context = g_option_context_new (_(" REMOTE - Show available runtimes and applications")); + context = g_option_context_new (_(" [REMOTE] - Show available runtimes and applications")); g_option_context_set_translation_domain (context, GETTEXT_PACKAGE); - if (!flatpak_option_context_parse (context, options, &argc, &argv, 0, &dir, cancellable, error)) + if (!flatpak_option_context_parse (context, options, &argc, &argv, + FLATPAK_BUILTIN_FLAG_STANDARD_DIRS, &dirs, cancellable, error)) return FALSE; if (!opt_app && !opt_runtime) @@ -83,33 +106,58 @@ flatpak_builtin_ls_remote (int argc, char **argv, GCancellable *cancellable, GEr if (argc > 2) return usage_error (context, _("Too many arguments"), error); - if (argc < 2) - { - has_remote = FALSE; - remotes = flatpak_dir_list_remotes (dir, cancellable, error); - if (remotes == NULL) - return FALSE; - } - else - { - has_remote = TRUE; - remotes = g_new (char *, 2); - remotes[0] = g_strdup(argv[1]); - remotes[1] = NULL; - } + has_remote = (argc == 2); - for (i = 0; remotes[i] != NULL; i++) + if (has_remote) { + g_autoptr(FlatpakDir) preferred_dir = NULL; g_autoptr(GHashTable) refs = NULL; - const char *remote_name = remotes[i]; + RemoteDirPair *remote_dir_pair = NULL; - if (!flatpak_dir_list_remote_refs (dir, - remote_name, + if (!flatpak_resolve_duplicate_remotes (dirs, argv[1], &preferred_dir, cancellable, error)) + return FALSE; + + if (!flatpak_dir_list_remote_refs (preferred_dir, + argv[1], &refs, cancellable, error)) return FALSE; - g_hash_table_insert (refs_hash, g_steal_pointer (&refs), g_strdup (remote_name)); + remote_dir_pair = remote_dir_pair_new (argv[1], preferred_dir); + g_hash_table_insert (refs_hash, g_steal_pointer (&refs), remote_dir_pair); + } + else + { + int i; + for (i = 0; i < dirs->len; i++) + { + FlatpakDir *dir = g_ptr_array_index (dirs, i); + g_auto(GStrv) remotes = NULL; + int j; + + remotes = flatpak_dir_list_remotes (dir, cancellable, error); + if (remotes == NULL) + return FALSE; + + for (j = 0; remotes[j] != NULL; j++) + { + g_autoptr(GHashTable) refs = NULL; + RemoteDirPair *remote_dir_pair = NULL; + const char *remote_name = remotes[j]; + + if (flatpak_dir_get_remote_disabled (dir, remote_name)) + continue; + + if (!flatpak_dir_list_remote_refs (dir, + remote_name, + &refs, + cancellable, error)) + return FALSE; + + remote_dir_pair = remote_dir_pair_new (remote_name, dir); + g_hash_table_insert (refs_hash, g_steal_pointer (&refs), remote_dir_pair); + } + } } if (opt_arch != NULL) @@ -137,14 +185,25 @@ flatpak_builtin_ls_remote (int argc, char **argv, GCancellable *cancellable, GEr while (g_hash_table_iter_next (&refs_iter, &refs_key, &refs_value)) { GHashTable *refs = refs_key; - char *remote = refs_value; + RemoteDirPair *remote_dir_pair = refs_value; + const char *remote = remote_dir_pair->remote_name; + FlatpakDir *dir = remote_dir_pair->dir; g_autoptr(GHashTable) names = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free); g_hash_table_iter_init (&iter, refs); while (g_hash_table_iter_next (&iter, &key, &value)) { char *ref = key; - char *partial_ref = flatpak_make_valid_id_prefix (strchr (ref, '/') + 1); + char *partial_ref; + const char *slash = strchr (ref, '/'); + + if (slash == NULL) + { + g_debug ("Invalid remote ref %s", ref); + continue; + } + + partial_ref = flatpak_make_valid_id_prefix (slash + 1); g_hash_table_insert (pref_hash, partial_ref, ref); } @@ -170,6 +229,9 @@ flatpak_builtin_ls_remote (int argc, char **argv, GCancellable *cancellable, GEr if (deploy_data == NULL) continue; + if (g_strcmp0 (flatpak_deploy_data_get_origin (deploy_data), remote) != 0) + continue; + if (g_strcmp0 (flatpak_deploy_data_get_commit (deploy_data), checksum) == 0) continue; } @@ -270,12 +332,13 @@ gboolean flatpak_complete_ls_remote (FlatpakCompletion *completion) { g_autoptr(GOptionContext) context = NULL; - g_autoptr(FlatpakDir) dir = NULL; + g_autoptr(GPtrArray) dirs = NULL; int i; context = g_option_context_new (""); - if (!flatpak_option_context_parse (context, options, &completion->argc, &completion->argv, 0, &dir, NULL, NULL)) + if (!flatpak_option_context_parse (context, options, &completion->argc, &completion->argv, + FLATPAK_BUILTIN_FLAG_STANDARD_DIRS, &dirs, NULL, NULL)) return FALSE; switch (completion->argc) @@ -286,13 +349,16 @@ flatpak_complete_ls_remote (FlatpakCompletion *completion) flatpak_complete_options (completion, options); flatpak_complete_options (completion, user_entries); - { - g_auto(GStrv) remotes = flatpak_dir_list_remotes (dir, NULL, NULL); - if (remotes == NULL) - return FALSE; - for (i = 0; remotes[i] != NULL; i++) - flatpak_complete_word (completion, "%s ", remotes[i]); - } + for (i = 0; i < dirs->len; i++) + { + FlatpakDir *dir = g_ptr_array_index (dirs, i); + int j; + g_auto(GStrv) remotes = flatpak_dir_list_remotes (dir, NULL, NULL); + if (remotes == NULL) + return FALSE; + for (j = 0; remotes[j] != NULL; j++) + flatpak_complete_word (completion, "%s ", remotes[j]); + } break; } diff --git a/app/flatpak-builtins-make-current.c b/app/flatpak-builtins-make-current.c index 46f79642..8bf752b7 100644 --- a/app/flatpak-builtins-make-current.c +++ b/app/flatpak-builtins-make-current.c @@ -43,7 +43,8 @@ gboolean flatpak_builtin_make_current_app (int argc, char **argv, GCancellable *cancellable, GError **error) { g_autoptr(GOptionContext) context = NULL; - g_autoptr(FlatpakDir) dir = NULL; + g_autoptr(GPtrArray) dirs = NULL; + FlatpakDir *dir; g_autoptr(GFile) deploy_base = NULL; const char *pref; const char *default_branch = NULL; @@ -57,9 +58,13 @@ flatpak_builtin_make_current_app (int argc, char **argv, GCancellable *cancellab context = g_option_context_new (_("APP BRANCH - Make branch of application current")); g_option_context_set_translation_domain (context, GETTEXT_PACKAGE); - if (!flatpak_option_context_parse (context, options, &argc, &argv, 0, &dir, cancellable, error)) + if (!flatpak_option_context_parse (context, options, &argc, &argv, + FLATPAK_BUILTIN_FLAG_ONE_DIR, + &dirs, cancellable, error)) return FALSE; + dir = g_ptr_array_index (dirs, 0); + if (argc < 2) return usage_error (context, _("APP must be specified"), error); @@ -109,15 +114,19 @@ gboolean flatpak_complete_make_current_app (FlatpakCompletion *completion) { g_autoptr(GOptionContext) context = NULL; - g_autoptr(FlatpakDir) dir = NULL; + g_autoptr(GPtrArray) dirs = NULL; + FlatpakDir *dir; g_autoptr(GError) error = NULL; g_auto(GStrv) refs = NULL; int i; context = g_option_context_new (""); - if (!flatpak_option_context_parse (context, options, &completion->argc, &completion->argv, 0, &dir, NULL, NULL)) + if (!flatpak_option_context_parse (context, options, &completion->argc, &completion->argv, + FLATPAK_BUILTIN_FLAG_ONE_DIR, &dirs, NULL, NULL)) return FALSE; + dir = g_ptr_array_index (dirs, 0); + switch (completion->argc) { case 0: diff --git a/app/flatpak-builtins-override.c b/app/flatpak-builtins-override.c index 8cbbe076..c971a9db 100644 --- a/app/flatpak-builtins-override.c +++ b/app/flatpak-builtins-override.c @@ -45,30 +45,36 @@ flatpak_builtin_override (int argc, char **argv, GCancellable *cancellable, GErr g_autoptr(GOptionContext) context = NULL; const char *app; g_autoptr(FlatpakContext) arg_context = NULL; - g_autoptr(FlatpakDir) dir = NULL; + g_autoptr(GPtrArray) dirs = NULL; + FlatpakDir *dir; g_autoptr(GKeyFile) metakey = NULL; g_autoptr(FlatpakContext) overrides = NULL; g_autoptr(GError) my_error = NULL; - context = g_option_context_new (_("APP - Override settings for application")); + context = g_option_context_new (_("[APP] - Override settings [for application]")); g_option_context_set_translation_domain (context, GETTEXT_PACKAGE); arg_context = flatpak_context_new (); g_option_context_add_group (context, flatpak_context_get_options (arg_context)); - if (!flatpak_option_context_parse (context, options, &argc, &argv, 0, &dir, cancellable, error)) + if (!flatpak_option_context_parse (context, options, &argc, &argv, + FLATPAK_BUILTIN_FLAG_ONE_DIR, + &dirs, cancellable, error)) return FALSE; - if (argc < 2) - return usage_error (context, _("APP must be specified"), error); + dir = g_ptr_array_index (dirs, 0); if (argc > 2) return usage_error (context, _("Too many arguments"), error); - app = argv[1]; - - if (!flatpak_is_valid_name (app, &my_error)) - return flatpak_fail (error, _("'%s' is not a valid application name: %s"), app, my_error->message); + if (argc >= 2) + { + app = argv[1]; + if (!flatpak_is_valid_name (app, &my_error)) + return flatpak_fail (error, _("'%s' is not a valid application name: %s"), app, my_error->message); + } + else + app = NULL; metakey = flatpak_load_override_keyfile (app, flatpak_dir_is_user (dir), &my_error); if (metakey == NULL) @@ -99,8 +105,7 @@ gboolean flatpak_complete_override (FlatpakCompletion *completion) { g_autoptr(GOptionContext) context = NULL; - g_autoptr(FlatpakDir) user_dir = NULL; - g_autoptr(FlatpakDir) system_dir = NULL; + g_autoptr(GPtrArray) dirs = NULL; g_autoptr(GError) error = NULL; int i; g_autoptr(FlatpakContext) arg_context = NULL; @@ -111,7 +116,7 @@ flatpak_complete_override (FlatpakCompletion *completion) g_option_context_add_group (context, flatpak_context_get_options (arg_context)); if (!flatpak_option_context_parse (context, options, &completion->argc, &completion->argv, - FLATPAK_BUILTIN_FLAG_NO_DIR, NULL, NULL, NULL)) + FLATPAK_BUILTIN_FLAG_STANDARD_DIRS, &dirs, NULL, NULL)) return FALSE; switch (completion->argc) @@ -122,33 +127,21 @@ flatpak_complete_override (FlatpakCompletion *completion) flatpak_complete_options (completion, options); flatpak_context_complete (arg_context, completion); - user_dir = flatpak_dir_get_user (); - { - g_auto(GStrv) refs = flatpak_dir_find_installed_refs (user_dir, NULL, NULL, NULL, - FLATPAK_KINDS_APP, &error); - if (refs == NULL) - flatpak_completion_debug ("find local refs error: %s", error->message); - for (i = 0; refs != NULL && refs[i] != NULL; i++) - { - g_auto(GStrv) parts = flatpak_decompose_ref (refs[i], NULL); - if (parts) - flatpak_complete_word (completion, "%s ", parts[1]); - } - } - - system_dir = flatpak_dir_get_system_default (); - { - g_auto(GStrv) refs = flatpak_dir_find_installed_refs (system_dir, NULL, NULL, NULL, - FLATPAK_KINDS_APP, &error); - if (refs == NULL) - flatpak_completion_debug ("find local refs error: %s", error->message); - for (i = 0; refs != NULL && refs[i] != NULL; i++) - { - g_auto(GStrv) parts = flatpak_decompose_ref (refs[i], NULL); - if (parts) - flatpak_complete_word (completion, "%s ", parts[1]); - } - } + for (i = 0; i < dirs->len; i++) + { + FlatpakDir *dir = g_ptr_array_index (dirs, i); + int j; + g_auto(GStrv) refs = flatpak_dir_find_installed_refs (dir, NULL, NULL, NULL, + FLATPAK_KINDS_APP, &error); + if (refs == NULL) + flatpak_completion_debug ("find local refs error: %s", error->message); + for (j = 0; refs != NULL && refs[j] != NULL; j++) + { + g_auto(GStrv) parts = flatpak_decompose_ref (refs[j], NULL); + if (parts) + flatpak_complete_word (completion, "%s ", parts[1]); + } + } break; diff --git a/app/flatpak-builtins-repo.c b/app/flatpak-builtins-repo.c index 3fdfe2cb..6f12520c 100644 --- a/app/flatpak-builtins-repo.c +++ b/app/flatpak-builtins-repo.c @@ -162,6 +162,7 @@ flatpak_builtin_repo (int argc, char **argv, g_autoptr(GFile) location = NULL; g_autoptr(GVariant) meta = NULL; g_autoptr(OstreeRepo) repo = NULL; + const char *ostree_metadata_ref = NULL; g_autofree char *ostree_metadata_checksum = NULL; context = g_option_context_new (_("LOCATION - Repository maintenance")); @@ -181,7 +182,8 @@ flatpak_builtin_repo (int argc, char **argv, #ifdef FLATPAK_ENABLE_P2P /* Try loading the metadata from the ostree-metadata branch first. If that * fails, fall back to the summary file. */ - if (!ostree_repo_resolve_rev (repo, OSTREE_REPO_METADATA_REF, + ostree_metadata_ref = OSTREE_REPO_METADATA_REF; + if (!ostree_repo_resolve_rev (repo, ostree_metadata_ref, TRUE, &ostree_metadata_checksum, error)) return FALSE; #endif /* FLATPAK_ENABLE_P2P */ @@ -191,7 +193,10 @@ flatpak_builtin_repo (int argc, char **argv, g_autoptr(GVariant) commit_v = NULL; if (!ostree_repo_load_commit (repo, ostree_metadata_checksum, &commit_v, NULL, error)) - return FALSE; + { + g_prefix_error (error, "Error getting repository metadata from %s ref: ", ostree_metadata_ref); + return FALSE; + } meta = g_variant_get_child_value (commit_v, 0); } @@ -201,7 +206,10 @@ flatpak_builtin_repo (int argc, char **argv, summary = flatpak_repo_load_summary (repo, error); if (summary == NULL) - return FALSE; + { + g_prefix_error (error, "Error getting repository metadata from summary file: "); + return FALSE; + } meta = g_variant_get_child_value (summary, 1); } diff --git a/app/flatpak-builtins-run.c b/app/flatpak-builtins-run.c index 7067ecb9..6d41bb93 100644 --- a/app/flatpak-builtins-run.c +++ b/app/flatpak-builtins-run.c @@ -44,6 +44,7 @@ static gboolean opt_devel; static gboolean opt_log_session_bus; static gboolean opt_log_system_bus; static gboolean opt_log_a11y_bus; +static gboolean opt_no_a11y_bus; static gboolean opt_file_forwarding; static char *opt_runtime; static char *opt_runtime_version; @@ -58,6 +59,7 @@ static GOptionEntry options[] = { { "log-session-bus", 0, 0, G_OPTION_ARG_NONE, &opt_log_session_bus, N_("Log session bus calls"), NULL }, { "log-system-bus", 0, 0, G_OPTION_ARG_NONE, &opt_log_system_bus, N_("Log system bus calls"), NULL }, { "log-a11y-bus", 0, 0, G_OPTION_ARG_NONE, &opt_log_a11y_bus, N_("Log accessibility bus calls"), NULL }, + { "no-a11y-bus", 0, 0, G_OPTION_ARG_NONE, &opt_no_a11y_bus, N_("Don't proxy accessibility bus calls"), NULL }, { "file-forwarding", 0, 0, G_OPTION_ARG_NONE, &opt_file_forwarding, N_("Enable file forwarding"), NULL }, { NULL } }; @@ -179,7 +181,8 @@ flatpak_builtin_run (int argc, char **argv, GCancellable *cancellable, GError ** (opt_log_session_bus ? FLATPAK_RUN_FLAG_LOG_SESSION_BUS : 0) | (opt_log_system_bus ? FLATPAK_RUN_FLAG_LOG_SYSTEM_BUS : 0) | (opt_log_a11y_bus ? FLATPAK_RUN_FLAG_LOG_A11Y_BUS : 0) | - (opt_file_forwarding ? FLATPAK_RUN_FLAG_FILE_FORWARDING : 0), + (opt_file_forwarding ? FLATPAK_RUN_FLAG_FILE_FORWARDING : 0) | + (opt_no_a11y_bus ? FLATPAK_RUN_FLAG_NO_A11Y_BUS_PROXY : 0), opt_command, &argv[rest_argv_start + 1], rest_argc - 1, diff --git a/app/flatpak-builtins-search.c b/app/flatpak-builtins-search.c new file mode 100644 index 00000000..6832835c --- /dev/null +++ b/app/flatpak-builtins-search.c @@ -0,0 +1,338 @@ +/* + * Copyright © 2017 Patrick Griffis + * + * 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: + * Patrick Griffis + */ + +#include "config.h" + +#include +#include + +#include "flatpak-builtins.h" +#include "flatpak-builtins-utils.h" +#include "flatpak-dir.h" +#include "flatpak-table-printer.h" +#include "flatpak-utils.h" + +/* Appstream data expires after a day */ +#define FLATPAK_APPSTREAM_TTL 86400 + +static GPtrArray * +get_remote_stores (GPtrArray *dirs, GCancellable *cancellable) +{ + GError *error = NULL; + GPtrArray *ret = g_ptr_array_new_with_free_func (g_object_unref); + const char **arches = flatpak_get_arches (); + guint i,j,k; + for (i = 0; i < dirs->len; ++i) + { + FlatpakDir *dir = g_ptr_array_index (dirs, i); + g_autofree char *install_path = NULL; + g_auto(GStrv) remotes = NULL; + + flatpak_log_dir_access (dir); + + install_path = g_file_get_path (flatpak_dir_get_path (dir)); + remotes = flatpak_dir_list_enumerated_remotes (dir, cancellable, &error); + if (error) + { + g_warning ("%s", error->message); + g_clear_error (&error); + continue; + } + else if (remotes == NULL) + continue; + + for (j = 0; remotes[j]; ++j) + { + g_autoptr(AsStore) store = as_store_new (); + +#if AS_CHECK_VERSION(0, 6, 1) + // We want to see multiple versions/branches of same app-id's, e.g. org.gnome.Platform + as_store_set_add_flags (store, as_store_get_add_flags (store) | AS_STORE_ADD_FLAG_USE_UNIQUE_ID); +#endif + + for (k = 0; arches[k]; ++k) + { + g_autofree char *appstream_path = g_build_filename (install_path, "appstream", remotes[j], + arches[k], "active", "appstream.xml.gz", + NULL); + g_autoptr(GFile) appstream_file = g_file_new_for_path (appstream_path); + + as_store_from_file (store, appstream_file, NULL, cancellable, &error); + if (error) + { + // We want to ignore this error as it is harmless and valid + // NOTE: appstream-glib doesn't have granular file-not-found error + if (!g_str_has_suffix (error->message, "No such file or directory")) + g_warning ("%s", error->message); + g_clear_error (&error); + continue; + } + } + + g_object_set_data_full (G_OBJECT(store), "remote-name", g_strdup (remotes[j]), g_free); + g_ptr_array_add (ret, g_steal_pointer (&store)); + } + } + return ret; +} + +static void +clear_app_arches (AsApp *app) +{ + GPtrArray *arches = as_app_get_architectures (app); + g_ptr_array_set_size (arches, 0); +} + +typedef struct MatchResult { + AsApp *app; + GPtrArray *remotes; + guint score; +} MatchResult; + +static void +match_result_free (MatchResult *result) +{ + g_object_unref (result->app); + g_ptr_array_unref (result->remotes); + g_free (result); +} + +static MatchResult * +match_result_new (AsApp *app, guint score) +{ + MatchResult *result = g_new (MatchResult, 1); + result->app = g_object_ref (app); + result->remotes = g_ptr_array_new_with_free_func (g_free); + result->score = score; + + clear_app_arches (result->app); + + return result; +} + +static void +match_result_add_remote (MatchResult *self, const char *remote) +{ + guint i; + for (i = 0; i < self->remotes->len; ++i) + { + const char *remote_entry = g_ptr_array_index (self->remotes, i); + if (!strcmp (remote, remote_entry)) + return; + } + g_ptr_array_add (self->remotes, g_strdup(remote)); +} + +static int +compare_by_score (MatchResult *a, MatchResult *b, gpointer user_data) +{ + // Reverse order, higher score comes first + return (int)b->score - (int)a->score; +} + +#if !AS_CHECK_VERSION(0, 6, 1) +/* Roughly copied directly from appstream-glib */ + +static const gchar * +as_app_fix_unique_nullable (const gchar *tmp) +{ + if (tmp == NULL || tmp[0] == '\0') + return "*"; + return tmp; +} + +static char * +as_app_get_unique_id (AsApp *app) +{ + const gchar *id_str = NULL; + const gchar *kind_str = NULL; + AsAppKind kind = as_app_get_kind (app); + + if (kind != AS_APP_KIND_UNKNOWN) + kind_str = as_app_kind_to_string (kind); + id_str = as_app_get_id_no_prefix (app); + return g_strdup_printf ("%s/%s", + as_app_fix_unique_nullable (kind_str), + as_app_fix_unique_nullable (id_str)); +} + +static gboolean +as_app_equal (AsApp *app1, AsApp *app2) +{ + if (app1 == app2) + return TRUE; + + g_autofree char *app1_id = as_app_get_unique_id (app1); + g_autofree char *app2_id = as_app_get_unique_id (app2); + return strcmp (app1_id, app2_id) == 0; +} +#endif + +static int +compare_apps (MatchResult *a, AsApp *b) +{ + /* For now we want to ignore arch when comparing applications + * It may be valuable to show runtime arches in the future though. + * This is a naughty hack but for our purposes totally fine. + */ + clear_app_arches (b); + + return !as_app_equal (a->app, b); +} + +static const char * +get_comment_localized (AsApp *app) +{ + const char * const * languages = g_get_language_names (); + gsize i; + + for (i = 0; languages[i]; ++i) + { + const char *comment = as_app_get_comment (app, languages[i]); + if (comment != NULL) + return comment; + } + return NULL; +} + +static void +print_app (MatchResult *res, FlatpakTablePrinter *printer) +{ + AsRelease *release = as_app_get_release_default (res->app); + const char *version = release ? as_release_get_version (release) : NULL; + const char *id = as_app_get_id_filename (res->app); + guint i; + + flatpak_table_printer_add_column (printer, id); + flatpak_table_printer_add_column (printer, version); +#if AS_CHECK_VERSION(0, 6, 1) + flatpak_table_printer_add_column (printer, as_app_get_branch (res->app)); +#endif + flatpak_table_printer_add_column (printer, g_ptr_array_index (res->remotes, 0)); + for (i = 1; i < res->remotes->len; ++i) + flatpak_table_printer_append_with_comma (printer, g_ptr_array_index (res->remotes, i)); + flatpak_table_printer_add_column (printer, get_comment_localized (res->app)); + flatpak_table_printer_finish_row (printer); +} + +gboolean +flatpak_builtin_search (int argc, char **argv, GCancellable *cancellable, GError **error) +{ + g_autoptr(GPtrArray) dirs = NULL; + g_autoptr(GOptionContext) context = g_option_context_new (_("TEXT - Search remote apps/runtimes for text")); + g_option_context_set_translation_domain (context, GETTEXT_PACKAGE); + const char **arches = flatpak_get_arches (); + int i; + + if (!flatpak_option_context_parse (context, NULL, &argc, &argv, + FLATPAK_BUILTIN_FLAG_STANDARD_DIRS, &dirs, cancellable, error)) + return FALSE; + + if (argc < 2) + return usage_error (context, _("TEXT must be specified"), error); + + for (i = 0; arches[i] != NULL; i++) + { + if (!update_appstream (dirs, NULL, arches[i], FLATPAK_APPSTREAM_TTL, TRUE, cancellable, error)) + return FALSE; + } + + const char *search_text = argv[1]; + GSList *matches = NULL; + guint j; + + // We want a store for each remote so we keep the remote information + // as AsApp doesn't currently contain that information + g_autoptr(GPtrArray) remote_stores = get_remote_stores (dirs, cancellable); + for (j = 0; j < remote_stores->len; ++j) + { + AsStore *store = g_ptr_array_index (remote_stores, j); + GPtrArray *apps = as_store_get_apps (store); + guint i; + + for (i = 0; i < apps->len; ++i) + { + AsApp *app = g_ptr_array_index (apps, i); + guint score = as_app_search_matches (app, search_text); + if (score == 0) + { + const char *app_id = as_app_get_id_filename (app); + if (strcasestr (app_id, search_text) != NULL) + score = 50; + else + continue; + } + + // Avoid duplicate entries, but show multiple remotes + GSList *list_entry = g_slist_find_custom (matches, app, + (GCompareFunc)compare_apps); + MatchResult *result = NULL; + if (list_entry != NULL) + result = list_entry->data; + else + { + result = match_result_new (app, score); + matches = g_slist_insert_sorted_with_data (matches, result, + (GCompareDataFunc)compare_by_score, NULL); + } + match_result_add_remote (result, + g_object_get_data (G_OBJECT(store), "remote-name")); + } + } + + if (matches != NULL) + { + FlatpakTablePrinter *printer = flatpak_table_printer_new (); + int col = 0; + + flatpak_table_printer_set_column_title (printer, col++, _("Application ID")); + flatpak_table_printer_set_column_title (printer, col++, _("Version")); +#if AS_CHECK_VERSION(0, 6, 1) + flatpak_table_printer_set_column_title (printer, col++, _("Branch")); +#endif + flatpak_table_printer_set_column_title (printer, col++, _("Remotes")); + flatpak_table_printer_set_column_title (printer, col++, _("Description")); + g_slist_foreach (matches, (GFunc)print_app, printer); + flatpak_table_printer_print (printer); + flatpak_table_printer_free (printer); + + g_slist_free_full (matches, (GDestroyNotify)match_result_free); + } + else + { + g_print ("%s\n", _("No matches found")); + } + return TRUE; +} + +gboolean +flatpak_complete_search (FlatpakCompletion *completion) +{ + g_autoptr(GOptionContext) context = NULL; + + context = g_option_context_new (""); + if (!flatpak_option_context_parse (context, NULL, &completion->argc, &completion->argv, + FLATPAK_BUILTIN_FLAG_STANDARD_DIRS, NULL, NULL, NULL)) + return FALSE; + + flatpak_complete_options (completion, global_entries); + flatpak_complete_options (completion, user_entries); + return TRUE; +} diff --git a/app/flatpak-builtins-uninstall.c b/app/flatpak-builtins-uninstall.c index 975064be..40eeb6d8 100644 --- a/app/flatpak-builtins-uninstall.c +++ b/app/flatpak-builtins-uninstall.c @@ -54,7 +54,8 @@ gboolean flatpak_builtin_uninstall (int argc, char **argv, GCancellable *cancellable, GError **error) { g_autoptr(GOptionContext) context = NULL; - g_autoptr(FlatpakDir) dir = NULL; + g_autoptr(GPtrArray) dirs = NULL; + FlatpakDir *dir; char **prefs = NULL; int i, j, n_prefs; const char *default_branch = NULL; @@ -69,9 +70,13 @@ flatpak_builtin_uninstall (int argc, char **argv, GCancellable *cancellable, GEr context = g_option_context_new (_("REF... - Uninstall an application")); g_option_context_set_translation_domain (context, GETTEXT_PACKAGE); - if (!flatpak_option_context_parse (context, options, &argc, &argv, 0, &dir, cancellable, error)) + if (!flatpak_option_context_parse (context, options, &argc, &argv, + FLATPAK_BUILTIN_FLAG_ONE_DIR, + &dirs, cancellable, error)) return FALSE; + dir = g_ptr_array_index (dirs, 0); + if (argc < 2) return usage_error (context, _("Must specify at least one REF"), error); @@ -156,7 +161,7 @@ flatpak_builtin_uninstall (int argc, char **argv, GCancellable *cancellable, GEr { const char *ref = (char *)g_ptr_array_index (uninstall_refs, i); const char *pref = strchr (ref, '/') + 1; - g_print ("Uninstalling %s\n", pref); + g_print (_("Uninstalling: %s\n"), pref); if (!flatpak_dir_uninstall (dir, ref, flags, cancellable, error)) return FALSE; @@ -169,13 +174,17 @@ gboolean flatpak_complete_uninstall (FlatpakCompletion *completion) { g_autoptr(GOptionContext) context = NULL; - g_autoptr(FlatpakDir) dir = NULL; + g_autoptr(GPtrArray) dirs = NULL; + FlatpakDir *dir; FlatpakKinds kinds; context = g_option_context_new (""); - if (!flatpak_option_context_parse (context, options, &completion->argc, &completion->argv, 0, &dir, NULL, NULL)) + if (!flatpak_option_context_parse (context, options, &completion->argc, &completion->argv, + FLATPAK_BUILTIN_FLAG_ONE_DIR, &dirs, NULL, NULL)) return FALSE; + dir = g_ptr_array_index (dirs, 0); + kinds = flatpak_kinds_from_bools (opt_app, opt_runtime); switch (completion->argc) diff --git a/app/flatpak-builtins-update.c b/app/flatpak-builtins-update.c index 9336f771..0f2f6b96 100644 --- a/app/flatpak-builtins-update.c +++ b/app/flatpak-builtins-update.c @@ -66,56 +66,6 @@ static GOptionEntry options[] = { { NULL } }; -static gboolean -update_appstream (FlatpakDir *dir, const char *remote, GCancellable *cancellable, GError **error) -{ - gboolean changed; - gboolean res; - - if (opt_arch == NULL) - opt_arch = (char *)flatpak_get_arch (); - - if (remote == NULL) - { - g_auto(GStrv) remotes = NULL; - int i; - - remotes = flatpak_dir_list_remotes (dir, cancellable, error); - if (remotes == NULL) - return FALSE; - - for (i = 0; remotes[i] != NULL; i++) - { - g_autoptr(GError) local_error = NULL; - FlatpakTerminalProgress terminal_progress = { 0 }; - - if (flatpak_dir_get_remote_disabled (dir, remotes[i])) - continue; - - g_print (_("Updating appstream for remote %s\n"), remotes[i]); - g_autoptr(OstreeAsyncProgress) progress = flatpak_progress_new (flatpak_terminal_progress_cb, &terminal_progress); - if (!flatpak_dir_update_appstream (dir, remotes[i], opt_arch, &changed, - progress, cancellable, &local_error)) - g_printerr (_("Error updating: %s\n"), local_error->message); - ostree_async_progress_finish (progress); - flatpak_terminal_progress_end (&terminal_progress); - } - } - else - { - FlatpakTerminalProgress terminal_progress = { 0 }; - g_autoptr(OstreeAsyncProgress) progress = flatpak_progress_new (flatpak_terminal_progress_cb, &terminal_progress); - res = flatpak_dir_update_appstream (dir, remote, opt_arch, &changed, - progress, cancellable, error); - ostree_async_progress_finish (progress); - if (!res) - return FALSE; - flatpak_terminal_progress_end (&terminal_progress); - } - - return TRUE; -} - gboolean flatpak_builtin_update (int argc, char **argv, @@ -123,21 +73,26 @@ flatpak_builtin_update (int argc, GError **error) { g_autoptr(GOptionContext) context = NULL; - g_autoptr(FlatpakDir) dir = NULL; + g_autoptr(GPtrArray) dirs = NULL; char **prefs = NULL; - int i, j, n_prefs; + int i, j, k, n_prefs; const char *default_branch = NULL; FlatpakKinds kinds; - g_autoptr(FlatpakTransaction) transaction = NULL; + g_autoptr(GPtrArray) transactions = NULL; context = g_option_context_new (_("[REF...] - Update applications or runtimes")); g_option_context_set_translation_domain (context, GETTEXT_PACKAGE); - if (!flatpak_option_context_parse (context, options, &argc, &argv, 0, &dir, cancellable, error)) + if (!flatpak_option_context_parse (context, options, &argc, &argv, + FLATPAK_BUILTIN_FLAG_STANDARD_DIRS, + &dirs, cancellable, error)) return FALSE; + if (opt_arch == NULL) + opt_arch = (char *)flatpak_get_arch (); + if (opt_appstream) - return update_appstream (dir, argc >= 2 ? argv[1] : NULL, cancellable, error); + return update_appstream (dirs, argc >= 2 ? argv[1] : NULL, opt_arch, 0, FALSE, cancellable, error); prefs = &argv[1]; n_prefs = argc - 1; @@ -149,8 +104,16 @@ flatpak_builtin_update (int argc, n_prefs = 1; } - transaction = flatpak_transaction_new (dir, opt_yes, opt_no_pull, opt_no_deploy, - opt_no_static_deltas, !opt_no_deps, !opt_no_related); + transactions = g_ptr_array_new_with_free_func ((GDestroyNotify)flatpak_transaction_free); + + for (k = 0; k < dirs->len; k++) + { + FlatpakTransaction *transaction = flatpak_transaction_new (g_ptr_array_index (dirs, k), + opt_yes, opt_no_pull, opt_no_deploy, + opt_no_static_deltas, !opt_no_deps, !opt_no_related, FALSE); + g_ptr_array_add (transactions, transaction); + } + kinds = flatpak_kinds_from_bools (opt_app, opt_runtime); g_print (_("Looking for updates...\n")); @@ -176,64 +139,70 @@ flatpak_builtin_update (int argc, return FALSE; } - if (kinds & FLATPAK_KINDS_APP) + for (k = 0; k < dirs->len; k++) { - g_auto(GStrv) refs = NULL; + FlatpakDir *dir = g_ptr_array_index (dirs, k); + FlatpakTransaction *transaction = g_ptr_array_index (transactions, k); - if (!flatpak_dir_list_refs (dir, "app", &refs, - cancellable, - error)) - return FALSE; - - for (i = 0; refs != NULL && refs[i] != NULL; i++) + if (kinds & FLATPAK_KINDS_APP) { - g_auto(GStrv) parts = flatpak_decompose_ref (refs[i], error); - if (parts == NULL) + g_auto(GStrv) refs = NULL; + + if (!flatpak_dir_list_refs (dir, "app", &refs, + cancellable, + error)) return FALSE; - if (id != NULL && strcmp (parts[1], id) != 0) - continue; + for (i = 0; refs != NULL && refs[i] != NULL; i++) + { + g_auto(GStrv) parts = flatpak_decompose_ref (refs[i], error); + if (parts == NULL) + return FALSE; - if (arch != NULL && strcmp (parts[2], arch) != 0) - continue; + if (id != NULL && strcmp (parts[1], id) != 0) + continue; - if (branch != NULL && strcmp (parts[3], branch) != 0) - continue; + if (arch != NULL && strcmp (parts[2], arch) != 0) + continue; - found = TRUE; - if (!flatpak_transaction_add_update (transaction, refs[i], (const char **)opt_subpaths, opt_commit, error)) - return FALSE; + if (branch != NULL && strcmp (parts[3], branch) != 0) + continue; + + found = TRUE; + if (!flatpak_transaction_add_update (transaction, refs[i], (const char **)opt_subpaths, opt_commit, error)) + return FALSE; + } } - } - if (kinds & FLATPAK_KINDS_RUNTIME) - { - g_auto(GStrv) refs = NULL; - - if (!flatpak_dir_list_refs (dir, "runtime", &refs, - cancellable, - error)) - return FALSE; - - for (i = 0; refs != NULL && refs[i] != NULL; i++) + if (kinds & FLATPAK_KINDS_RUNTIME) { - g_auto(GStrv) parts = flatpak_decompose_ref (refs[i], error); + g_auto(GStrv) refs = NULL; - if (parts == NULL) + if (!flatpak_dir_list_refs (dir, "runtime", &refs, + cancellable, + error)) return FALSE; - if (id != NULL && strcmp (parts[1], id) != 0) - continue; + for (i = 0; refs != NULL && refs[i] != NULL; i++) + { + g_auto(GStrv) parts = flatpak_decompose_ref (refs[i], error); - if (arch != NULL && strcmp (parts[2], arch) != 0) - continue; + if (parts == NULL) + return FALSE; - if (branch != NULL && strcmp (parts[3], branch) != 0) - continue; + if (id != NULL && strcmp (parts[1], id) != 0) + continue; - found = TRUE; - if (!flatpak_transaction_add_update (transaction, refs[i], (const char **)opt_subpaths, opt_commit, error)) - return FALSE; + if (arch != NULL && strcmp (parts[2], arch) != 0) + continue; + + if (branch != NULL && strcmp (parts[3], branch) != 0) + continue; + + found = TRUE; + if (!flatpak_transaction_add_update (transaction, refs[i], (const char **)opt_subpaths, opt_commit, error)) + return FALSE; + } } } @@ -245,11 +214,22 @@ flatpak_builtin_update (int argc, } } - if (!flatpak_transaction_update_metadata (transaction, n_prefs == 0, cancellable, error)) - return FALSE; + for (k = 0; k < dirs->len; k++) + { + FlatpakTransaction *transaction = g_ptr_array_index (transactions, k); - if (!flatpak_transaction_run (transaction, FALSE, cancellable, error)) - return FALSE; + if (!flatpak_transaction_is_empty (transaction)) + { + if (!flatpak_transaction_update_metadata (transaction, n_prefs == 0, cancellable, error)) + return FALSE; + + if (!flatpak_transaction_run (transaction, FALSE, cancellable, error)) + return FALSE; + } + } + + if (n_prefs == 0) + return update_appstream (dirs, NULL, opt_arch, 0, FALSE, cancellable, error); return TRUE; } @@ -258,13 +238,17 @@ gboolean flatpak_complete_update (FlatpakCompletion *completion) { g_autoptr(GOptionContext) context = NULL; - g_autoptr(FlatpakDir) dir = NULL; + g_autoptr(GPtrArray) dirs = NULL; + FlatpakDir *dir; FlatpakKinds kinds; context = g_option_context_new (""); - if (!flatpak_option_context_parse (context, options, &completion->argc, &completion->argv, 0, &dir, NULL, NULL)) + if (!flatpak_option_context_parse (context, options, &completion->argc, &completion->argv, + FLATPAK_BUILTIN_FLAG_ONE_DIR, &dirs, NULL, NULL)) return FALSE; + dir = g_ptr_array_index (dirs, 0); + kinds = flatpak_kinds_from_bools (opt_app, opt_runtime); switch (completion->argc) diff --git a/app/flatpak-builtins-utils.c b/app/flatpak-builtins-utils.c index 56eeb3ea..5ffa66a8 100644 --- a/app/flatpak-builtins-utils.c +++ b/app/flatpak-builtins-utils.c @@ -326,3 +326,205 @@ flatpak_load_gpg_keys (char **gpg_import, return g_memory_output_stream_steal_as_bytes (G_MEMORY_OUTPUT_STREAM (output_stream)); } + +gboolean +flatpak_resolve_duplicate_remotes (GPtrArray *dirs, + const char *remote_name, + FlatpakDir **out_dir, + GCancellable *cancellable, + GError **error) +{ + g_autoptr(GPtrArray) dirs_with_remote = NULL; + int chosen = 0; + int i; + + dirs_with_remote = g_ptr_array_new (); + for (i = 0; i < dirs->len; i++) + { + FlatpakDir *dir = g_ptr_array_index (dirs, i); + g_auto(GStrv) remotes = NULL; + int j = 0; + + remotes = flatpak_dir_list_remotes (dir, cancellable, error); + if (remotes == NULL) + return FALSE; + + for (j = 0; remotes[j] != NULL; j++) + { + const char *this_remote = remotes[j]; + + if (g_strcmp0 (remote_name, this_remote) == 0) + g_ptr_array_add (dirs_with_remote, dir); + } + } + + if (dirs_with_remote->len == 1) + chosen = 1; + else if (dirs_with_remote->len > 1) + { + g_print (_("Remote ‘%s’ found in multiple installations:\n"), remote_name); + for (i = 0; i < dirs_with_remote->len; i++) + { + FlatpakDir *dir = g_ptr_array_index (dirs_with_remote, i); + g_autofree char *dir_name = flatpak_dir_get_name (dir); + g_print("%d) %s\n", i + 1, dir_name); + } + chosen = flatpak_number_prompt (0, dirs_with_remote->len, _("Which do you want to use (0 to abort)?")); + if (chosen == 0) + return flatpak_fail (error, _("No remote chosen to resolve ‘%s’ which exists in multiple installations"), remote_name); + } + + if (out_dir) + { + if (dirs_with_remote->len == 0) + { + g_set_error (error, G_IO_ERROR, G_IO_ERROR_NOT_FOUND, + "Remote \"%s\" not found", remote_name); + return FALSE; + } + else + *out_dir = g_object_ref (g_ptr_array_index (dirs_with_remote, chosen - 1)); + } + + return TRUE; +} + +/* Returns: the time in seconds since the file was modified, or %G_MAXUINT64 on error */ +static guint64 +get_file_age (GFile *file) +{ + guint64 now; + guint64 mtime; + g_autoptr(GFileInfo) info = NULL; + + info = g_file_query_info (file, + G_FILE_ATTRIBUTE_TIME_MODIFIED, + G_FILE_QUERY_INFO_NONE, + NULL, + NULL); + if (info == NULL) + return G_MAXUINT64; + + mtime = g_file_info_get_attribute_uint64 (info, G_FILE_ATTRIBUTE_TIME_MODIFIED); + now = (guint64) g_get_real_time () / G_USEC_PER_SEC; + if (mtime > now) + return G_MAXUINT64; + + return (guint64) (now - mtime); +} + +static void +no_progress_cb (OstreeAsyncProgress *progress, gpointer user_data) +{ +} + +gboolean +update_appstream (GPtrArray *dirs, + const char *remote, + const char *arch, + guint64 ttl, + gboolean quiet, + GCancellable *cancellable, + GError **error) +{ + gboolean changed; + gboolean res; + int i, j; + + g_return_val_if_fail (dirs != NULL, FALSE); + g_return_val_if_fail (arch != NULL, FALSE); + + if (remote == NULL) + { + g_auto(GStrv) remotes = NULL; + + for (j = 0; j < dirs->len; j++) + { + FlatpakDir *dir = g_ptr_array_index (dirs, j); + + remotes = flatpak_dir_list_remotes (dir, cancellable, error); + if (remotes == NULL) + return FALSE; + + for (i = 0; remotes[i] != NULL; i++) + { + g_autoptr(GError) local_error = NULL; + g_autoptr(OstreeAsyncProgress) progress = NULL; + g_autoptr(GFile) ts_file = NULL; + g_autofree char *ts_file_path = NULL; + g_autofree char *subdir = NULL; + guint64 ts_file_age; + + subdir = g_strdup_printf ("appstream/%s/%s/.timestamp", remotes[i], arch); + ts_file = g_file_resolve_relative_path (flatpak_dir_get_path (dir), subdir); + ts_file_path = g_file_get_path (ts_file); + ts_file_age = get_file_age (ts_file); + if (ts_file_age < ttl) + { + g_debug ("%s age %" G_GUINT64_FORMAT " is less than ttl %" G_GUINT64_FORMAT, ts_file_path, ts_file_age, ttl); + continue; + } + else + g_debug ("%s age %" G_GUINT64_FORMAT " is greater than ttl %" G_GUINT64_FORMAT, ts_file_path, ts_file_age, ttl); + + + if (flatpak_dir_get_remote_disabled (dir, remotes[i]) || + flatpak_dir_get_remote_noenumerate (dir, remotes[i]) || + !flatpak_dir_check_for_appstream_update (dir, remotes[i], arch)) + continue; + + if (flatpak_dir_is_user (dir)) + { + if (quiet) + g_debug (_("Updating appstream data for user remote %s\n"), remotes[i]); + else + g_print (_("Updating appstream data for user remote %s\n"), remotes[i]); + } + else + { + if (quiet) + g_debug (_("Updating appstream data for remote %s\n"), remotes[i]); + else + g_print (_("Updating appstream data for remote %s\n"), remotes[i]); + } + progress = ostree_async_progress_new_and_connect (no_progress_cb, NULL); + if (!flatpak_dir_update_appstream (dir, remotes[i], arch, &changed, + progress, cancellable, &local_error)) + g_printerr (_("Error updating: %s\n"), local_error->message); + ostree_async_progress_finish (progress); + } + } + } + else + { + gboolean found = FALSE; + + for (j = 0; j < dirs->len; j++) + { + FlatpakDir *dir = g_ptr_array_index (dirs, j); + + if (flatpak_dir_has_remote (dir, remote)) + { + g_autoptr(OstreeAsyncProgress) progress = NULL; + + found = TRUE; + + /* Early bail out check */ + if (!flatpak_dir_check_for_appstream_update (dir, remote, arch)) + continue; + + progress = ostree_async_progress_new_and_connect (no_progress_cb, NULL); + res = flatpak_dir_update_appstream (dir, remote, arch, &changed, + progress, cancellable, error); + ostree_async_progress_finish (progress); + if (!res) + return FALSE; + } + } + + if (!found) + return flatpak_fail (error, _("Remote \"%s\" not found"), remote); + } + + return TRUE; +} diff --git a/app/flatpak-builtins-utils.h b/app/flatpak-builtins-utils.h index 6d66c931..df5f65f5 100644 --- a/app/flatpak-builtins-utils.h +++ b/app/flatpak-builtins-utils.h @@ -46,4 +46,18 @@ FlatpakDir * flatpak_find_installed_pref (const char *pref, GCancellable *cancellable, GError **error); +gboolean flatpak_resolve_duplicate_remotes (GPtrArray *dirs, + const char *remote_name, + FlatpakDir **out_dir, + GCancellable *cancellable, + GError **error); + +gboolean update_appstream (GPtrArray *dirs, + const char *remote, + const char *arch, + guint64 ttl, + gboolean quiet, + GCancellable *cancellable, + GError **error); + #endif /* __FLATPAK_BUILTINS_UTILS_H__ */ diff --git a/app/flatpak-builtins.h b/app/flatpak-builtins.h index 2970140b..17c4cede 100644 --- a/app/flatpak-builtins.h +++ b/app/flatpak-builtins.h @@ -31,7 +31,10 @@ G_BEGIN_DECLS typedef enum { FLATPAK_BUILTIN_FLAG_NO_DIR = 1 << 0, - FLATPAK_BUILTIN_FLAG_NO_REPO = 1 << 1, + FLATPAK_BUILTIN_FLAG_OPTIONAL_REPO = 1 << 1, + FLATPAK_BUILTIN_FLAG_ONE_DIR = 1 << 2, + FLATPAK_BUILTIN_FLAG_STANDARD_DIRS = 1 << 3, + FLATPAK_BUILTIN_FLAG_ALL_DIRS = 1 << 4, } FlatpakBuiltinFlags; gboolean flatpak_option_context_parse (GOptionContext *context, @@ -39,7 +42,7 @@ gboolean flatpak_option_context_parse (GOptionContext *context, int *argc, char ***argv, FlatpakBuiltinFlags flags, - FlatpakDir **out_dir, + GPtrArray **out_dirs, GCancellable *cancellable, GError **error); @@ -59,6 +62,7 @@ BUILTINPROTO (add_remote) BUILTINPROTO (modify_remote) BUILTINPROTO (delete_remote) BUILTINPROTO (ls_remote) +BUILTINPROTO (info_remote) BUILTINPROTO (list_remotes) BUILTINPROTO (install) BUILTINPROTO (update) @@ -85,6 +89,7 @@ BUILTINPROTO (document_list) BUILTINPROTO (override) BUILTINPROTO (repo) BUILTINPROTO (config) +BUILTINPROTO (search) #undef BUILTINPROTO diff --git a/app/flatpak-main.c b/app/flatpak-main.c index a4756932..3a70fa2c 100644 --- a/app/flatpak-main.c +++ b/app/flatpak-main.c @@ -40,7 +40,8 @@ static gboolean opt_default_arch; static gboolean opt_supported_arches; static gboolean opt_gl_drivers; static gboolean opt_user; -static char *opt_installation; +static gboolean opt_system; +static char **opt_installations; static gboolean is_in_complete; @@ -66,6 +67,10 @@ static FlatpakCommand commands[] = { { "info", N_("Show info for installed app or runtime"), flatpak_builtin_info, flatpak_complete_info }, { "config", N_("Configure flatpak"), flatpak_builtin_config, flatpak_complete_config }, + /* translators: please keep the leading newline and space */ + { N_("\n Finding applications and runtimes") }, + { "search", N_("Search for remote apps/runtimes"), flatpak_builtin_search, flatpak_complete_search }, + /* translators: please keep the leading newline and space */ { N_("\n Running applications") }, { "run", N_("Run an application"), flatpak_builtin_run, flatpak_complete_run }, @@ -88,6 +93,7 @@ static FlatpakCommand commands[] = { { "remote-delete", N_("Delete a configured remote"), flatpak_builtin_delete_remote, flatpak_complete_delete_remote }, { "remote-list", NULL, flatpak_builtin_list_remotes, flatpak_complete_list_remotes, TRUE }, { "remote-ls", N_("List contents of a configured remote"), flatpak_builtin_ls_remote, flatpak_complete_ls_remote }, + { "remote-info", N_("Show information about a remote app or runtime"), flatpak_builtin_info_remote, flatpak_complete_info_remote }, /* translators: please keep the leading newline and space */ { N_("\n Build applications") }, @@ -95,7 +101,7 @@ static FlatpakCommand commands[] = { { "build", N_("Run a build command inside the build dir"), flatpak_builtin_build, flatpak_complete_build }, { "build-finish", N_("Finish a build dir for export"), flatpak_builtin_build_finish, flatpak_complete_build_finish }, { "build-export", N_("Export a build dir to a repository"), flatpak_builtin_build_export, flatpak_complete_build_export }, - { "build-bundle", N_("Create a bundle file from a build directory"), flatpak_builtin_build_bundle, flatpak_complete_build_bundle }, + { "build-bundle", N_("Create a bundle file from a ref in a local repository"), flatpak_builtin_build_bundle, flatpak_complete_build_bundle }, { "build-import-bundle", N_("Import a bundle file"), flatpak_builtin_build_import, flatpak_complete_build_import }, { "build-sign", N_("Sign an application or runtime"), flatpak_builtin_build_sign, flatpak_complete_build_sign }, { "build-update-repo", N_("Update the summary file in a repository"), flatpak_builtin_build_update_repo, flatpak_complete_build_update_repo }, @@ -133,8 +139,8 @@ static GOptionEntry empty_entries[] = { GOptionEntry user_entries[] = { { "user", 0, 0, G_OPTION_ARG_NONE, &opt_user, N_("Work on user installations"), NULL }, - { "system", 0, G_OPTION_FLAG_REVERSE, G_OPTION_ARG_NONE, &opt_user, N_("Work on system-wide installations (default)"), NULL }, - { "installation", 0, 0, G_OPTION_ARG_STRING, &opt_installation, N_("Work on a specific system-wide installation"), N_("NAME") }, + { "system", 0, 0, G_OPTION_ARG_NONE, &opt_system, N_("Work on system-wide installations (default)"), NULL }, + { "installation", 0, 0, G_OPTION_ARG_STRING_ARRAY, &opt_installations, N_("Work on specific system-wide installation(s)"), N_("NAME") }, { NULL } }; @@ -146,7 +152,7 @@ message_handler (const gchar *log_domain, { /* Make this look like normal console output */ if (log_level & G_LOG_LEVEL_DEBUG) - g_printerr ("XA: %s\n", message); + g_printerr ("F: %s\n", message); else g_printerr ("%s: %s\n", g_get_prgname (), message); } @@ -216,11 +222,32 @@ flatpak_option_context_parse (GOptionContext *context, int *argc, char ***argv, FlatpakBuiltinFlags flags, - FlatpakDir **out_dir, + GPtrArray **out_dirs, GCancellable *cancellable, GError **error) { - g_autoptr(FlatpakDir) dir = NULL; + g_autoptr(GPtrArray) dirs = NULL; + + if (!(flags & FLATPAK_BUILTIN_FLAG_NO_DIR) && + !(flags & FLATPAK_BUILTIN_FLAG_ONE_DIR) && + !(flags & FLATPAK_BUILTIN_FLAG_STANDARD_DIRS) && + !(flags & FLATPAK_BUILTIN_FLAG_ALL_DIRS)) + g_assert_not_reached (); + + if (flags & FLATPAK_BUILTIN_FLAG_NO_DIR && + (flags & FLATPAK_BUILTIN_FLAG_ONE_DIR || + flags & FLATPAK_BUILTIN_FLAG_STANDARD_DIRS || + flags & FLATPAK_BUILTIN_FLAG_ALL_DIRS)) + g_assert_not_reached (); + + if (flags & FLATPAK_BUILTIN_FLAG_ONE_DIR && + (flags & FLATPAK_BUILTIN_FLAG_STANDARD_DIRS || + flags & FLATPAK_BUILTIN_FLAG_ALL_DIRS)) + g_assert_not_reached (); + + if (flags & FLATPAK_BUILTIN_FLAG_STANDARD_DIRS && + flags & FLATPAK_BUILTIN_FLAG_ALL_DIRS) + g_assert_not_reached (); if (!(flags & FLATPAK_BUILTIN_FLAG_NO_DIR)) g_option_context_add_main_entries (context, user_entries, NULL); @@ -277,29 +304,102 @@ flatpak_option_context_parse (GOptionContext *context, if (!(flags & FLATPAK_BUILTIN_FLAG_NO_DIR)) { - if (opt_user) - dir = flatpak_dir_get_user (); - else if (opt_installation == NULL) - dir = flatpak_dir_get_system_default (); - else + dirs = g_ptr_array_new_with_free_func ((GDestroyNotify) g_object_unref); + int i; + + if (!(flags & FLATPAK_BUILTIN_FLAG_ONE_DIR)) { - dir = flatpak_dir_get_system_by_id (opt_installation, cancellable, error); - if (dir == NULL) - return FALSE; + /* + * FLATPAK_BUILTIN_FLAG_STANDARD_DIRS or FLATPAK_BUILTIN_FLAG_ALL_DIRS + * must be set. + */ + if (opt_user || (!opt_system && opt_installations == NULL)) + g_ptr_array_add (dirs, flatpak_dir_get_user ()); + + if (opt_system || (!opt_user && opt_installations == NULL)) + g_ptr_array_add (dirs, flatpak_dir_get_system_default ()); + + if (opt_installations != NULL) + { + for (i = 0; opt_installations[i] != NULL; i++) + { + FlatpakDir *installation_dir = NULL; + + /* Already included the default system installation */ + if (opt_system && g_strcmp0 (opt_installations[i], "default") == 0) + continue; + + installation_dir = flatpak_dir_get_system_by_id (opt_installations[i], cancellable, error); + if (installation_dir == NULL) + return FALSE; + + g_ptr_array_add (dirs, installation_dir); + } + } + + if (flags & FLATPAK_BUILTIN_FLAG_ALL_DIRS && + opt_installations == NULL && !opt_user && !opt_system) + { + g_autoptr(GPtrArray) system_dirs = NULL; + + g_ptr_array_set_size (dirs, 0); + g_ptr_array_add (dirs, flatpak_dir_get_user ()); + + system_dirs = flatpak_dir_get_system_list (cancellable, error); + if (system_dirs == NULL) + return FALSE; + + for (i = 0; i < system_dirs->len; i++) + { + FlatpakDir *dir = g_ptr_array_index (system_dirs, i); + g_ptr_array_add (dirs, g_object_ref (dir)); + } + } + } + else /* FLATPAK_BUILTIN_FLAG_ONE_DIR */ + { + FlatpakDir *dir; + + if (opt_system || (!opt_user && opt_installations == NULL)) + dir = flatpak_dir_get_system_default (); + else if (opt_user) + dir = flatpak_dir_get_user (); + else if (opt_installations != NULL) + { + if (g_strv_length (opt_installations) > 1) + return usage_error (context, _("The --installation option was used multiple times " + "for a command that works on one installation"), error); + dir = flatpak_dir_get_system_by_id (opt_installations[0], cancellable, error); + if (dir == NULL) + return FALSE; + } + else + g_assert_not_reached (); + + g_ptr_array_add (dirs, dir); } - if (!flatpak_dir_ensure_path (dir, cancellable, error)) - return FALSE; + for (i = 0; i < dirs->len; i++) + { + FlatpakDir *dir = g_ptr_array_index (dirs, i); - if (!(flags & FLATPAK_BUILTIN_FLAG_NO_REPO) && - !flatpak_dir_ensure_repo (dir, cancellable, error)) - return FALSE; + if (flags & FLATPAK_BUILTIN_FLAG_OPTIONAL_REPO) + { + if (!flatpak_dir_maybe_ensure_repo (dir, cancellable, error)) + return FALSE; + } + else + { + if (!flatpak_dir_ensure_repo (dir, cancellable, error)) + return FALSE; + } - flatpak_log_dir_access (dir); + flatpak_log_dir_access (dir); + } } - if (out_dir) - *out_dir = g_steal_pointer (&dir); + if (out_dirs) + *out_dirs = g_steal_pointer (&dirs); return TRUE; } diff --git a/app/flatpak-transaction.c b/app/flatpak-transaction.c index 4df48d65..8b62f6fa 100644 --- a/app/flatpak-transaction.c +++ b/app/flatpak-transaction.c @@ -53,6 +53,7 @@ struct FlatpakTransaction { GHashTable *refs; GPtrArray *system_dirs; GList *ops; + GPtrArray *added_origin_remotes; gboolean no_interaction; gboolean no_pull; @@ -60,8 +61,15 @@ struct FlatpakTransaction { gboolean no_static_deltas; gboolean add_deps; gboolean add_related; + gboolean reinstall; }; +static gboolean +remote_name_is_file (const char *remote_name) +{ + return remote_name != NULL && + g_str_has_prefix (remote_name, "file://"); +} /* Check if the ref is in the dir, or in the system dir, in case its a * user-dir or another system-wide installation. We want to avoid depending @@ -157,6 +165,12 @@ flatpak_transaction_operation_free (FlatpakTransactionOp *self) g_free (self); } +gboolean +flatpak_transaction_is_empty (FlatpakTransaction *self) +{ + return self->ops == NULL; +} + FlatpakTransaction * flatpak_transaction_new (FlatpakDir *dir, gboolean no_interaction, @@ -164,12 +178,14 @@ flatpak_transaction_new (FlatpakDir *dir, gboolean no_deploy, gboolean no_static_deltas, gboolean add_deps, - gboolean add_related) + gboolean add_related, + gboolean reinstall) { FlatpakTransaction *t = g_new0 (FlatpakTransaction, 1); t->dir = g_object_ref (dir); t->refs = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL); + t->added_origin_remotes = g_ptr_array_new_with_free_func (g_free); t->no_interaction = no_interaction; t->no_pull = no_pull; @@ -177,6 +193,7 @@ flatpak_transaction_new (FlatpakDir *dir, t->no_static_deltas = no_static_deltas; t->add_deps = add_deps; t->add_related = add_related; + t->reinstall = reinstall; return t; } @@ -187,6 +204,8 @@ flatpak_transaction_free (FlatpakTransaction *self) g_list_free_full (self->ops, (GDestroyNotify)flatpak_transaction_operation_free); g_object_unref (self->dir); + g_ptr_array_unref (self->added_origin_remotes); + if (self->system_dirs != NULL) g_ptr_array_free (self->system_dirs, TRUE); @@ -454,6 +473,28 @@ flatpak_transaction_add_ref (FlatpakTransaction *self, g_autofree char *remote_metadata = NULL; g_autoptr(GKeyFile) metakey = NULL; g_autoptr(GError) local_error = NULL; + g_autofree char *origin_remote = NULL; + + if (remote_name_is_file (remote)) + { + g_auto(GStrv) parts = NULL; + parts = g_strsplit (ref, "/", -1); + + origin_remote = flatpak_dir_create_origin_remote (self->dir, + remote, /* uri */ + parts[1], + "Local repo", + ref, + NULL, + NULL, + NULL, error); + if (origin_remote == NULL) + return FALSE; + + g_ptr_array_add (self->added_origin_remotes, g_strdup (origin_remote)); + + remote = origin_remote; + } pref = strchr (ref, '/') + 1; @@ -476,10 +517,20 @@ flatpak_transaction_add_ref (FlatpakTransaction *self, else if (kind == FLATPAK_TRANSACTION_OP_KIND_INSTALL) { g_assert (remote != NULL); - if (dir_ref_is_installed (self->dir, ref, NULL, NULL)) + if (!self->reinstall && + dir_ref_is_installed (self->dir, ref, &origin, NULL)) { - g_printerr (_("%s already installed, skipping\n"), pref); - return TRUE; + if (strcmp (remote, origin) == 0) + { + g_printerr (_("%s already installed, skipping\n"), pref); + return TRUE; + } + else + { + g_set_error (error, FLATPAK_ERROR, FLATPAK_ERROR_ALREADY_INSTALLED, + _("%s is already installed from other remote (%s)"), pref, origin); + return FALSE; + } } } @@ -652,6 +703,7 @@ flatpak_transaction_run (FlatpakTransaction *self, { GList *l; gboolean succeeded = TRUE; + int i; self->ops = g_list_reverse (self->ops); @@ -659,7 +711,7 @@ flatpak_transaction_run (FlatpakTransaction *self, { FlatpakTransactionOp *op = l->data; g_autoptr(GError) local_error = NULL; - gboolean res; + gboolean res = TRUE; const char *pref; const char *opname; FlatpakTransactionOpKind kind; @@ -690,11 +742,15 @@ flatpak_transaction_run (FlatpakTransaction *self, { g_autoptr(OstreeAsyncProgress) progress = flatpak_progress_new (flatpak_terminal_progress_cb, &terminal_progress); opname = _("install"); - g_print (_("Installing: %s from %s\n"), pref, op->remote); - res = flatpak_dir_install (self->dir, + if (flatpak_dir_is_user (self->dir)) + g_print (_("Installing for user: %s from %s\n"), pref, op->remote); + else + g_print (_("Installing: %s from %s\n"), pref, op->remote); + res = flatpak_dir_install (self->dir , self->no_pull, self->no_deploy, self->no_static_deltas, + self->reinstall, op->ref, op->remote, (const char **)op->subpaths, progress, @@ -714,7 +770,10 @@ flatpak_transaction_run (FlatpakTransaction *self, cancellable, &local_error); if (target_commit != NULL) { - g_print (_("Updating: %s from %s\n"), pref, op->remote); + if (flatpak_dir_is_user (self->dir)) + g_print (_("Updating for user: %s from %s\n"), pref, op->remote); + else + g_print (_("Updating: %s from %s\n"), pref, op->remote); g_autoptr(OstreeAsyncProgress) progress = flatpak_progress_new (flatpak_terminal_progress_cb, &terminal_progress); res = flatpak_dir_update (self->dir, self->no_pull, @@ -759,7 +818,10 @@ flatpak_transaction_run (FlatpakTransaction *self, { g_autofree char *bundle_basename = g_file_get_basename (op->bundle); opname = _("install bundle"); - g_print (_("Installing: %s from bundle %s\n"), pref, bundle_basename); + if (flatpak_dir_is_user (self->dir)) + g_print (_("Installing for user: %s from bundle %s\n"), pref, bundle_basename); + else + g_print (_("Installing: %s from bundle %s\n"), pref, bundle_basename); res = flatpak_dir_install_bundle (self->dir, op->bundle, op->remote, NULL, cancellable, &local_error); @@ -786,11 +848,17 @@ flatpak_transaction_run (FlatpakTransaction *self, } else { + succeeded = FALSE; g_propagate_error (error, g_steal_pointer (&local_error)); - return FALSE; + goto out; } } } + out: + + for (i = 0; i < self->added_origin_remotes->len; i++) + flatpak_dir_prune_origin_remote (self->dir, g_ptr_array_index (self->added_origin_remotes, i)); + return succeeded; } diff --git a/app/flatpak-transaction.h b/app/flatpak-transaction.h index 8588f23a..4e51572f 100644 --- a/app/flatpak-transaction.h +++ b/app/flatpak-transaction.h @@ -34,7 +34,8 @@ FlatpakTransaction *flatpak_transaction_new (FlatpakDir *dir, gboolean no_deploy, gboolean no_static_deltas, gboolean add_deps, - gboolean add_related); + gboolean add_related, + gboolean reinstall); void flatpak_transaction_free (FlatpakTransaction *self); gboolean flatpak_transaction_update_metadata (FlatpakTransaction *self, gboolean all_remotes, @@ -58,6 +59,7 @@ gboolean flatpak_transaction_add_update (FlatpakTransaction *self, const char **subpaths, const char *commit, GError **error); +gboolean flatpak_transaction_is_empty (FlatpakTransaction *self); G_DEFINE_AUTOPTR_CLEANUP_FUNC (FlatpakTransaction, flatpak_transaction_free) diff --git a/ci/build.sh b/ci/build.sh index c18e8e5b..2c0781dc 100755 --- a/ci/build.sh +++ b/ci/build.sh @@ -8,7 +8,7 @@ dn=$(dirname $0) pkg_install sudo which attr fuse \ libubsan libasan libtsan \ - elfutils git gettext-devel \ + elfutils git gettext-devel libappstream-glib-devel \ /usr/bin/{update-mime-database,update-desktop-database,gtk-update-icon-cache} pkg_install_testing ostree-devel ostree pkg_install_if_os fedora gjs parallel clang diff --git a/common/Makefile.am.inc b/common/Makefile.am.inc index 8e9b9162..74db3b47 100644 --- a/common/Makefile.am.inc +++ b/common/Makefile.am.inc @@ -1,6 +1,6 @@ noinst_LTLIBRARIES += libflatpak-common.la -dbus_built_sources = common/flatpak-dbus.c common/flatpak-dbus.h +dbus_built_sources = common/flatpak-dbus.c common/flatpak-dbus.h common/flatpak-document-dbus.c common/flatpak-document-dbus.h systemd_dbus_built_sources = common/flatpak-systemd-dbus.c common/flatpak-systemd-dbus.h common/flatpak-dbus.c: data/org.freedesktop.Flatpak.xml Makefile @@ -9,7 +9,16 @@ common/flatpak-dbus.c: data/org.freedesktop.Flatpak.xml Makefile --interface-prefix org.freedesktop.Flatpak. \ --c-namespace Flatpak \ --generate-c-code $(builddir)/common/flatpak-dbus \ - $(srcdir)/data/org.freedesktop.Flatpak.xml \ + $(srcdir)/data/org.freedesktop.Flatpak.xml \ + $(NULL) + +common/flatpak-document-dbus.c: data/org.freedesktop.portal.Documents.xml Makefile + mkdir -p $(builddir)/common + $(AM_V_GEN) $(GDBUS_CODEGEN) \ + --interface-prefix org.freedesktop.portal. \ + --c-namespace XdpDbus \ + --generate-c-code $(builddir)/common/flatpak-document-dbus \ + $(srcdir)/data/org.freedesktop.portal.Documents.xml \ $(NULL) common/flatpak-systemd-dbus.c: data/org.freedesktop.systemd1.xml Makefile @@ -35,10 +44,16 @@ CLEANFILES += $(nodist_libflatpak_common_la_SOURCES) libflatpak_common_la_SOURCES = \ common/flatpak-common-types.h \ + common/flatpak-bwrap.c \ + common/flatpak-bwrap.h \ common/flatpak-dir.c \ common/flatpak-dir.h \ common/flatpak-run.c \ common/flatpak-run.h \ + common/flatpak-context.c \ + common/flatpak-context.h \ + common/flatpak-exports.c \ + common/flatpak-exports.h \ common/flatpak-portal-error.c \ common/flatpak-portal-error.h \ common/flatpak-utils.c \ @@ -47,13 +62,6 @@ libflatpak_common_la_SOURCES = \ common/flatpak-table-printer.h \ common/flatpak-chain-input-stream.c \ common/flatpak-chain-input-stream.h \ - common/gvdb/gvdb-reader.h \ - common/gvdb/gvdb-format.h \ - common/gvdb/gvdb-reader.c \ - common/gvdb/gvdb-builder.h \ - common/gvdb/gvdb-builder.c \ - common/flatpak-db.c \ - common/flatpak-db.h \ common/flatpak-json.c \ common/flatpak-json.h \ common/flatpak-json-oci.c \ diff --git a/common/flatpak-bwrap.c b/common/flatpak-bwrap.c new file mode 100644 index 00000000..bb82df99 --- /dev/null +++ b/common/flatpak-bwrap.c @@ -0,0 +1,187 @@ +/* + * Copyright © 2014-2018 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: + * Alexander Larsson + */ + +#include "config.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include +#include "libglnx/libglnx.h" + +#include "flatpak-bwrap.h" +#include "flatpak-utils.h" + +static void +clear_fd (gpointer data) +{ + int *fd_p = data; + if (fd_p != NULL && *fd_p != -1) + close (*fd_p); +} + +FlatpakBwrap * +flatpak_bwrap_new (char **env) +{ + FlatpakBwrap *bwrap = g_new0 (FlatpakBwrap, 1); + + bwrap->argv = g_ptr_array_new_with_free_func (g_free); + bwrap->fds = g_array_new (FALSE, TRUE, sizeof (int)); + g_array_set_clear_func (bwrap->fds, clear_fd); + + if (env) + bwrap->envp = g_strdupv (env); + else + bwrap->envp = g_get_environ (); + + return bwrap; +} + +void +flatpak_bwrap_free (FlatpakBwrap *bwrap) +{ + g_ptr_array_unref (bwrap->argv); + g_array_unref (bwrap->fds); + g_strfreev (bwrap->envp); + g_free (bwrap); +} + +void +flatpak_bwrap_set_env (FlatpakBwrap *bwrap, + const char *variable, + const char *value, + gboolean overwrite) +{ + bwrap->envp = g_environ_setenv (bwrap->envp, variable, value, overwrite); +} + +void +flatpak_bwrap_unset_env (FlatpakBwrap *bwrap, + const char *variable) +{ + bwrap->envp = g_environ_unsetenv (bwrap->envp, variable); +} + +void +flatpak_bwrap_add_args (FlatpakBwrap *bwrap, ...) +{ + va_list args; + const gchar *arg; + + va_start (args, bwrap); + while ((arg = va_arg (args, const gchar *))) + g_ptr_array_add (bwrap->argv, g_strdup (arg)); + va_end (args); +} + +void +flatpak_bwrap_append_argsv (FlatpakBwrap *bwrap, + char **args, + int len) +{ + int i; + + if (len < 0) + len = g_strv_length (args); + + for (i = 0; i < len; i++) + g_ptr_array_add (bwrap->argv, g_strdup (args[i])); +} + +void +flatpak_bwrap_append_args (FlatpakBwrap *bwrap, + GPtrArray *other_array) +{ + flatpak_bwrap_append_argsv (bwrap, + (char **)other_array->pdata, + other_array->len); +} + +void +flatpak_bwrap_add_args_data_fd (FlatpakBwrap *bwrap, + const char *op, + int fd, + const char *path_optional) +{ + g_autofree char *fd_str = g_strdup_printf ("%d", fd); + + g_array_append_val (bwrap->fds, fd); + flatpak_bwrap_add_args (bwrap, + op, fd_str, path_optional, + NULL); +} + + +/* Given a buffer @content of size @content_size, generate a fd (memfd if available) + * of the data. The @name parameter is used by memfd_create() as a debugging aid; + * it has no semantic meaning. The bwrap command line will inject it into the target + * container as @path. + */ +gboolean +flatpak_bwrap_add_args_data (FlatpakBwrap *bwrap, + const char *name, + const char *content, + gssize content_size, + const char *path, + GError **error) +{ + g_auto(GLnxTmpfile) args_tmpf = { 0, }; + + if (!flatpak_buffer_to_sealed_memfd_or_tmpfile (&args_tmpf, name, content, content_size, error)) + return FALSE; + + flatpak_bwrap_add_args_data_fd (bwrap, "--bind-data", glnx_steal_fd (&args_tmpf.fd), path); + return TRUE; +} + +/* This resolves the target here rather than in bwrap, because it may + * not resolve in bwrap setup due to absolute symlinks conflicting + * with /newroot root. For example, dest could be inside + * ~/.var/app/XXX where XXX is an absolute symlink. However, in the + * usecases here the destination file often doesn't exist, so we + * only resolve the directory part. + */ +void +flatpak_bwrap_add_bind_arg (FlatpakBwrap *bwrap, + const char *type, + const char *src, + const char *dest) +{ + g_autofree char *dest_dirname = g_path_get_dirname (dest); + g_autofree char *dest_dirname_real = realpath (dest_dirname, NULL); + + if (dest_dirname_real) + { + g_autofree char *dest_basename = g_path_get_basename (dest); + g_autofree char *dest_real = g_build_filename (dest_dirname_real, dest_basename, NULL); + flatpak_bwrap_add_args (bwrap, type, src, dest_real, NULL); + } +} diff --git a/common/flatpak-bwrap.h b/common/flatpak-bwrap.h new file mode 100644 index 00000000..aa340946 --- /dev/null +++ b/common/flatpak-bwrap.h @@ -0,0 +1,63 @@ +/* + * Copyright © 2014-2018 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: + * Alexander Larsson + */ + +#ifndef __FLATPAK_BWRAP_H__ +#define __FLATPAK_BWRAP_H__ + +typedef struct { + GPtrArray *argv; + GArray *fds; + GStrv envp; +} FlatpakBwrap; + +FlatpakBwrap *flatpak_bwrap_new (char **env); +void flatpak_bwrap_free (FlatpakBwrap *bwrap); +void flatpak_bwrap_set_env (FlatpakBwrap *bwrap, + const char *variable, + const char *value, + gboolean overwrite); +void flatpak_bwrap_unset_env (FlatpakBwrap *bwrap, + const char *variable); +void flatpak_bwrap_add_args (FlatpakBwrap *bwrap, + ...); +void flatpak_bwrap_append_argsv (FlatpakBwrap *bwrap, + char **args, + int len); +void flatpak_bwrap_append_args (FlatpakBwrap *bwrap, + GPtrArray *other_array); +void flatpak_bwrap_add_args_data_fd (FlatpakBwrap *bwrap, + const char *op, + int fd, + const char *path_optional); +gboolean flatpak_bwrap_add_args_data (FlatpakBwrap *bwrap, + const char *name, + const char *content, + gssize content_size, + const char *path, + GError **error); +void flatpak_bwrap_add_bind_arg (FlatpakBwrap *bwrap, + const char *type, + const char *src, + const char *dest); + +G_DEFINE_AUTOPTR_CLEANUP_FUNC (FlatpakBwrap, flatpak_bwrap_free) + + +#endif /* __FLATPAK_BWRAP_H__ */ diff --git a/common/flatpak-common-types.h b/common/flatpak-common-types.h index 22657850..f6ce9e16 100644 --- a/common/flatpak-common-types.h +++ b/common/flatpak-common-types.h @@ -28,7 +28,6 @@ typedef enum { typedef struct FlatpakDir FlatpakDir; typedef struct FlatpakDeploy FlatpakDeploy; -typedef struct FlatpakContext FlatpakContext; typedef struct FlatpakOciRegistry FlatpakOciRegistry; typedef struct _FlatpakOciManifest FlatpakOciManifest; diff --git a/common/flatpak-context.c b/common/flatpak-context.c new file mode 100644 index 00000000..13b5c898 --- /dev/null +++ b/common/flatpak-context.c @@ -0,0 +1,2007 @@ +/* + * Copyright © 2014-2018 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: + * Alexander Larsson + */ + +#include "config.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include +#include "libglnx/libglnx.h" + +#include "flatpak-run.h" +#include "flatpak-proxy.h" +#include "flatpak-utils.h" +#include "flatpak-dir.h" +#include "flatpak-systemd-dbus.h" +#include "lib/flatpak-error.h" + +/* Same order as enum */ +const char *flatpak_context_shares[] = { + "network", + "ipc", + NULL +}; + +/* Same order as enum */ +const char *flatpak_context_sockets[] = { + "x11", + "wayland", + "pulseaudio", + "session-bus", + "system-bus", + "fallback-x11", + NULL +}; + +const char *flatpak_context_devices[] = { + "dri", + "all", + "kvm", + NULL +}; + +const char *flatpak_context_features[] = { + "devel", + "multiarch", + NULL +}; + +FlatpakContext * +flatpak_context_new (void) +{ + FlatpakContext *context; + + context = g_slice_new0 (FlatpakContext); + context->env_vars = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free); + context->persistent = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL); + context->filesystems = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL); + context->session_bus_policy = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL); + context->system_bus_policy = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL); + context->generic_policy = g_hash_table_new_full (g_str_hash, g_str_equal, + g_free, (GDestroyNotify)g_strfreev); + + return context; +} + +void +flatpak_context_free (FlatpakContext *context) +{ + g_hash_table_destroy (context->env_vars); + g_hash_table_destroy (context->persistent); + g_hash_table_destroy (context->filesystems); + g_hash_table_destroy (context->session_bus_policy); + g_hash_table_destroy (context->system_bus_policy); + g_hash_table_destroy (context->generic_policy); + g_slice_free (FlatpakContext, context); +} + +static guint32 +flatpak_context_bitmask_from_string (const char *name, const char **names) +{ + guint32 i; + + for (i = 0; names[i] != NULL; i++) + { + if (strcmp (names[i], name) == 0) + return 1 << i; + } + + return 0; +} + +static char ** +flatpak_context_bitmask_to_string (guint32 enabled, guint32 valid, const char **names) +{ + guint32 i; + GPtrArray *array; + + array = g_ptr_array_new (); + + for (i = 0; names[i] != NULL; i++) + { + guint32 bitmask = 1 << i; + if (valid & bitmask) + { + if (enabled & bitmask) + g_ptr_array_add (array, g_strdup (names[i])); + else + g_ptr_array_add (array, g_strdup_printf ("!%s", names[i])); + } + } + + g_ptr_array_add (array, NULL); + return (char **) g_ptr_array_free (array, FALSE); +} + +static void +flatpak_context_bitmask_to_args (guint32 enabled, guint32 valid, const char **names, + const char *enable_arg, const char *disable_arg, + GPtrArray *args) +{ + guint32 i; + + for (i = 0; names[i] != NULL; i++) + { + guint32 bitmask = 1 << i; + if (valid & bitmask) + { + if (enabled & bitmask) + g_ptr_array_add (args, g_strdup_printf ("%s=%s", enable_arg, names[i])); + else + g_ptr_array_add (args, g_strdup_printf ("%s=%s", disable_arg, names[i])); + } + } +} + + +static FlatpakContextShares +flatpak_context_share_from_string (const char *string, GError **error) +{ + FlatpakContextShares shares = flatpak_context_bitmask_from_string (string, flatpak_context_shares); + + if (shares == 0) + { + g_autofree char *values = g_strjoinv (", ", (char **)flatpak_context_shares); + g_set_error (error, G_OPTION_ERROR, G_OPTION_ERROR_FAILED, + _("Unknown share type %s, valid types are: %s"), string, values); + } + + return shares; +} + +static char ** +flatpak_context_shared_to_string (FlatpakContextShares shares, FlatpakContextShares valid) +{ + return flatpak_context_bitmask_to_string (shares, valid, flatpak_context_shares); +} + +static void +flatpak_context_shared_to_args (FlatpakContextShares shares, + FlatpakContextShares valid, + GPtrArray *args) +{ + return flatpak_context_bitmask_to_args (shares, valid, flatpak_context_shares, "--share", "--unshare", args); +} + +static FlatpakPolicy +flatpak_policy_from_string (const char *string, GError **error) +{ + const char *policies[] = { "none", "see", "filtered", "talk", "own", NULL }; + int i; + g_autofree char *values = NULL; + + for (i = 0; policies[i]; i++) + { + if (strcmp (string, policies[i]) == 0) + return i; + } + + values = g_strjoinv (", ", (char **)policies); + g_set_error (error, G_OPTION_ERROR, G_OPTION_ERROR_FAILED, + _("Unknown policy type %s, valid types are: %s"), string, values); + + return -1; +} + +static const char * +flatpak_policy_to_string (FlatpakPolicy policy) +{ + if (policy == FLATPAK_POLICY_SEE) + return "see"; + if (policy == FLATPAK_POLICY_TALK) + return "talk"; + if (policy == FLATPAK_POLICY_OWN) + return "own"; + + return "none"; +} + +static gboolean +flatpak_verify_dbus_name (const char *name, GError **error) +{ + const char *name_part; + g_autofree char *tmp = NULL; + + if (g_str_has_suffix (name, ".*")) + { + tmp = g_strndup (name, strlen (name) - 2); + name_part = tmp; + } + else + { + name_part = name; + } + + if (g_dbus_is_name (name_part) && !g_dbus_is_unique_name (name_part)) + return TRUE; + + g_set_error (error, G_OPTION_ERROR, G_OPTION_ERROR_FAILED, + _("Invalid dbus name %s\n"), name); + return FALSE; +} + +static FlatpakContextSockets +flatpak_context_socket_from_string (const char *string, GError **error) +{ + FlatpakContextSockets sockets = flatpak_context_bitmask_from_string (string, flatpak_context_sockets); + + if (sockets == 0) + { + g_autofree char *values = g_strjoinv (", ", (char **)flatpak_context_sockets); + g_set_error (error, G_OPTION_ERROR, G_OPTION_ERROR_FAILED, + _("Unknown socket type %s, valid types are: %s"), string, values); + } + + return sockets; +} + +static char ** +flatpak_context_sockets_to_string (FlatpakContextSockets sockets, FlatpakContextSockets valid) +{ + return flatpak_context_bitmask_to_string (sockets, valid, flatpak_context_sockets); +} + +static void +flatpak_context_sockets_to_args (FlatpakContextSockets sockets, + FlatpakContextSockets valid, + GPtrArray *args) +{ + return flatpak_context_bitmask_to_args (sockets, valid, flatpak_context_sockets, "--socket", "--nosocket", args); +} + +static FlatpakContextDevices +flatpak_context_device_from_string (const char *string, GError **error) +{ + FlatpakContextDevices devices = flatpak_context_bitmask_from_string (string, flatpak_context_devices); + + if (devices == 0) + { + g_autofree char *values = g_strjoinv (", ", (char **)flatpak_context_devices); + g_set_error (error, G_OPTION_ERROR, G_OPTION_ERROR_FAILED, + _("Unknown device type %s, valid types are: %s"), string, values); + } + return devices; +} + +static char ** +flatpak_context_devices_to_string (FlatpakContextDevices devices, FlatpakContextDevices valid) +{ + return flatpak_context_bitmask_to_string (devices, valid, flatpak_context_devices); +} + +static void +flatpak_context_devices_to_args (FlatpakContextDevices devices, + FlatpakContextDevices valid, + GPtrArray *args) +{ + return flatpak_context_bitmask_to_args (devices, valid, flatpak_context_devices, "--device", "--nodevice", args); +} + +static FlatpakContextFeatures +flatpak_context_feature_from_string (const char *string, GError **error) +{ + FlatpakContextFeatures feature = flatpak_context_bitmask_from_string (string, flatpak_context_features); + + if (feature == 0) + { + g_autofree char *values = g_strjoinv (", ", (char **)flatpak_context_features); + g_set_error (error, G_OPTION_ERROR, G_OPTION_ERROR_FAILED, + _("Unknown feature type %s, valid types are: %s"), string, values); + } + + return feature; +} + +static char ** +flatpak_context_features_to_string (FlatpakContextFeatures features, FlatpakContextFeatures valid) +{ + return flatpak_context_bitmask_to_string (features, valid, flatpak_context_features); +} + +static void +flatpak_context_features_to_args (FlatpakContextFeatures features, + FlatpakContextFeatures valid, + GPtrArray *args) +{ + return flatpak_context_bitmask_to_args (features, valid, flatpak_context_features, "--allow", "--disallow", args); +} + +static void +flatpak_context_add_shares (FlatpakContext *context, + FlatpakContextShares shares) +{ + context->shares_valid |= shares; + context->shares |= shares; +} + +static void +flatpak_context_remove_shares (FlatpakContext *context, + FlatpakContextShares shares) +{ + context->shares_valid |= shares; + context->shares &= ~shares; +} + +static void +flatpak_context_add_sockets (FlatpakContext *context, + FlatpakContextSockets sockets) +{ + context->sockets_valid |= sockets; + context->sockets |= sockets; +} + +static void +flatpak_context_remove_sockets (FlatpakContext *context, + FlatpakContextSockets sockets) +{ + context->sockets_valid |= sockets; + context->sockets &= ~sockets; +} + +static void +flatpak_context_add_devices (FlatpakContext *context, + FlatpakContextDevices devices) +{ + context->devices_valid |= devices; + context->devices |= devices; +} + +static void +flatpak_context_remove_devices (FlatpakContext *context, + FlatpakContextDevices devices) +{ + context->devices_valid |= devices; + context->devices &= ~devices; +} + +static void +flatpak_context_add_features (FlatpakContext *context, + FlatpakContextFeatures features) +{ + context->features_valid |= features; + context->features |= features; +} + +static void +flatpak_context_remove_features (FlatpakContext *context, + FlatpakContextFeatures features) +{ + context->features_valid |= features; + context->features &= ~features; +} + +static void +flatpak_context_set_env_var (FlatpakContext *context, + const char *name, + const char *value) +{ + g_hash_table_insert (context->env_vars, g_strdup (name), g_strdup (value)); +} + +void +flatpak_context_set_session_bus_policy (FlatpakContext *context, + const char *name, + FlatpakPolicy policy) +{ + g_hash_table_insert (context->session_bus_policy, g_strdup (name), GINT_TO_POINTER (policy)); +} + +void +flatpak_context_set_system_bus_policy (FlatpakContext *context, + const char *name, + FlatpakPolicy policy) +{ + g_hash_table_insert (context->system_bus_policy, g_strdup (name), GINT_TO_POINTER (policy)); +} + +static void +flatpak_context_apply_generic_policy (FlatpakContext *context, + const char *key, + const char *value) +{ + GPtrArray *new = g_ptr_array_new (); + const char **old_v; + int i; + + g_assert (strchr (key, '.') != NULL); + + old_v = g_hash_table_lookup (context->generic_policy, key); + for (i = 0; old_v != NULL && old_v[i] != NULL; i++) + { + const char *old = old_v[i]; + const char *cmp1 = old; + const char *cmp2 = value; + if (*cmp1 == '!') + cmp1++; + if (*cmp2 == '!') + cmp2++; + if (strcmp (cmp1, cmp2) != 0) + g_ptr_array_add (new, g_strdup (old)); + } + + g_ptr_array_add (new, g_strdup (value)); + g_ptr_array_add (new, NULL); + + g_hash_table_insert (context->generic_policy, g_strdup (key), + g_ptr_array_free (new, FALSE)); +} + +static void +flatpak_context_set_persistent (FlatpakContext *context, + const char *path) +{ + g_hash_table_insert (context->persistent, g_strdup (path), GINT_TO_POINTER (1)); +} + +static gboolean +get_xdg_dir_from_prefix (const char *prefix, + const char **where, + const char **dir) +{ + if (strcmp (prefix, "xdg-data") == 0) + { + if (where) + *where = "data"; + if (dir) + *dir = g_get_user_data_dir (); + return TRUE; + } + if (strcmp (prefix, "xdg-cache") == 0) + { + if (where) + *where = "cache"; + if (dir) + *dir = g_get_user_cache_dir (); + return TRUE; + } + if (strcmp (prefix, "xdg-config") == 0) + { + if (where) + *where = "config"; + if (dir) + *dir = g_get_user_config_dir (); + return TRUE; + } + return FALSE; +} + +/* This looks only in the xdg dirs (config, cache, data), not the user + definable ones */ +static char * +get_xdg_dir_from_string (const char *filesystem, + const char **suffix, + const char **where) +{ + char *slash; + const char *rest; + g_autofree char *prefix = NULL; + const char *dir = NULL; + gsize len; + + slash = strchr (filesystem, '/'); + + if (slash) + len = slash - filesystem; + else + len = strlen (filesystem); + + rest = filesystem + len; + while (*rest == '/') + rest++; + + if (suffix != NULL) + *suffix = rest; + + prefix = g_strndup (filesystem, len); + + if (get_xdg_dir_from_prefix (prefix, where, &dir)) + return g_build_filename (dir, rest, NULL); + + return NULL; +} + +static gboolean +get_xdg_user_dir_from_string (const char *filesystem, + const char **config_key, + const char **suffix, + const char **dir) +{ + char *slash; + const char *rest; + g_autofree char *prefix = NULL; + gsize len; + + slash = strchr (filesystem, '/'); + + if (slash) + len = slash - filesystem; + else + len = strlen (filesystem); + + rest = filesystem + len; + while (*rest == '/') + rest++; + + if (suffix) + *suffix = rest; + + prefix = g_strndup (filesystem, len); + + if (strcmp (prefix, "xdg-desktop") == 0) + { + if (config_key) + *config_key = "XDG_DESKTOP_DIR"; + if (dir) + *dir = g_get_user_special_dir (G_USER_DIRECTORY_DESKTOP); + return TRUE; + } + if (strcmp (prefix, "xdg-documents") == 0) + { + if (config_key) + *config_key = "XDG_DOCUMENTS_DIR"; + if (dir) + *dir = g_get_user_special_dir (G_USER_DIRECTORY_DOCUMENTS); + return TRUE; + } + if (strcmp (prefix, "xdg-download") == 0) + { + if (config_key) + *config_key = "XDG_DOWNLOAD_DIR"; + if (dir) + *dir = g_get_user_special_dir (G_USER_DIRECTORY_DOWNLOAD); + return TRUE; + } + if (strcmp (prefix, "xdg-music") == 0) + { + if (config_key) + *config_key = "XDG_MUSIC_DIR"; + if (dir) + *dir = g_get_user_special_dir (G_USER_DIRECTORY_MUSIC); + return TRUE; + } + if (strcmp (prefix, "xdg-pictures") == 0) + { + if (config_key) + *config_key = "XDG_PICTURES_DIR"; + if (dir) + *dir = g_get_user_special_dir (G_USER_DIRECTORY_PICTURES); + return TRUE; + } + if (strcmp (prefix, "xdg-public-share") == 0) + { + if (config_key) + *config_key = "XDG_PUBLICSHARE_DIR"; + if (dir) + *dir = g_get_user_special_dir (G_USER_DIRECTORY_PUBLIC_SHARE); + return TRUE; + } + if (strcmp (prefix, "xdg-templates") == 0) + { + if (config_key) + *config_key = "XDG_TEMPLATES_DIR"; + if (dir) + *dir = g_get_user_special_dir (G_USER_DIRECTORY_TEMPLATES); + return TRUE; + } + if (strcmp (prefix, "xdg-videos") == 0) + { + if (config_key) + *config_key = "XDG_VIDEOS_DIR"; + if (dir) + *dir = g_get_user_special_dir (G_USER_DIRECTORY_VIDEOS); + return TRUE; + } + if (get_xdg_dir_from_prefix (prefix, NULL, dir)) + { + if (config_key) + *config_key = NULL; + return TRUE; + } + /* Don't support xdg-run without suffix, because that doesn't work */ + if (strcmp (prefix, "xdg-run") == 0 && + *rest != 0) + { + if (config_key) + *config_key = NULL; + if (dir) + *dir = g_get_user_runtime_dir (); + return TRUE; + } + + return FALSE; +} + +static char * +parse_filesystem_flags (const char *filesystem, FlatpakFilesystemMode *mode) +{ + gsize len = strlen (filesystem); + + if (mode) + *mode = FLATPAK_FILESYSTEM_MODE_READ_WRITE; + + if (g_str_has_suffix (filesystem, ":ro")) + { + len -= 3; + if (mode) + *mode = FLATPAK_FILESYSTEM_MODE_READ_ONLY; + } + else if (g_str_has_suffix (filesystem, ":rw")) + { + len -= 3; + if (mode) + *mode = FLATPAK_FILESYSTEM_MODE_READ_WRITE; + } + else if (g_str_has_suffix (filesystem, ":create")) + { + len -= 7; + if (mode) + *mode = FLATPAK_FILESYSTEM_MODE_CREATE; + } + + return g_strndup (filesystem, len); +} + +static gboolean +flatpak_context_verify_filesystem (const char *filesystem_and_mode, + GError **error) +{ + g_autofree char *filesystem = parse_filesystem_flags (filesystem_and_mode, NULL); + + if (strcmp (filesystem, "host") == 0) + return TRUE; + if (strcmp (filesystem, "home") == 0) + return TRUE; + if (get_xdg_user_dir_from_string (filesystem, NULL, NULL, NULL)) + return TRUE; + if (g_str_has_prefix (filesystem, "~/")) + return TRUE; + if (g_str_has_prefix (filesystem, "/")) + return TRUE; + + g_set_error (error, G_OPTION_ERROR, G_OPTION_ERROR_FAILED, + _("Unknown filesystem location %s, valid locations are: host, home, xdg-*[/...], ~/dir, /dir"), filesystem); + return FALSE; +} + +static void +flatpak_context_add_filesystem (FlatpakContext *context, + const char *what) +{ + FlatpakFilesystemMode mode; + char *fs = parse_filesystem_flags (what, &mode); + + g_hash_table_insert (context->filesystems, fs, GINT_TO_POINTER (mode)); +} + +static void +flatpak_context_remove_filesystem (FlatpakContext *context, + const char *what) +{ + g_hash_table_insert (context->filesystems, + parse_filesystem_flags (what, NULL), + NULL); +} + +void +flatpak_context_merge (FlatpakContext *context, + FlatpakContext *other) +{ + GHashTableIter iter; + gpointer key, value; + + context->shares &= ~other->shares_valid; + context->shares |= other->shares; + context->shares_valid |= other->shares_valid; + context->sockets &= ~other->sockets_valid; + context->sockets |= other->sockets; + context->sockets_valid |= other->sockets_valid; + context->devices &= ~other->devices_valid; + context->devices |= other->devices; + context->devices_valid |= other->devices_valid; + context->features &= ~other->features_valid; + context->features |= other->features; + context->features_valid |= other->features_valid; + + g_hash_table_iter_init (&iter, other->env_vars); + while (g_hash_table_iter_next (&iter, &key, &value)) + g_hash_table_insert (context->env_vars, g_strdup (key), g_strdup (value)); + + g_hash_table_iter_init (&iter, other->persistent); + while (g_hash_table_iter_next (&iter, &key, &value)) + g_hash_table_insert (context->persistent, g_strdup (key), value); + + g_hash_table_iter_init (&iter, other->filesystems); + while (g_hash_table_iter_next (&iter, &key, &value)) + g_hash_table_insert (context->filesystems, g_strdup (key), value); + + g_hash_table_iter_init (&iter, other->session_bus_policy); + while (g_hash_table_iter_next (&iter, &key, &value)) + g_hash_table_insert (context->session_bus_policy, g_strdup (key), value); + + g_hash_table_iter_init (&iter, other->system_bus_policy); + while (g_hash_table_iter_next (&iter, &key, &value)) + g_hash_table_insert (context->system_bus_policy, g_strdup (key), value); + + g_hash_table_iter_init (&iter, other->system_bus_policy); + while (g_hash_table_iter_next (&iter, &key, &value)) + g_hash_table_insert (context->system_bus_policy, g_strdup (key), value); + + g_hash_table_iter_init (&iter, other->generic_policy); + while (g_hash_table_iter_next (&iter, &key, &value)) + { + const char **policy_values = (const char **)value; + int i; + + for (i = 0; policy_values[i] != NULL; i++) + flatpak_context_apply_generic_policy (context, (char *)key, policy_values[i]); + } + +} + +static gboolean +option_share_cb (const gchar *option_name, + const gchar *value, + gpointer data, + GError **error) +{ + FlatpakContext *context = data; + FlatpakContextShares share; + + share = flatpak_context_share_from_string (value, error); + if (share == 0) + return FALSE; + + flatpak_context_add_shares (context, share); + + return TRUE; +} + +static gboolean +option_unshare_cb (const gchar *option_name, + const gchar *value, + gpointer data, + GError **error) +{ + FlatpakContext *context = data; + FlatpakContextShares share; + + share = flatpak_context_share_from_string (value, error); + if (share == 0) + return FALSE; + + flatpak_context_remove_shares (context, share); + + return TRUE; +} + +static gboolean +option_socket_cb (const gchar *option_name, + const gchar *value, + gpointer data, + GError **error) +{ + FlatpakContext *context = data; + FlatpakContextSockets socket; + + socket = flatpak_context_socket_from_string (value, error); + if (socket == 0) + return FALSE; + + if (socket == FLATPAK_CONTEXT_SOCKET_FALLBACK_X11) + socket |= FLATPAK_CONTEXT_SOCKET_X11; + + flatpak_context_add_sockets (context, socket); + + return TRUE; +} + +static gboolean +option_nosocket_cb (const gchar *option_name, + const gchar *value, + gpointer data, + GError **error) +{ + FlatpakContext *context = data; + FlatpakContextSockets socket; + + socket = flatpak_context_socket_from_string (value, error); + if (socket == 0) + return FALSE; + + if (socket == FLATPAK_CONTEXT_SOCKET_FALLBACK_X11) + socket |= FLATPAK_CONTEXT_SOCKET_X11; + + flatpak_context_remove_sockets (context, socket); + + return TRUE; +} + +static gboolean +option_device_cb (const gchar *option_name, + const gchar *value, + gpointer data, + GError **error) +{ + FlatpakContext *context = data; + FlatpakContextDevices device; + + device = flatpak_context_device_from_string (value, error); + if (device == 0) + return FALSE; + + flatpak_context_add_devices (context, device); + + return TRUE; +} + +static gboolean +option_nodevice_cb (const gchar *option_name, + const gchar *value, + gpointer data, + GError **error) +{ + FlatpakContext *context = data; + FlatpakContextDevices device; + + device = flatpak_context_device_from_string (value, error); + if (device == 0) + return FALSE; + + flatpak_context_remove_devices (context, device); + + return TRUE; +} + +static gboolean +option_allow_cb (const gchar *option_name, + const gchar *value, + gpointer data, + GError **error) +{ + FlatpakContext *context = data; + FlatpakContextFeatures feature; + + feature = flatpak_context_feature_from_string (value, error); + if (feature == 0) + return FALSE; + + flatpak_context_add_features (context, feature); + + return TRUE; +} + +static gboolean +option_disallow_cb (const gchar *option_name, + const gchar *value, + gpointer data, + GError **error) +{ + FlatpakContext *context = data; + FlatpakContextFeatures feature; + + feature = flatpak_context_feature_from_string (value, error); + if (feature == 0) + return FALSE; + + flatpak_context_remove_features (context, feature); + + return TRUE; +} + +static gboolean +option_filesystem_cb (const gchar *option_name, + const gchar *value, + gpointer data, + GError **error) +{ + FlatpakContext *context = data; + + if (!flatpak_context_verify_filesystem (value, error)) + return FALSE; + + flatpak_context_add_filesystem (context, value); + return TRUE; +} + +static gboolean +option_nofilesystem_cb (const gchar *option_name, + const gchar *value, + gpointer data, + GError **error) +{ + FlatpakContext *context = data; + + if (!flatpak_context_verify_filesystem (value, error)) + return FALSE; + + flatpak_context_remove_filesystem (context, value); + return TRUE; +} + +static gboolean +option_env_cb (const gchar *option_name, + const gchar *value, + gpointer data, + GError **error) +{ + FlatpakContext *context = data; + + g_auto(GStrv) split = g_strsplit (value, "=", 2); + + if (split == NULL || split[0] == NULL || split[0][0] == 0 || split[1] == NULL) + { + g_set_error (error, G_OPTION_ERROR, G_OPTION_ERROR_FAILED, + _("Invalid env format %s"), value); + return FALSE; + } + + flatpak_context_set_env_var (context, split[0], split[1]); + return TRUE; +} + +static gboolean +option_own_name_cb (const gchar *option_name, + const gchar *value, + gpointer data, + GError **error) +{ + FlatpakContext *context = data; + + if (!flatpak_verify_dbus_name (value, error)) + return FALSE; + + flatpak_context_set_session_bus_policy (context, value, FLATPAK_POLICY_OWN); + return TRUE; +} + +static gboolean +option_talk_name_cb (const gchar *option_name, + const gchar *value, + gpointer data, + GError **error) +{ + FlatpakContext *context = data; + + if (!flatpak_verify_dbus_name (value, error)) + return FALSE; + + flatpak_context_set_session_bus_policy (context, value, FLATPAK_POLICY_TALK); + return TRUE; +} + +static gboolean +option_system_own_name_cb (const gchar *option_name, + const gchar *value, + gpointer data, + GError **error) +{ + FlatpakContext *context = data; + + if (!flatpak_verify_dbus_name (value, error)) + return FALSE; + + flatpak_context_set_system_bus_policy (context, value, FLATPAK_POLICY_OWN); + return TRUE; +} + +static gboolean +option_system_talk_name_cb (const gchar *option_name, + const gchar *value, + gpointer data, + GError **error) +{ + FlatpakContext *context = data; + + if (!flatpak_verify_dbus_name (value, error)) + return FALSE; + + flatpak_context_set_system_bus_policy (context, value, FLATPAK_POLICY_TALK); + return TRUE; +} + +static gboolean +option_add_generic_policy_cb (const gchar *option_name, + const gchar *value, + gpointer data, + GError **error) +{ + FlatpakContext *context = data; + char *t; + g_autofree char *key = NULL; + const char *policy_value; + + t = strchr (value, '='); + if (t == NULL) + return flatpak_fail (error, "--policy arguments must be in the form SUBSYSTEM.KEY=[!]VALUE"); + policy_value = t + 1; + key = g_strndup (value, t - value); + if (strchr (key, '.') == NULL) + return flatpak_fail (error, "--policy arguments must be in the form SUBSYSTEM.KEY=[!]VALUE"); + + if (policy_value[0] == '!') + return flatpak_fail (error, "--policy values can't start with \"!\""); + + flatpak_context_apply_generic_policy (context, key, policy_value); + + return TRUE; +} + +static gboolean +option_remove_generic_policy_cb (const gchar *option_name, + const gchar *value, + gpointer data, + GError **error) +{ + FlatpakContext *context = data; + char *t; + g_autofree char *key = NULL; + const char *policy_value; + g_autofree char *extended_value = NULL; + + t = strchr (value, '='); + if (t == NULL) + return flatpak_fail (error, "--policy arguments must be in the form SUBSYSTEM.KEY=[!]VALUE"); + policy_value = t + 1; + key = g_strndup (value, t - value); + if (strchr (key, '.') == NULL) + return flatpak_fail (error, "--policy arguments must be in the form SUBSYSTEM.KEY=[!]VALUE"); + + if (policy_value[0] == '!') + return flatpak_fail (error, "--policy values can't start with \"!\""); + + extended_value = g_strconcat ("!", policy_value, NULL); + + flatpak_context_apply_generic_policy (context, key, extended_value); + + return TRUE; +} + +static gboolean +option_persist_cb (const gchar *option_name, + const gchar *value, + gpointer data, + GError **error) +{ + FlatpakContext *context = data; + + flatpak_context_set_persistent (context, value); + return TRUE; +} + +static gboolean option_no_desktop_deprecated; + +static GOptionEntry context_options[] = { + { "share", 0, G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_CALLBACK, &option_share_cb, N_("Share with host"), N_("SHARE") }, + { "unshare", 0, G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_CALLBACK, &option_unshare_cb, N_("Unshare with host"), N_("SHARE") }, + { "socket", 0, G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_CALLBACK, &option_socket_cb, N_("Expose socket to app"), N_("SOCKET") }, + { "nosocket", 0, G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_CALLBACK, &option_nosocket_cb, N_("Don't expose socket to app"), N_("SOCKET") }, + { "device", 0, G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_CALLBACK, &option_device_cb, N_("Expose device to app"), N_("DEVICE") }, + { "nodevice", 0, G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_CALLBACK, &option_nodevice_cb, N_("Don't expose device to app"), N_("DEVICE") }, + { "allow", 0, G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_CALLBACK, &option_allow_cb, N_("Allow feature"), N_("FEATURE") }, + { "disallow", 0, G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_CALLBACK, &option_disallow_cb, N_("Don't allow feature"), N_("FEATURE") }, + { "filesystem", 0, G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_CALLBACK, &option_filesystem_cb, N_("Expose filesystem to app (:ro for read-only)"), N_("FILESYSTEM[:ro]") }, + { "nofilesystem", 0, G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_CALLBACK, &option_nofilesystem_cb, N_("Don't expose filesystem to app"), N_("FILESYSTEM") }, + { "env", 0, G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_CALLBACK, &option_env_cb, N_("Set environment variable"), N_("VAR=VALUE") }, + { "own-name", 0, G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_CALLBACK, &option_own_name_cb, N_("Allow app to own name on the session bus"), N_("DBUS_NAME") }, + { "talk-name", 0, G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_CALLBACK, &option_talk_name_cb, N_("Allow app to talk to name on the session bus"), N_("DBUS_NAME") }, + { "system-own-name", 0, G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_CALLBACK, &option_system_own_name_cb, N_("Allow app to own name on the system bus"), N_("DBUS_NAME") }, + { "system-talk-name", 0, G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_CALLBACK, &option_system_talk_name_cb, N_("Allow app to talk to name on the system bus"), N_("DBUS_NAME") }, + { "add-policy", 0, G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_CALLBACK, &option_add_generic_policy_cb, N_("Add generic policy option"), N_("SUBSYSTEM.KEY=VALUE") }, + { "remove-policy", 0, G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_CALLBACK, &option_remove_generic_policy_cb, N_("Remove generic policy option"), N_("SUBSYSTEM.KEY=VALUE") }, + { "persist", 0, G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_CALLBACK, &option_persist_cb, N_("Persist home directory"), N_("FILENAME") }, + /* This is not needed/used anymore, so hidden, but we accept it for backwards compat */ + { "no-desktop", 0, G_OPTION_FLAG_IN_MAIN | G_OPTION_FLAG_HIDDEN, G_OPTION_ARG_NONE, &option_no_desktop_deprecated, N_("Don't require a running session (no cgroups creation)"), NULL }, + { NULL } +}; + +void +flatpak_context_complete (FlatpakContext *context, FlatpakCompletion *completion) +{ + flatpak_complete_options (completion, context_options); +} + +GOptionGroup * +flatpak_context_get_options (FlatpakContext *context) +{ + GOptionGroup *group; + + group = g_option_group_new ("environment", + "Runtime Environment", + "Runtime Environment", + context, + NULL); + g_option_group_set_translation_domain (group, GETTEXT_PACKAGE); + + g_option_group_add_entries (group, context_options); + + return group; +} + +static const char * +parse_negated (const char *option, gboolean *negated) +{ + if (option[0] == '!') + { + option++; + *negated = TRUE; + } + else + { + *negated = FALSE; + } + return option; +} + +/* + * Merge the FLATPAK_METADATA_GROUP_CONTEXT, + * FLATPAK_METADATA_GROUP_SESSION_BUS_POLICY, + * FLATPAK_METADATA_GROUP_SYSTEM_BUS_POLICY and + * FLATPAK_METADATA_GROUP_ENVIRONMENT groups, and all groups starting + * with FLATPAK_METADATA_GROUP_PREFIX_POLICY, from metakey into context. + * + * This is a merge, not a replace! + */ +gboolean +flatpak_context_load_metadata (FlatpakContext *context, + GKeyFile *metakey, + GError **error) +{ + gboolean remove; + g_auto(GStrv) groups = NULL; + int i; + + if (g_key_file_has_key (metakey, FLATPAK_METADATA_GROUP_CONTEXT, FLATPAK_METADATA_KEY_SHARED, NULL)) + { + g_auto(GStrv) shares = g_key_file_get_string_list (metakey, FLATPAK_METADATA_GROUP_CONTEXT, + FLATPAK_METADATA_KEY_SHARED, NULL, error); + if (shares == NULL) + return FALSE; + + for (i = 0; shares[i] != NULL; i++) + { + FlatpakContextShares share; + + share = flatpak_context_share_from_string (parse_negated (shares[i], &remove), NULL); + if (share == 0) + g_debug ("Unknown share type %s", shares[i]); + else + { + if (remove) + flatpak_context_remove_shares (context, share); + else + flatpak_context_add_shares (context, share); + } + } + } + + if (g_key_file_has_key (metakey, FLATPAK_METADATA_GROUP_CONTEXT, FLATPAK_METADATA_KEY_SOCKETS, NULL)) + { + g_auto(GStrv) sockets = g_key_file_get_string_list (metakey, FLATPAK_METADATA_GROUP_CONTEXT, + FLATPAK_METADATA_KEY_SOCKETS, NULL, error); + if (sockets == NULL) + return FALSE; + + for (i = 0; sockets[i] != NULL; i++) + { + FlatpakContextSockets socket = flatpak_context_socket_from_string (parse_negated (sockets[i], &remove), NULL); + if (socket == 0) + g_debug ("Unknown socket type %s", sockets[i]); + else + { + if (remove) + flatpak_context_remove_sockets (context, socket); + else + flatpak_context_add_sockets (context, socket); + } + } + } + + if (g_key_file_has_key (metakey, FLATPAK_METADATA_GROUP_CONTEXT, FLATPAK_METADATA_KEY_DEVICES, NULL)) + { + g_auto(GStrv) devices = g_key_file_get_string_list (metakey, FLATPAK_METADATA_GROUP_CONTEXT, + FLATPAK_METADATA_KEY_DEVICES, NULL, error); + if (devices == NULL) + return FALSE; + + + for (i = 0; devices[i] != NULL; i++) + { + FlatpakContextDevices device = flatpak_context_device_from_string (parse_negated (devices[i], &remove), NULL); + if (device == 0) + g_debug ("Unknown device type %s", devices[i]); + else + { + if (remove) + flatpak_context_remove_devices (context, device); + else + flatpak_context_add_devices (context, device); + } + } + } + + if (g_key_file_has_key (metakey, FLATPAK_METADATA_GROUP_CONTEXT, FLATPAK_METADATA_KEY_FEATURES, NULL)) + { + g_auto(GStrv) features = g_key_file_get_string_list (metakey, FLATPAK_METADATA_GROUP_CONTEXT, + FLATPAK_METADATA_KEY_FEATURES, NULL, error); + if (features == NULL) + return FALSE; + + + for (i = 0; features[i] != NULL; i++) + { + FlatpakContextFeatures feature = flatpak_context_feature_from_string (parse_negated (features[i], &remove), NULL); + if (feature == 0) + g_debug ("Unknown feature type %s", features[i]); + else + { + if (remove) + flatpak_context_remove_features (context, feature); + else + flatpak_context_add_features (context, feature); + } + } + } + + if (g_key_file_has_key (metakey, FLATPAK_METADATA_GROUP_CONTEXT, FLATPAK_METADATA_KEY_FILESYSTEMS, NULL)) + { + g_auto(GStrv) filesystems = g_key_file_get_string_list (metakey, FLATPAK_METADATA_GROUP_CONTEXT, + FLATPAK_METADATA_KEY_FILESYSTEMS, NULL, error); + if (filesystems == NULL) + return FALSE; + + for (i = 0; filesystems[i] != NULL; i++) + { + const char *fs = parse_negated (filesystems[i], &remove); + if (!flatpak_context_verify_filesystem (fs, NULL)) + g_debug ("Unknown filesystem type %s", filesystems[i]); + else + { + if (remove) + flatpak_context_remove_filesystem (context, fs); + else + flatpak_context_add_filesystem (context, fs); + } + } + } + + if (g_key_file_has_key (metakey, FLATPAK_METADATA_GROUP_CONTEXT, FLATPAK_METADATA_KEY_PERSISTENT, NULL)) + { + g_auto(GStrv) persistent = g_key_file_get_string_list (metakey, FLATPAK_METADATA_GROUP_CONTEXT, + FLATPAK_METADATA_KEY_PERSISTENT, NULL, error); + if (persistent == NULL) + return FALSE; + + for (i = 0; persistent[i] != NULL; i++) + flatpak_context_set_persistent (context, persistent[i]); + } + + if (g_key_file_has_group (metakey, FLATPAK_METADATA_GROUP_SESSION_BUS_POLICY)) + { + g_auto(GStrv) keys = NULL; + gsize i, keys_count; + + keys = g_key_file_get_keys (metakey, FLATPAK_METADATA_GROUP_SESSION_BUS_POLICY, &keys_count, NULL); + for (i = 0; i < keys_count; i++) + { + const char *key = keys[i]; + g_autofree char *value = g_key_file_get_string (metakey, FLATPAK_METADATA_GROUP_SESSION_BUS_POLICY, key, NULL); + FlatpakPolicy policy; + + if (!flatpak_verify_dbus_name (key, error)) + return FALSE; + + policy = flatpak_policy_from_string (value, NULL); + if ((int) policy != -1) + flatpak_context_set_session_bus_policy (context, key, policy); + } + } + + if (g_key_file_has_group (metakey, FLATPAK_METADATA_GROUP_SYSTEM_BUS_POLICY)) + { + g_auto(GStrv) keys = NULL; + gsize i, keys_count; + + keys = g_key_file_get_keys (metakey, FLATPAK_METADATA_GROUP_SYSTEM_BUS_POLICY, &keys_count, NULL); + for (i = 0; i < keys_count; i++) + { + const char *key = keys[i]; + g_autofree char *value = g_key_file_get_string (metakey, FLATPAK_METADATA_GROUP_SYSTEM_BUS_POLICY, key, NULL); + FlatpakPolicy policy; + + if (!flatpak_verify_dbus_name (key, error)) + return FALSE; + + policy = flatpak_policy_from_string (value, NULL); + if ((int) policy != -1) + flatpak_context_set_system_bus_policy (context, key, policy); + } + } + + if (g_key_file_has_group (metakey, FLATPAK_METADATA_GROUP_ENVIRONMENT)) + { + g_auto(GStrv) keys = NULL; + gsize i, keys_count; + + keys = g_key_file_get_keys (metakey, FLATPAK_METADATA_GROUP_ENVIRONMENT, &keys_count, NULL); + for (i = 0; i < keys_count; i++) + { + const char *key = keys[i]; + g_autofree char *value = g_key_file_get_string (metakey, FLATPAK_METADATA_GROUP_ENVIRONMENT, key, NULL); + + flatpak_context_set_env_var (context, key, value); + } + } + + groups = g_key_file_get_groups (metakey, NULL); + for (i = 0; groups[i] != NULL; i++) + { + const char *group = groups[i]; + const char *subsystem; + int j; + + if (g_str_has_prefix (group, FLATPAK_METADATA_GROUP_PREFIX_POLICY)) + { + g_auto(GStrv) keys = NULL; + subsystem = group + strlen (FLATPAK_METADATA_GROUP_PREFIX_POLICY); + keys = g_key_file_get_keys (metakey, group, NULL, NULL); + for (j = 0; keys != NULL && keys[j] != NULL; j++) + { + const char *key = keys[j]; + g_autofree char *policy_key = g_strdup_printf ("%s.%s", subsystem, key); + g_auto(GStrv) values = NULL; + int k; + + values = g_key_file_get_string_list (metakey, group, key, NULL, NULL); + for (k = 0; values != NULL && values[k] != NULL; k++) + flatpak_context_apply_generic_policy (context, policy_key, + values[k]); + } + } + } + + return TRUE; +} + +/* + * Save the FLATPAK_METADATA_GROUP_CONTEXT, + * FLATPAK_METADATA_GROUP_SESSION_BUS_POLICY, + * FLATPAK_METADATA_GROUP_SYSTEM_BUS_POLICY and + * FLATPAK_METADATA_GROUP_ENVIRONMENT groups, and all groups starting + * with FLATPAK_METADATA_GROUP_PREFIX_POLICY, into metakey + */ +void +flatpak_context_save_metadata (FlatpakContext *context, + gboolean flatten, + GKeyFile *metakey) +{ + g_auto(GStrv) shared = NULL; + g_auto(GStrv) sockets = NULL; + g_auto(GStrv) devices = NULL; + g_auto(GStrv) features = NULL; + GHashTableIter iter; + gpointer key, value; + FlatpakContextShares shares_mask = context->shares; + FlatpakContextShares shares_valid = context->shares_valid; + FlatpakContextSockets sockets_mask = context->sockets; + FlatpakContextSockets sockets_valid = context->sockets_valid; + FlatpakContextDevices devices_mask = context->devices; + FlatpakContextDevices devices_valid = context->devices_valid; + FlatpakContextFeatures features_mask = context->features; + FlatpakContextFeatures features_valid = context->features; + g_auto(GStrv) groups = NULL; + int i; + + if (flatten) + { + /* A flattened format means we don't expect this to be merged on top of + another context. In that case we never need to negate any flags. + We calculate this by removing the zero parts of the mask from the valid set. + */ + /* First we make sure only the valid parts of the mask are set, in case we + got some leftover */ + shares_mask &= shares_valid; + sockets_mask &= sockets_valid; + devices_mask &= devices_valid; + features_mask &= features_valid; + + /* Then just set the valid set to be the mask set */ + shares_valid = shares_mask; + sockets_valid = sockets_mask; + devices_valid = devices_mask; + features_valid = features_mask; + } + + shared = flatpak_context_shared_to_string (shares_mask, shares_valid); + sockets = flatpak_context_sockets_to_string (sockets_mask, sockets_valid); + devices = flatpak_context_devices_to_string (devices_mask, devices_valid); + features = flatpak_context_features_to_string (features_mask, features_valid); + + if (shared[0] != NULL) + { + g_key_file_set_string_list (metakey, + FLATPAK_METADATA_GROUP_CONTEXT, + FLATPAK_METADATA_KEY_SHARED, + (const char * const *) shared, g_strv_length (shared)); + } + else + { + g_key_file_remove_key (metakey, + FLATPAK_METADATA_GROUP_CONTEXT, + FLATPAK_METADATA_KEY_SHARED, + NULL); + } + + if (sockets[0] != NULL) + { + g_key_file_set_string_list (metakey, + FLATPAK_METADATA_GROUP_CONTEXT, + FLATPAK_METADATA_KEY_SOCKETS, + (const char * const *) sockets, g_strv_length (sockets)); + } + else + { + g_key_file_remove_key (metakey, + FLATPAK_METADATA_GROUP_CONTEXT, + FLATPAK_METADATA_KEY_SOCKETS, + NULL); + } + + if (devices[0] != NULL) + { + g_key_file_set_string_list (metakey, + FLATPAK_METADATA_GROUP_CONTEXT, + FLATPAK_METADATA_KEY_DEVICES, + (const char * const *) devices, g_strv_length (devices)); + } + else + { + g_key_file_remove_key (metakey, + FLATPAK_METADATA_GROUP_CONTEXT, + FLATPAK_METADATA_KEY_DEVICES, + NULL); + } + + if (features[0] != NULL) + { + g_key_file_set_string_list (metakey, + FLATPAK_METADATA_GROUP_CONTEXT, + FLATPAK_METADATA_KEY_FEATURES, + (const char * const *) features, g_strv_length (features)); + } + else + { + g_key_file_remove_key (metakey, + FLATPAK_METADATA_GROUP_CONTEXT, + FLATPAK_METADATA_KEY_FEATURES, + NULL); + } + + if (g_hash_table_size (context->filesystems) > 0) + { + g_autoptr(GPtrArray) array = g_ptr_array_new_with_free_func (g_free); + + g_hash_table_iter_init (&iter, context->filesystems); + while (g_hash_table_iter_next (&iter, &key, &value)) + { + FlatpakFilesystemMode mode = GPOINTER_TO_INT (value); + + if (mode == FLATPAK_FILESYSTEM_MODE_READ_ONLY) + g_ptr_array_add (array, g_strconcat (key, ":ro", NULL)); + else if (mode == FLATPAK_FILESYSTEM_MODE_CREATE) + g_ptr_array_add (array, g_strconcat (key, ":create", NULL)); + else if (value != NULL) + g_ptr_array_add (array, g_strdup (key)); + else + g_ptr_array_add (array, g_strconcat ("!", key, NULL)); + } + + g_key_file_set_string_list (metakey, + FLATPAK_METADATA_GROUP_CONTEXT, + FLATPAK_METADATA_KEY_FILESYSTEMS, + (const char * const *) array->pdata, array->len); + } + else + { + g_key_file_remove_key (metakey, + FLATPAK_METADATA_GROUP_CONTEXT, + FLATPAK_METADATA_KEY_FILESYSTEMS, + NULL); + } + + if (g_hash_table_size (context->persistent) > 0) + { + g_autofree char **keys = (char **) g_hash_table_get_keys_as_array (context->persistent, NULL); + + g_key_file_set_string_list (metakey, + FLATPAK_METADATA_GROUP_CONTEXT, + FLATPAK_METADATA_KEY_PERSISTENT, + (const char * const *) keys, g_strv_length (keys)); + } + else + { + g_key_file_remove_key (metakey, + FLATPAK_METADATA_GROUP_CONTEXT, + FLATPAK_METADATA_KEY_PERSISTENT, + NULL); + } + + g_key_file_remove_group (metakey, FLATPAK_METADATA_GROUP_SESSION_BUS_POLICY, NULL); + g_hash_table_iter_init (&iter, context->session_bus_policy); + while (g_hash_table_iter_next (&iter, &key, &value)) + { + FlatpakPolicy policy = GPOINTER_TO_INT (value); + if (policy > 0) + g_key_file_set_string (metakey, + FLATPAK_METADATA_GROUP_SESSION_BUS_POLICY, + (char *) key, flatpak_policy_to_string (policy)); + } + + g_key_file_remove_group (metakey, FLATPAK_METADATA_GROUP_SYSTEM_BUS_POLICY, NULL); + g_hash_table_iter_init (&iter, context->system_bus_policy); + while (g_hash_table_iter_next (&iter, &key, &value)) + { + FlatpakPolicy policy = GPOINTER_TO_INT (value); + if (policy > 0) + g_key_file_set_string (metakey, + FLATPAK_METADATA_GROUP_SYSTEM_BUS_POLICY, + (char *) key, flatpak_policy_to_string (policy)); + } + + g_key_file_remove_group (metakey, FLATPAK_METADATA_GROUP_ENVIRONMENT, NULL); + g_hash_table_iter_init (&iter, context->env_vars); + while (g_hash_table_iter_next (&iter, &key, &value)) + { + g_key_file_set_string (metakey, + FLATPAK_METADATA_GROUP_ENVIRONMENT, + (char *) key, (char *) value); + } + + + groups = g_key_file_get_groups (metakey, NULL); + for (i = 0; groups[i] != NULL; i++) + { + const char *group = groups[i]; + if (g_str_has_prefix (group, FLATPAK_METADATA_GROUP_PREFIX_POLICY)) + g_key_file_remove_group (metakey, group, NULL); + } + + g_hash_table_iter_init (&iter, context->generic_policy); + while (g_hash_table_iter_next (&iter, &key, &value)) + { + g_auto(GStrv) parts = g_strsplit ((const char *)key, ".", 2); + g_autofree char *group = NULL; + g_assert (parts[1] != NULL); + const char **policy_values = (const char **)value; + g_autoptr(GPtrArray) new = g_ptr_array_new (); + + for (i = 0; policy_values[i] != NULL; i++) + { + const char *policy_value = policy_values[i]; + + if (!flatten || policy_value[0] != '!') + g_ptr_array_add (new, (char *)policy_value); + } + + if (new->len > 0) + { + group = g_strconcat (FLATPAK_METADATA_GROUP_PREFIX_POLICY, + parts[0], NULL); + g_key_file_set_string_list (metakey, group, parts[1], + (const char * const*)new->pdata, + new->len); + } + } +} + +void +flatpak_context_allow_host_fs (FlatpakContext *context) +{ + flatpak_context_add_filesystem (context, "host"); +} + +gboolean +flatpak_context_get_needs_session_bus_proxy (FlatpakContext *context) +{ + return g_hash_table_size (context->session_bus_policy) > 0; +} + +gboolean +flatpak_context_get_needs_system_bus_proxy (FlatpakContext *context) +{ + return g_hash_table_size (context->system_bus_policy) > 0; +} + +gboolean +flatpak_context_allows_features (FlatpakContext *context, + FlatpakContextFeatures features) +{ + return (context->features & features) == features; +} + +void +flatpak_context_to_args (FlatpakContext *context, + GPtrArray *args) +{ + GHashTableIter iter; + gpointer key, value; + + flatpak_context_shared_to_args (context->shares, context->shares_valid, args); + flatpak_context_sockets_to_args (context->sockets, context->sockets_valid, args); + flatpak_context_devices_to_args (context->devices, context->devices_valid, args); + flatpak_context_features_to_args (context->features, context->features_valid, args); + + g_hash_table_iter_init (&iter, context->env_vars); + while (g_hash_table_iter_next (&iter, &key, &value)) + g_ptr_array_add (args, g_strdup_printf ("--env=%s=%s", (char *)key, (char *)value)); + + g_hash_table_iter_init (&iter, context->persistent); + while (g_hash_table_iter_next (&iter, &key, &value)) + g_ptr_array_add (args, g_strdup_printf ("--persist=%s", (char *)key)); + + g_hash_table_iter_init (&iter, context->session_bus_policy); + while (g_hash_table_iter_next (&iter, &key, &value)) + { + const char *name = key; + FlatpakPolicy policy = GPOINTER_TO_INT (value); + + g_ptr_array_add (args, g_strdup_printf ("--%s-name=%s", flatpak_policy_to_string (policy), name)); + } + + g_hash_table_iter_init (&iter, context->system_bus_policy); + while (g_hash_table_iter_next (&iter, &key, &value)) + { + const char *name = key; + FlatpakPolicy policy = GPOINTER_TO_INT (value); + + g_ptr_array_add (args, g_strdup_printf ("--system-%s-name=%s", flatpak_policy_to_string (policy), name)); + } + + g_hash_table_iter_init (&iter, context->filesystems); + while (g_hash_table_iter_next (&iter, &key, &value)) + { + FlatpakFilesystemMode mode = GPOINTER_TO_INT (value); + + if (mode == FLATPAK_FILESYSTEM_MODE_READ_ONLY) + g_ptr_array_add (args, g_strdup_printf ("--filesystem=%s:ro", (char *)key)); + else if (mode == FLATPAK_FILESYSTEM_MODE_READ_WRITE) + g_ptr_array_add (args, g_strdup_printf ("--filesystem=%s", (char *)key)); + else if (mode == FLATPAK_FILESYSTEM_MODE_CREATE) + g_ptr_array_add (args, g_strdup_printf ("--filesystem=%s:create", (char *)key)); + else + g_ptr_array_add (args, g_strdup_printf ("--nofilesystem=%s", (char *)key)); + } +} + +void +flatpak_context_add_bus_filters (FlatpakContext *context, + const char *app_id, + gboolean session_bus, + GPtrArray *dbus_proxy_argv) +{ + GHashTable *ht; + GHashTableIter iter; + gpointer key, value; + + g_ptr_array_add (dbus_proxy_argv, g_strdup ("--filter")); + if (app_id && session_bus) + { + g_ptr_array_add (dbus_proxy_argv, g_strdup_printf ("--own=%s", app_id)); + g_ptr_array_add (dbus_proxy_argv, g_strdup_printf ("--own=%s.*", app_id)); + } + + if (session_bus) + ht = context->session_bus_policy; + else + ht = context->system_bus_policy; + g_hash_table_iter_init (&iter, ht); + while (g_hash_table_iter_next (&iter, &key, &value)) + { + FlatpakPolicy policy = GPOINTER_TO_INT (value); + + if (policy > 0) + g_ptr_array_add (dbus_proxy_argv, g_strdup_printf ("--%s=%s", flatpak_policy_to_string (policy), (char *) key)); + } +} + +const char *dont_mount_in_root[] = { + ".", "..", "lib", "lib32", "lib64", "bin", "sbin", "usr", "boot", "root", + "tmp", "etc", "app", "run", "proc", "sys", "dev", "var", NULL +}; + +static void +flatpak_context_export (FlatpakContext *context, + FlatpakExports *exports, + GFile *app_id_dir, + gboolean do_create, + GString *xdg_dirs_conf, + gboolean *home_access_out) +{ + gboolean home_access = FALSE; + FlatpakFilesystemMode fs_mode, home_mode; + GHashTableIter iter; + gpointer key, value; + + fs_mode = (FlatpakFilesystemMode) g_hash_table_lookup (context->filesystems, "host"); + if (fs_mode != 0) + { + DIR *dir; + struct dirent *dirent; + + g_debug ("Allowing host-fs access"); + home_access = TRUE; + + /* Bind mount most dirs in / into the new root */ + dir = opendir ("/"); + if (dir != NULL) + { + while ((dirent = readdir (dir))) + { + g_autofree char *path = NULL; + + if (g_strv_contains (dont_mount_in_root, dirent->d_name)) + continue; + + path = g_build_filename ("/", dirent->d_name, NULL); + flatpak_exports_add_path_expose (exports, fs_mode, path); + } + closedir (dir); + } + flatpak_exports_add_path_expose (exports, fs_mode, "/run/media"); + flatpak_exports_add_home_expose (exports, fs_mode); + } + + home_mode = (FlatpakFilesystemMode) g_hash_table_lookup (context->filesystems, "home"); + if (home_mode != 0) + { + g_debug ("Allowing homedir access"); + home_access = TRUE; + + flatpak_exports_add_path_expose (exports, MAX (home_mode, fs_mode), g_get_home_dir ()); + } + + g_hash_table_iter_init (&iter, context->filesystems); + while (g_hash_table_iter_next (&iter, &key, &value)) + { + const char *filesystem = key; + FlatpakFilesystemMode mode = GPOINTER_TO_INT (value); + + if (strcmp (filesystem, "host") == 0 || + strcmp (filesystem, "home") == 0) + continue; + + if (g_str_has_prefix (filesystem, "xdg-")) + { + const char *path, *rest = NULL; + const char *config_key = NULL; + g_autofree char *subpath = NULL; + + if (!get_xdg_user_dir_from_string (filesystem, &config_key, &rest, &path)) + { + g_warning ("Unsupported xdg dir %s", filesystem); + continue; + } + + if (path == NULL) + continue; /* Unconfigured, ignore */ + + if (strcmp (path, g_get_home_dir ()) == 0) + { + /* xdg-user-dirs sets disabled dirs to $HOME, and its in general not a good + idea to set full access to $HOME other than explicitly, so we ignore + these */ + g_debug ("Xdg dir %s is $HOME (i.e. disabled), ignoring", filesystem); + continue; + } + + subpath = g_build_filename (path, rest, NULL); + + if (mode == FLATPAK_FILESYSTEM_MODE_CREATE && do_create) + g_mkdir_with_parents (subpath, 0755); + + if (g_file_test (subpath, G_FILE_TEST_EXISTS)) + { + if (config_key && xdg_dirs_conf) + g_string_append_printf (xdg_dirs_conf, "%s=\"%s\"\n", + config_key, path); + + flatpak_exports_add_path_expose_or_hide (exports, mode, subpath); + } + } + else if (g_str_has_prefix (filesystem, "~/")) + { + g_autofree char *path = NULL; + + path = g_build_filename (g_get_home_dir (), filesystem + 2, NULL); + + if (mode == FLATPAK_FILESYSTEM_MODE_CREATE && do_create) + g_mkdir_with_parents (path, 0755); + + if (g_file_test (path, G_FILE_TEST_EXISTS)) + flatpak_exports_add_path_expose_or_hide (exports, mode, path); + } + else if (g_str_has_prefix (filesystem, "/")) + { + if (mode == FLATPAK_FILESYSTEM_MODE_CREATE && do_create) + g_mkdir_with_parents (filesystem, 0755); + + if (g_file_test (filesystem, G_FILE_TEST_EXISTS)) + flatpak_exports_add_path_expose_or_hide (exports, mode, filesystem); + } + else + { + g_warning ("Unexpected filesystem arg %s", filesystem); + } + } + + if (app_id_dir) + { + g_autoptr(GFile) apps_dir = g_file_get_parent (app_id_dir); + /* Hide the .var/app dir by default (unless explicitly made visible) */ + flatpak_exports_add_path_tmpfs (exports, flatpak_file_get_path_cached (apps_dir)); + /* But let the app write to the per-app dir in it */ + flatpak_exports_add_path_expose (exports, FLATPAK_FILESYSTEM_MODE_READ_WRITE, + flatpak_file_get_path_cached (app_id_dir)); + } + + if (home_access_out != NULL) + *home_access_out = home_access; +} + +FlatpakExports * +flatpak_context_get_exports (FlatpakContext *context, + const char *app_id) +{ + g_autoptr(FlatpakExports) exports = flatpak_exports_new (); + g_autoptr(GFile) app_id_dir = flatpak_get_data_dir (app_id); + + flatpak_context_export (context, exports, app_id_dir, FALSE, NULL, NULL); + return g_steal_pointer (&exports); +} + +void +flatpak_context_append_bwrap_filesystem (FlatpakContext *context, + FlatpakBwrap *bwrap, + const char *app_id, + GFile *app_id_dir, + FlatpakExports **exports_out) +{ + g_autoptr(FlatpakExports) exports = flatpak_exports_new (); + g_autoptr(GString) xdg_dirs_conf = g_string_new (""); + g_autoptr(GFile) user_flatpak_dir = NULL; + gboolean home_access = FALSE; + GHashTableIter iter; + gpointer key, value; + + flatpak_context_export (context, exports, app_id_dir, TRUE, xdg_dirs_conf, &home_access); + if (app_id_dir != NULL) + flatpak_run_apply_env_appid (bwrap, app_id_dir); + + if (!home_access) + { + /* Enable persistent mapping only if no access to real home dir */ + + g_hash_table_iter_init (&iter, context->persistent); + while (g_hash_table_iter_next (&iter, &key, NULL)) + { + const char *persist = key; + g_autofree char *src = g_build_filename (g_get_home_dir (), ".var/app", app_id, persist, NULL); + g_autofree char *dest = g_build_filename (g_get_home_dir (), persist, NULL); + + g_mkdir_with_parents (src, 0755); + + flatpak_bwrap_add_bind_arg (bwrap, "--bind", src, dest); + } + } + + { + g_autofree char *run_user_app_dst = g_strdup_printf ("/run/user/%d/app/%s", getuid (), app_id); + g_autofree char *run_user_app_src = g_build_filename (g_get_user_runtime_dir (), "app", app_id, NULL); + + if (glnx_shutil_mkdir_p_at (AT_FDCWD, + run_user_app_src, + 0700, + NULL, + NULL)) + flatpak_bwrap_add_args (bwrap, + "--bind", run_user_app_src, run_user_app_dst, + NULL); + } + + /* Hide the flatpak dir by default (unless explicitly made visible) */ + user_flatpak_dir = flatpak_get_user_base_dir_location (); + flatpak_exports_add_path_tmpfs (exports, flatpak_file_get_path_cached (user_flatpak_dir)); + + /* Ensure we always have a homedir */ + flatpak_exports_add_path_dir (exports, g_get_home_dir ()); + + /* This actually outputs the args for the hide/expose operations above */ + flatpak_exports_append_bwrap_args (exports, bwrap); + + /* Special case subdirectories of the cache, config and data xdg + * dirs. If these are accessible explicilty, then we bind-mount + * these in the app-id dir. This allows applications to explicitly + * opt out of keeping some config/cache/data in the app-specific + * directory. + */ + if (app_id_dir) + { + g_hash_table_iter_init (&iter, context->filesystems); + while (g_hash_table_iter_next (&iter, &key, &value)) + { + const char *filesystem = key; + FlatpakFilesystemMode mode = GPOINTER_TO_INT (value); + g_autofree char *xdg_path = NULL; + const char *rest, *where; + + xdg_path = get_xdg_dir_from_string (filesystem, &rest, &where); + + if (xdg_path != NULL && *rest != 0 && + mode >= FLATPAK_FILESYSTEM_MODE_READ_ONLY) + { + g_autoptr(GFile) app_version = g_file_get_child (app_id_dir, where); + g_autoptr(GFile) app_version_subdir = g_file_resolve_relative_path (app_version, rest); + + if (g_file_test (xdg_path, G_FILE_TEST_IS_DIR) || + g_file_test (xdg_path, G_FILE_TEST_IS_REGULAR)) + { + g_autofree char *xdg_path_in_app = g_file_get_path (app_version_subdir); + flatpak_bwrap_add_bind_arg (bwrap, + mode == FLATPAK_FILESYSTEM_MODE_READ_ONLY ? "--ro-bind" : "--bind", + xdg_path, xdg_path_in_app); + } + } + } + } + + if (home_access && app_id_dir != NULL) + { + g_autofree char *src_path = g_build_filename (g_get_user_config_dir (), + "user-dirs.dirs", + NULL); + g_autofree char *path = g_build_filename (flatpak_file_get_path_cached (app_id_dir), + "config/user-dirs.dirs", NULL); + if (g_file_test (src_path, G_FILE_TEST_EXISTS)) + flatpak_bwrap_add_bind_arg (bwrap, "--ro-bind", src_path, path); + } + else if (xdg_dirs_conf->len > 0 && app_id_dir != NULL) + { + g_autofree char *path = + g_build_filename (flatpak_file_get_path_cached (app_id_dir), + "config/user-dirs.dirs", NULL); + + flatpak_bwrap_add_args_data (bwrap, "xdg-config-dirs", + xdg_dirs_conf->str, xdg_dirs_conf->len, path, NULL); + } + + if (exports_out) + *exports_out = g_steal_pointer (&exports); +} diff --git a/common/flatpak-context.h b/common/flatpak-context.h new file mode 100644 index 00000000..0beb8e71 --- /dev/null +++ b/common/flatpak-context.h @@ -0,0 +1,128 @@ +/* + * Copyright © 2014-2018 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: + * Alexander Larsson + */ + +#ifndef __FLATPAK_CONTEXT_H__ +#define __FLATPAK_CONTEXT_H__ + +#include "libglnx/libglnx.h" +#include "dbus-proxy/flatpak-proxy.h" +#include "flatpak-utils.h" +#include "flatpak-exports.h" + +typedef struct FlatpakContext FlatpakContext; + +typedef enum { + FLATPAK_CONTEXT_SHARED_NETWORK = 1 << 0, + FLATPAK_CONTEXT_SHARED_IPC = 1 << 1, +} FlatpakContextShares; + +typedef enum { + FLATPAK_CONTEXT_SOCKET_X11 = 1 << 0, + FLATPAK_CONTEXT_SOCKET_WAYLAND = 1 << 1, + FLATPAK_CONTEXT_SOCKET_PULSEAUDIO = 1 << 2, + FLATPAK_CONTEXT_SOCKET_SESSION_BUS = 1 << 3, + FLATPAK_CONTEXT_SOCKET_SYSTEM_BUS = 1 << 4, + FLATPAK_CONTEXT_SOCKET_FALLBACK_X11 = 1 << 5, /* For backwards compat, also set SOCKET_X11 */ +} FlatpakContextSockets; + +typedef enum { + FLATPAK_CONTEXT_DEVICE_DRI = 1 << 0, + FLATPAK_CONTEXT_DEVICE_ALL = 1 << 1, + FLATPAK_CONTEXT_DEVICE_KVM = 1 << 2, +} FlatpakContextDevices; + +typedef enum { + FLATPAK_CONTEXT_FEATURE_DEVEL = 1 << 0, + FLATPAK_CONTEXT_FEATURE_MULTIARCH = 1 << 1, +} FlatpakContextFeatures; + +struct FlatpakContext +{ + FlatpakContextShares shares; + FlatpakContextShares shares_valid; + FlatpakContextSockets sockets; + FlatpakContextSockets sockets_valid; + FlatpakContextDevices devices; + FlatpakContextDevices devices_valid; + FlatpakContextFeatures features; + FlatpakContextFeatures features_valid; + GHashTable *env_vars; + GHashTable *persistent; + GHashTable *filesystems; + GHashTable *session_bus_policy; + GHashTable *system_bus_policy; + GHashTable *generic_policy; +}; + +extern const char *flatpak_context_sockets[]; +extern const char *flatpak_context_devices[]; +extern const char *flatpak_context_features[]; +extern const char *flatpak_context_shares[]; + +FlatpakContext *flatpak_context_new (void); +void flatpak_context_free (FlatpakContext *context); +void flatpak_context_merge (FlatpakContext *context, + FlatpakContext *other); +GOptionGroup *flatpak_context_get_options (FlatpakContext *context); +void flatpak_context_complete (FlatpakContext *context, + FlatpakCompletion *completion); +gboolean flatpak_context_load_metadata (FlatpakContext *context, + GKeyFile *metakey, + GError **error); +void flatpak_context_save_metadata (FlatpakContext *context, + gboolean flatten, + GKeyFile *metakey); +void flatpak_context_allow_host_fs (FlatpakContext *context); +void flatpak_context_set_session_bus_policy (FlatpakContext *context, + const char *name, + FlatpakPolicy policy); +void flatpak_context_set_system_bus_policy (FlatpakContext *context, + const char *name, + FlatpakPolicy policy); +void flatpak_context_to_args (FlatpakContext *context, + GPtrArray *args); +void flatpak_context_add_bus_filters (FlatpakContext *context, + const char *app_id, + gboolean session_bus, + GPtrArray *dbus_proxy_argv); + +gboolean flatpak_context_get_needs_session_bus_proxy (FlatpakContext *context); +gboolean flatpak_context_get_needs_system_bus_proxy (FlatpakContext *context); + +gboolean flatpak_context_allows_features (FlatpakContext *context, + FlatpakContextFeatures features); + +FlatpakContext *flatpak_context_load_for_deploy (FlatpakDeploy *deploy, + GError **error); +FlatpakContext *flatpak_context_load_for_app (const char *app_id, + GError **error); + +FlatpakExports *flatpak_context_get_exports (FlatpakContext *context, + const char *app_id); + +void flatpak_context_append_bwrap_filesystem (FlatpakContext *context, + FlatpakBwrap *bwrap, + const char *app_id, + GFile *app_id_dir, + FlatpakExports **exports_out); + +G_DEFINE_AUTOPTR_CLEANUP_FUNC (FlatpakContext, flatpak_context_free) + +#endif /* __FLATPAK_CONTEXT_H__ */ diff --git a/common/flatpak-db.c b/common/flatpak-db.c deleted file mode 100644 index f20443ed..00000000 --- a/common/flatpak-db.c +++ /dev/null @@ -1,1224 +0,0 @@ -/* flatpak-db.c - * - * Copyright (C) 2015 Red Hat, Inc - * - * This file 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 file is distributed in the hope that 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 program. If not, see . - * - * Authors: - * Alexander Larsson - */ - -#include "config.h" - -#include -#include -#include -#include -#include - -#include "flatpak-db.h" -#include "gvdb/gvdb-reader.h" -#include "gvdb/gvdb-builder.h" - -struct FlatpakDb -{ - GObject parent; - - char *path; - gboolean fail_if_not_found; - GvdbTable *gvdb; - GBytes *gvdb_contents; - - gboolean dirty; - - /* Map id => GVariant (data, sorted-dict[appid->perms]) */ - GvdbTable *main_table; - GHashTable *main_updates; - - /* (reverse) Map app id => [ id ]*/ - GvdbTable *app_table; - GHashTable *app_additions; - GHashTable *app_removals; -}; - -typedef struct -{ - GObjectClass parent_class; -} FlatpakDbClass; - -static void initable_iface_init (GInitableIface *initable_iface); - -G_DEFINE_TYPE_WITH_CODE (FlatpakDb, flatpak_db, G_TYPE_OBJECT, - G_IMPLEMENT_INTERFACE (G_TYPE_INITABLE, initable_iface_init)); - -enum { - PROP_0, - PROP_PATH, - PROP_FAIL_IF_NOT_FOUND, - LAST_PROP -}; - -static int -cmpstringp (const void *p1, const void *p2) -{ - return strcmp (*(char * const *) p1, *(char * const *) p2); -} - -static void -sort_strv (const char **strv) -{ - qsort (strv, g_strv_length ((char **) strv), sizeof (const char *), cmpstringp); -} - -static int -str_ptr_array_find (GPtrArray *array, - const char *str) -{ - int i; - - for (i = 0; i < array->len; i++) - if (strcmp (g_ptr_array_index (array, i), str) == 0) - return i; - - return -1; -} - -static gboolean -str_ptr_array_contains (GPtrArray *array, - const char *str) -{ - return str_ptr_array_find (array, str) >= 0; -} - -const char * -flatpak_db_get_path (FlatpakDb *self) -{ - g_return_val_if_fail (FLATPAK_IS_DB (self), NULL); - - return self->path; -} - -void -flatpak_db_set_path (FlatpakDb *self, - const char *path) -{ - g_return_if_fail (FLATPAK_IS_DB (self)); - - g_clear_pointer (&self->path, g_free); - self->path = g_strdup (path); -} - -FlatpakDb * -flatpak_db_new (const char *path, - gboolean fail_if_not_found, - GError **error) -{ - return g_initable_new (FLATPAK_TYPE_DB, - NULL, - error, - "path", path, - "fail-if-not-found", fail_if_not_found, - NULL); -} - -static void -flatpak_db_finalize (GObject *object) -{ - FlatpakDb *self = (FlatpakDb *) object; - - g_clear_pointer (&self->path, g_free); - g_clear_pointer (&self->gvdb_contents, g_bytes_unref); - g_clear_pointer (&self->gvdb, gvdb_table_free); - g_clear_pointer (&self->main_table, gvdb_table_free); - g_clear_pointer (&self->app_table, gvdb_table_free); - g_clear_pointer (&self->main_updates, g_hash_table_unref); - g_clear_pointer (&self->app_additions, g_hash_table_unref); - g_clear_pointer (&self->app_removals, g_hash_table_unref); - - G_OBJECT_CLASS (flatpak_db_parent_class)->finalize (object); -} - -static void -flatpak_db_get_property (GObject *object, - guint prop_id, - GValue *value, - GParamSpec *pspec) -{ - FlatpakDb *self = FLATPAK_DB (object); - - switch (prop_id) - { - case PROP_PATH: - g_value_set_string (value, self->path); - break; - - case PROP_FAIL_IF_NOT_FOUND: - g_value_set_boolean (value, self->fail_if_not_found); - break; - - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - } -} - -static void -flatpak_db_set_property (GObject *object, - guint prop_id, - const GValue *value, - GParamSpec *pspec) -{ - FlatpakDb *self = FLATPAK_DB (object); - - switch (prop_id) - { - case PROP_PATH: - g_clear_pointer (&self->path, g_free); - self->path = g_value_dup_string (value); - break; - - case PROP_FAIL_IF_NOT_FOUND: - self->fail_if_not_found = g_value_get_boolean (value); - break; - - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - } -} - -static void -flatpak_db_class_init (FlatpakDbClass *klass) -{ - GObjectClass *object_class = G_OBJECT_CLASS (klass); - - object_class->finalize = flatpak_db_finalize; - object_class->get_property = flatpak_db_get_property; - object_class->set_property = flatpak_db_set_property; - - g_object_class_install_property (object_class, - PROP_PATH, - g_param_spec_string ("path", - "", - "", - NULL, - G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); - g_object_class_install_property (object_class, - PROP_FAIL_IF_NOT_FOUND, - g_param_spec_boolean ("fail-if-not-found", - "", - "", - TRUE, - G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); -} - -static void -flatpak_db_init (FlatpakDb *self) -{ - self->fail_if_not_found = TRUE; - - self->main_updates = - g_hash_table_new_full (g_str_hash, g_str_equal, - g_free, (GDestroyNotify) g_variant_unref); - self->app_additions = - g_hash_table_new_full (g_str_hash, g_str_equal, - g_free, (GDestroyNotify) g_ptr_array_unref); - self->app_removals = - g_hash_table_new_full (g_str_hash, g_str_equal, - g_free, (GDestroyNotify) g_ptr_array_unref); -} - -static gboolean -is_on_nfs (const char *path) -{ - struct statfs statfs_buffer; - int statfs_result; - g_autofree char *dirname = NULL; - - dirname = g_path_get_dirname (path); - - statfs_result = statfs (dirname, &statfs_buffer); - if (statfs_result != 0) - return FALSE; - - return statfs_buffer.f_type == 0x6969; -} - -static gboolean -initable_init (GInitable *initable, - GCancellable *cancellable, - GError **error) -{ - FlatpakDb *self = (FlatpakDb *) initable; - GError *my_error = NULL; - - if (self->path == NULL) - return TRUE; - - if (is_on_nfs (self->path)) - { - g_autoptr(GFile) file = g_file_new_for_path (self->path); - char *contents; - gsize length; - - /* We avoid using mmap on NFS, because its prone to give us SIGBUS at semi-random - times (nfs down, file removed, etc). Instead we just load the file */ - if (g_file_load_contents (file, cancellable, &contents, &length, NULL, &my_error)) - self->gvdb_contents = g_bytes_new_take (contents, length); - } - else - { - GMappedFile *mapped = g_mapped_file_new (self->path, FALSE, &my_error); - if (mapped) - { - self->gvdb_contents = g_mapped_file_get_bytes (mapped); - g_mapped_file_unref (mapped); - } - } - - if (self->gvdb_contents == NULL) - { - if (!self->fail_if_not_found && - g_error_matches (my_error, G_FILE_ERROR, G_FILE_ERROR_NOENT)) - { - g_error_free (my_error); - } - else - { - g_propagate_error (error, my_error); - return FALSE; - } - } - else - { - self->gvdb = gvdb_table_new_from_bytes (self->gvdb_contents, TRUE, error); - if (self->gvdb == NULL) - return FALSE; - - self->main_table = gvdb_table_get_table (self->gvdb, "main"); - if (self->main_table == NULL) - { - g_set_error (error, G_FILE_ERROR, G_FILE_ERROR_INVAL, - "No main table in db"); - return FALSE; - } - - self->app_table = gvdb_table_get_table (self->gvdb, "apps"); - if (self->app_table == NULL) - { - g_set_error (error, G_FILE_ERROR, G_FILE_ERROR_INVAL, - "No app table in db"); - return FALSE; - } - } - - return TRUE; -} - -static void -initable_iface_init (GInitableIface *initable_iface) -{ - initable_iface->init = initable_init; -} - -/* Transfer: full */ -char ** -flatpak_db_list_ids (FlatpakDb *self) -{ - GPtrArray *res; - GHashTableIter iter; - gpointer key, value; - int i; - - g_return_val_if_fail (FLATPAK_IS_DB (self), NULL); - - res = g_ptr_array_new (); - - g_hash_table_iter_init (&iter, self->main_updates); - while (g_hash_table_iter_next (&iter, &key, &value)) - { - if (value != NULL) - g_ptr_array_add (res, g_strdup (key)); - } - - if (self->main_table) - { - // TODO: can we use gvdb_table_list here??? - g_autofree char **main_ids = gvdb_table_get_names (self->main_table, NULL); - - for (i = 0; main_ids[i] != NULL; i++) - { - char *id = main_ids[i]; - - if (g_hash_table_lookup_extended (self->main_updates, id, NULL, NULL)) - g_free (id); - else - g_ptr_array_add (res, id); - } - } - - g_ptr_array_add (res, NULL); - return (char **) g_ptr_array_free (res, FALSE); -} - -static gboolean -app_update_empty (GHashTable *ht, const char *app) -{ - GPtrArray *array; - - array = g_hash_table_lookup (ht, app); - if (array == NULL) - return TRUE; - - return array->len == 0; -} - -/* Transfer: full */ -char ** -flatpak_db_list_apps (FlatpakDb *self) -{ - gpointer key, _value; - GHashTableIter iter; - GPtrArray *res; - int i; - - g_return_val_if_fail (FLATPAK_IS_DB (self), NULL); - - res = g_ptr_array_new (); - - g_hash_table_iter_init (&iter, self->app_additions); - while (g_hash_table_iter_next (&iter, &key, &_value)) - { - GPtrArray *value = _value; - if (value->len > 0) - g_ptr_array_add (res, g_strdup (key)); - } - - if (self->app_table) - { - // TODO: can we use gvdb_table_list here??? - g_autofree char **apps = gvdb_table_get_names (self->app_table, NULL); - - for (i = 0; apps[i] != NULL; i++) - { - char *app = apps[i]; - gboolean empty = TRUE; - GPtrArray *removals; - int j; - - /* Don't use if we already added above */ - if (app_update_empty (self->app_additions, app)) - { - g_autoptr(GVariant) ids_v = NULL; - - removals = g_hash_table_lookup (self->app_removals, app); - - /* Add unless all items are removed */ - ids_v = gvdb_table_get_value (self->app_table, app); - - if (ids_v) - { - g_autofree const char **ids = g_variant_get_strv (ids_v, NULL); - - for (j = 0; ids[j] != NULL; j++) - { - if (removals == NULL || - !str_ptr_array_contains (removals, ids[j])) - { - empty = FALSE; - break; - } - } - } - } - - if (empty) - g_free (app); - else - g_ptr_array_add (res, app); - } - } - - g_ptr_array_add (res, NULL); - return (char **) g_ptr_array_free (res, FALSE); -} - -/* Transfer: full */ -char ** -flatpak_db_list_ids_by_app (FlatpakDb *self, - const char *app) -{ - GPtrArray *res; - GPtrArray *additions; - GPtrArray *removals; - int i; - - g_return_val_if_fail (FLATPAK_IS_DB (self), NULL); - - res = g_ptr_array_new (); - - additions = g_hash_table_lookup (self->app_additions, app); - removals = g_hash_table_lookup (self->app_removals, app); - - if (additions) - { - for (i = 0; i < additions->len; i++) - g_ptr_array_add (res, - g_strdup (g_ptr_array_index (additions, i))); - } - - if (self->app_table) - { - g_autoptr(GVariant) ids_v = gvdb_table_get_value (self->app_table, app); - if (ids_v) - { - g_autofree const char **ids = g_variant_get_strv (ids_v, NULL); - - for (i = 0; ids[i] != NULL; i++) - { - if (removals == NULL || - !str_ptr_array_contains (removals, ids[i])) - g_ptr_array_add (res, g_strdup (ids[i])); - } - } - } - - g_ptr_array_add (res, NULL); - return (char **) g_ptr_array_free (res, FALSE); -} - -/* Transfer: full */ -FlatpakDbEntry * -flatpak_db_lookup (FlatpakDb *self, - const char *id) -{ - GVariant *res = NULL; - gpointer value; - - g_return_val_if_fail (FLATPAK_IS_DB (self), NULL); - g_return_val_if_fail (id != NULL, NULL); - - if (g_hash_table_lookup_extended (self->main_updates, id, NULL, &value)) - { - if (value != NULL) - res = g_variant_ref ((GVariant *) value); - } - else if (self->main_table) - { - res = gvdb_table_get_value (self->main_table, id); - } - - return (FlatpakDbEntry *) res; -} - -/* Transfer: full */ -char ** -flatpak_db_list_ids_by_value (FlatpakDb *self, - GVariant *data) -{ - g_autofree char **ids = flatpak_db_list_ids (self); - int i; - GPtrArray *res; - - g_return_val_if_fail (FLATPAK_IS_DB (self), NULL); - g_return_val_if_fail (data != NULL, NULL); - - res = g_ptr_array_new (); - - for (i = 0; ids[i] != NULL; i++) - { - char *id = ids[i]; - - g_autoptr(FlatpakDbEntry) entry = NULL; - g_autoptr(GVariant) entry_data = NULL; - - entry = flatpak_db_lookup (self, id); - if (entry) - { - entry_data = flatpak_db_entry_get_data (entry); - if (g_variant_equal (data, entry_data)) - { - g_ptr_array_add (res, id); - id = NULL; /* Don't free, as we return this */ - } - } - g_free (id); - } - - g_ptr_array_add (res, NULL); - return (char **) g_ptr_array_free (res, FALSE); -} - -static void -add_app_id (FlatpakDb *self, - const char *app, - const char *id) -{ - GPtrArray *additions; - GPtrArray *removals; - int i; - - additions = g_hash_table_lookup (self->app_additions, app); - removals = g_hash_table_lookup (self->app_removals, app); - - if (removals) - { - i = str_ptr_array_find (removals, id); - if (i >= 0) - g_ptr_array_remove_index_fast (removals, i); - } - - if (additions) - { - if (!str_ptr_array_contains (additions, id)) - g_ptr_array_add (additions, g_strdup (id)); - } - else - { - additions = g_ptr_array_new_with_free_func (g_free); - g_ptr_array_add (additions, g_strdup (id)); - g_hash_table_insert (self->app_additions, - g_strdup (app), additions); - } -} - -static void -remove_app_id (FlatpakDb *self, - const char *app, - const char *id) -{ - GPtrArray *additions; - GPtrArray *removals; - int i; - - additions = g_hash_table_lookup (self->app_additions, app); - removals = g_hash_table_lookup (self->app_removals, app); - - if (additions) - { - i = str_ptr_array_find (additions, id); - if (i >= 0) - g_ptr_array_remove_index_fast (additions, i); - } - - if (removals) - { - if (!str_ptr_array_contains (removals, id)) - g_ptr_array_add (removals, g_strdup (id)); - } - else - { - removals = g_ptr_array_new_with_free_func (g_free); - g_ptr_array_add (removals, g_strdup (id)); - g_hash_table_insert (self->app_removals, - g_strdup (app), removals); - } -} - -gboolean -flatpak_db_is_dirty (FlatpakDb *self) -{ - g_return_val_if_fail (FLATPAK_IS_DB (self), FALSE); - - return self->dirty; -} - -/* add, replace, or NULL entry to remove */ -void -flatpak_db_set_entry (FlatpakDb *self, - const char *id, - FlatpakDbEntry *entry) -{ - g_autoptr(FlatpakDbEntry) old_entry = NULL; - g_autofree const char **old = NULL; - g_autofree const char **new = NULL; - static const char *empty[] = { NULL }; - const char **a, **b; - int ia, ib; - - g_return_if_fail (FLATPAK_IS_DB (self)); - g_return_if_fail (id != NULL); - - self->dirty = TRUE; - - old_entry = flatpak_db_lookup (self, id); - - g_hash_table_insert (self->main_updates, - g_strdup (id), - flatpak_db_entry_ref (entry)); - - a = empty; - b = empty; - - if (old_entry) - { - old = flatpak_db_entry_list_apps (old_entry); - sort_strv (old); - a = old; - } - - if (entry) - { - new = flatpak_db_entry_list_apps (entry); - sort_strv (new); - b = new; - } - - ia = 0; - ib = 0; - while (a[ia] != NULL || b[ib] != NULL) - { - if (a[ia] == NULL) - { - /* Not in old, but in new => added */ - add_app_id (self, b[ib], id); - ib++; - } - else if (b[ib] == NULL) - { - /* Not in new, but in old => removed */ - remove_app_id (self, a[ia], id); - ia++; - } - else - { - int cmp = strcmp (a[ia], b[ib]); - - if (cmp == 0) - { - /* In both, no change */ - ia++; - ib++; - } - else if (cmp < 0) - { - /* Not in new, but in old => removed */ - remove_app_id (self, a[ia], id); - ia++; - } - else /* cmp > 0 */ - { - /* Not in old, but in new => added */ - add_app_id (self, b[ib], id); - ib++; - } - } - } -} - -void -flatpak_db_update (FlatpakDb *self) -{ - GHashTable *root, *main_h, *apps_h; - GBytes *new_contents; - GvdbTable *new_gvdb; - int i; - - g_auto(GStrv) ids = NULL; - g_auto(GStrv) apps = NULL; - - g_return_if_fail (FLATPAK_IS_DB (self)); - - root = gvdb_hash_table_new (NULL, NULL); - main_h = gvdb_hash_table_new (root, "main"); - apps_h = gvdb_hash_table_new (root, "apps"); - g_hash_table_unref (main_h); - g_hash_table_unref (apps_h); - - ids = flatpak_db_list_ids (self); - for (i = 0; ids[i] != 0; i++) - { - g_autoptr(FlatpakDbEntry) entry = flatpak_db_lookup (self, ids[i]); - if (entry != NULL) - { - GvdbItem *item; - - item = gvdb_hash_table_insert (main_h, ids[i]); - gvdb_item_set_value (item, (GVariant *) entry); - } - } - - apps = flatpak_db_list_apps (self); - for (i = 0; apps[i] != 0; i++) - { - g_auto(GStrv) app_ids = flatpak_db_list_ids_by_app (self, apps[i]); - GVariantBuilder builder; - GvdbItem *item; - int j; - - /* May as well ensure that on-disk arrays are sorted, even if we don't use it yet */ - sort_strv ((const char **) app_ids); - - /* We should never list an app that has empty id lists */ - g_assert (app_ids[0] != NULL); - - g_variant_builder_init (&builder, G_VARIANT_TYPE_ARRAY); - for (j = 0; app_ids[j] != NULL; j++) - g_variant_builder_add (&builder, "s", app_ids[j]); - - item = gvdb_hash_table_insert (apps_h, apps[i]); - gvdb_item_set_value (item, g_variant_builder_end (&builder)); - } - - new_contents = gvdb_table_get_content (root, FALSE); - new_gvdb = gvdb_table_new_from_bytes (new_contents, TRUE, NULL); - - /* This was just created, any failure to parse it is purely an internal error */ - g_assert (new_gvdb != NULL); - - g_clear_pointer (&self->gvdb_contents, g_bytes_unref); - g_clear_pointer (&self->gvdb, gvdb_table_free); - self->gvdb_contents = new_contents; - self->gvdb = new_gvdb; - self->dirty = FALSE; -} - -GBytes * -flatpak_db_get_content (FlatpakDb *self) -{ - g_return_val_if_fail (FLATPAK_IS_DB (self), NULL); - - return self->gvdb_contents; -} - -/* Note: You must first call update to serialize, this only saves serialied data */ -gboolean -flatpak_db_save_content (FlatpakDb *self, - GError **error) -{ - GBytes *content = NULL; - - if (self->gvdb_contents == NULL) - { - g_set_error (error, G_FILE_ERROR, G_FILE_ERROR_INVAL, - "No content to save"); - return FALSE; - } - - if (self->path == NULL) - { - g_set_error (error, G_FILE_ERROR, G_FILE_ERROR_INVAL, - "No path set"); - return FALSE; - } - - content = self->gvdb_contents; - return g_file_set_contents (self->path, g_bytes_get_data (content, NULL), g_bytes_get_size (content), error); -} - -static void -save_content_callback (GObject *source_object, - GAsyncResult *res, - gpointer user_data) -{ - g_autoptr(GTask) task = user_data; - GFile *file = G_FILE (source_object); - gboolean ok; - g_autoptr(GError) error = NULL; - - ok = g_file_replace_contents_finish (file, - res, - NULL, &error); - if (ok) - g_task_return_boolean (task, TRUE); - else - g_task_return_error (task, error); -} - -void -flatpak_db_save_content_async (FlatpakDb *self, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data) -{ - GBytes *content = NULL; - - g_autoptr(GTask) task = NULL; - g_autoptr(GFile) file = NULL; - - task = g_task_new (self, cancellable, callback, user_data); - - if (self->gvdb_contents == NULL) - { - g_task_return_new_error (task, G_FILE_ERROR, G_FILE_ERROR_INVAL, - "No content to save"); - return; - } - - if (self->path == NULL) - { - g_task_return_new_error (task, G_FILE_ERROR, G_FILE_ERROR_INVAL, - "No path set"); - return; - } - - content = g_bytes_ref (self->gvdb_contents); - g_task_set_task_data (task, content, (GDestroyNotify) g_bytes_unref); - - file = g_file_new_for_path (self->path); - g_file_replace_contents_bytes_async (file, content, - NULL, FALSE, 0, - cancellable, - save_content_callback, - g_object_ref (task)); -} - -gboolean -flatpak_db_save_content_finish (FlatpakDb *self, - GAsyncResult *res, - GError **error) -{ - return g_task_propagate_boolean (G_TASK (res), error); -} - - -GString * -flatpak_db_print_string (FlatpakDb *self, - GString *string) -{ - g_auto(GStrv) ids = NULL; - g_auto(GStrv) apps = NULL; - int i; - - g_return_val_if_fail (FLATPAK_IS_DB (self), NULL); - - if G_UNLIKELY (string == NULL) - string = g_string_new (NULL); - - g_string_append_printf (string, "main {\n"); - - ids = flatpak_db_list_ids (self); - sort_strv ((const char **) ids); - for (i = 0; ids[i] != 0; i++) - { - g_autoptr(FlatpakDbEntry) entry = flatpak_db_lookup (self, ids[i]); - g_string_append_printf (string, " %s: ", ids[i]); - if (entry != NULL) - flatpak_db_entry_print_string (entry, string); - g_string_append_printf (string, "\n"); - } - - g_string_append_printf (string, "}\napps {\n"); - - apps = flatpak_db_list_apps (self); - sort_strv ((const char **) apps); - for (i = 0; apps[i] != 0; i++) - { - int j; - g_auto(GStrv) app_ids = NULL; - - app_ids = flatpak_db_list_ids_by_app (self, apps[i]); - sort_strv ((const char **) app_ids); - - g_string_append_printf (string, " %s: ", apps[i]); - for (j = 0; app_ids[j] != NULL; j++) - g_string_append_printf (string, "%s%s", j == 0 ? "" : ", ", app_ids[j]); - g_string_append_printf (string, "\n"); - } - - g_string_append_printf (string, "}\n"); - - return string; -} - -char * -flatpak_db_print (FlatpakDb *self) -{ - return g_string_free (flatpak_db_print_string (self, NULL), FALSE); -} - -FlatpakDbEntry * -flatpak_db_entry_ref (FlatpakDbEntry *entry) -{ - if (entry != NULL) - g_variant_ref ((GVariant *) entry); - return entry; -} - -void -flatpak_db_entry_unref (FlatpakDbEntry *entry) -{ - g_variant_unref ((GVariant *) entry); -} - -/* Transfer: full */ -GVariant * -flatpak_db_entry_get_data (FlatpakDbEntry *entry) -{ - g_autoptr(GVariant) variant = g_variant_get_child_value ((GVariant *) entry, 0); - - return g_variant_get_child_value (variant, 0); -} - -/* Transfer: container */ -const char ** -flatpak_db_entry_list_apps (FlatpakDbEntry *entry) -{ - GVariant *v = (GVariant *) entry; - - g_autoptr(GVariant) app_array = NULL; - GVariantIter iter; - GVariant *child; - GPtrArray *res; - - res = g_ptr_array_new (); - - app_array = g_variant_get_child_value (v, 1); - - g_variant_iter_init (&iter, app_array); - while ((child = g_variant_iter_next_value (&iter))) - { - const char *child_app_id; - g_autoptr(GVariant) permissions = g_variant_get_child_value (child, 1); - - if (g_variant_n_children (permissions) > 0) - { - g_variant_get_child (child, 0, "&s", &child_app_id); - g_ptr_array_add (res, (char *) child_app_id); - } - - g_variant_unref (child); - } - - g_ptr_array_add (res, NULL); - return (const char **) g_ptr_array_free (res, FALSE); -} - -static GVariant * -flatpak_db_entry_get_permissions_variant (FlatpakDbEntry *entry, - const char *app_id) -{ - GVariant *v = (GVariant *) entry; - - g_autoptr(GVariant) app_array = NULL; - GVariant *child; - GVariant *res = NULL; - gsize n_children, start, end, m; - const char *child_app_id; - int cmp; - - app_array = g_variant_get_child_value (v, 1); - - n_children = g_variant_n_children (app_array); - - start = 0; - end = n_children; - while (start < end) - { - m = (start + end) / 2; - - child = g_variant_get_child_value (app_array, m); - g_variant_get_child (child, 0, "&s", &child_app_id); - - cmp = strcmp (app_id, child_app_id); - if (cmp == 0) - { - res = g_variant_get_child_value (child, 1); - break; - } - else if (cmp < 0) - { - end = m; - } - else /* cmp > 0 */ - { - start = m + 1; - } - } - - return res; -} - - -/* Transfer: container */ -const char ** -flatpak_db_entry_list_permissions (FlatpakDbEntry *entry, - const char *app) -{ - g_autoptr(GVariant) permissions = NULL; - - permissions = flatpak_db_entry_get_permissions_variant (entry, app); - if (permissions) - return g_variant_get_strv (permissions, NULL); - else - return g_new0 (const char *, 1); -} - -gboolean -flatpak_db_entry_has_permission (FlatpakDbEntry *entry, - const char *app, - const char *permission) -{ - g_autofree const char **app_permissions = NULL; - - app_permissions = flatpak_db_entry_list_permissions (entry, app); - - return g_strv_contains (app_permissions, permission); -} - -gboolean -flatpak_db_entry_has_permissions (FlatpakDbEntry *entry, - const char *app, - const char **permissions) -{ - g_autofree const char **app_permissions = NULL; - int i; - - app_permissions = flatpak_db_entry_list_permissions (entry, app); - - for (i = 0; permissions[i] != NULL; i++) - { - if (!g_strv_contains (app_permissions, permissions[i])) - return FALSE; - } - - return TRUE; -} - -static GVariant * -make_entry (GVariant *data, - GVariant *app_permissions) -{ - return g_variant_new ("(v@a{sas})", data, app_permissions); -} - -static GVariant * -make_empty_app_permissions (void) -{ - return g_variant_new_array (G_VARIANT_TYPE ("{sas}"), NULL, 0); -} - -static GVariant * -make_permissions (const char *app, const char **permissions) -{ - static const char **empty = { NULL }; - - if (permissions == NULL) - permissions = empty; - - return g_variant_new ("{s@as}", - app, - g_variant_new_strv (permissions, -1)); -} - -static GVariant * -add_permissions (GVariant *app_permissions, - GVariant *permissions) -{ - GVariantBuilder builder; - GVariantIter iter; - GVariant *child; - gboolean added = FALSE; - int cmp; - const char *new_app_id; - const char *child_app_id; - - g_autoptr(GVariant) new_perms_array = NULL; - - g_variant_get (permissions, "{&s@as}", &new_app_id, &new_perms_array); - - g_variant_builder_init (&builder, G_VARIANT_TYPE_ARRAY); - - /* Insert or replace permissions in sorted order */ - - g_variant_iter_init (&iter, app_permissions); - while ((child = g_variant_iter_next_value (&iter))) - { - g_autoptr(GVariant) old_perms_array = NULL; - - g_variant_get (child, "{&s@as}", &child_app_id, &old_perms_array); - - cmp = strcmp (new_app_id, child_app_id); - if (cmp == 0) - { - added = TRUE; - /* Replace old permissions */ - g_variant_builder_add_value (&builder, permissions); - } - else if (cmp < 0) - { - if (!added) - { - added = TRUE; - g_variant_builder_add_value (&builder, permissions); - } - g_variant_builder_add_value (&builder, child); - } - else /* cmp > 0 */ - { - g_variant_builder_add_value (&builder, child); - } - - g_variant_unref (child); - } - - if (!added) - g_variant_builder_add_value (&builder, permissions); - - return g_variant_builder_end (&builder); -} - -FlatpakDbEntry * -flatpak_db_entry_new (GVariant *data) -{ - GVariant *res; - - if (data == NULL) - data = g_variant_new_byte (0); - - res = make_entry (data, - make_empty_app_permissions ()); - - return (FlatpakDbEntry *) g_variant_ref_sink (res); -} - -FlatpakDbEntry * -flatpak_db_entry_modify_data (FlatpakDbEntry *entry, - GVariant *data) -{ - GVariant *v = (GVariant *) entry; - GVariant *res; - - if (data == NULL) - data = g_variant_new_byte (0); - - res = make_entry (data, - g_variant_get_child_value (v, 1)); - return (FlatpakDbEntry *) g_variant_ref_sink (res); -} - -/* NULL (or empty) permissions to remove permissions */ -FlatpakDbEntry * -flatpak_db_entry_set_app_permissions (FlatpakDbEntry *entry, - const char *app, - const char **permissions) -{ - GVariant *v = (GVariant *) entry; - GVariant *res; - - g_autoptr(GVariant) old_data_v = g_variant_get_child_value (v, 0); - g_autoptr(GVariant) old_data = g_variant_get_child_value (old_data_v, 0); - g_autoptr(GVariant) old_permissions = g_variant_get_child_value (v, 1); - - res = make_entry (old_data, - add_permissions (old_permissions, - make_permissions (app, - permissions))); - return (FlatpakDbEntry *) g_variant_ref_sink (res); -} - -GString * -flatpak_db_entry_print_string (FlatpakDbEntry *entry, - GString *string) -{ - return g_variant_print_string ((GVariant *) entry, string, FALSE); -} diff --git a/common/flatpak-db.h b/common/flatpak-db.h deleted file mode 100644 index f7757854..00000000 --- a/common/flatpak-db.h +++ /dev/null @@ -1,103 +0,0 @@ -/* flatpak-db.h - * - * Copyright © 2015 Red Hat, Inc - * - * This file 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 file is distributed in the hope that 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 program. If not, see . - * - * Authors: - * Alexander Larsson - */ - -#ifndef FLATPAK_DB_H -#define FLATPAK_DB_H - -#include - -#include "libglnx/libglnx.h" -#include - -G_BEGIN_DECLS - -typedef struct FlatpakDb FlatpakDb; -typedef struct _FlatpakDbEntry FlatpakDbEntry; - -#define FLATPAK_TYPE_DB (flatpak_db_get_type ()) -#define FLATPAK_DB(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), FLATPAK_TYPE_DB, FlatpakDb)) -#define FLATPAK_IS_DB(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), FLATPAK_TYPE_DB)) - -GType flatpak_db_get_type (void); - -FlatpakDb * flatpak_db_new (const char *path, - gboolean fail_if_not_found, - GError **error); -char ** flatpak_db_list_ids (FlatpakDb *self); -char ** flatpak_db_list_apps (FlatpakDb *self); -char ** flatpak_db_list_ids_by_app (FlatpakDb *self, - const char *app); -char ** flatpak_db_list_ids_by_value (FlatpakDb *self, - GVariant *data); -FlatpakDbEntry *flatpak_db_lookup (FlatpakDb *self, - const char *id); -GString * flatpak_db_print_string (FlatpakDb *self, - GString *string); -char * flatpak_db_print (FlatpakDb *self); - -gboolean flatpak_db_is_dirty (FlatpakDb *self); -void flatpak_db_set_entry (FlatpakDb *self, - const char *id, - FlatpakDbEntry *entry); -void flatpak_db_update (FlatpakDb *self); -GBytes * flatpak_db_get_content (FlatpakDb *self); -const char * flatpak_db_get_path (FlatpakDb *self); -gboolean flatpak_db_save_content (FlatpakDb *self, - GError **error); -void flatpak_db_save_content_async (FlatpakDb *self, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -gboolean flatpak_db_save_content_finish (FlatpakDb *self, - GAsyncResult *res, - GError **error); -void flatpak_db_set_path (FlatpakDb *self, - const char *path); - - -FlatpakDbEntry *flatpak_db_entry_ref (FlatpakDbEntry *entry); -void flatpak_db_entry_unref (FlatpakDbEntry *entry); -GVariant * flatpak_db_entry_get_data (FlatpakDbEntry *entry); -const char ** flatpak_db_entry_list_apps (FlatpakDbEntry *entry); -const char ** flatpak_db_entry_list_permissions (FlatpakDbEntry *entry, - const char *app); -gboolean flatpak_db_entry_has_permission (FlatpakDbEntry *entry, - const char *app, - const char *permission); -gboolean flatpak_db_entry_has_permissions (FlatpakDbEntry *entry, - const char *app, - const char **permissions); -GString * flatpak_db_entry_print_string (FlatpakDbEntry *entry, - GString *string); - -FlatpakDbEntry *flatpak_db_entry_new (GVariant *data); -FlatpakDbEntry *flatpak_db_entry_modify_data (FlatpakDbEntry *entry, - GVariant *data); -FlatpakDbEntry *flatpak_db_entry_set_app_permissions (FlatpakDbEntry *entry, - const char *app, - const char **permissions); - -G_DEFINE_AUTOPTR_CLEANUP_FUNC (FlatpakDb, g_object_unref) -G_DEFINE_AUTOPTR_CLEANUP_FUNC (FlatpakDbEntry, flatpak_db_entry_unref) - -G_END_DECLS - -#endif /* FLATPAK_DB_H */ diff --git a/common/flatpak-dir.c b/common/flatpak-dir.c index 86b8d71b..6b5864c0 100644 --- a/common/flatpak-dir.c +++ b/common/flatpak-dir.c @@ -94,6 +94,13 @@ static GVariant *fetch_remote_summary_file (FlatpakDir *self, static GVariant * flatpak_create_deploy_data_from_old (GFile *deploy_dir, GCancellable *cancellable, GError **error); +static char * flatpak_dir_lookup_ref_from_summary (FlatpakDir *self, + const char *remote, + const char *ref, + GVariant **out_variant, + GVariant **out_summary, + GCancellable *cancellable, + GError **error); typedef struct { @@ -142,6 +149,8 @@ struct FlatpakDeploy GKeyFile *metadata; FlatpakContext *system_overrides; FlatpakContext *user_overrides; + FlatpakContext *system_app_overrides; + FlatpakContext *user_app_overrides; }; typedef struct @@ -235,6 +244,8 @@ flatpak_deploy_finalize (GObject *object) g_clear_pointer (&self->metadata, g_key_file_unref); g_clear_pointer (&self->system_overrides, flatpak_context_free); g_clear_pointer (&self->user_overrides, flatpak_context_free); + g_clear_pointer (&self->system_app_overrides, flatpak_context_free); + g_clear_pointer (&self->user_app_overrides, flatpak_context_free); G_OBJECT_CLASS (flatpak_deploy_parent_class)->finalize (object); } @@ -312,9 +323,15 @@ flatpak_deploy_get_overrides (FlatpakDeploy *deploy) if (deploy->system_overrides) flatpak_context_merge (overrides, deploy->system_overrides); + if (deploy->system_app_overrides) + flatpak_context_merge (overrides, deploy->system_app_overrides); + if (deploy->user_overrides) flatpak_context_merge (overrides, deploy->user_overrides); + if (deploy->user_app_overrides) + flatpak_context_merge (overrides, deploy->user_app_overrides); + return overrides; } @@ -363,6 +380,9 @@ parse_storage_type (const char *type_string) g_autofree char *type_low = NULL; type_low = g_ascii_strdown (type_string, -1); + if (g_strcmp0 (type_low, "network") == 0) + return FLATPAK_DIR_STORAGE_TYPE_NETWORK; + if (g_strcmp0 (type_low, "mmc") == 0) return FLATPAK_DIR_STORAGE_TYPE_MMC; @@ -682,7 +702,7 @@ flatpak_ensure_system_user_cache_dir_location (GError **error) /* Must be owned by us */ st_buf.st_uid == getuid () && /* and not writeable by others */ - (st_buf.st_mode & 0022) != 0) + (st_buf.st_mode & 0022) == 0) return g_file_new_for_path (path); path = g_strdup ("/var/tmp/flatpak-cache-XXXXXX"); @@ -693,6 +713,7 @@ flatpak_ensure_system_user_cache_dir_location (GError **error) return NULL; } + unlink (symlink_path); if (symlink (path, symlink_path) != 0) { glnx_set_error_from_errno (error); @@ -1010,7 +1031,11 @@ flatpak_dir_load_override (FlatpakDir *self, char *metadata_contents; override_dir = g_file_get_child (self->basedir, "overrides"); - file = g_file_get_child (override_dir, app_id); + + if (app_id) + file = g_file_get_child (override_dir, app_id); + else + file = g_file_get_child (override_dir, "global"); if (!g_file_load_contents (file, NULL, &metadata_contents, length, NULL, NULL)) @@ -1091,7 +1116,11 @@ flatpak_save_override_keyfile (GKeyFile *metakey, base_dir = flatpak_get_system_default_base_dir_location (); override_dir = g_file_get_child (base_dir, "overrides"); - file = g_file_get_child (override_dir, app_id); + + if (app_id) + file = g_file_get_child (override_dir, app_id); + else + file = g_file_get_child (override_dir, "global"); filename = g_file_get_path (file); parent = g_path_get_dirname (filename); @@ -1145,20 +1174,33 @@ flatpak_dir_load_deployed (FlatpakDir *self, ref_parts = g_strsplit (ref, "/", -1); g_assert (g_strv_length (ref_parts) == 4); - /* Only apps have overrides */ + /* Only load system global overrides for system installed apps */ + if (!self->user) + { + deploy->system_overrides = flatpak_load_override_file (NULL, FALSE, error); + if (deploy->system_overrides == NULL) + return NULL; + } + + /* Always load user global overrides */ + deploy->user_overrides = flatpak_load_override_file (NULL, TRUE, error); + if (deploy->user_overrides == NULL) + return NULL; + + /* Only apps have app overrides */ if (strcmp (ref_parts[0], "app") == 0) { /* Only load system overrides for system installed apps */ if (!self->user) { - deploy->system_overrides = flatpak_load_override_file (ref_parts[1], FALSE, error); - if (deploy->system_overrides == NULL) + deploy->system_app_overrides = flatpak_load_override_file (ref_parts[1], FALSE, error); + if (deploy->system_app_overrides == NULL) return NULL; } /* Always load user overrides */ - deploy->user_overrides = flatpak_load_override_file (ref_parts[1], TRUE, error); - if (deploy->user_overrides == NULL) + deploy->user_app_overrides = flatpak_load_override_file (ref_parts[1], TRUE, error); + if (deploy->user_app_overrides == NULL) return NULL; } @@ -1204,7 +1246,7 @@ flatpak_dir_get_unmaintained_extension_dir (FlatpakDir *self, const char *arch, const char *branch) { - const char *unmaintained_ref; + g_autofree char *unmaintained_ref = NULL; unmaintained_ref = g_build_filename ("extension", name, arch, branch, NULL); return g_file_resolve_relative_path (self->basedir, unmaintained_ref); @@ -1548,24 +1590,32 @@ flatpak_dir_recreate_repo (FlatpakDir *self, return res; } -gboolean -flatpak_dir_ensure_repo (FlatpakDir *self, - GCancellable *cancellable, - GError **error) +static gboolean +_flatpak_dir_ensure_repo (FlatpakDir *self, + gboolean allow_empty, + GCancellable *cancellable, + GError **error) { g_autoptr(GFile) repodir = NULL; g_autoptr(OstreeRepo) repo = NULL; + g_autoptr(GError) my_error = NULL; gboolean use_helper = FALSE; if (self->repo == NULL) { - if (!flatpak_dir_ensure_path (self, cancellable, error)) - return FALSE; + if (!flatpak_dir_ensure_path (self, cancellable, &my_error)) + { + if (allow_empty) + return TRUE; + + g_propagate_error (error, g_steal_pointer (&my_error)); + return FALSE; + } repodir = g_file_get_child (self->basedir, "repo"); if (self->no_system_helper || self->user || getuid () == 0) { - repo = ostree_repo_new (repodir); + repo = system_ostree_repo_new (repodir); } else { @@ -1596,14 +1646,23 @@ flatpak_dir_ensure_repo (FlatpakDir *self, if (g_strcmp0 (mode_env, "user") == 0) mode = OSTREE_REPO_MODE_BARE_USER; - if (!ostree_repo_create (repo, mode, cancellable, error)) + if (!ostree_repo_create (repo, mode, cancellable, &my_error)) { flatpak_rm_rf (repodir, cancellable, NULL); + + if (allow_empty) + return TRUE; + + g_propagate_error (error, g_steal_pointer (&my_error)); return FALSE; } /* Create .changes file early to avoid polling non-existing file in monitor */ - flatpak_dir_mark_changed (self, NULL); + if (!flatpak_dir_mark_changed (self, &my_error)) + { + g_warning ("Error marking directory as changed: %s", my_error->message); + g_clear_error (&my_error); + } } else { @@ -1646,6 +1705,22 @@ flatpak_dir_ensure_repo (FlatpakDir *self, return TRUE; } +gboolean +flatpak_dir_ensure_repo (FlatpakDir *self, + GCancellable *cancellable, + GError **error) +{ + return _flatpak_dir_ensure_repo (self, FALSE, cancellable, error); +} + +gboolean +flatpak_dir_maybe_ensure_repo (FlatpakDir *self, + GCancellable *cancellable, + GError **error) +{ + return _flatpak_dir_ensure_repo (self, TRUE, cancellable, error); +} + char * flatpak_dir_get_config (FlatpakDir *self, const char *key, @@ -1902,6 +1977,165 @@ flatpak_dir_deploy_appstream (FlatpakDir *self, return TRUE; } +static gboolean +repo_get_remote_collection_id (OstreeRepo *repo, + const char *remote_name, + char **collection_id_out, + GError **error); + +#ifdef FLATPAK_ENABLE_P2P +static void +async_result_cb (GObject *obj, + GAsyncResult *result, + gpointer user_data) +{ + GAsyncResult **result_out = user_data; + *result_out = g_object_ref (result); +} +#endif /* FLATPAK_ENABLE_P2P */ + +gboolean +flatpak_dir_find_latest_rev (FlatpakDir *self, + const char *remote, + const char *ref, + const char *checksum_or_latest, + char **out_rev, + OstreeRepoFinderResult ***out_results, + GCancellable *cancellable, + GError **error) +{ + g_autofree char *collection_id = NULL; + g_autofree char *latest_rev = NULL; + + g_return_val_if_fail (out_rev != NULL, FALSE); + + if (!repo_get_remote_collection_id (self->repo, remote, &collection_id, error)) + return FALSE; + + if (collection_id != NULL) + { +#ifdef FLATPAK_ENABLE_P2P + /* Find the latest rev from the remote and its available mirrors, including + * LAN and USB sources. */ + g_auto(GVariantBuilder) find_builder = FLATPAK_VARIANT_BUILDER_INITIALIZER; + g_autoptr(GMainContext) context = NULL; + g_autoptr(GVariant) find_options = NULL; + g_autoptr(GAsyncResult) find_result = NULL; + g_auto(OstreeRepoFinderResultv) results = NULL; + OstreeCollectionRef collection_ref = { collection_id, (char *) ref }; + OstreeCollectionRef *collection_refs_to_fetch[2] = { &collection_ref, NULL }; + gsize i; + + /* Find options */ + g_variant_builder_init (&find_builder, G_VARIANT_TYPE ("a{sv}")); + + if (checksum_or_latest != NULL) + { + g_variant_builder_add (&find_builder, "{s@v}", "override-commit-ids", + g_variant_new_variant (g_variant_new_strv (&checksum_or_latest, 1))); + } + + find_options = g_variant_ref_sink (g_variant_builder_end (&find_builder)); + + context = g_main_context_new (); + g_main_context_push_thread_default (context); + + ostree_repo_find_remotes_async (self->repo, (const OstreeCollectionRef * const *) collection_refs_to_fetch, + find_options, + NULL /* default finders */, + NULL /* no progress reporting */, + cancellable, async_result_cb, &find_result); + + while (find_result == NULL) + g_main_context_iteration (context, TRUE); + + results = ostree_repo_find_remotes_finish (self->repo, find_result, error); + if (results == NULL) + return FALSE; + + for (i = 0; results[i] != NULL && latest_rev == NULL; i++) + latest_rev = g_strdup (g_hash_table_lookup (results[i]->ref_to_checksum, &collection_ref)); + + if (latest_rev == NULL) + { + flatpak_fail (error, "No such ref (%s, %s) in remote %s or elsewhere", + collection_ref.collection_id, collection_ref.ref_name, remote); + return FALSE; + } + + if (out_results != NULL) + *out_results = g_steal_pointer (&results); + + if (out_rev != NULL) + *out_rev = g_steal_pointer (&latest_rev); + +#else /* if !FLATPAK_ENABLE_P2P */ + g_assert_not_reached (); +#endif /* !FLATPAK_ENABLE_P2P */ + } + else + { + latest_rev = flatpak_dir_lookup_ref_from_summary (self, remote, ref, NULL, NULL, NULL, error); + if (latest_rev == NULL) + return FALSE; + + if (out_rev != NULL) + *out_rev = g_steal_pointer (&latest_rev); + } + + return TRUE; +} + +gboolean +flatpak_dir_check_for_appstream_update (FlatpakDir *self, + const char *remote, + const char *arch) +{ + const char *old_checksum = NULL; + g_autofree char *new_checksum = NULL; + g_autoptr(GFile) active_link = NULL; + g_autofree char *branch = NULL; + g_autoptr(GFileInfo) file_info = NULL; + g_autoptr(GError) local_error = NULL; + + if (!flatpak_dir_maybe_ensure_repo (self, NULL, NULL)) + return TRUE; + + active_link = flatpak_build_file (flatpak_dir_get_path (self), + "appstream", + remote, + arch, + "active", + NULL); + + file_info = g_file_query_info (active_link, OSTREE_GIO_FAST_QUERYINFO, + G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS, + NULL, NULL); + if (file_info != NULL) + old_checksum = g_file_info_get_symlink_target (file_info); + + branch = g_strdup_printf ("appstream/%s", arch); + + if (!flatpak_dir_find_latest_rev (self, remote, branch, NULL, &new_checksum, + NULL, NULL, &local_error)) + { + if (g_strcmp0 (arch, flatpak_get_arch ()) == 0) + g_printerr (_("Failed to find latest revision for ref %s from remote %s: %s\n"), + branch, remote, local_error->message); + else + g_debug (_("Failed to find latest revision for ref %s from remote %s: %s\n"), + branch, remote, local_error->message); + new_checksum = NULL; + } + if (new_checksum == NULL) + { + g_debug ("No %s branch for remote %s, ignoring", branch, remote); + return FALSE; /* No appstream branch, don't update, no error */ + } + + return g_strcmp0 (new_checksum, old_checksum) != 0; +} + gboolean flatpak_dir_update_appstream (FlatpakDir *self, const char *remote, @@ -1934,11 +2168,15 @@ flatpak_dir_update_appstream (FlatpakDir *self, gboolean is_oci; g_autoptr(GFile) child_repo_file = NULL; g_autofree char *child_repo_path = NULL; + g_autofree char *collection_id = NULL; system_helper = flatpak_dir_get_system_helper (self); g_assert (system_helper != NULL); + if (!repo_get_remote_collection_id (self->repo, remote, &collection_id, error)) + return FALSE; + is_oci = flatpak_dir_get_remote_oci (self, remote); if (is_oci) @@ -1977,7 +2215,13 @@ flatpak_dir_update_appstream (FlatpakDir *self, if (child_repo == NULL) return FALSE; - if (!flatpak_dir_remote_fetch_summary (self, remote, + /* Avoid fetching the system remote summary on P2P code paths. The + * flatpak_dir_pull() call below will cause the true remote's summary + * to be pulled into the child repo (which might be the one from a + * temporary remote rather than the system remote). Ostree does this + * because of the MIRROR flag.*/ + if (collection_id == NULL && + !flatpak_dir_remote_fetch_summary (self, remote, &summary_copy, &summary_sig_copy, cancellable, error)) return FALSE; @@ -1989,19 +2233,32 @@ flatpak_dir_update_appstream (FlatpakDir *self, progress, cancellable, error)) return FALSE; - summary_file = g_file_get_child (ostree_repo_get_path (child_repo), "summary"); - if (!g_file_replace_contents (summary_file, - g_bytes_get_data (summary_copy, NULL), - g_bytes_get_size (summary_copy), - NULL, FALSE, 0, NULL, cancellable, NULL)) + /* Regenerate the summary in the child repo because the + * flatpak_dir_pull() call above might not copy the remote summary + * into the repo if the "branches" key is set on the remote. */ + if (collection_id != NULL && + !ostree_repo_regenerate_summary (child_repo, NULL, cancellable, error)) return FALSE; - summary_sig_file = g_file_get_child (ostree_repo_get_path (child_repo), "summary.sig"); - if (!g_file_replace_contents (summary_sig_file, - g_bytes_get_data (summary_sig_copy, NULL), - g_bytes_get_size (summary_sig_copy), - NULL, FALSE, 0, NULL, cancellable, NULL)) - return FALSE; + if (summary_copy != NULL) + { + summary_file = g_file_get_child (ostree_repo_get_path (child_repo), "summary"); + if (!g_file_replace_contents (summary_file, + g_bytes_get_data (summary_copy, NULL), + g_bytes_get_size (summary_copy), + NULL, FALSE, 0, NULL, cancellable, NULL)) + return FALSE; + } + + if (summary_sig_copy != NULL) + { + summary_sig_file = g_file_get_child (ostree_repo_get_path (child_repo), "summary.sig"); + if (!g_file_replace_contents (summary_sig_file, + g_bytes_get_data (summary_sig_copy, NULL), + g_bytes_get_size (summary_sig_copy), + NULL, FALSE, 0, NULL, cancellable, NULL)) + return FALSE; + } if (!ostree_repo_resolve_rev (child_repo, branch, TRUE, &new_checksum, error)) return FALSE; @@ -2047,17 +2304,6 @@ flatpak_dir_update_appstream (FlatpakDir *self, error); } -#ifdef FLATPAK_ENABLE_P2P -static void -async_result_cb (GObject *obj, - GAsyncResult *result, - gpointer user_data) -{ - GAsyncResult **result_out = user_data; - *result_out = g_object_ref (result); -} -#endif /* FLATPAK_ENABLE_P2P */ - static void default_progress_changed (OstreeAsyncProgress *progress, gpointer user_data) @@ -2078,7 +2324,14 @@ default_progress_changed (OstreeAsyncProgress *progress, glnx_console_text (line); } else - ostree_repo_pull_default_console_progress_changed (progress, user_data); + { + /* We get some extra calls before we've really started due to the initialization of the + extra data, so ignore those */ + if (ostree_async_progress_get_variant (progress, "outstanding-fetches") == NULL) + return; + + ostree_repo_pull_default_console_progress_changed (progress, user_data); + } } /* Get the configured collection-id for @remote_name, squashing empty strings into @@ -2111,12 +2364,14 @@ repo_get_remote_collection_id (OstreeRepo *repo, * collection-based and normal pulls. Update @builder in place. */ static void get_common_pull_options (GVariantBuilder *builder, + const char *ref_to_fetch, const gchar * const *dirs_to_pull, gboolean force_disable_deltas, OstreeRepoPullFlags flags, OstreeAsyncProgress *progress) { guint32 update_freq = 0; + GVariantBuilder hdr_builder; if (dirs_to_pull) { @@ -2137,6 +2392,12 @@ get_common_pull_options (GVariantBuilder *builder, g_variant_builder_add (builder, "{s@v}", "flags", g_variant_new_variant (g_variant_new_int32 (flags))); + + g_variant_builder_init (&hdr_builder, G_VARIANT_TYPE ("a(ss)")); + g_variant_builder_add (&hdr_builder, "(ss)", "Flatpak-Ref", ref_to_fetch); + g_variant_builder_add (builder, "{s@v}", "http-headers", + g_variant_new_variant (g_variant_builder_end (&hdr_builder))); + if (progress != NULL) update_freq = GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (progress), "update-frequency")); if (update_freq == 0) @@ -2146,20 +2407,18 @@ get_common_pull_options (GVariantBuilder *builder, g_variant_new_variant (g_variant_new_uint32 (update_freq))); } -/* This is a copy of ostree_repo_pull_one_dir that always disables - static deltas if subdir is used */ static gboolean -repo_pull_one_dir (OstreeRepo *self, - const char *remote_name, - const char **dirs_to_pull, - const char *ref_to_fetch, - const char *rev_to_fetch, - const OstreeRepoFinderResult * const *results_to_fetch, - FlatpakPullFlags flatpak_flags, - OstreeRepoPullFlags flags, - OstreeAsyncProgress *progress, - GCancellable *cancellable, - GError **error) +repo_pull (OstreeRepo *self, + const char *remote_name, + const char **dirs_to_pull, + const char *ref_to_fetch, + const char *rev_to_fetch, + const OstreeRepoFinderResult * const *results_to_fetch, + FlatpakPullFlags flatpak_flags, + OstreeRepoPullFlags flags, + OstreeAsyncProgress *progress, + GCancellable *cancellable, + GError **error) { gboolean force_disable_deltas = (flatpak_flags & FLATPAK_PULL_FLAGS_NO_STATIC_DELTAS) != 0; g_autofree char *remote_and_branch = NULL; @@ -2214,11 +2473,17 @@ repo_pull_one_dir (OstreeRepo *self, g_variant_builder_add (&find_builder, "{s@v}", "update-frequency", g_variant_new_variant (g_variant_new_uint32 (update_freq))); + if (flatpak_flags & FLATPAK_PULL_FLAGS_ALLOW_DOWNGRADE && rev_to_fetch != NULL) + { + g_variant_builder_add (&find_builder, "{s@v}", "override-commit-ids", + g_variant_new_variant (g_variant_new_strv (&rev_to_fetch, 1))); + } + find_options = g_variant_ref_sink (g_variant_builder_end (&find_builder)); /* Pull options */ g_variant_builder_init (&pull_builder, G_VARIANT_TYPE ("a{sv}")); - get_common_pull_options (&pull_builder, dirs_to_pull, + get_common_pull_options (&pull_builder, ref_to_fetch, dirs_to_pull, force_disable_deltas, flags, progress); pull_options = g_variant_ref_sink (g_variant_builder_end (&pull_builder)); @@ -2275,7 +2540,7 @@ repo_pull_one_dir (OstreeRepo *self, /* Pull options */ g_variant_builder_init (&builder, G_VARIANT_TYPE ("a{sv}")); - get_common_pull_options (&builder, dirs_to_pull, + get_common_pull_options (&builder, ref_to_fetch, dirs_to_pull, force_disable_deltas, flags, progress); refs_to_fetch[0] = ref_to_fetch; @@ -2315,7 +2580,7 @@ repo_pull_one_dir (OstreeRepo *self, new_timestamp = ostree_commit_get_timestamp (new_commit); if (new_timestamp < old_timestamp) - return flatpak_fail (error, "Update is older then current version"); + return flatpak_fail (error, "Update is older than current version"); } return TRUE; @@ -2380,16 +2645,16 @@ flatpak_dir_setup_extra_data (FlatpakDir *self, /* Pull the commits (and only the commits) to check for extra data * again. Here we don't pass the progress because we don't want any * reports coming out of it. */ - if (!repo_pull_one_dir (repo, repository, - NULL, - ref, - rev, - results, - flatpak_flags, - OSTREE_REPO_PULL_FLAGS_COMMIT_ONLY, - NULL, - cancellable, - error)) + if (!repo_pull (repo, repository, + NULL, + ref, + rev, + results, + flatpak_flags, + OSTREE_REPO_PULL_FLAGS_COMMIT_ONLY, + NULL, + cancellable, + error)) return FALSE; extra_data_sources = flatpak_repo_get_extra_data_sources (repo, rev, cancellable, NULL); @@ -2546,7 +2811,7 @@ flatpak_dir_pull_extra_data (FlatpakDir *self, else { ensure_soup_session (self); - bytes = flatpak_load_http_uri (self->soup_session, extra_data_uri, NULL, NULL, + bytes = flatpak_load_http_uri (self->soup_session, extra_data_uri, 0, NULL, NULL, extra_data_progress_report, &extra_data_progress, cancellable, error); } @@ -2622,11 +2887,28 @@ flatpak_dir_pull_extra_data (FlatpakDir *self, return TRUE; } +static char * +lookup_oci_registry_uri_from_summary (GVariant *summary, + GError **error) +{ + g_autoptr(GVariant) extensions = g_variant_get_child_value (summary, 1); + g_autofree char *registry_uri = NULL; + + if (!g_variant_lookup (extensions, "xa.oci-registry-uri", "s", ®istry_uri)) + { + flatpak_fail (error, _("Remote OCI index has no registry uri")); + return NULL; + } + + return g_steal_pointer (®istry_uri); +} + static char * flatpak_dir_lookup_ref_from_summary (FlatpakDir *self, const char *remote, const char *ref, GVariant **out_variant, + GVariant **out_summary, GCancellable *cancellable, GError **error) { @@ -2645,10 +2927,16 @@ flatpak_dir_lookup_ref_from_summary (FlatpakDir *self, if (!flatpak_summary_lookup_ref (summary, collection_id, ref, &latest_rev, out_variant)) { - flatpak_fail (error, "No such ref '%s' in remote %s", ref, remote); + if (collection_id != NULL) + flatpak_fail (error, "No such ref (%s, %s) in remote %s", collection_id, ref, remote); + else + flatpak_fail (error, "No such ref '%s' in remote %s", ref, remote); return NULL; } + if (out_summary) + *out_summary = g_steal_pointer (&summary); + return g_steal_pointer (&latest_rev); } @@ -2685,6 +2973,7 @@ oci_pull_init_progress (OstreeAsyncProgress *progress) "total-delta-part-usize", "t", (guint64) 0, "total-delta-superblocks", "u", 0, "status", "s", "", + "caught-error", "b", FALSE, NULL); } @@ -2758,10 +3047,8 @@ flatpak_dir_lookup_repo_metadata (FlatpakDir *self, return FALSE; /* Look up the commit containing the latest repository metadata. */ - latest_rev = flatpak_dir_lookup_ref_from_summary (self, remote_name, - OSTREE_REPO_METADATA_REF, - NULL, - cancellable, error); + latest_rev = flatpak_dir_read_latest (self, remote_name, OSTREE_REPO_METADATA_REF, + NULL, cancellable, error); if (latest_rev == NULL) return FALSE; @@ -2801,13 +3088,15 @@ flatpak_dir_mirror_oci (FlatpakDir *self, { g_autoptr(FlatpakOciRegistry) registry = NULL; g_autofree char *oci_uri = NULL; + g_autofree char *registry_uri = NULL; g_autofree char *oci_digest = NULL; g_autofree char *latest_rev = NULL; g_auto(GLnxConsoleRef) console = { 0, }; g_autoptr(OstreeAsyncProgress) console_progress = NULL; g_autoptr(GVariant) summary_element = NULL; + g_autoptr(GVariant) summary = NULL; g_autoptr(GVariant) metadata = NULL; - g_autofree char *signature_digest = NULL; + g_autofree char *oci_repository = NULL; gboolean res; if (!ostree_repo_remote_get_url (self->repo, @@ -2817,14 +3106,11 @@ flatpak_dir_mirror_oci (FlatpakDir *self, return FALSE; /* We use the summary so that we can reuse any cached json */ - latest_rev = flatpak_dir_lookup_ref_from_summary (self, remote, ref, &summary_element, + latest_rev = flatpak_dir_lookup_ref_from_summary (self, remote, ref, &summary_element, &summary, cancellable, error); if (latest_rev == NULL) return FALSE; - metadata = g_variant_get_child_value (summary_element, 2); - g_variant_lookup (metadata, "xa.oci-signature", "s", &signature_digest); - if (skip_if_current_is != NULL && strcmp (latest_rev, skip_if_current_is) == 0) { g_set_error (error, FLATPAK_ERROR, FLATPAK_ERROR_ALREADY_INSTALLED, @@ -2832,9 +3118,16 @@ flatpak_dir_mirror_oci (FlatpakDir *self, return FALSE; } + metadata = g_variant_get_child_value (summary_element, 2); + g_variant_lookup (metadata, "xa.oci-repository", "s", &oci_repository); + oci_digest = g_strconcat ("sha256:", latest_rev, NULL); - registry = flatpak_oci_registry_new (oci_uri, FALSE, -1, NULL, error); + registry_uri = lookup_oci_registry_uri_from_summary (summary, error); + if (registry_uri == NULL) + return FALSE; + + registry = flatpak_oci_registry_new (registry_uri, FALSE, -1, NULL, error); if (registry == NULL) return FALSE; @@ -2852,7 +3145,7 @@ flatpak_dir_mirror_oci (FlatpakDir *self, g_debug ("Mirroring OCI image %s", oci_digest); - res = flatpak_mirror_image_from_oci (dst_registry, registry, oci_digest, signature_digest, oci_pull_progress_cb, + res = flatpak_mirror_image_from_oci (dst_registry, registry, oci_repository, oci_digest, oci_pull_progress_cb, progress, cancellable, error); if (progress) @@ -2879,12 +3172,14 @@ flatpak_dir_pull_oci (FlatpakDir *self, g_autoptr(FlatpakOciVersioned) versioned = NULL; g_autofree char *full_ref = NULL; g_autofree char *oci_uri = NULL; + g_autofree char *registry_uri = NULL; + g_autofree char *oci_repository = NULL; g_autofree char *oci_digest = NULL; g_autofree char *checksum = NULL; g_auto(GLnxConsoleRef) console = { 0, }; g_autoptr(OstreeAsyncProgress) console_progress = NULL; g_autoptr(GVariant) summary_element = NULL; - g_autofree char *signature_digest = NULL; + g_autoptr(GVariant) summary = NULL; g_autofree char *latest_alt_commit = NULL; g_autoptr(GVariant) metadata = NULL; g_autofree char *latest_rev = NULL; @@ -2901,13 +3196,13 @@ flatpak_dir_pull_oci (FlatpakDir *self, /* We use the summary so that we can reuse any cached json */ latest_rev = - flatpak_dir_lookup_ref_from_summary (self, remote, ref, &summary_element, + flatpak_dir_lookup_ref_from_summary (self, remote, ref, &summary_element, &summary, cancellable, error); if (latest_rev == NULL) return FALSE; metadata = g_variant_get_child_value (summary_element, 2); - g_variant_lookup (metadata, "xa.oci-signature", "s", &signature_digest); + g_variant_lookup (metadata, "xa.oci-repository", "s", &oci_repository); oci_digest = g_strconcat ("sha256:", latest_rev, NULL); @@ -2915,12 +3210,16 @@ flatpak_dir_pull_oci (FlatpakDir *self, if (latest_alt_commit != NULL && strcmp (oci_digest + strlen ("sha256:"), latest_alt_commit) == 0) return TRUE; - registry = flatpak_oci_registry_new (oci_uri, FALSE, -1, NULL, error); + registry_uri = lookup_oci_registry_uri_from_summary (summary, error); + if (registry_uri == NULL) + return FALSE; + + registry = flatpak_oci_registry_new (registry_uri, FALSE, -1, NULL, error); if (registry == NULL) return FALSE; - versioned = flatpak_oci_registry_load_versioned (registry, oci_digest, NULL, - cancellable, error); + versioned = flatpak_oci_registry_load_versioned (registry, oci_repository, oci_digest, + NULL, cancellable, error); if (versioned == NULL) return FALSE; @@ -2950,8 +3249,8 @@ flatpak_dir_pull_oci (FlatpakDir *self, g_debug ("Pulling OCI image %s", oci_digest); - checksum = flatpak_pull_from_oci (repo, registry, oci_digest, FLATPAK_OCI_MANIFEST (versioned), - remote, ref, signature_digest, oci_pull_progress_cb, progress, cancellable, error); + checksum = flatpak_pull_from_oci (repo, registry, oci_repository, oci_digest, FLATPAK_OCI_MANIFEST (versioned), + remote, ref, oci_pull_progress_cb, progress, cancellable, error); if (progress) ostree_async_progress_finish (progress); @@ -2997,10 +3296,10 @@ flatpak_dir_pull (FlatpakDir *self, return FALSE; /* Keep a shared repo lock to avoid prunes removing objects we're relying on - * while we do the pull. There are two cases we protect against. 1) objects - * we need but that were already decided was locall available could be removed, - * and 2) during the transaction commit objects that not yet have a ref to the - * could be considered unreachable. + * while we do the pull. There are two cases we protect against. 1) objects we + * need but that we already decided are locally available could be removed, + * and 2) during the transaction commit objects that don't yet have a ref to + * them could be considered unreachable. */ if (repo == NULL && !flatpak_dir_repo_lock (self, &lock, LOCK_SH, cancellable, error)) return FALSE; @@ -3110,7 +3409,7 @@ flatpak_dir_pull (FlatpakDir *self, else #endif /* FLATPAK_ENABLE_P2P */ { - rev = flatpak_dir_lookup_ref_from_summary (self, repository, ref, NULL, cancellable, error); + rev = flatpak_dir_lookup_ref_from_summary (self, repository, ref, NULL, NULL, cancellable, error); results = NULL; } @@ -3151,11 +3450,11 @@ flatpak_dir_pull (FlatpakDir *self, error)) goto out; - if (!repo_pull_one_dir (repo, repository, - subdirs_arg ? (const char **)subdirs_arg->pdata : NULL, - ref, rev, results, flatpak_flags, flags, - progress, - cancellable, error)) + if (!repo_pull (repo, repository, + subdirs_arg ? (const char **)subdirs_arg->pdata : NULL, + ref, rev, results, flatpak_flags, flags, + progress, + cancellable, error)) { g_prefix_error (error, _("While pulling %s from remote %s: "), ref, repository); goto out; @@ -3187,26 +3486,28 @@ out: } static gboolean -repo_pull_one_local_untrusted (FlatpakDir *self, - OstreeRepo *repo, - const char *remote_name, - const char *url, - const char **dirs_to_pull, - const char *ref, - const char *checksum, - OstreeAsyncProgress *progress, - GCancellable *cancellable, - GError **error) +repo_pull_local_untrusted (FlatpakDir *self, + OstreeRepo *repo, + const char *remote_name, + const char *url, + const char **dirs_to_pull, + const char *ref, + const char *checksum, + OstreeAsyncProgress *progress, + GCancellable *cancellable, + GError **error) { /* The latter flag was introduced in https://github.com/ostreedev/ostree/pull/926 */ const OstreeRepoPullFlags flags = OSTREE_REPO_PULL_FLAGS_UNTRUSTED |OSTREE_REPO_PULL_FLAGS_BAREUSERONLY_FILES; GVariantBuilder builder; + g_auto(GVariantBuilder) refs_builder = FLATPAK_VARIANT_BUILDER_INITIALIZER; g_auto(GLnxConsoleRef) console = { 0, }; g_autoptr(OstreeAsyncProgress) console_progress = NULL; gboolean res; g_variant_builder_init (&builder, G_VARIANT_TYPE ("a{sv}")); const char *refs[2] = { NULL, NULL }; const char *commits[2] = { NULL, NULL }; + g_autofree char *collection_id = NULL; if (progress == NULL) { @@ -3218,21 +3519,36 @@ repo_pull_one_local_untrusted (FlatpakDir *self, } } - refs[0] = ref; - commits[0] = checksum; + if (!repo_get_remote_collection_id (repo, remote_name, &collection_id, error)) + return FALSE; + + if (collection_id != NULL) + { + g_variant_builder_init (&refs_builder, G_VARIANT_TYPE ("a(sss)")); + g_variant_builder_add (&refs_builder, "(sss)", collection_id, ref, checksum); + + g_variant_builder_add (&builder, "{s@v}", "collection-refs", + g_variant_new_variant (g_variant_builder_end (&refs_builder))); + } + else + { + refs[0] = ref; + commits[0] = checksum; + + g_variant_builder_add (&builder, "{s@v}", "refs", + g_variant_new_variant (g_variant_new_strv ((const char * const *) refs, -1))); + g_variant_builder_add (&builder, "{s@v}", "override-commit-ids", + g_variant_new_variant (g_variant_new_strv ((const char * const *) commits, -1))); + } g_variant_builder_add (&builder, "{s@v}", "flags", g_variant_new_variant (g_variant_new_int32 (flags))); - g_variant_builder_add (&builder, "{s@v}", "refs", - g_variant_new_variant (g_variant_new_strv ((const char * const *) refs, -1))); - g_variant_builder_add (&builder, "{s@v}", "override-commit-ids", - g_variant_new_variant (g_variant_new_strv ((const char * const *) commits, -1))); g_variant_builder_add (&builder, "{s@v}", "override-remote-name", g_variant_new_variant (g_variant_new_string (remote_name))); g_variant_builder_add (&builder, "{s@v}", "gpg-verify", g_variant_new_variant (g_variant_new_boolean (TRUE))); g_variant_builder_add (&builder, "{s@v}", "gpg-verify-summary", - g_variant_new_variant (g_variant_new_boolean (TRUE))); + g_variant_new_variant (g_variant_new_boolean (collection_id == NULL))); g_variant_builder_add (&builder, "{s@v}", "inherit-transaction", g_variant_new_variant (g_variant_new_boolean (TRUE))); g_variant_builder_add (&builder, "{s@v}", "update-frequency", @@ -3294,10 +3610,10 @@ flatpak_dir_pull_untrusted_local (FlatpakDir *self, return FALSE; /* Keep a shared repo lock to avoid prunes removing objects we're relying on - * while we do the pull. There are two cases we protect against. 1) objects - * we need but that were already decided was locall available could be removed, - * and 2) during the transaction commit objects that not yet have a ref to the - * could be considered unreachable. + * while we do the pull. There are two cases we protect against. 1) objects we + * need but that we already decided are locally available could be removed, + * and 2) during the transaction commit objects that don't yet have a ref to + * them could be considered unreachable. */ if (!flatpak_dir_repo_lock (self, &lock, LOCK_SH, cancellable, error)) return FALSE; @@ -3396,7 +3712,7 @@ flatpak_dir_pull_untrusted_local (FlatpakDir *self, g_autofree const char **commit_refs = NULL; if (!g_variant_lookup (new_commit_metadata, - "ostree.ref-binding", + OSTREE_COMMIT_META_KEY_REF_BINDING, "^a&s", &commit_refs)) { @@ -3466,10 +3782,10 @@ flatpak_dir_pull_untrusted_local (FlatpakDir *self, /* Past this we must use goto out, so we abort the transaction on error */ - if (!repo_pull_one_local_untrusted (self, self->repo, remote_name, url, - subdirs_arg ? (const char **)subdirs_arg->pdata : NULL, - ref, checksum, progress, - cancellable, error)) + if (!repo_pull_local_untrusted (self, self->repo, remote_name, url, + subdirs_arg ? (const char **)subdirs_arg->pdata : NULL, + ref, checksum, progress, + cancellable, error)) { g_prefix_error (error, _("While pulling %s from remote %s: "), ref, remote_name); goto out; @@ -4669,6 +4985,7 @@ flatpak_export_dir (GFile *source, "share/dbus-1/services", "../../..", "share/gnome-shell/search-providers", "../../..", "share/mime/packages", "../../..", + "bin", "..", }; int i; @@ -4882,26 +5199,6 @@ extract_extra_data (FlatpakDir *self, return TRUE; } -static void -add_args (GPtrArray *argv_array, ...) -{ - va_list args; - const gchar *arg; - - va_start (args, argv_array); - while ((arg = va_arg (args, const gchar *))) - g_ptr_array_add (argv_array, g_strdup (arg)); - va_end (args); -} - -static void -clear_fd (gpointer data) -{ - int *fd_p = data; - if (fd_p != NULL && *fd_p != -1) - close (*fd_p); -} - static void child_setup (gpointer user_data) { @@ -4940,17 +5237,16 @@ apply_extra_data (FlatpakDir *self, g_autofree char *runtime = NULL; g_autofree char *runtime_ref = NULL; g_autoptr(FlatpakDeploy) runtime_deploy = NULL; + g_autoptr(FlatpakBwrap) bwrap = NULL; g_autoptr(GFile) app_files = NULL; g_autoptr(GFile) apply_extra_file = NULL; g_autoptr(GFile) app_export_file = NULL; g_autoptr(GFile) extra_export_file = NULL; g_autoptr(GFile) extra_files = NULL; g_autoptr(GFile) runtime_files = NULL; - g_autoptr(GPtrArray) argv_array = NULL; g_auto(GStrv) runtime_ref_parts = NULL; g_autoptr(FlatpakContext) app_context = NULL; - g_autoptr(GArray) fd_array = NULL; - g_auto(GStrv) envp = NULL; + g_auto(GStrv) minimal_envp = NULL; int exit_status; const char *group = FLATPAK_METADATA_GROUP_APPLICATION; g_autoptr(GError) local_error = NULL; @@ -5008,32 +5304,30 @@ apply_extra_data (FlatpakDir *self, extra_files = g_file_get_child (app_files, "extra"); extra_export_file = g_file_get_child (extra_files, "export"); - argv_array = g_ptr_array_new_with_free_func (g_free); - fd_array = g_array_new (FALSE, TRUE, sizeof (int)); - g_array_set_clear_func (fd_array, clear_fd); - g_ptr_array_add (argv_array, g_strdup (flatpak_get_bwrap ())); + minimal_envp = flatpak_run_get_minimal_env (FALSE, FALSE); + bwrap = flatpak_bwrap_new (minimal_envp); + flatpak_bwrap_add_args (bwrap, flatpak_get_bwrap (), NULL); if (runtime_files) - add_args (argv_array, - "--ro-bind", flatpak_file_get_path_cached (runtime_files), "/usr", - "--lock-file", "/usr/.ref", - NULL); + flatpak_bwrap_add_args (bwrap, + "--ro-bind", flatpak_file_get_path_cached (runtime_files), "/usr", + "--lock-file", "/usr/.ref", + NULL); - add_args (argv_array, - "--ro-bind", flatpak_file_get_path_cached (app_files), "/app", - "--bind", flatpak_file_get_path_cached (extra_files), "/app/extra", - "--chdir", "/app/extra", - NULL); + flatpak_bwrap_add_args (bwrap, + "--ro-bind", flatpak_file_get_path_cached (app_files), "/app", + "--bind", flatpak_file_get_path_cached (extra_files), "/app/extra", + "--chdir", "/app/extra", + NULL); - if (!flatpak_run_setup_base_argv (argv_array, fd_array, runtime_files, NULL, runtime_ref_parts[2], + if (!flatpak_run_setup_base_argv (bwrap, runtime_files, NULL, runtime_ref_parts[2], FLATPAK_RUN_FLAG_NO_SESSION_HELPER, error)) return FALSE; app_context = flatpak_context_new (); - envp = flatpak_run_get_minimal_env (FALSE, FALSE); - if (!flatpak_run_add_environment_args (argv_array, fd_array, &envp, NULL, + if (!flatpak_run_add_environment_args (bwrap, NULL, FLATPAK_RUN_FLAG_NO_SESSION_BUS_PROXY | FLATPAK_RUN_FLAG_NO_SYSTEM_BUS_PROXY | FLATPAK_RUN_FLAG_NO_A11Y_BUS_PROXY, @@ -5041,17 +5335,17 @@ apply_extra_data (FlatpakDir *self, app_context, NULL, NULL, cancellable, error)) return FALSE; - g_ptr_array_add (argv_array, g_strdup ("/app/bin/apply_extra")); + g_ptr_array_add (bwrap->argv, g_strdup ("/app/bin/apply_extra")); - g_ptr_array_add (argv_array, NULL); + g_ptr_array_add (bwrap->argv, NULL); g_debug ("Running /app/bin/apply_extra "); if (!g_spawn_sync (NULL, - (char **) argv_array->pdata, - envp, + (char **) bwrap->argv->pdata, + bwrap->envp, G_SPAWN_SEARCH_PATH, - child_setup, fd_array, + child_setup, bwrap->fds, NULL, NULL, &exit_status, error)) @@ -5093,6 +5387,7 @@ flatpak_dir_deploy (FlatpakDir *self, g_autoptr(GFile) root = NULL; g_autoptr(GFile) deploy_base = NULL; g_autoptr(GFile) checkoutdir = NULL; + g_autoptr(GFile) bindir = NULL; g_autofree char *checkoutdirpath = NULL; g_autoptr(GFile) real_checkoutdir = NULL; g_autoptr(GFile) dotref = NULL; @@ -5110,7 +5405,7 @@ flatpak_dir_deploy (FlatpakDir *self, g_autoptr(GFile) tmp_dir_template = NULL; g_autoptr(GVariant) commit_data = NULL; g_autofree char *tmp_dir_path = NULL; - g_autofree char *alt_id = NULL; + const char *alt_id = NULL; const char *xa_metadata = NULL; const char *xa_ref = NULL; g_autofree char *checkout_basename = NULL; @@ -5118,6 +5413,7 @@ flatpak_dir_deploy (FlatpakDir *self, g_autoptr(GVariant) commit_metadata = NULL; GVariantBuilder metadata_builder; g_auto(GLnxLockFile) lock = { 0, }; + gboolean is_app; if (!flatpak_dir_ensure_repo (self, cancellable, error)) return FALSE; @@ -5159,7 +5455,7 @@ flatpak_dir_deploy (FlatpakDir *self, return FALSE; commit_metadata = g_variant_get_child_value (commit_data, 0); - g_variant_lookup (commit_metadata, "xa.alt-id", "s", &alt_id); + g_variant_lookup (commit_metadata, "xa.alt-id", "&s", &alt_id); checkout_basename = flatpak_dir_get_deploy_subdir (self, checksum, subpaths); @@ -5288,7 +5584,7 @@ flatpak_dir_deploy (FlatpakDir *self, } } - g_variant_lookup (commit_metadata, "xa.ref", "s", &xa_ref); + g_variant_lookup (commit_metadata, "xa.ref", "&s", &xa_ref); if (xa_ref != NULL) { gboolean gpg_verify_summary; @@ -5361,11 +5657,11 @@ flatpak_dir_deploy (FlatpakDir *self, /* Check the metadata in the commit to make sure it matches the actual deployed metadata, in case we relied on the one in the commit for a decision */ - g_variant_lookup (commit_metadata, "xa.metadata", "s", &xa_metadata); + g_variant_lookup (commit_metadata, "xa.metadata", "&s", &xa_metadata); if (xa_metadata != NULL) { g_autoptr(GFile) metadata_file = g_file_resolve_relative_path (checkoutdir, "metadata"); - char *metadata_contents; + g_autofree char *metadata_contents = NULL; if (!g_file_load_contents (metadata_file, NULL, &metadata_contents, NULL, NULL, NULL) || @@ -5382,46 +5678,6 @@ flatpak_dir_deploy (FlatpakDir *self, G_FILE_CREATE_REPLACE_DESTINATION, NULL, cancellable, error)) return TRUE; - /* Ensure that various files exists as regular files in /usr/etc, as we - want to bind-mount over them */ - files_etc = g_file_resolve_relative_path (checkoutdir, "files/etc"); - if (g_file_query_exists (files_etc, cancellable)) - { - char *etcfiles[] = {"passwd", "group", "machine-id" }; - g_autoptr(GFile) etc_resolve_conf = g_file_get_child (files_etc, "resolv.conf"); - int i; - for (i = 0; i < G_N_ELEMENTS (etcfiles); i++) - { - g_autoptr(GFile) etc_file = g_file_get_child (files_etc, etcfiles[i]); - GFileType type; - - type = g_file_query_file_type (etc_file, G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS, - cancellable); - if (type == G_FILE_TYPE_REGULAR) - continue; - - if (type != G_FILE_TYPE_UNKNOWN) - { - /* Already exists, but not regular, probably symlink. Remove it */ - if (!g_file_delete (etc_file, cancellable, error)) - return FALSE; - } - - if (!g_file_replace_contents (etc_file, "", 0, NULL, FALSE, - G_FILE_CREATE_REPLACE_DESTINATION, - NULL, cancellable, error)) - return FALSE; - } - - if (g_file_query_exists (etc_resolve_conf, cancellable) && - !g_file_delete (etc_resolve_conf, cancellable, error)) - return TRUE; - - if (!g_file_make_symbolic_link (etc_resolve_conf, - "/run/host/monitor/resolv.conf", - cancellable, error)) - return FALSE; - } keyfile = g_key_file_new (); metadata = g_file_get_child (checkoutdir, "metadata"); @@ -5434,17 +5690,92 @@ flatpak_dir_deploy (FlatpakDir *self, } export = g_file_get_child (checkoutdir, "export"); - if (g_file_query_exists (export, cancellable)) - { - g_auto(GStrv) ref_parts = NULL; - ref_parts = g_strsplit (ref, "/", -1); + /* Never export any binaries bundled with the app */ + bindir = g_file_get_child (export, "bin"); + if (!flatpak_rm_rf (bindir, cancellable, error)) + return FALSE; + + is_app = g_str_has_prefix (ref, "app/"); + + if (!is_app) /* is runtime */ + { + /* Ensure that various files exists as regular files in /usr/etc, as we + want to bind-mount over them */ + files_etc = g_file_resolve_relative_path (checkoutdir, "files/etc"); + if (g_file_query_exists (files_etc, cancellable)) + { + char *etcfiles[] = {"passwd", "group", "machine-id" }; + g_autoptr(GFile) etc_resolve_conf = g_file_get_child (files_etc, "resolv.conf"); + int i; + for (i = 0; i < G_N_ELEMENTS (etcfiles); i++) + { + g_autoptr(GFile) etc_file = g_file_get_child (files_etc, etcfiles[i]); + GFileType type; + + type = g_file_query_file_type (etc_file, G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS, + cancellable); + if (type == G_FILE_TYPE_REGULAR) + continue; + + if (type != G_FILE_TYPE_UNKNOWN) + { + /* Already exists, but not regular, probably symlink. Remove it */ + if (!g_file_delete (etc_file, cancellable, error)) + return FALSE; + } + + if (!g_file_replace_contents (etc_file, "", 0, NULL, FALSE, + G_FILE_CREATE_REPLACE_DESTINATION, + NULL, cancellable, error)) + return FALSE; + } + + if (g_file_query_exists (etc_resolve_conf, cancellable) && + !g_file_delete (etc_resolve_conf, cancellable, error)) + return TRUE; + + if (!g_file_make_symbolic_link (etc_resolve_conf, + "/run/host/monitor/resolv.conf", + cancellable, error)) + return FALSE; + } + + /* Runtime should never export anything */ + if (!flatpak_rm_rf (export, cancellable, error)) + return FALSE; + } + else /* is app */ + { + g_auto(GStrv) ref_parts = g_strsplit (ref, "/", -1); + g_autoptr(GFile) wrapper = g_file_get_child (bindir, ref_parts[1]); + g_autofree char *escaped_app = maybe_quote (ref_parts[1]); + g_autofree char *escaped_branch = maybe_quote (ref_parts[3]); + g_autofree char *escaped_arch = maybe_quote (ref_parts[2]); + g_autofree char *bin_data = NULL; + int r; + + if (!flatpak_mkdir_p (bindir, cancellable, error)) + return FALSE; if (!flatpak_rewrite_export_dir (ref_parts[1], ref_parts[3], ref_parts[2], keyfile, export, cancellable, error)) return FALSE; + + bin_data = g_strdup_printf ("#!/bin/sh\nexec %s/flatpak run --branch=%s --arch=%s %s \"$@\"\n", + FLATPAK_BINDIR, escaped_branch, escaped_arch, escaped_app); + if (!g_file_replace_contents (wrapper, bin_data, strlen (bin_data), NULL, FALSE, + G_FILE_CREATE_REPLACE_DESTINATION, NULL, cancellable, error)) + return FALSE; + + do + r = fchmodat (AT_FDCWD, flatpak_file_get_path_cached (wrapper), 0755, 0); + while (G_UNLIKELY (r == -1 && errno == EINTR)); + if (r == -1) + return glnx_throw_errno_prefix (error, "fchmodat"); + } g_variant_builder_init (&metadata_builder, G_VARIANT_TYPE ("a{sv}")); @@ -5481,11 +5812,46 @@ flatpak_dir_deploy (FlatpakDir *self, return TRUE; } +/* -origin remotes are deleted when the last ref refering to it is undeployed */ +void +flatpak_dir_prune_origin_remote (FlatpakDir *self, + const char *remote) +{ + if (remote != NULL && + g_str_has_suffix (remote, "-origin") && + flatpak_dir_get_remote_noenumerate (self, remote) && + !flatpak_dir_remote_has_deploys (self, remote)) + { + if (flatpak_dir_use_system_helper (self, NULL)) + { + FlatpakSystemHelper *system_helper; + const char *installation = flatpak_dir_get_id (self); + g_autoptr(GVariant) gpg_data_v = NULL; + + system_helper = flatpak_dir_get_system_helper (self); + g_assert (system_helper != NULL); + + gpg_data_v = g_variant_ref_sink (g_variant_new_from_data (G_VARIANT_TYPE ("ay"), "", 0, TRUE, NULL, NULL)); + + g_debug ("Calling system helper: ConfigureRemote"); + flatpak_system_helper_call_configure_remote_sync (system_helper, + 0, remote, + "", + gpg_data_v, + installation ? installation : "", + NULL, NULL); + } + else + ostree_repo_remote_delete (self->repo, remote, NULL, NULL); + } +} + gboolean flatpak_dir_deploy_install (FlatpakDir *self, const char *ref, const char *origin, const char **subpaths, + gboolean reinstall, GCancellable *cancellable, GError **error) { @@ -5496,6 +5862,7 @@ flatpak_dir_deploy_install (FlatpakDir *self, gboolean ret = FALSE; g_autoptr(GError) local_error = NULL; g_auto(GStrv) ref_parts = g_strsplit (ref, "/", -1); + g_autofree char *remove_ref_from_remote = NULL; if (!flatpak_dir_lock (self, &lock, cancellable, error)) @@ -5504,9 +5871,33 @@ flatpak_dir_deploy_install (FlatpakDir *self, old_deploy_dir = flatpak_dir_get_if_deployed (self, ref, NULL, cancellable); if (old_deploy_dir != NULL) { - g_set_error (error, FLATPAK_ERROR, FLATPAK_ERROR_ALREADY_INSTALLED, - _("%s branch %s already installed"), ref_parts[1], ref_parts[3]); - goto out; + if (reinstall) + { + g_autofree char *old_active = flatpak_dir_read_active (self, ref, cancellable); + g_autoptr(GVariant) old_deploy = NULL; + const char *old_origin; + + old_deploy = flatpak_load_deploy_data (old_deploy_dir, cancellable, error); + if (old_deploy == NULL) + goto out; + + /* If the old install was from a different remote, remove the ref */ + old_origin = flatpak_deploy_data_get_origin (old_deploy); + if (strcmp (old_origin, origin) != 0) + remove_ref_from_remote = g_strdup (old_origin); + + g_debug ("Removing old deployment for reinstall"); + if (!flatpak_dir_undeploy (self, ref, old_active, + TRUE, FALSE, + cancellable, error)) + goto out; + } + else + { + g_set_error (error, FLATPAK_ERROR, FLATPAK_ERROR_ALREADY_INSTALLED, + _("%s branch %s already installed"), ref_parts[1], ref_parts[3]); + goto out; + } } deploy_base = flatpak_dir_get_deploy_dir (self, ref); @@ -5535,6 +5926,15 @@ flatpak_dir_deploy_install (FlatpakDir *self, goto out; } + /* Remove old ref if the reinstalled was from a different remote */ + if (remove_ref_from_remote != NULL) + { + if (!flatpak_dir_remove_ref (self, remove_ref_from_remote, ref, cancellable, error)) + goto out; + + flatpak_dir_prune_origin_remote (self, remove_ref_from_remote); + } + /* Release lock before doing possibly slow prune */ glnx_release_lock_file (&lock); @@ -5781,6 +6181,7 @@ flatpak_dir_install (FlatpakDir *self, gboolean no_pull, gboolean no_deploy, gboolean no_static_deltas, + gboolean reinstall, const char *ref, const char *remote_name, const char **opt_subpaths, @@ -5844,22 +6245,6 @@ flatpak_dir_install (FlatpakDir *self, { /* Do nothing */ } - else if ((!gpg_verify_summary && collection_id == NULL) || !gpg_verify) - { - /* The remote is not gpg verified, so we don't want to allow installation via - a download in the home directory, as there is no way to verify you're not - injecting anything into the remote. However, in the case of a remote - configured to a local filesystem we can just let the system helper do - the installation, as it can then avoid network i/o and be certain the - data comes from the right place. - - If a collection ID is available, we can verify the refs in commit - metadata. */ - if (g_str_has_prefix (url, "file:")) - helper_flags |= FLATPAK_HELPER_DEPLOY_FLAGS_LOCAL_PULL; - else - return flatpak_fail (error, "Can't pull from untrusted non-gpg verified remote"); - } else if (is_oci) { g_autoptr(FlatpakOciRegistry) registry = NULL; @@ -5876,6 +6261,22 @@ flatpak_dir_install (FlatpakDir *self, if (!flatpak_dir_mirror_oci (self, registry, remote_name, ref, NULL, progress, cancellable, error)) return FALSE; } + else if ((!gpg_verify_summary && collection_id == NULL) || !gpg_verify) + { + /* The remote is not gpg verified, so we don't want to allow installation via + a download in the home directory, as there is no way to verify you're not + injecting anything into the remote. However, in the case of a remote + configured to a local filesystem we can just let the system helper do + the installation, as it can then avoid network i/o and be certain the + data comes from the right place. + + If a collection ID is available, we can verify the refs in commit + metadata. */ + if (g_str_has_prefix (url, "file:")) + helper_flags |= FLATPAK_HELPER_DEPLOY_FLAGS_LOCAL_PULL; + else + return flatpak_fail (error, "Can't pull from untrusted non-gpg verified remote"); + } else { /* We're pulling from a remote source, we do the network mirroring pull as a @@ -5892,7 +6293,12 @@ flatpak_dir_install (FlatpakDir *self, flatpak_flags |= FLATPAK_PULL_FLAGS_SIDELOAD_EXTRA_DATA; - if (!flatpak_dir_remote_fetch_summary (self, remote_name, + /* Avoid fetching the system remote summary on P2P code paths. + * Instead we have to regenerate the summary in the child repo, + * because the refs in it can be pulled from various different + * remotes. */ + if (collection_id == NULL && + !flatpak_dir_remote_fetch_summary (self, remote_name, &summary_copy, &summary_sig_copy, cancellable, error)) return FALSE; @@ -5920,13 +6326,24 @@ flatpak_dir_install (FlatpakDir *self, return FALSE; #endif /* FLATPAK_ENABLE_P2P */ - summary_file = g_file_get_child (ostree_repo_get_path (child_repo), "summary"); - if (!g_file_replace_contents (summary_file, - g_bytes_get_data (summary_copy, NULL), - g_bytes_get_size (summary_copy), - NULL, FALSE, 0, NULL, cancellable, NULL)) + /* Regenerate the summary in the child repo because the summary copied + * into the repo by the flatpak_dir_pull() call above is reflective of the refs on the + * remote that was pulled from, which might be a peer remote and might not + * have the full set of refs that was pulled. */ + if (collection_id != NULL && + !ostree_repo_regenerate_summary (child_repo, NULL, cancellable, error)) return FALSE; + if (summary_copy != NULL) + { + summary_file = g_file_get_child (ostree_repo_get_path (child_repo), "summary"); + if (!g_file_replace_contents (summary_file, + g_bytes_get_data (summary_copy, NULL), + g_bytes_get_size (summary_copy), + NULL, FALSE, 0, NULL, cancellable, NULL)) + return FALSE; + } + if (collection_id == NULL) { summary_sig_file = g_file_get_child (ostree_repo_get_path (child_repo), "summary.sig"); @@ -5943,6 +6360,9 @@ flatpak_dir_install (FlatpakDir *self, if (no_deploy) helper_flags |= FLATPAK_HELPER_DEPLOY_FLAGS_NO_DEPLOY; + if (reinstall) + helper_flags |= FLATPAK_HELPER_DEPLOY_FLAGS_REINSTALL; + g_debug ("Calling system helper: Deploy"); if (!flatpak_system_helper_call_deploy_sync (system_helper, child_repo_path ? child_repo_path : "", @@ -5972,7 +6392,7 @@ flatpak_dir_install (FlatpakDir *self, if (!no_deploy) { if (!flatpak_dir_deploy_install (self, ref, remote_name, opt_subpaths, - cancellable, error)) + reinstall, cancellable, error)) return FALSE; } @@ -6195,7 +6615,7 @@ flatpak_dir_install_bundle (FlatpakDir *self, } else { - if (!flatpak_dir_deploy_install (self, ref, remote, NULL, cancellable, error)) + if (!flatpak_dir_deploy_install (self, ref, remote, NULL, FALSE, cancellable, error)) return FALSE; } @@ -6247,14 +6667,13 @@ flatpak_dir_check_for_update (FlatpakDir *self, const char *target_rev = NULL; const char *installed_commit; const char *installed_alt_id; - g_autofree char *collection_id = NULL; deploy_data = flatpak_dir_get_deploy_data (self, ref, cancellable, NULL); if (deploy_data != NULL) old_subpaths = flatpak_deploy_data_get_subpaths (deploy_data); else - old_subpaths = g_new0 (const char *, 1); /* Empty strv == all subpatsh*/ + old_subpaths = g_new0 (const char *, 1); /* Empty strv == all subpaths*/ if (opt_subpaths) subpaths = opt_subpaths; @@ -6271,15 +6690,12 @@ flatpak_dir_check_for_update (FlatpakDir *self, if (*url == 0) { - /* Empty URL => disabled, but we preted to be already installed to avoid warnings */ + /* Empty URL => disabled, but we pretend to be already installed to avoid warnings */ g_set_error (error, FLATPAK_ERROR, FLATPAK_ERROR_ALREADY_INSTALLED, _("%s branch %s already installed"), ref, installed_commit); return NULL; } - if (!repo_get_remote_collection_id (self->repo, remote_name, &collection_id, error)) - return NULL; - if (no_pull) { remote_and_branch = g_strdup_printf ("%s:%s", remote_name, ref); @@ -6290,55 +6706,11 @@ flatpak_dir_check_for_update (FlatpakDir *self, return NULL; /* No update, because nothing to update to */ } } - else if (collection_id != NULL) - { -#ifdef FLATPAK_ENABLE_P2P - /* Find the latest rev from the remote and its available mirrors, including - * LAN and USB sources. */ - g_autoptr(GMainContext) context = NULL; - g_autoptr(GAsyncResult) find_result = NULL; - g_auto(OstreeRepoFinderResultv) results = NULL; - OstreeCollectionRef collection_ref = { collection_id, (char *) ref }; - OstreeCollectionRef *collection_refs_to_fetch[2] = { &collection_ref, NULL }; - gsize i; - - context = g_main_context_new (); - g_main_context_push_thread_default (context); - - ostree_repo_find_remotes_async (self->repo, (const OstreeCollectionRef * const *) collection_refs_to_fetch, - NULL /* no options */, - NULL /* default finders */, - NULL /* no progress reporting */, - cancellable, async_result_cb, &find_result); - - while (find_result == NULL) - g_main_context_iteration (context, TRUE); - - results = ostree_repo_find_remotes_finish (self->repo, find_result, error); - if (results == NULL) - return NULL; - - for (i = 0; results[i] != NULL && latest_rev == NULL; i++) - latest_rev = g_strdup (g_hash_table_lookup (results[i]->ref_to_checksum, &collection_ref)); - - if (latest_rev == NULL) - { - flatpak_fail (error, "No such ref (%s, %s) in remote %s or elsewhere", - collection_ref.collection_id, collection_ref.ref_name, remote_name); - return NULL; - } - - if (out_results != NULL) - *out_results = g_steal_pointer (&results); -#else /* if !FLATPAK_ENABLE_P2P */ - g_assert_not_reached (); -#endif /* !FLATPAK_ENABLE_P2P */ - } else { - latest_rev = flatpak_dir_lookup_ref_from_summary (self, remote_name, ref, NULL, NULL, error); - if (latest_rev == NULL) - return NULL; + if (!flatpak_dir_find_latest_rev (self, remote_name, ref, checksum_or_latest, &latest_rev, + out_results, cancellable, error)) + return FALSE; } if (checksum_or_latest != NULL) @@ -6385,6 +6757,7 @@ flatpak_dir_update (FlatpakDir *self, const char **subpaths = NULL; g_autofree char *url = NULL; FlatpakPullFlags flatpak_flags; + g_autofree const char **old_subpaths = NULL; gboolean is_oci; /* This and @results are calculated in check_for_update. @results will be @@ -6399,10 +6772,14 @@ flatpak_dir_update (FlatpakDir *self, deploy_data = flatpak_dir_get_deploy_data (self, ref, cancellable, NULL); + + if (deploy_data != NULL) + old_subpaths = flatpak_deploy_data_get_subpaths (deploy_data); + if (opt_subpaths) subpaths = opt_subpaths; - else if (deploy_data != NULL) - subpaths = flatpak_deploy_data_get_subpaths (deploy_data); + else + subpaths = old_subpaths; if (!ostree_repo_remote_get_url (self->repo, remote_name, &url, error)) return FALSE; @@ -6425,9 +6802,23 @@ flatpak_dir_update (FlatpakDir *self, gboolean gpg_verify; g_autofree char *collection_id = NULL; + if (allow_downgrade) + return flatpak_fail (error, "Can't update to a specific commit without root permissions"); + system_helper = flatpak_dir_get_system_helper (self); g_assert (system_helper != NULL); + if (!OSTREE_CHECK_VERSION(2017,13)) + { + /* If the existing pull is partial, disable static deltas. They can + * break on ostree < 2017.13 which doesn't look at the parent repo for + * commitpartial state. This was fixed in + * https://github.com/ostreedev/ostree/commit/90ebd48f6aaf45c47b48c44354359f973dcf22a8 + */ + if (old_subpaths && old_subpaths[0] != NULL) + flatpak_flags |= FLATPAK_PULL_FLAGS_NO_STATIC_DELTAS; + } + if (!flatpak_dir_ensure_repo (self, cancellable, error)) return FALSE; @@ -6499,7 +6890,12 @@ flatpak_dir_update (FlatpakDir *self, if (child_repo == NULL) return FALSE; - if (!flatpak_dir_remote_fetch_summary (self, remote_name, + /* Avoid fetching the system remote summary on P2P code paths. + * Instead we have to regenerate the summary in the child repo, + * because the refs in it can be pulled from various different + * remotes. */ + if (collection_id == NULL && + !flatpak_dir_remote_fetch_summary (self, remote_name, &summary_copy, &summary_sig_copy, cancellable, error)) return FALSE; @@ -6523,13 +6919,24 @@ flatpak_dir_update (FlatpakDir *self, return FALSE; #endif /* FLATPAK_ENABLE_P2P */ - summary_file = g_file_get_child (ostree_repo_get_path (child_repo), "summary"); - if (!g_file_replace_contents (summary_file, - g_bytes_get_data (summary_copy, NULL), - g_bytes_get_size (summary_copy), - NULL, FALSE, 0, NULL, cancellable, NULL)) + /* Regenerate the summary in the child repo because the summary copied + * into the repo by the flatpak_dir_pull() call above is reflective of the refs on the + * remote that was pulled from, which might be a peer remote and might not + * have the full set of refs that was pulled. */ + if (collection_id != NULL && + !ostree_repo_regenerate_summary (child_repo, NULL, cancellable, error)) return FALSE; + if (summary_copy != NULL) + { + summary_file = g_file_get_child (ostree_repo_get_path (child_repo), "summary"); + if (!g_file_replace_contents (summary_file, + g_bytes_get_data (summary_copy, NULL), + g_bytes_get_size (summary_copy), + NULL, FALSE, 0, NULL, cancellable, NULL)) + return FALSE; + } + if (collection_id == NULL) { summary_sig_file = g_file_get_child (ostree_repo_get_path (child_repo), "summary.sig"); @@ -6667,11 +7074,7 @@ flatpak_dir_uninstall (FlatpakDir *self, glnx_release_lock_file (&lock); - if (repository != NULL && - g_str_has_suffix (repository, "-origin") && - flatpak_dir_get_remote_noenumerate (self, repository) && - !flatpak_dir_remote_has_deploys (self, repository)) - ostree_repo_remote_delete (self->repo, repository, NULL, NULL); + flatpak_dir_prune_origin_remote (self, repository); if (!keep_ref) flatpak_dir_prune (self, cancellable, NULL); @@ -6917,6 +7320,7 @@ flatpak_dir_undeploy (FlatpakDir *self, g_autofree char *tmpname = g_strdup_printf ("removed-%s-XXXXXX", active_id); g_autofree char *current_active = NULL; g_autoptr(GFile) change_file = NULL; + g_autoptr(GError) child_error = NULL; int i; g_assert (ref != NULL); @@ -6979,8 +7383,14 @@ flatpak_dir_undeploy (FlatpakDir *self, change_file = g_file_resolve_relative_path (removed_subdir, "files/.updated"); else change_file = g_file_resolve_relative_path (removed_subdir, "files/.removed"); - g_file_replace_contents (change_file, "", 0, NULL, FALSE, - G_FILE_CREATE_REPLACE_DESTINATION, NULL, NULL, NULL); + + if (!g_file_replace_contents (change_file, "", 0, NULL, FALSE, + G_FILE_CREATE_REPLACE_DESTINATION, NULL, NULL, &child_error)) + { + g_autofree gchar *path = g_file_get_path (change_file); + g_warning ("Unable to clear %s: %s", path, child_error->message); + g_clear_error (&child_error); + } if (force_remove || !dir_is_locked (removed_subdir)) { @@ -7413,18 +7823,6 @@ flatpak_dir_cache_summary (FlatpakDir *self, G_UNLOCK (cache); } - -static int -compare_mdp (const void *a, const void *b) -{ - FlatpakOciManifestDescriptor *aa = *(FlatpakOciManifestDescriptor **)a; - FlatpakOciManifestDescriptor *bb = *(FlatpakOciManifestDescriptor **)b; - const char *ref_a = flatpak_oci_manifest_descriptor_get_ref (aa); - const char *ref_b = flatpak_oci_manifest_descriptor_get_ref (bb); - - return g_strcmp0 (ref_a, ref_b); -} - static gboolean flatpak_dir_remote_make_oci_summary (FlatpakDir *self, const char *remote, @@ -7432,20 +7830,12 @@ flatpak_dir_remote_make_oci_summary (FlatpakDir *self, GCancellable *cancellable, GError **error) { - g_autoptr(FlatpakOciRegistry) registry = NULL; g_autofree char *oci_uri = NULL; - g_autoptr(GVariantBuilder) refs_builder = NULL; - g_autoptr(GVariantBuilder) additional_metadata_builder = NULL; - g_autoptr(GVariantBuilder) summary_builder = NULL; g_autoptr(GVariant) summary = NULL; - g_autoptr(GVariantBuilder) ref_data_builder = NULL; - g_autoptr(FlatpakOciIndex) index = NULL; - int i; g_autoptr(GFile) cache_dir = NULL; g_autoptr(GFile) summary_cache = NULL; g_autofree char *summary_name = NULL; g_autofree char *cache_etag = NULL; - g_autofree char *new_etag = NULL; g_autofree char *self_name = NULL; g_autoptr(GError) local_error = NULL; g_autoptr(GMappedFile) mfile = NULL; @@ -7475,12 +7865,10 @@ flatpak_dir_remote_make_oci_summary (FlatpakDir *self, g_variant_lookup (extensions, "xa.oci-etag", "s", &cache_etag); } - registry = flatpak_oci_registry_new (oci_uri, FALSE, -1, NULL, error); - if (registry == NULL) - return FALSE; + ensure_soup_session (self); - index = flatpak_oci_registry_load_index (registry, cache_etag, &new_etag, cancellable, &local_error); - if (index == NULL) + summary = flatpak_oci_index_fetch_summary (self->soup_session, oci_uri, cache_etag, cancellable, &local_error); + if (summary == NULL) { if (g_error_matches (local_error, FLATPAK_OCI_ERROR, FLATPAK_OCI_ERROR_NOT_CHANGED)) { @@ -7493,85 +7881,6 @@ flatpak_dir_remote_make_oci_summary (FlatpakDir *self, return FALSE; } - refs_builder = g_variant_builder_new (G_VARIANT_TYPE ("a(s(taya{sv}))")); - ref_data_builder = g_variant_builder_new (G_VARIANT_TYPE ("a{s(tts)}")); - additional_metadata_builder = g_variant_builder_new (G_VARIANT_TYPE ("a{sv}")); - - /* The summary has to be sorted by ref, so pre-sort the manifests */ - if (index->manifests != NULL) - qsort (index->manifests, flatpak_oci_index_get_n_manifests (index), sizeof (FlatpakOciManifestDescriptor *), compare_mdp); - - for (i = 0; index->manifests != NULL && index->manifests[i] != NULL; i++) - { - FlatpakOciManifestDescriptor *m = index->manifests[i]; - FlatpakOciDescriptor *d = (FlatpakOciDescriptor *)m; - const char *ref; - const char *fake_commit; - guint64 installed_size = 0; - guint64 download_size = 0; - const char *installed_size_str; - const char *download_size_str; - const char *signature_digest; - const char *metadata_contents = NULL; - g_autoptr(GVariantBuilder) ref_metadata_builder = NULL; - - ref = flatpak_oci_manifest_descriptor_get_ref (m); - if (ref == NULL) - continue; - - metadata_contents = g_hash_table_lookup (d->annotations, "org.flatpak.metadata"); - if (metadata_contents == NULL && !g_str_has_prefix (ref, "appstream/")) - continue; /* Not a flatpak, skip */ - - if (!g_str_has_prefix (d->digest, "sha256:")) - { - g_debug ("Ignoring digest type %s", d->digest); - continue; - } - - fake_commit = d->digest + strlen ("sha256:"); - - installed_size_str = g_hash_table_lookup (d->annotations, "org.flatpak.installed-size"); - if (installed_size_str) - installed_size = g_ascii_strtoull (installed_size_str, NULL, 10); - - download_size_str = g_hash_table_lookup (d->annotations, "org.flatpak.download-size"); - if (download_size_str) - download_size = g_ascii_strtoull (download_size_str, NULL, 10); - - ref_metadata_builder = g_variant_builder_new (G_VARIANT_TYPE ("a{sv}")); - - signature_digest = g_hash_table_lookup (d->annotations, "org.flatpak.signature-digest"); - if (signature_digest) - g_variant_builder_add (ref_metadata_builder, "{sv}", "xa.oci-signature", - g_variant_new_string (signature_digest)); - - g_variant_builder_add_value (refs_builder, - g_variant_new ("(s(t@ay@a{sv}))", ref, - 0, - ostree_checksum_to_bytes_v (fake_commit), - g_variant_builder_end (ref_metadata_builder))); - g_variant_builder_add (ref_data_builder, "{s(tts)}", - ref, - GUINT64_TO_BE (installed_size), - GUINT64_TO_BE (download_size), - metadata_contents ? metadata_contents : ""); - - } - - g_variant_builder_add (additional_metadata_builder, "{sv}", "xa.cache", - g_variant_new_variant (g_variant_builder_end (ref_data_builder))); - if (new_etag) - g_variant_builder_add (additional_metadata_builder, "{sv}", "xa.oci-etag", - g_variant_new_string (new_etag)); - - summary_builder = g_variant_builder_new (OSTREE_SUMMARY_GVARIANT_FORMAT); - - g_variant_builder_add_value (summary_builder, g_variant_builder_end (refs_builder)); - g_variant_builder_add_value (summary_builder, g_variant_builder_end (additional_metadata_builder)); - - summary = g_variant_ref_sink (g_variant_builder_end (summary_builder)); - *out_summary = g_variant_get_data_as_bytes (summary); if (!g_file_replace_contents (summary_cache, @@ -7600,6 +7909,13 @@ flatpak_dir_remote_fetch_summary (FlatpakDir *self, if (!ostree_repo_remote_get_url (self->repo, name, &url, error)) return FALSE; + if (*url == '\0') + { + g_set_error (error, G_IO_ERROR, G_IO_ERROR_INVALID_DATA, + "Can't fetch summary from disabled remote ‘%s’", name); + return FALSE; + } + is_local = g_str_has_prefix (url, "file:"); /* No caching for local files */ @@ -7623,6 +7939,7 @@ flatpak_dir_remote_fetch_summary (FlatpakDir *self, } else { + g_debug ("Fetching summary file for remote ‘%s’", name); if (!ostree_repo_remote_fetch_summary (self->repo, name, &summary, &summary_sig, cancellable, @@ -8182,7 +8499,10 @@ flatpak_dir_find_installed_ref (FlatpakDir *self, } g_set_error (error, FLATPAK_ERROR, FLATPAK_ERROR_NOT_INSTALLED, - _("%s %s not installed"), opt_name ? opt_name : "*unspecified*", opt_branch ? opt_branch : "master"); + _("%s/%s/%s not installed"), + opt_name ? opt_name : "*unspecified*", + opt_arch ? opt_arch : "*unspecified*", + opt_branch ? opt_branch : "*unspecified*"); return NULL; } @@ -8402,13 +8722,12 @@ char * flatpak_dir_get_remote_collection_id (FlatpakDir *self, const char *remote_name) { - GKeyFile *config = ostree_repo_get_config (self->repo); - g_autofree char *group = get_group (remote_name); + g_autofree char *collection_id = NULL; - if (config) - return g_key_file_get_string (config, group, "collection-id", NULL); + if (!repo_get_remote_collection_id (self->repo, remote_name, &collection_id, NULL)) + return NULL; - return NULL; + return g_steal_pointer (&collection_id); } char * @@ -8561,6 +8880,66 @@ cmp_remote (gconstpointer a, return prio_b - prio_a; } +static gboolean +origin_remote_matches (OstreeRepo *repo, + const char *remote_name, + const char *url, + const char *main_ref, + gboolean gpg_verify, + const char *collection_id) +{ + g_autofree char *real_url = NULL; + g_autofree char *real_main_ref = NULL; + g_autofree char *real_collection_id = NULL; + gboolean noenumerate; + gboolean real_gpg_verify; + + /* Must match url */ + if (url == NULL) + return FALSE; + + if (!ostree_repo_remote_get_url (repo, remote_name, &real_url, NULL)) + return FALSE; + + if (g_strcmp0 (url, real_url) != 0) + return FALSE; + + /* Must be noenumerate */ + if (!ostree_repo_get_remote_boolean_option (repo, remote_name, + "xa.noenumerate", + FALSE, &noenumerate, + NULL) || + !noenumerate) + return FALSE; + + /* Must match gpg-verify + * NOTE: We assume if all else matches the actual gpg key matches too. */ + if (!ostree_repo_get_remote_boolean_option (repo, remote_name, + "gpg-verify", + FALSE, &real_gpg_verify, + NULL) || + real_gpg_verify != gpg_verify) + return FALSE; + + /* Must match main-ref */ + if (ostree_repo_get_remote_option (repo, remote_name, + "xa.main-ref", + NULL, &real_main_ref, + NULL) && + g_strcmp0 (main_ref, real_main_ref) != 0) + return FALSE; + + /* Must match collection ID */ + if (ostree_repo_get_remote_option (repo, remote_name, + "collection-id", + NULL, &real_collection_id, + NULL) && + g_strcmp0 (main_ref, real_main_ref) != 0) + return FALSE; + + return TRUE; +} + static char * create_origin_remote_config (OstreeRepo *repo, const char *url, @@ -8569,7 +8948,7 @@ create_origin_remote_config (OstreeRepo *repo, const char *main_ref, gboolean gpg_verify, const char *collection_id, - GKeyFile *new_config) + GKeyFile **new_config) { g_autofree char *remote = NULL; g_auto(GStrv) remotes = NULL; @@ -8587,6 +8966,9 @@ create_origin_remote_config (OstreeRepo *repo, name = g_strdup_printf ("%s-%d-origin", id, version); version++; + if (origin_remote_matches (repo, name, url, main_ref, gpg_verify, collection_id)) + return g_steal_pointer (&name); + if (remotes == NULL || !g_strv_contains ((const char * const *) remotes, name)) remote = g_steal_pointer (&name); @@ -8595,21 +8977,23 @@ create_origin_remote_config (OstreeRepo *repo, group = g_strdup_printf ("remote \"%s\"", remote); - g_key_file_set_string (new_config, group, "url", url ? url : ""); + *new_config = g_key_file_new (); + + g_key_file_set_string (*new_config, group, "url", url ? url : ""); if (title) - g_key_file_set_string (new_config, group, "xa.title", title); - g_key_file_set_string (new_config, group, "xa.noenumerate", "true"); - g_key_file_set_string (new_config, group, "xa.prio", "0"); + g_key_file_set_string (*new_config, group, "xa.title", title); + g_key_file_set_string (*new_config, group, "xa.noenumerate", "true"); + g_key_file_set_string (*new_config, group, "xa.prio", "0"); /* Don’t enable summary verification if a collection ID is set, as collection * IDs enable the verification of refs from commit metadata instead. */ - g_key_file_set_string (new_config, group, "gpg-verify-summary", (gpg_verify && collection_id == NULL) ? "true" : "false"); - g_key_file_set_string (new_config, group, "gpg-verify", gpg_verify ? "true" : "false"); + g_key_file_set_string (*new_config, group, "gpg-verify-summary", (gpg_verify && collection_id == NULL) ? "true" : "false"); + g_key_file_set_string (*new_config, group, "gpg-verify", gpg_verify ? "true" : "false"); if (main_ref) - g_key_file_set_string (new_config, group, "xa.main-ref", main_ref); + g_key_file_set_string (*new_config, group, "xa.main-ref", main_ref); #ifdef FLATPAK_ENABLE_P2P if (collection_id) - g_key_file_set_string (new_config, group, "collection-id", collection_id); + g_key_file_set_string (*new_config, group, "collection-id", collection_id); #endif /* FLATPAK_ENABLE_P2P */ return g_steal_pointer (&remote); @@ -8626,15 +9010,19 @@ flatpak_dir_create_origin_remote (FlatpakDir *self, GCancellable *cancellable, GError **error) { - g_autoptr(GKeyFile) new_config = g_key_file_new (); + g_autoptr(GKeyFile) new_config = NULL; g_autofree char *remote = NULL; - remote = create_origin_remote_config (self->repo, url, id, title, main_ref, gpg_data != NULL, collection_id, new_config); + remote = create_origin_remote_config (self->repo, url, id, title, main_ref, gpg_data != NULL, collection_id, &new_config); - if (!flatpak_dir_modify_remote (self, remote, new_config, + if (new_config && + !flatpak_dir_modify_remote (self, remote, new_config, gpg_data, cancellable, error)) return NULL; + if (!ostree_repo_reload_config (self->repo, cancellable, error)) + return FALSE; + return g_steal_pointer (&remote); } @@ -8945,17 +9333,38 @@ flatpak_dir_find_remote_by_uri (FlatpakDir *self, return NULL; } +gboolean +flatpak_dir_has_remote (FlatpakDir *self, + const char *remote_name) +{ + GKeyFile *config = NULL; + g_autofree char *group = g_strdup_printf ("remote \"%s\"", remote_name); + + if (!flatpak_dir_maybe_ensure_repo (self, NULL, NULL)) + return FALSE; + + if (self->repo == NULL) + return FALSE; + + config = ostree_repo_get_config (self->repo); + + return g_key_file_has_group (config, group); +} + + char ** flatpak_dir_list_remotes (FlatpakDir *self, GCancellable *cancellable, GError **error) { - char **res; + char **res = NULL; - if (!flatpak_dir_ensure_repo (self, cancellable, error)) + if (!flatpak_dir_maybe_ensure_repo (self, cancellable, error)) return NULL; - res = ostree_repo_remote_list (self->repo, NULL); + if (self->repo) + res = ostree_repo_remote_list (self->repo, NULL); + if (res == NULL) res = g_new0 (char *, 1); /* Return empty array, not error */ @@ -9395,7 +9804,7 @@ flatpak_dir_fetch_remote_repo_metadata (FlatpakDir *self, * This is how we implement caching. Ignore failure and pull the ref anyway. */ checksum_from_summary = flatpak_dir_lookup_ref_from_summary (self, remote_name, OSTREE_REPO_METADATA_REF, - NULL, NULL, NULL); + NULL, NULL, NULL, NULL); refspec = g_strdup_printf ("%s:%s", remote_name, OSTREE_REPO_METADATA_REF); if (!ostree_repo_resolve_rev (self->repo, refspec, TRUE, &checksum_from_repo, error)) return FALSE; @@ -9499,6 +9908,13 @@ flatpak_dir_fetch_remote_repo_metadata (FlatpakDir *self, NULL, cancellable, error)) return FALSE; + /* Regenerate the summary in the child repo because the + * flatpak_dir_pull() call above might not copy the remote summary + * into the repo if the "branches" key is set on the remote. */ + if (collection_id != NULL && + !ostree_repo_regenerate_summary (child_repo, NULL, cancellable, error)) + return FALSE; + child_repo_path = g_file_get_path (ostree_repo_get_path (child_repo)); } @@ -9709,7 +10125,12 @@ flatpak_dir_update_remote_configuration_for_repo_metadata (FlatpakDir *self, return FALSE; if (!flatpak_summary_lookup_ref (summary, collection_id, OSTREE_REPO_METADATA_REF, &latest_rev, NULL)) - return flatpak_fail (error, "No such ref '%s' in remote %s", OSTREE_REPO_METADATA_REF, remote); + { + if (collection_id != NULL) + return flatpak_fail (error, "No such ref (%s, %s) in remote %s", collection_id, OSTREE_REPO_METADATA_REF, remote); + else + return flatpak_fail (error, "No such ref '%s' in remote %s", OSTREE_REPO_METADATA_REF, remote); + } if (!ostree_repo_load_commit (self->repo, latest_rev, &commit_v, NULL, error)) return FALSE; @@ -9779,7 +10200,7 @@ flatpak_dir_update_remote_configuration (FlatpakDir *self, if (collection_id == NULL && summary_sig_bytes == NULL) { - g_debug ("Can't update remote configuration as user, no GPG signature)"); + g_debug ("Can't update remote configuration as user, no GPG signature"); return TRUE; } @@ -9833,6 +10254,100 @@ flatpak_dir_update_remote_configuration (FlatpakDir *self, return flatpak_dir_update_remote_configuration_for_repo_metadata (self, remote, summary, FALSE, NULL, cancellable, error); } + +static GBytes * +flatpak_dir_fetch_remote_object (FlatpakDir *self, + const char *remote_name, + const char *checksum, + const char *type, + GCancellable *cancellable, + GError **error) +{ + g_autofree char *base_url = NULL; + g_autofree char *object_url = NULL; + g_autofree char *part1 = NULL; + g_autofree char *part2 = NULL; + g_autoptr(GBytes) bytes = NULL; + + if (!ostree_repo_remote_get_url (self->repo, remote_name, &base_url, error)) + return NULL; + + ensure_soup_session (self); + + part1 = g_strndup (checksum, 2); + part2 = g_strdup_printf ("%s.%s", checksum + 2, type); + + object_url = g_build_filename (base_url, "objects", part1, part2, NULL); + + bytes = flatpak_load_http_uri (self->soup_session, object_url, 0, + NULL, NULL, NULL, NULL, + cancellable, error); + if (bytes == NULL) + return NULL; + + return g_steal_pointer (&bytes); +} + +GVariant * +flatpak_dir_fetch_remote_commit (FlatpakDir *self, + const char *remote_name, + const char *ref, + const char *opt_commit, + char **out_commit, + GCancellable *cancellable, + GError **error) +{ + g_autoptr(GBytes) commit_bytes = NULL; + g_autoptr(GVariant) commit_variant = NULL; + g_autofree char *latest_commit = NULL; + g_autoptr(GVariant) commit_metadata = NULL; + + if (opt_commit == NULL) + { + latest_commit = flatpak_dir_lookup_ref_from_summary (self, remote_name, + ref, NULL, NULL, + cancellable, error); + if (latest_commit == NULL) + return NULL; + opt_commit = latest_commit; + } + + commit_bytes = flatpak_dir_fetch_remote_object (self, remote_name, + opt_commit, "commit", + cancellable, error); + if (commit_bytes == NULL) + return NULL; + + commit_variant = g_variant_new_from_bytes (OSTREE_COMMIT_GVARIANT_FORMAT, + commit_bytes, FALSE); + g_variant_ref_sink (commit_variant); + + if (!ostree_validate_structureof_commit (commit_variant, error)) + return NULL; + + commit_metadata = g_variant_get_child_value (commit_variant, 0); + if (ref != NULL) + { + const char *xa_ref = NULL; + g_autofree const char **commit_refs = NULL; + + if ((g_variant_lookup (commit_metadata, "xa.ref", "&s", &xa_ref) && + g_strcmp0 (xa_ref, ref) != 0) || + (g_variant_lookup (commit_metadata, OSTREE_COMMIT_META_KEY_REF_BINDING, "^a&s", &commit_refs) && + !g_strv_contains ((const char *const *) commit_refs, ref))) + { + flatpak_fail (error, "commit has no requested ref ‘%s’ in ref binding metadata", ref); + return NULL; + } + } + + if (out_commit) + *out_commit = g_strdup (opt_commit); + + return g_steal_pointer (&commit_variant); +} + + gboolean flatpak_dir_fetch_ref_cache (FlatpakDir *self, const char *remote_name, diff --git a/common/flatpak-dir.h b/common/flatpak-dir.h index 6f5fb80b..9740ab10 100644 --- a/common/flatpak-dir.h +++ b/common/flatpak-dir.h @@ -25,6 +25,7 @@ #include "libglnx/libglnx.h" #include +#include #define FLATPAK_TYPE_DIR flatpak_dir_get_type () #define FLATPAK_DIR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), FLATPAK_TYPE_DIR, FlatpakDir)) @@ -88,9 +89,10 @@ typedef enum { FLATPAK_HELPER_DEPLOY_FLAGS_UPDATE = 1 << 0, FLATPAK_HELPER_DEPLOY_FLAGS_NO_DEPLOY = 1 << 1, FLATPAK_HELPER_DEPLOY_FLAGS_LOCAL_PULL = 1 << 2, + FLATPAK_HELPER_DEPLOY_FLAGS_REINSTALL = 1 << 3, } FlatpakHelperDeployFlags; -#define FLATPAK_HELPER_DEPLOY_FLAGS_ALL (FLATPAK_HELPER_DEPLOY_FLAGS_UPDATE|FLATPAK_HELPER_DEPLOY_FLAGS_NO_DEPLOY|FLATPAK_HELPER_DEPLOY_FLAGS_LOCAL_PULL) +#define FLATPAK_HELPER_DEPLOY_FLAGS_ALL (FLATPAK_HELPER_DEPLOY_FLAGS_UPDATE|FLATPAK_HELPER_DEPLOY_FLAGS_NO_DEPLOY|FLATPAK_HELPER_DEPLOY_FLAGS_LOCAL_PULL|FLATPAK_HELPER_DEPLOY_FLAGS_REINSTALL) typedef enum { FLATPAK_HELPER_UNINSTALL_FLAGS_NONE = 0, @@ -133,6 +135,7 @@ typedef enum { FLATPAK_DIR_STORAGE_TYPE_HARD_DISK, FLATPAK_DIR_STORAGE_TYPE_SDCARD, FLATPAK_DIR_STORAGE_TYPE_MMC, + FLATPAK_DIR_STORAGE_TYPE_NETWORK, } FlatpakDirStorageType; GQuark flatpak_dir_error_quark (void); @@ -144,8 +147,10 @@ GQuark flatpak_dir_error_quark (void); typedef void OstreeRepoFinderResult; typedef void** OstreeRepoFinderResultv; -G_DEFINE_AUTOPTR_CLEANUP_FUNC (OstreeRepoFinderResult, void) -G_DEFINE_AUTO_CLEANUP_FREE_FUNC (OstreeRepoFinderResultv, void, NULL) +static inline void no_op (gpointer data) {} + +G_DEFINE_AUTOPTR_CLEANUP_FUNC (OstreeRepoFinderResult, no_op) +G_DEFINE_AUTO_CLEANUP_FREE_FUNC (OstreeRepoFinderResultv, no_op, NULL) #endif /* !FLATPAK_ENABLE_P2P */ /** @@ -316,6 +321,9 @@ gboolean flatpak_dir_recreate_repo (FlatpakDir *self, gboolean flatpak_dir_ensure_repo (FlatpakDir *self, GCancellable *cancellable, GError **error); +gboolean flatpak_dir_maybe_ensure_repo (FlatpakDir *self, + GCancellable *cancellable, + GError **error); char * flatpak_dir_get_config (FlatpakDir *self, const char *key, GError **error); @@ -335,6 +343,17 @@ gboolean flatpak_dir_deploy_appstream (FlatpakDir *self, gboolean *out_changed, GCancellable *cancellable, GError **error); +gboolean flatpak_dir_find_latest_rev (FlatpakDir *self, + const char *remote, + const char *ref, + const char *checksum_or_latest, + char **out_rev, + OstreeRepoFinderResult ***out_results, + GCancellable *cancellable, + GError **error); +gboolean flatpak_dir_check_for_appstream_update (FlatpakDir *self, + const char *remote, + const char *arch); gboolean flatpak_dir_update_appstream (FlatpakDir *self, const char *remote, const char *arch, @@ -430,12 +449,14 @@ gboolean flatpak_dir_deploy_install (FlatpakDir *self, const char *ref, const char *origin, const char **subpaths, + gboolean reinstall, GCancellable *cancellable, GError **error); gboolean flatpak_dir_install (FlatpakDir *self, gboolean no_pull, gboolean no_deploy, gboolean no_static_deltas, + gboolean reinstall, const char *ref, const char *remote_name, const char **subpaths, @@ -540,6 +561,8 @@ char *flatpak_dir_create_origin_remote (FlatpakDir *self, const char *collection_id, GCancellable *cancellable, GError **error); +void flatpak_dir_prune_origin_remote (FlatpakDir *self, + const char *remote); gboolean flatpak_dir_create_remote_for_ref_file (FlatpakDir *self, GBytes *data, const char *default_arch, @@ -560,6 +583,8 @@ GKeyFile * flatpak_dir_parse_repofile (FlatpakDir *self, char *flatpak_dir_find_remote_by_uri (FlatpakDir *self, const char *uri, const char *collection_id); +gboolean flatpak_dir_has_remote (FlatpakDir *self, + const char *remote_name); char **flatpak_dir_list_remotes (FlatpakDir *self, GCancellable *cancellable, GError **error); @@ -612,6 +637,13 @@ char * flatpak_dir_fetch_remote_default_branch (FlatpakDir *self, const char *remote, GCancellable *cancellable, GError **error); +GVariant * flatpak_dir_fetch_remote_commit (FlatpakDir *self, + const char *remote_name, + const char *ref, + const char *opt_commit, + char **out_commit, + GCancellable *cancellable, + GError **error); gboolean flatpak_dir_update_remote_configuration (FlatpakDir *self, const char *remote, GCancellable *cancellable, diff --git a/common/flatpak-exports.c b/common/flatpak-exports.c new file mode 100644 index 00000000..fd3d37f4 --- /dev/null +++ b/common/flatpak-exports.c @@ -0,0 +1,530 @@ +/* + * Copyright © 2014-2018 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: + * Alexander Larsson + */ + +#include "config.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include +#include "libglnx/libglnx.h" + +#include "flatpak-exports.h" +#include "flatpak-run.h" +#include "flatpak-proxy.h" +#include "flatpak-utils.h" +#include "flatpak-dir.h" +#include "flatpak-systemd-dbus.h" +#include "lib/flatpak-error.h" + +/* We don't want to export paths pointing into these, because they are readonly + (so we can't create mountpoints there) and don't match whats on the host anyway */ +const char *dont_export_in[] = { + "/lib", "/lib32", "/lib64", "/bin", "/sbin", "/usr", "/etc", "/app", "/dev", NULL +}; + +static char * +make_relative (const char *base, const char *path) +{ + GString *s = g_string_new (""); + + while (*base != 0) + { + while (*base == '/') + base++; + + if (*base != 0) + g_string_append (s, "../"); + + while (*base != '/' && *base != 0) + base++; + } + + while (*path == '/') + path++; + + g_string_append (s, path); + + return g_string_free (s, FALSE); +} + +#define FAKE_MODE_DIR -1 /* Ensure a dir, either on tmpfs or mapped parent */ +#define FAKE_MODE_TMPFS 0 +#define FAKE_MODE_SYMLINK G_MAXINT + +typedef struct { + char *path; + gint mode; +} ExportedPath; + +struct _FlatpakExports { + GHashTable *hash; + FlatpakFilesystemMode host_fs; +}; + +static void +exported_path_free (ExportedPath *exported_path) +{ + g_free (exported_path->path); + g_free (exported_path); +} + +FlatpakExports * +flatpak_exports_new (void) +{ + FlatpakExports *exports = g_new0 (FlatpakExports, 1); + exports->hash = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, (GFreeFunc)exported_path_free); + return exports; +} + +void +flatpak_exports_free (FlatpakExports *exports) +{ + g_hash_table_destroy (exports->hash); + g_free (exports); +} + +/* Returns TRUE if the location of this export + is not visible due to parents being exported */ +static gboolean +path_parent_is_mapped (const char **keys, + guint n_keys, + GHashTable *hash_table, + const char *path) +{ + guint i; + gboolean is_mapped = FALSE; + + /* The keys are sorted so shorter (i.e. parents) are first */ + for (i = 0; i < n_keys; i++) + { + const char *mounted_path = keys[i]; + ExportedPath *ep = g_hash_table_lookup (hash_table, mounted_path); + + if (flatpak_has_path_prefix (path, mounted_path) && + (strcmp (path, mounted_path) != 0)) + { + /* FAKE_MODE_DIR has same mapped value as parent */ + if (ep->mode == FAKE_MODE_DIR) + continue; + + is_mapped = ep->mode != FAKE_MODE_TMPFS; + } + } + + return is_mapped; +} + +static gboolean +path_is_mapped (const char **keys, + guint n_keys, + GHashTable *hash_table, + const char *path, + gboolean *is_readonly_out) +{ + guint i; + gboolean is_mapped = FALSE; + gboolean is_readonly = FALSE; + + /* The keys are sorted so shorter (i.e. parents) are first */ + for (i = 0; i < n_keys; i++) + { + const char *mounted_path = keys[i]; + ExportedPath *ep = g_hash_table_lookup (hash_table, mounted_path); + + if (flatpak_has_path_prefix (path, mounted_path)) + { + /* FAKE_MODE_DIR has same mapped value as parent */ + if (ep->mode == FAKE_MODE_DIR) + continue; + + if (ep->mode == FAKE_MODE_SYMLINK) + is_mapped = strcmp (path, mounted_path) == 0; + else + is_mapped = ep->mode != FAKE_MODE_TMPFS; + + if (is_mapped) + is_readonly = ep->mode == FLATPAK_FILESYSTEM_MODE_READ_ONLY; + else + is_readonly = FALSE; + } + } + + *is_readonly_out = is_readonly; + return is_mapped; +} + +static gint +compare_eps (const ExportedPath *a, + const ExportedPath *b) +{ + return g_strcmp0 (a->path, b->path); +} + +/* This differs from g_file_test (path, G_FILE_TEST_IS_DIR) which + returns true if the path is a symlink to a dir */ +static gboolean +path_is_dir (const char *path) +{ + struct stat s; + + if (lstat (path, &s) != 0) + return FALSE; + + return S_ISDIR (s.st_mode); +} + +static gboolean +path_is_symlink (const char *path) +{ + struct stat s; + + if (lstat (path, &s) != 0) + return FALSE; + + return S_ISLNK (s.st_mode); +} + +void +flatpak_exports_append_bwrap_args (FlatpakExports *exports, + FlatpakBwrap *bwrap) +{ + guint n_keys; + g_autofree const char **keys = (const char **)g_hash_table_get_keys_as_array (exports->hash, &n_keys); + g_autoptr(GList) eps = NULL; + GList *l; + + eps = g_hash_table_get_values (exports->hash); + eps = g_list_sort (eps, (GCompareFunc)compare_eps); + + g_qsort_with_data (keys, n_keys, sizeof (char *), (GCompareDataFunc) flatpak_strcmp0_ptr, NULL); + + for (l = eps; l != NULL; l = l->next) + { + ExportedPath *ep = l->data; + const char *path = ep->path; + + if (ep->mode == FAKE_MODE_SYMLINK) + { + if (!path_parent_is_mapped (keys, n_keys, exports->hash, path)) + { + g_autofree char *resolved = flatpak_resolve_link (path, NULL); + if (resolved) + { + g_autofree char *parent = g_path_get_dirname (path); + g_autofree char *relative = make_relative (parent, resolved); + flatpak_bwrap_add_args (bwrap, "--symlink", relative, path, NULL); + } + } + } + else if (ep->mode == FAKE_MODE_TMPFS) + { + /* Mount a tmpfs to hide the subdirectory, but only if there + is a pre-existing dir we can mount the path on. */ + if (path_is_dir (path)) + { + if (!path_parent_is_mapped (keys, n_keys, exports->hash, path)) + /* If the parent is not mapped, it will be a tmpfs, no need to mount another one */ + flatpak_bwrap_add_args (bwrap, "--dir", path, NULL); + else + flatpak_bwrap_add_args (bwrap, "--tmpfs", path, NULL); + } + } + else if (ep->mode == FAKE_MODE_DIR) + { + if (path_is_dir (path)) + flatpak_bwrap_add_args (bwrap, "--dir", path, NULL); + } + else + { + flatpak_bwrap_add_args (bwrap, + (ep->mode == FLATPAK_FILESYSTEM_MODE_READ_ONLY) ? "--ro-bind" : "--bind", + path, path, NULL); + } + } + + if (exports->host_fs != 0) + { + if (g_file_test ("/usr", G_FILE_TEST_IS_DIR)) + flatpak_bwrap_add_args (bwrap, + (exports->host_fs == FLATPAK_FILESYSTEM_MODE_READ_ONLY) ? "--ro-bind" : "--bind", + "/usr", "/run/host/usr", NULL); + if (g_file_test ("/etc", G_FILE_TEST_IS_DIR)) + flatpak_bwrap_add_args (bwrap, + (exports->host_fs == FLATPAK_FILESYSTEM_MODE_READ_ONLY) ? "--ro-bind" : "--bind", + "/etc", "/run/host/etc", NULL); + } +} + +/* Returns 0 if not visible */ +FlatpakFilesystemMode +flatpak_exports_path_get_mode (FlatpakExports *exports, + const char *path) +{ + guint n_keys; + g_autofree const char **keys = (const char **)g_hash_table_get_keys_as_array (exports->hash, &n_keys); + g_autofree char *canonical = NULL; + gboolean is_readonly = FALSE; + g_auto(GStrv) parts = NULL; + int i; + g_autoptr(GString) path_builder = g_string_new (""); + struct stat st; + + g_qsort_with_data (keys, n_keys, sizeof (char *), (GCompareDataFunc) flatpak_strcmp0_ptr, NULL); + + path = canonical = flatpak_canonicalize_filename (path); + + parts = g_strsplit (path+1, "/", -1); + + /* A path is visible in the sandbox if no parent + * path element that is mapped in the sandbox is + * a symlink, and the final element is mapped. + * If any parent is a symlink we resolve that and + * continue with that instead. + */ + for (i = 0; parts[i] != NULL; i++) + { + g_string_append (path_builder, "/"); + g_string_append (path_builder, parts[i]); + + if (path_is_mapped (keys, n_keys, exports->hash, path_builder->str, &is_readonly)) + { + if (lstat (path_builder->str, &st) != 0) + { + if (errno == ENOENT && parts[i+1] == NULL && !is_readonly) + { + /* Last element was mapped but isn't there, this is + * OK (used for the save case) if we the parent is + * mapped and writable, as the app can then create + * the file here. + */ + break; + } + + return 0; + } + + if (S_ISLNK (st.st_mode)) + { + g_autofree char *resolved = flatpak_resolve_link (path_builder->str, NULL); + g_autoptr(GString) path2_builder = NULL; + int j; + + if (resolved == NULL) + return 0; + + path2_builder = g_string_new (resolved); + + for (j = i + 1; parts[j] != NULL; j++) + { + g_string_append (path2_builder, "/"); + g_string_append (path2_builder, parts[j]); + } + + return flatpak_exports_path_get_mode (exports, path2_builder->str); + } + } + else if (parts[i+1] == NULL) + return 0; /* Last part was not mapped */ + } + + if (is_readonly) + return FLATPAK_FILESYSTEM_MODE_READ_ONLY; + + return FLATPAK_FILESYSTEM_MODE_READ_WRITE; +} + +gboolean +flatpak_exports_path_is_visible (FlatpakExports *exports, + const char *path) +{ + return flatpak_exports_path_get_mode (exports, path) > 0; +} + +static gboolean +never_export_as_symlink (const char *path) +{ + /* Don't export /tmp as a symlink even if it is on the host, because + that will fail with the pre-existing directory we created for /tmp, + and anyway, it being a symlink is not useful in the sandbox */ + if (strcmp (path, "/tmp") == 0) + return TRUE; + + return FALSE; +} + +static void +do_export_path (FlatpakExports *exports, + const char *path, + gint mode) +{ + ExportedPath *old_ep = g_hash_table_lookup (exports->hash, path); + ExportedPath *ep; + + ep = g_new0 (ExportedPath, 1); + ep->path = g_strdup (path); + + if (old_ep != NULL) + ep->mode = MAX (old_ep->mode, mode); + else + ep->mode = mode; + + g_hash_table_replace (exports->hash, ep->path, ep); +} + + +/* We use level to avoid infinite recursion */ +static gboolean +_exports_path_expose (FlatpakExports *exports, + int mode, + const char *path, + int level) +{ + g_autofree char *canonical = NULL; + struct stat st; + char *slash; + int i; + + if (level > 40) /* 40 is the current kernel ELOOP check */ + { + g_debug ("Expose too deep, bail"); + return FALSE; + } + + if (!g_path_is_absolute (path)) + { + g_debug ("Not exposing relative path %s", path); + return FALSE; + } + + /* Check if it exists at all */ + if (lstat (path, &st) != 0) + return FALSE; + + /* Don't expose weird things */ + if (!(S_ISDIR (st.st_mode) || + S_ISREG (st.st_mode) || + S_ISLNK (st.st_mode) || + S_ISSOCK (st.st_mode))) + return FALSE; + + path = canonical = flatpak_canonicalize_filename (path); + + for (i = 0; dont_export_in[i] != NULL; i++) + { + /* Don't expose files in non-mounted dirs like /app or /usr, as + they are not the same as on the host, and we generally can't + create the parents for them anyway */ + if (flatpak_has_path_prefix (path, dont_export_in[i])) + { + g_debug ("skipping export for path %s", path); + return FALSE; + } + } + + /* Handle any symlinks prior to the target itself. This includes path itself, + because we expose the target of the symlink. */ + slash = canonical; + do + { + slash = strchr (slash + 1, '/'); + if (slash) + *slash = 0; + + if (path_is_symlink (path) && !never_export_as_symlink (path)) + { + g_autofree char *resolved = flatpak_resolve_link (path, NULL); + g_autofree char *new_target = NULL; + + if (resolved) + { + if (slash) + new_target = g_build_filename (resolved, slash + 1, NULL); + else + new_target = g_strdup (resolved); + + if (_exports_path_expose (exports, mode, new_target, level + 1)) + { + do_export_path (exports, path, FAKE_MODE_SYMLINK); + return TRUE; + } + } + + return FALSE; + } + if (slash) + *slash = '/'; + } + while (slash != NULL); + + do_export_path (exports, path, mode); + return TRUE; +} + +void +flatpak_exports_add_path_expose (FlatpakExports *exports, + FlatpakFilesystemMode mode, + const char *path) +{ + _exports_path_expose (exports, mode, path, 0); +} + +void +flatpak_exports_add_path_tmpfs (FlatpakExports *exports, + const char *path) +{ + _exports_path_expose (exports, FAKE_MODE_TMPFS, path, 0); +} + +void +flatpak_exports_add_path_expose_or_hide (FlatpakExports *exports, + FlatpakFilesystemMode mode, + const char *path) +{ + if (mode == 0) + flatpak_exports_add_path_tmpfs (exports, path); + else + flatpak_exports_add_path_expose (exports, mode, path); +} + +void +flatpak_exports_add_path_dir (FlatpakExports *exports, + const char *path) +{ + _exports_path_expose (exports, FAKE_MODE_DIR, path, 0); +} + +void +flatpak_exports_add_home_expose (FlatpakExports *exports, + FlatpakFilesystemMode mode) +{ + exports->host_fs = mode; +} diff --git a/common/flatpak-exports.h b/common/flatpak-exports.h new file mode 100644 index 00000000..33c2f8db --- /dev/null +++ b/common/flatpak-exports.h @@ -0,0 +1,62 @@ +/* + * Copyright © 2014-2018 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: + * Alexander Larsson + */ + +#ifndef __FLATPAK_EXPORTS_H__ +#define __FLATPAK_EXPORTS_H__ + +#include "libglnx/libglnx.h" +#include "flatpak-utils.h" +#include "flatpak-bwrap.h" + +/* In numerical order of more privs */ +typedef enum { + FLATPAK_FILESYSTEM_MODE_READ_ONLY = 1, + FLATPAK_FILESYSTEM_MODE_READ_WRITE = 2, + FLATPAK_FILESYSTEM_MODE_CREATE = 3, +} FlatpakFilesystemMode; + +typedef struct _FlatpakExports FlatpakExports; + +void flatpak_exports_free (FlatpakExports *exports); +FlatpakExports *flatpak_exports_new (void); +void flatpak_exports_append_bwrap_args (FlatpakExports *exports, + FlatpakBwrap *bwrap); +void flatpak_exports_add_home_expose (FlatpakExports *exports, + FlatpakFilesystemMode mode); +void flatpak_exports_add_path_expose (FlatpakExports *exports, + FlatpakFilesystemMode mode, + const char *path); +void flatpak_exports_add_path_tmpfs (FlatpakExports *exports, + const char *path); +void flatpak_exports_add_path_expose_or_hide (FlatpakExports *exports, + FlatpakFilesystemMode mode, + const char *path); +void flatpak_exports_add_path_dir (FlatpakExports *exports, + const char *path); + +gboolean flatpak_exports_path_is_visible (FlatpakExports *exports, + const char *path); +FlatpakFilesystemMode flatpak_exports_path_get_mode (FlatpakExports *exports, + const char *path); + +G_DEFINE_AUTOPTR_CLEANUP_FUNC (FlatpakExports, flatpak_exports_free); + + +#endif /* __FLATPAK_EXPORTS_H__ */ diff --git a/common/flatpak-json-oci.c b/common/flatpak-json-oci.c index 718e0dce..308e1a2e 100644 --- a/common/flatpak-json-oci.c +++ b/common/flatpak-json-oci.c @@ -401,13 +401,16 @@ flatpak_oci_index_new (void) } static FlatpakOciManifestDescriptor * -manifest_desc_for_desc (FlatpakOciDescriptor *src_descriptor) +manifest_desc_for_desc (FlatpakOciDescriptor *src_descriptor, const char *ref) { FlatpakOciManifestDescriptor *desc; desc = flatpak_oci_manifest_descriptor_new (); flatpak_oci_descriptor_copy (src_descriptor, &desc->parent); + g_hash_table_replace (desc->parent.annotations, + g_strdup ("org.opencontainers.image.ref.name"), + g_strdup (ref)); return desc; } @@ -426,14 +429,14 @@ flatpak_oci_index_add_manifest (FlatpakOciIndex *self, int count; if (desc->annotations != NULL) - m_ref = g_hash_table_lookup (desc->annotations, "org.opencontainers.image.ref.name"); + m_ref = g_hash_table_lookup (desc->annotations, "org.flatpak.ref"); if (m_ref != NULL) flatpak_oci_index_remove_manifest (self, m_ref); count = flatpak_oci_index_get_n_manifests (self); - m = manifest_desc_for_desc (desc); + m = manifest_desc_for_desc (desc, m_ref); self->manifests = g_renew (FlatpakOciManifestDescriptor *, self->manifests, count + 2); self->manifests[count] = m; self->manifests[count+1] = NULL; @@ -703,7 +706,7 @@ flatpak_oci_export_annotations (GHashTable *source, GHashTable *dest) { const char *keys[] = { - "org.opencontainers.image.ref.name", + "org.flatpak.ref", "org.flatpak.installed-size", "org.flatpak.download-size", "org.flatpak.metadata", @@ -750,7 +753,7 @@ flatpak_oci_add_annotations_for_commit (GHashTable *annotations, GVariant *commit_data) { if (ref) - add_annotation (annotations,"org.opencontainers.image.ref.name", ref); + add_annotation (annotations,"org.flatpak.ref", ref); if (commit) add_annotation (annotations,"org.flatpak.commit", commit); @@ -809,7 +812,7 @@ flatpak_oci_parse_commit_annotations (GHashTable *annotations, GHashTableIter iter; gpointer _key, _value; - oci_ref = g_hash_table_lookup (annotations, "org.opencontainers.image.ref.name"); + oci_ref = g_hash_table_lookup (annotations, "org.flatpak.ref"); if (oci_ref != NULL && out_ref != NULL && *out_ref == NULL) *out_ref = g_strdup (oci_ref); @@ -939,3 +942,108 @@ flatpak_oci_signature_new (const char *digest, const char *ref) return signature; } + +G_DEFINE_TYPE (FlatpakOciIndexResponse, flatpak_oci_index_response, FLATPAK_TYPE_JSON); + +static void +flatpak_oci_index_image_free (FlatpakOciIndexImage *self) +{ + g_free (self->digest); + g_free (self->mediatype); + g_free (self->os); + g_free (self->architecture); + g_strfreev (self->tags); + if (self->annotations) + g_hash_table_destroy (self->annotations); + if (self->labels) + g_hash_table_destroy (self->labels); + g_free (self); +} + +static void +flatpak_oci_index_image_list_free (FlatpakOciIndexImageList *self) +{ + int i; + + g_free (self->digest); + g_free (self->mediatype); + g_strfreev (self->tags); + for (i = 0; self->images != NULL && self->images[i] != NULL; i++) + flatpak_oci_index_image_free (self->images[i]); + g_free (self->images); + g_free (self); +} + +static void +flatpak_oci_index_repository_free (FlatpakOciIndexRepository *self) +{ + int i; + + g_free (self->name); + for (i = 0; self->images != NULL && self->images[i] != NULL; i++) + flatpak_oci_index_image_free (self->images[i]); + g_free (self->images); + + for (i = 0; self->lists != NULL && self->lists[i] != NULL; i++) + flatpak_oci_index_image_list_free (self->lists[i]); + g_free (self->lists); + + g_free (self); +} + +static void +flatpak_oci_index_response_finalize (GObject *object) +{ + FlatpakOciIndexResponse *self = (FlatpakOciIndexResponse *) object; + int i; + + g_free (self->registry); + for (i = 0; self->results != NULL && self->results[i] != NULL; i++) + flatpak_oci_index_repository_free (self->results[i]); + g_free (self->results); + + G_OBJECT_CLASS (flatpak_oci_index_response_parent_class)->finalize (object); +} + +static void +flatpak_oci_index_response_class_init (FlatpakOciIndexResponseClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS (klass); + FlatpakJsonClass *json_class = FLATPAK_JSON_CLASS (klass); + static FlatpakJsonProp image_props[] = { + FLATPAK_JSON_STRING_PROP (FlatpakOciIndexImage, digest, "Digest"), + FLATPAK_JSON_STRING_PROP (FlatpakOciIndexImage, mediatype, "MediaType"), + FLATPAK_JSON_STRING_PROP (FlatpakOciIndexImage, os, "OS"), + FLATPAK_JSON_STRING_PROP (FlatpakOciIndexImage, architecture, "Architecture"), + FLATPAK_JSON_STRMAP_PROP(FlatpakOciIndexImage, annotations, "Annotations"), + FLATPAK_JSON_STRMAP_PROP(FlatpakOciIndexImage, labels, "Labels"), + FLATPAK_JSON_STRV_PROP (FlatpakOciIndexImage, tags, "Tags"), + FLATPAK_JSON_LAST_PROP + }; + static FlatpakJsonProp lists_props[] = { + FLATPAK_JSON_STRING_PROP (FlatpakOciIndexImageList, digest, "Digest"), + FLATPAK_JSON_STRUCTV_PROP (FlatpakOciIndexImageList, images, "Images", image_props), + FLATPAK_JSON_STRING_PROP (FlatpakOciIndexImageList, mediatype, "MediaType"), + FLATPAK_JSON_STRV_PROP (FlatpakOciIndexImageList, tags, "Tags"), + FLATPAK_JSON_LAST_PROP + }; + static FlatpakJsonProp results_props[] = { + FLATPAK_JSON_STRING_PROP (FlatpakOciIndexRepository, name, "Name"), + FLATPAK_JSON_STRUCTV_PROP (FlatpakOciIndexRepository, images, "Images", image_props), + FLATPAK_JSON_STRUCTV_PROP (FlatpakOciIndexRepository, lists, "Lists", lists_props), + FLATPAK_JSON_LAST_PROP + }; + static FlatpakJsonProp props[] = { + FLATPAK_JSON_STRING_PROP (FlatpakOciIndexResponse, registry, "Registry"), + FLATPAK_JSON_STRUCTV_PROP (FlatpakOciIndexResponse, results, "Results", results_props), + FLATPAK_JSON_LAST_PROP + }; + + object_class->finalize = flatpak_oci_index_response_finalize; + json_class->props = props; +} + +static void +flatpak_oci_index_response_init (FlatpakOciIndexResponse *self) +{ +} diff --git a/common/flatpak-json-oci.h b/common/flatpak-json-oci.h index d67528af..873de0ca 100644 --- a/common/flatpak-json-oci.h +++ b/common/flatpak-json-oci.h @@ -272,4 +272,47 @@ struct _FlatpakOciSignatureClass FlatpakOciSignature *flatpak_oci_signature_new (const char *digest, const char *ref); + +#define FLATPAK_TYPE_OCI_INDEX_RESPONSE flatpak_oci_index_response_get_type () +G_DECLARE_FINAL_TYPE (FlatpakOciIndexResponse, flatpak_oci_index_response, FLATPAK, OCI_INDEX_RESPONSE, FlatpakJson) + +typedef struct +{ + char *digest; + char *mediatype; + char *os; + char *architecture; + GHashTable *annotations; + GHashTable *labels; + char **tags; +} FlatpakOciIndexImage; + +typedef struct +{ + char *digest; + char *mediatype; + char **tags; + FlatpakOciIndexImage **images; +} FlatpakOciIndexImageList; + +typedef struct +{ + char *name; + FlatpakOciIndexImage **images; + FlatpakOciIndexImageList **lists; +} FlatpakOciIndexRepository; + +struct _FlatpakOciIndexResponse +{ + FlatpakJson parent; + + char *registry; + FlatpakOciIndexRepository **results; +}; + +struct _FlatpakOciIndexResponseClass +{ + FlatpakJsonClass parent_class; +}; + #endif /* __FLATPAK_JSON_OCI_H__ */ diff --git a/common/flatpak-oci-registry.c b/common/flatpak-oci-registry.c index c0e86ebc..331eac45 100644 --- a/common/flatpak-oci-registry.c +++ b/common/flatpak-oci-registry.c @@ -46,6 +46,7 @@ struct FlatpakOciRegistry gboolean for_write; gboolean valid; + gboolean is_docker; char *uri; int tmp_dfd; @@ -122,9 +123,9 @@ flatpak_oci_registry_set_property (GObject *object, static void flatpak_oci_registry_get_property (GObject *object, - guint prop_id, - GValue *value, - GParamSpec *pspec) + guint prop_id, + GValue *value, + GParamSpec *pspec) { FlatpakOciRegistry *self = FLATPAK_OCI_REGISTRY (object); @@ -192,10 +193,10 @@ flatpak_oci_registry_get_uri (FlatpakOciRegistry *self) FlatpakOciRegistry * flatpak_oci_registry_new (const char *uri, - gboolean for_write, - int tmp_dfd, - GCancellable *cancellable, - GError **error) + gboolean for_write, + int tmp_dfd, + GCancellable *cancellable, + GError **error) { FlatpakOciRegistry *oci_registry; @@ -306,7 +307,7 @@ remote_load_file (SoupSession *soup_session, uri_s = soup_uri_to_string (uri, FALSE); bytes = flatpak_load_http_uri (soup_session, - uri_s, etag, etag_out, + uri_s, FLATPAK_HTTP_FLAGS_ACCEPT_OCI, etag, etag_out, NULL, NULL, cancellable, error); if (bytes == NULL) @@ -353,7 +354,7 @@ parse_json (GBytes *bytes, GCancellable *cancellable, GError **error) } static gboolean -verify_oci_version (GBytes *oci_layout_bytes, GCancellable *cancellable, GError **error) +verify_oci_version (GBytes *oci_layout_bytes, gboolean *not_json, GCancellable *cancellable, GError **error) { const char *version; g_autoptr(JsonNode) node = NULL; @@ -361,8 +362,12 @@ verify_oci_version (GBytes *oci_layout_bytes, GCancellable *cancellable, GError node = parse_json (oci_layout_bytes, cancellable, error); if (node == NULL) - return FALSE; + { + *not_json = TRUE; + return FALSE; + } + *not_json = FALSE; oci_layout = json_node_get_object (node); version = json_object_get_string_member (oci_layout, "imageLayoutVersion"); @@ -384,15 +389,16 @@ verify_oci_version (GBytes *oci_layout_bytes, GCancellable *cancellable, GError static gboolean flatpak_oci_registry_ensure_local (FlatpakOciRegistry *self, - gboolean for_write, - GCancellable *cancellable, - GError **error) + gboolean for_write, + GCancellable *cancellable, + GError **error) { g_autoptr(GFile) dir = g_file_new_for_uri (self->uri); glnx_autofd int local_dfd = -1; int dfd; g_autoptr(GError) local_error = NULL; g_autoptr(GBytes) oci_layout_bytes = NULL; + gboolean not_json; if (self->dfd != -1) dfd = self->dfd; @@ -450,7 +456,7 @@ flatpak_oci_registry_ensure_local (FlatpakOciRegistry *self, return FALSE; } } - else if (!verify_oci_version (oci_layout_bytes, cancellable, error)) + else if (!verify_oci_version (oci_layout_bytes, ¬_json, cancellable, error)) return FALSE; if (self->dfd == -1 && local_dfd != -1) @@ -461,9 +467,9 @@ flatpak_oci_registry_ensure_local (FlatpakOciRegistry *self, static gboolean flatpak_oci_registry_ensure_remote (FlatpakOciRegistry *self, - gboolean for_write, - GCancellable *cancellable, - GError **error) + gboolean for_write, + GCancellable *cancellable, + GError **error) { g_autoptr(SoupURI) baseuri = NULL; g_autoptr(GBytes) oci_layout_bytes = NULL; @@ -484,12 +490,25 @@ flatpak_oci_registry_ensure_remote (FlatpakOciRegistry *self, return FALSE; } - oci_layout_bytes = remote_load_file (self->soup_session, baseuri, "oci-layout", NULL, NULL, cancellable, error); - if (oci_layout_bytes == NULL) - return FALSE; + oci_layout_bytes = remote_load_file (self->soup_session, baseuri, "oci-layout", NULL, NULL, cancellable, NULL); + if (oci_layout_bytes != NULL) + { + g_autoptr(GError) local_error = NULL; + gboolean not_json; - if (!verify_oci_version (oci_layout_bytes, cancellable, error)) - return FALSE; + if (!verify_oci_version (oci_layout_bytes, ¬_json, cancellable, &local_error)) + { + if (not_json) + self->is_docker = TRUE; + else + { + g_propagate_error (error, g_steal_pointer (&local_error)); + return FALSE; + } + } + } + else + self->is_docker = TRUE; self->base_uri = g_steal_pointer (&baseuri); @@ -498,8 +517,8 @@ flatpak_oci_registry_ensure_remote (FlatpakOciRegistry *self, static gboolean flatpak_oci_registry_initable_init (GInitable *initable, - GCancellable *cancellable, - GError **error) + GCancellable *cancellable, + GError **error) { FlatpakOciRegistry *self = FLATPAK_OCI_REGISTRY (initable); gboolean res; @@ -632,9 +651,14 @@ splice_update_checksum (GOutputStream *out, } static char * -get_digest_subpath (const char *digest, +get_digest_subpath (FlatpakOciRegistry *self, + const char *repository, + gboolean is_manifest, + const char *digest, GError **error) { + g_autoptr(GString) s = g_string_new (""); + if (!g_str_has_prefix (digest, "sha256:")) { g_set_error (error, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED, @@ -642,7 +666,30 @@ get_digest_subpath (const char *digest, return NULL; } - return g_strdup_printf ("blobs/sha256/%s", digest + strlen ("sha256:")); + if (self->is_docker) + g_string_append (s, "v2/"); + + if (repository) + { + g_string_append (s, repository); + g_string_append (s, "/"); + } + + if (self->is_docker) + { + if (is_manifest) + g_string_append (s, "manifests/"); + else + g_string_append (s, "blobs/"); + g_string_append (s, digest); + } + else + { + g_string_append (s, "blobs/sha256/"); + g_string_append (s, digest + strlen ("sha256:")); + } + + return g_string_free (g_steal_pointer (&s), FALSE); } static char * @@ -661,6 +708,8 @@ checksum_fd (int fd, GCancellable *cancellable, GError **error) int flatpak_oci_registry_download_blob (FlatpakOciRegistry *self, + const char *repository, + gboolean manifest, const char *digest, FlatpakLoadUriProgress progress_cb, gpointer user_data, @@ -672,7 +721,7 @@ flatpak_oci_registry_download_blob (FlatpakOciRegistry *self, g_assert (self->valid); - subpath = get_digest_subpath (digest, error); + subpath = get_digest_subpath (self, repository, manifest, digest, error); if (subpath == NULL) return -1; @@ -713,7 +762,9 @@ flatpak_oci_registry_download_blob (FlatpakOciRegistry *self, if (fd == -1) return -1; - if (!flatpak_download_http_uri (self->soup_session, uri_s, out_stream, + if (!flatpak_download_http_uri (self->soup_session, uri_s, + FLATPAK_HTTP_FLAGS_ACCEPT_OCI, + out_stream, progress_cb, user_data, cancellable, error)) return -1; @@ -741,13 +792,16 @@ flatpak_oci_registry_download_blob (FlatpakOciRegistry *self, gboolean flatpak_oci_registry_mirror_blob (FlatpakOciRegistry *self, FlatpakOciRegistry *source_registry, + const char *repository, + gboolean manifest, const char *digest, FlatpakLoadUriProgress progress_cb, gpointer user_data, GCancellable *cancellable, GError **error) { - g_autofree char *subpath = NULL; + g_autofree char *src_subpath = NULL; + g_autofree char *dst_subpath = NULL; g_auto(GLnxTmpfile) tmpf = { 0 }; g_autoptr(GOutputStream) out_stream = NULL; struct stat stbuf; @@ -762,12 +816,16 @@ flatpak_oci_registry_mirror_blob (FlatpakOciRegistry *self, return FALSE; } - subpath = get_digest_subpath (digest, error); - if (subpath == NULL) + src_subpath = get_digest_subpath (source_registry, repository, manifest, digest, error); + if (src_subpath == NULL) + return FALSE; + + dst_subpath = get_digest_subpath (self, NULL, manifest, digest, error); + if (dst_subpath == NULL) return FALSE; /* Check if its already available */ - if (fstatat (self->dfd, subpath, &stbuf, AT_SYMLINK_NOFOLLOW) == 0) + if (fstatat (self->dfd, dst_subpath, &stbuf, AT_SYMLINK_NOFOLLOW) == 0) return TRUE; if (!glnx_open_tmpfile_linkable_at (self->dfd, "blobs/sha256", @@ -779,7 +837,7 @@ flatpak_oci_registry_mirror_blob (FlatpakOciRegistry *self, { glnx_autofd int src_fd = -1; - src_fd = local_open_file (source_registry->dfd, subpath, NULL, cancellable, error); + src_fd = local_open_file (source_registry->dfd, src_subpath, NULL, cancellable, error); if (src_fd == -1) return FALSE; @@ -791,18 +849,19 @@ flatpak_oci_registry_mirror_blob (FlatpakOciRegistry *self, g_autoptr(SoupURI) uri = NULL; g_autofree char *uri_s = NULL; - uri = soup_uri_new_with_base (source_registry->base_uri, subpath); + uri = soup_uri_new_with_base (source_registry->base_uri, src_subpath); if (uri == NULL) { g_set_error (error, G_IO_ERROR, G_IO_ERROR_INVALID_ARGUMENT, - "Invalid relative url %s", subpath); + "Invalid relative url %s", src_subpath); return FALSE; } out_stream = g_unix_output_stream_new (tmpf.fd, FALSE); uri_s = soup_uri_to_string (uri, FALSE); - if (!flatpak_download_http_uri (source_registry->soup_session, uri_s, out_stream, + if (!flatpak_download_http_uri (source_registry->soup_session, uri_s, + FLATPAK_HTTP_FLAGS_ACCEPT_OCI, out_stream, progress_cb, user_data, cancellable, error)) return FALSE; @@ -826,7 +885,7 @@ flatpak_oci_registry_mirror_blob (FlatpakOciRegistry *self, if (!glnx_link_tmpfile_at (&tmpf, GLNX_LINK_TMPFILE_NOREPLACE_IGNORE_EXIST, - self->dfd, subpath, + self->dfd, dst_subpath, error)) return FALSE; @@ -835,9 +894,11 @@ flatpak_oci_registry_mirror_blob (FlatpakOciRegistry *self, GBytes * flatpak_oci_registry_load_blob (FlatpakOciRegistry *self, - const char *digest, - GCancellable *cancellable, - GError **error) + const char *repository, + gboolean manifest, + const char *digest, + GCancellable *cancellable, + GError **error) { g_autofree char *subpath = NULL; g_autoptr(GBytes) bytes = NULL; @@ -845,11 +906,13 @@ flatpak_oci_registry_load_blob (FlatpakOciRegistry *self, g_assert (self->valid); - subpath = get_digest_subpath (digest, error); + subpath = get_digest_subpath (self, repository, manifest, digest, error); if (subpath == NULL) return NULL; bytes = flatpak_oci_registry_load_file (self, subpath, NULL, NULL, cancellable, error); + if (bytes == NULL) + return NULL; json_checksum = g_compute_checksum_for_bytes (G_CHECKSUM_SHA256, bytes); @@ -902,6 +965,7 @@ flatpak_oci_registry_store_json (FlatpakOciRegistry *self, FlatpakOciVersioned * flatpak_oci_registry_load_versioned (FlatpakOciRegistry *self, + const char *repository, const char *digest, gsize *out_size, GCancellable *cancellable, @@ -911,7 +975,7 @@ flatpak_oci_registry_load_versioned (FlatpakOciRegistry *self, g_assert (self->valid); - bytes = flatpak_oci_registry_load_blob (self, digest, cancellable, error); + bytes = flatpak_oci_registry_load_blob (self, repository, TRUE, digest, cancellable, error); if (bytes == NULL) return NULL; @@ -1820,3 +1884,264 @@ flatpak_oci_verify_signature (OstreeRepo *repo, return g_steal_pointer (&json); } + +static const char * +get_image_ref (FlatpakOciIndexImage *img) +{ + return g_hash_table_lookup (img->annotations, "org.flatpak.ref"); +} + +typedef struct { + char *repository; + FlatpakOciIndexImage *image; +} ImageInfo; + +static gint +compare_image_by_ref (ImageInfo *a, + ImageInfo *b) +{ + const char *a_ref = get_image_ref (a->image); + const char *b_ref = get_image_ref (b->image); + + return g_strcmp0 (a_ref, b_ref); +} + +GVariant * +flatpak_oci_index_fetch_summary (SoupSession *soup_session, + const char *uri, + const char *etag, + GCancellable *cancellable, + GError **error) +{ + g_autoptr(GBytes) res = NULL; + g_autofree char *new_etag = NULL; + g_autoptr(FlatpakJson) json = NULL; + FlatpakOciIndexResponse *response; + g_autoptr(SoupURI) registry_uri = NULL; + g_autofree char *registry_uri_s = NULL; + int i; + g_autoptr(GArray) images = g_array_new (FALSE, TRUE, sizeof (ImageInfo)); + g_autoptr(GVariantBuilder) refs_builder = NULL; + g_autoptr(GVariantBuilder) additional_metadata_builder = NULL; + g_autoptr(GVariantBuilder) summary_builder = NULL; + g_autoptr(GVariant) summary = NULL; + g_autoptr(GVariantBuilder) ref_data_builder = NULL; + g_autoptr(GString) index_uri = g_string_new (uri); + g_autoptr(SoupURI) soup_uri = NULL; + g_autofree char *query_uri = NULL; + + if (!g_str_has_suffix (index_uri->str, "/")) + g_string_append_c (index_uri, '/'); + + if (!g_str_has_suffix (uri, "/index/")) + g_string_append (index_uri, "index/"); + + g_string_append (index_uri, "/static"); + soup_uri = soup_uri_new (index_uri->str); + soup_uri_set_query_from_fields (soup_uri, + "os", "linux", + "tag", "latest", + "annotation:org.flatpak.ref:exists", "1", + NULL); + query_uri = soup_uri_to_string (soup_uri, FALSE); + + res = flatpak_load_http_uri (soup_session, + query_uri, + 0, etag, + &new_etag, NULL, NULL, + cancellable, error); + if (res == NULL) + return NULL; + + json = flatpak_json_from_bytes (res, FLATPAK_TYPE_OCI_INDEX_RESPONSE, error); + if (json == NULL) + return NULL; + + response = (FlatpakOciIndexResponse *)json; + + registry_uri = soup_uri_new_with_base (soup_uri, response->registry); + registry_uri_s = soup_uri_to_string (registry_uri, FALSE); + + for (i = 0; response->results != NULL && response->results[i] != NULL; i++) + { + FlatpakOciIndexRepository *r = response->results[i]; + int j; + ImageInfo info = { r->name }; + + for (j = 0; r->images != NULL && r->images[j] != NULL; j++) + { + info.image = r->images[j]; + g_array_append_val (images, info); + } + + for (j = 0; r->lists != NULL && r->lists[j] != NULL; j++) + { + FlatpakOciIndexImageList *list = r->lists[j]; + int k; + + for (k = 0; list->images != NULL && list->images[k] != NULL; k++) + { + info.image = list->images[k]; + g_array_append_val (images, info); + } + } + } + + refs_builder = g_variant_builder_new (G_VARIANT_TYPE ("a(s(taya{sv}))")); + ref_data_builder = g_variant_builder_new (G_VARIANT_TYPE ("a{s(tts)}")); + additional_metadata_builder = g_variant_builder_new (G_VARIANT_TYPE ("a{sv}")); + + /* The summary has to be sorted by ref */ + g_array_sort (images, (GCompareFunc)compare_image_by_ref); + + for (i = 0; i < images->len; i++) + { + ImageInfo *info = &g_array_index (images, ImageInfo, i); + FlatpakOciIndexImage *image = info->image; + const char *ref = get_image_ref (image); + const char *fake_commit; + guint64 installed_size = 0; + guint64 download_size = 0; + const char *installed_size_str; + const char *download_size_str; + const char *metadata_contents = NULL; + g_autoptr(GVariantBuilder) ref_metadata_builder = NULL; + + if (ref == NULL) + continue; + + metadata_contents = g_hash_table_lookup (image->annotations, "org.flatpak.metadata"); + if (metadata_contents == NULL && !g_str_has_prefix (ref, "appstream/")) + continue; /* Not a flatpak, skip */ + + if (!g_str_has_prefix (image->digest, "sha256:")) + { + g_debug ("Ignoring digest type %s", image->digest); + continue; + } + + fake_commit = image->digest + strlen ("sha256:"); + + installed_size_str = g_hash_table_lookup (image->annotations, "org.flatpak.installed-size"); + if (installed_size_str) + installed_size = g_ascii_strtoull (installed_size_str, NULL, 10); + + download_size_str = g_hash_table_lookup (image->annotations, "org.flatpak.download-size"); + if (download_size_str) + download_size = g_ascii_strtoull (download_size_str, NULL, 10); + + ref_metadata_builder = g_variant_builder_new (G_VARIANT_TYPE ("a{sv}")); + + g_variant_builder_add (ref_metadata_builder, "{sv}", "xa.oci-repository", + g_variant_new_string (info->repository)); + + g_variant_builder_add_value (refs_builder, + g_variant_new ("(s(t@ay@a{sv}))", ref, + 0, + ostree_checksum_to_bytes_v (fake_commit), + g_variant_builder_end (ref_metadata_builder))); + g_variant_builder_add (ref_data_builder, "{s(tts)}", + ref, + GUINT64_TO_BE (installed_size), + GUINT64_TO_BE (download_size), + metadata_contents ? metadata_contents : ""); + } + + g_variant_builder_add (additional_metadata_builder, "{sv}", "xa.cache", + g_variant_new_variant (g_variant_builder_end (ref_data_builder))); + if (new_etag) + g_variant_builder_add (additional_metadata_builder, "{sv}", "xa.oci-etag", + g_variant_new_string (new_etag)); + + g_variant_builder_add (additional_metadata_builder, "{sv}", "xa.oci-registry-uri", + g_variant_new_string (registry_uri_s)); + + summary_builder = g_variant_builder_new (OSTREE_SUMMARY_GVARIANT_FORMAT); + + g_variant_builder_add_value (summary_builder, g_variant_builder_end (refs_builder)); + g_variant_builder_add_value (summary_builder, g_variant_builder_end (additional_metadata_builder)); + + summary = g_variant_ref_sink (g_variant_builder_end (summary_builder)); + + return g_steal_pointer (&summary); +} + +gboolean +flatpak_oci_index_verify_ref (SoupSession *soup_session, + const char *uri, + const char *ref, + const char *digest, + GCancellable *cancellable, + GError **error) +{ + g_autoptr(GBytes) res = NULL; + g_autoptr(FlatpakJson) json = NULL; + g_autoptr(SoupURI) soup_uri = NULL; + g_autofree char *query_uri = NULL; + + FlatpakOciIndexResponse *response; + int i; + g_autoptr(GString) index_uri = g_string_new (uri); + + if (!g_str_has_suffix (index_uri->str, "/")) + g_string_append_c (index_uri, '/'); + + if (!g_str_has_suffix (uri, "/index/")) + g_string_append (index_uri, "index/"); + + g_string_append (index_uri, "/dynamic"); + + soup_uri = soup_uri_new (index_uri->str); + soup_uri_set_query_from_fields (soup_uri, + "os", "linux", + "annotation:org.flatpak.ref", ref, + NULL); + query_uri = soup_uri_to_string (soup_uri, FALSE); + + res = flatpak_load_http_uri (soup_session, + query_uri, + 0, NULL, NULL, NULL, NULL, + cancellable, error); + if (res == NULL) + return FALSE; + + json = flatpak_json_from_bytes (res, FLATPAK_TYPE_OCI_INDEX_RESPONSE, error); + if (json == NULL) + return FALSE; + + response = (FlatpakOciIndexResponse *)json; + + for (i = 0; response->results != NULL && response->results[i] != NULL; i++) + { + FlatpakOciIndexRepository *r = response->results[i]; + int j; + + for (j = 0; r->images != NULL && r->images[j] != NULL; j++) + { + FlatpakOciIndexImage *image = r->images[j]; + const char *image_ref = get_image_ref (image); + if (image_ref != NULL && + g_strcmp0 (image_ref, ref) == 0 && + g_strcmp0 (digest, image->digest) == 0) + return TRUE; + } + + for (j = 0; r->lists != NULL && r->lists[j] != NULL; j++) + { + FlatpakOciIndexImageList *list = r->lists[j]; + int k; + + for (k = 0; list->images != NULL && list->images[k] != NULL; k++) + { + FlatpakOciIndexImage *image = list->images[k]; + const char *image_ref = get_image_ref (image); + if (image_ref != NULL && + g_strcmp0 (image_ref, ref) == 0 && + g_strcmp0 (digest, image->digest) == 0) + return TRUE; + } + } + } + + return flatpak_fail (error, "No matching image for %s\n", ref); +} diff --git a/common/flatpak-oci-registry.h b/common/flatpak-oci-registry.h index 1458b9a1..c430c911 100644 --- a/common/flatpak-oci-registry.h +++ b/common/flatpak-oci-registry.h @@ -71,12 +71,16 @@ gboolean flatpak_oci_registry_save_index (FlatpakOciRegi GCancellable *cancellable, GError **error); int flatpak_oci_registry_download_blob (FlatpakOciRegistry *self, + const char *repository, + gboolean manifest, const char *digest, FlatpakLoadUriProgress progress_cb, gpointer user_data, GCancellable *cancellable, GError **error); GBytes * flatpak_oci_registry_load_blob (FlatpakOciRegistry *self, + const char *repository, + gboolean manifest, const char *digest, GCancellable *cancellable, GError **error); @@ -86,6 +90,8 @@ char * flatpak_oci_registry_store_blob (FlatpakOciRegi GError **error); gboolean flatpak_oci_registry_mirror_blob (FlatpakOciRegistry *self, FlatpakOciRegistry *source_registry, + const char *repository, + gboolean manifest, const char *digest, FlatpakLoadUriProgress progress_cb, gpointer user_data, @@ -96,6 +102,7 @@ FlatpakOciDescriptor * flatpak_oci_registry_store_json (FlatpakOciRegi GCancellable *cancellable, GError **error); FlatpakOciVersioned * flatpak_oci_registry_load_versioned (FlatpakOciRegistry *self, + const char *repository, const char *digest, gsize *out_size, GCancellable *cancellable, @@ -126,4 +133,17 @@ FlatpakOciSignature *flatpak_oci_verify_signature (OstreeRepo *repo, GBytes *signature, GError **error); +GVariant *flatpak_oci_index_fetch_summary (SoupSession *soup_session, + const char *uri, + const char *etag, + GCancellable *cancellable, + GError **error); + +gboolean flatpak_oci_index_verify_ref (SoupSession *soup_session, + const char *uri, + const char *ref, + const char *digest, + GCancellable *cancellable, + GError **error); + #endif /* __FLATPAK_OCI_REGISTRY_H__ */ diff --git a/common/flatpak-run.c b/common/flatpak-run.c index 9738541c..2475e26a 100644 --- a/common/flatpak-run.c +++ b/common/flatpak-run.c @@ -50,84 +50,11 @@ #include "flatpak-utils.h" #include "flatpak-dir.h" #include "flatpak-systemd-dbus.h" -#include "document-portal/xdp-dbus.h" +#include "flatpak-document-dbus.h" #include "lib/flatpak-error.h" #define DEFAULT_SHELL "/bin/sh" -typedef enum { - FLATPAK_CONTEXT_SHARED_NETWORK = 1 << 0, - FLATPAK_CONTEXT_SHARED_IPC = 1 << 1, -} FlatpakContextShares; - -/* In numerical order of more privs */ -typedef enum { - FLATPAK_FILESYSTEM_MODE_READ_ONLY = 1, - FLATPAK_FILESYSTEM_MODE_READ_WRITE = 2, - FLATPAK_FILESYSTEM_MODE_CREATE = 3, -} FlatpakFilesystemMode; - - -/* Same order as enum */ -const char *flatpak_context_shares[] = { - "network", - "ipc", - NULL -}; - -typedef enum { - FLATPAK_CONTEXT_SOCKET_X11 = 1 << 0, - FLATPAK_CONTEXT_SOCKET_WAYLAND = 1 << 1, - FLATPAK_CONTEXT_SOCKET_PULSEAUDIO = 1 << 2, - FLATPAK_CONTEXT_SOCKET_SESSION_BUS = 1 << 3, - FLATPAK_CONTEXT_SOCKET_SYSTEM_BUS = 1 << 4, -} FlatpakContextSockets; - -/* Same order as enum */ -const char *flatpak_context_sockets[] = { - "x11", - "wayland", - "pulseaudio", - "session-bus", - "system-bus", - NULL -}; - -const char *dont_mount_in_root[] = { - ".", "..", "lib", "lib32", "lib64", "bin", "sbin", "usr", "boot", "root", - "tmp", "etc", "app", "run", "proc", "sys", "dev", "var", NULL -}; - -/* We don't want to export paths pointing into these, because they are readonly - (so we can't create mountpoints there) and don't match whats on the host anyway */ -const char *dont_export_in[] = { - "/lib", "/lib32", "/lib64", "/bin", "/sbin", "/usr", "/etc", "/app", "/dev", NULL -}; - -typedef enum { - FLATPAK_CONTEXT_DEVICE_DRI = 1 << 0, - FLATPAK_CONTEXT_DEVICE_ALL = 1 << 1, - FLATPAK_CONTEXT_DEVICE_KVM = 1 << 2, -} FlatpakContextDevices; - -const char *flatpak_context_devices[] = { - "dri", - "all", - "kvm", - NULL -}; - -typedef enum { - FLATPAK_CONTEXT_FEATURE_DEVEL = 1 << 0, - FLATPAK_CONTEXT_FEATURE_MULTIARCH = 1 << 1, -} FlatpakContextFeatures; - -const char *flatpak_context_features[] = { - "devel", - "multiarch", - NULL -}; - static gboolean add_dbus_proxy_args (GPtrArray *argv_array, GPtrArray *session_dbus_proxy_argv, @@ -140,1624 +67,6 @@ add_dbus_proxy_args (GPtrArray *argv_array, const char *app_info_path, GError **error); -struct FlatpakContext -{ - FlatpakContextShares shares; - FlatpakContextShares shares_valid; - FlatpakContextSockets sockets; - FlatpakContextSockets sockets_valid; - FlatpakContextDevices devices; - FlatpakContextDevices devices_valid; - FlatpakContextFeatures features; - FlatpakContextFeatures features_valid; - GHashTable *env_vars; - GHashTable *persistent; - GHashTable *filesystems; - GHashTable *session_bus_policy; - GHashTable *system_bus_policy; - GHashTable *generic_policy; -}; - -FlatpakContext * -flatpak_context_new (void) -{ - FlatpakContext *context; - - context = g_slice_new0 (FlatpakContext); - context->env_vars = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free); - context->persistent = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL); - context->filesystems = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL); - context->session_bus_policy = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL); - context->system_bus_policy = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL); - context->generic_policy = g_hash_table_new_full (g_str_hash, g_str_equal, - g_free, (GDestroyNotify)g_strfreev); - - return context; -} - -void -flatpak_context_free (FlatpakContext *context) -{ - g_hash_table_destroy (context->env_vars); - g_hash_table_destroy (context->persistent); - g_hash_table_destroy (context->filesystems); - g_hash_table_destroy (context->session_bus_policy); - g_hash_table_destroy (context->system_bus_policy); - g_hash_table_destroy (context->generic_policy); - g_slice_free (FlatpakContext, context); -} - -static guint32 -flatpak_context_bitmask_from_string (const char *name, const char **names) -{ - guint32 i; - - for (i = 0; names[i] != NULL; i++) - { - if (strcmp (names[i], name) == 0) - return 1 << i; - } - - return 0; -} - -static char ** -flatpak_context_bitmask_to_string (guint32 enabled, guint32 valid, const char **names) -{ - guint32 i; - GPtrArray *array; - - array = g_ptr_array_new (); - - for (i = 0; names[i] != NULL; i++) - { - guint32 bitmask = 1 << i; - if (valid & bitmask) - { - if (enabled & bitmask) - g_ptr_array_add (array, g_strdup (names[i])); - else - g_ptr_array_add (array, g_strdup_printf ("!%s", names[i])); - } - } - - g_ptr_array_add (array, NULL); - return (char **) g_ptr_array_free (array, FALSE); -} - -static void -flatpak_context_bitmask_to_args (guint32 enabled, guint32 valid, const char **names, - const char *enable_arg, const char *disable_arg, - GPtrArray *args) -{ - guint32 i; - - for (i = 0; names[i] != NULL; i++) - { - guint32 bitmask = 1 << i; - if (valid & bitmask) - { - if (enabled & bitmask) - g_ptr_array_add (args, g_strdup_printf ("%s=%s", enable_arg, names[i])); - else - g_ptr_array_add (args, g_strdup_printf ("%s=%s", disable_arg, names[i])); - } - } -} - - -static FlatpakContextShares -flatpak_context_share_from_string (const char *string, GError **error) -{ - FlatpakContextShares shares = flatpak_context_bitmask_from_string (string, flatpak_context_shares); - - if (shares == 0) - { - g_autofree char *values = g_strjoinv (", ", (char **)flatpak_context_shares); - g_set_error (error, G_OPTION_ERROR, G_OPTION_ERROR_FAILED, - _("Unknown share type %s, valid types are: %s"), string, values); - } - - return shares; -} - -static char ** -flatpak_context_shared_to_string (FlatpakContextShares shares, FlatpakContextShares valid) -{ - return flatpak_context_bitmask_to_string (shares, valid, flatpak_context_shares); -} - -static void -flatpak_context_shared_to_args (FlatpakContextShares shares, - FlatpakContextShares valid, - GPtrArray *args) -{ - return flatpak_context_bitmask_to_args (shares, valid, flatpak_context_shares, "--share", "--unshare", args); -} - -static FlatpakPolicy -flatpak_policy_from_string (const char *string, GError **error) -{ - const char *policies[] = { "none", "see", "filtered", "talk", "own", NULL }; - int i; - g_autofree char *values = NULL; - - for (i = 0; policies[i]; i++) - { - if (strcmp (string, policies[i]) == 0) - return i; - } - - values = g_strjoinv (", ", (char **)policies); - g_set_error (error, G_OPTION_ERROR, G_OPTION_ERROR_FAILED, - _("Unknown policy type %s, valid types are: %s"), string, values); - - return -1; -} - -static const char * -flatpak_policy_to_string (FlatpakPolicy policy) -{ - if (policy == FLATPAK_POLICY_SEE) - return "see"; - if (policy == FLATPAK_POLICY_TALK) - return "talk"; - if (policy == FLATPAK_POLICY_OWN) - return "own"; - - return "none"; -} - -static gboolean -flatpak_verify_dbus_name (const char *name, GError **error) -{ - const char *name_part; - g_autofree char *tmp = NULL; - - if (g_str_has_suffix (name, ".*")) - { - tmp = g_strndup (name, strlen (name) - 2); - name_part = tmp; - } - else - { - name_part = name; - } - - if (g_dbus_is_name (name_part) && !g_dbus_is_unique_name (name_part)) - return TRUE; - - g_set_error (error, G_OPTION_ERROR, G_OPTION_ERROR_FAILED, - _("Invalid dbus name %s\n"), name); - return FALSE; -} - -static FlatpakContextSockets -flatpak_context_socket_from_string (const char *string, GError **error) -{ - FlatpakContextSockets sockets = flatpak_context_bitmask_from_string (string, flatpak_context_sockets); - - if (sockets == 0) - { - g_autofree char *values = g_strjoinv (", ", (char **)flatpak_context_sockets); - g_set_error (error, G_OPTION_ERROR, G_OPTION_ERROR_FAILED, - _("Unknown socket type %s, valid types are: %s"), string, values); - } - - return sockets; -} - -static char ** -flatpak_context_sockets_to_string (FlatpakContextSockets sockets, FlatpakContextSockets valid) -{ - return flatpak_context_bitmask_to_string (sockets, valid, flatpak_context_sockets); -} - -static void -flatpak_context_sockets_to_args (FlatpakContextSockets sockets, - FlatpakContextSockets valid, - GPtrArray *args) -{ - return flatpak_context_bitmask_to_args (sockets, valid, flatpak_context_sockets, "--socket", "--nosocket", args); -} - -static FlatpakContextDevices -flatpak_context_device_from_string (const char *string, GError **error) -{ - FlatpakContextDevices devices = flatpak_context_bitmask_from_string (string, flatpak_context_devices); - - if (devices == 0) - { - g_autofree char *values = g_strjoinv (", ", (char **)flatpak_context_devices); - g_set_error (error, G_OPTION_ERROR, G_OPTION_ERROR_FAILED, - _("Unknown device type %s, valid types are: %s"), string, values); - } - return devices; -} - -static char ** -flatpak_context_devices_to_string (FlatpakContextDevices devices, FlatpakContextDevices valid) -{ - return flatpak_context_bitmask_to_string (devices, valid, flatpak_context_devices); -} - -static void -flatpak_context_devices_to_args (FlatpakContextDevices devices, - FlatpakContextDevices valid, - GPtrArray *args) -{ - return flatpak_context_bitmask_to_args (devices, valid, flatpak_context_devices, "--device", "--nodevice", args); -} - -static FlatpakContextFeatures -flatpak_context_feature_from_string (const char *string, GError **error) -{ - FlatpakContextFeatures feature = flatpak_context_bitmask_from_string (string, flatpak_context_features); - - if (feature == 0) - { - g_autofree char *values = g_strjoinv (", ", (char **)flatpak_context_features); - g_set_error (error, G_OPTION_ERROR, G_OPTION_ERROR_FAILED, - _("Unknown feature type %s, valid types are: %s"), string, values); - } - - return feature; -} - -static char ** -flatpak_context_features_to_string (FlatpakContextFeatures features, FlatpakContextFeatures valid) -{ - return flatpak_context_bitmask_to_string (features, valid, flatpak_context_features); -} - -static void -flatpak_context_features_to_args (FlatpakContextFeatures features, - FlatpakContextFeatures valid, - GPtrArray *args) -{ - return flatpak_context_bitmask_to_args (features, valid, flatpak_context_features, "--allow", "--disallow", args); -} - -static void -flatpak_context_add_shares (FlatpakContext *context, - FlatpakContextShares shares) -{ - context->shares_valid |= shares; - context->shares |= shares; -} - -static void -flatpak_context_remove_shares (FlatpakContext *context, - FlatpakContextShares shares) -{ - context->shares_valid |= shares; - context->shares &= ~shares; -} - -static void -flatpak_context_add_sockets (FlatpakContext *context, - FlatpakContextSockets sockets) -{ - context->sockets_valid |= sockets; - context->sockets |= sockets; -} - -static void -flatpak_context_remove_sockets (FlatpakContext *context, - FlatpakContextSockets sockets) -{ - context->sockets_valid |= sockets; - context->sockets &= ~sockets; -} - -static void -flatpak_context_add_devices (FlatpakContext *context, - FlatpakContextDevices devices) -{ - context->devices_valid |= devices; - context->devices |= devices; -} - -static void -flatpak_context_remove_devices (FlatpakContext *context, - FlatpakContextDevices devices) -{ - context->devices_valid |= devices; - context->devices &= ~devices; -} - -static void -flatpak_context_add_features (FlatpakContext *context, - FlatpakContextFeatures features) -{ - context->features_valid |= features; - context->features |= features; -} - -static void -flatpak_context_remove_features (FlatpakContext *context, - FlatpakContextFeatures features) -{ - context->features_valid |= features; - context->features &= ~features; -} - -static void -flatpak_context_set_env_var (FlatpakContext *context, - const char *name, - const char *value) -{ - g_hash_table_insert (context->env_vars, g_strdup (name), g_strdup (value)); -} - -void -flatpak_context_set_session_bus_policy (FlatpakContext *context, - const char *name, - FlatpakPolicy policy) -{ - g_hash_table_insert (context->session_bus_policy, g_strdup (name), GINT_TO_POINTER (policy)); -} - -void -flatpak_context_set_system_bus_policy (FlatpakContext *context, - const char *name, - FlatpakPolicy policy) -{ - g_hash_table_insert (context->system_bus_policy, g_strdup (name), GINT_TO_POINTER (policy)); -} - -static void -flatpak_context_apply_generic_policy (FlatpakContext *context, - const char *key, - const char *value) -{ - GPtrArray *new = g_ptr_array_new (); - const char **old_v; - int i; - - g_assert (strchr (key, '.') != NULL); - - old_v = g_hash_table_lookup (context->generic_policy, key); - for (i = 0; old_v != NULL && old_v[i] != NULL; i++) - { - const char *old = old_v[i]; - const char *cmp1 = old; - const char *cmp2 = value; - if (*cmp1 == '!') - cmp1++; - if (*cmp2 == '!') - cmp2++; - if (strcmp (cmp1, cmp2) != 0) - g_ptr_array_add (new, g_strdup (old)); - } - - g_ptr_array_add (new, g_strdup (value)); - g_ptr_array_add (new, NULL); - - g_hash_table_insert (context->generic_policy, g_strdup (key), - g_ptr_array_free (new, FALSE)); -} - -static void -flatpak_context_set_persistent (FlatpakContext *context, - const char *path) -{ - g_hash_table_insert (context->persistent, g_strdup (path), GINT_TO_POINTER (1)); -} - -static gboolean -get_xdg_dir_from_prefix (const char *prefix, - const char **where, - const char **dir) -{ - if (strcmp (prefix, "xdg-data") == 0) - { - if (where) - *where = "data"; - if (dir) - *dir = g_get_user_data_dir (); - return TRUE; - } - if (strcmp (prefix, "xdg-cache") == 0) - { - if (where) - *where = "cache"; - if (dir) - *dir = g_get_user_cache_dir (); - return TRUE; - } - if (strcmp (prefix, "xdg-config") == 0) - { - if (where) - *where = "config"; - if (dir) - *dir = g_get_user_config_dir (); - return TRUE; - } - return FALSE; -} - -/* This looks only in the xdg dirs (config, cache, data), not the user - definable ones */ -static char * -get_xdg_dir_from_string (const char *filesystem, - const char **suffix, - const char **where) -{ - char *slash; - const char *rest; - g_autofree char *prefix = NULL; - const char *dir = NULL; - gsize len; - - slash = strchr (filesystem, '/'); - - if (slash) - len = slash - filesystem; - else - len = strlen (filesystem); - - rest = filesystem + len; - while (*rest == '/') - rest++; - - if (suffix != NULL) - *suffix = rest; - - prefix = g_strndup (filesystem, len); - - if (get_xdg_dir_from_prefix (prefix, where, &dir)) - return g_build_filename (dir, rest, NULL); - - return NULL; -} - -static gboolean -get_xdg_user_dir_from_string (const char *filesystem, - const char **config_key, - const char **suffix, - const char **dir) -{ - char *slash; - const char *rest; - g_autofree char *prefix = NULL; - gsize len; - - slash = strchr (filesystem, '/'); - - if (slash) - len = slash - filesystem; - else - len = strlen (filesystem); - - rest = filesystem + len; - while (*rest == '/') - rest++; - - if (suffix) - *suffix = rest; - - prefix = g_strndup (filesystem, len); - - if (strcmp (prefix, "xdg-desktop") == 0) - { - if (config_key) - *config_key = "XDG_DESKTOP_DIR"; - if (dir) - *dir = g_get_user_special_dir (G_USER_DIRECTORY_DESKTOP); - return TRUE; - } - if (strcmp (prefix, "xdg-documents") == 0) - { - if (config_key) - *config_key = "XDG_DOCUMENTS_DIR"; - if (dir) - *dir = g_get_user_special_dir (G_USER_DIRECTORY_DOCUMENTS); - return TRUE; - } - if (strcmp (prefix, "xdg-download") == 0) - { - if (config_key) - *config_key = "XDG_DOWNLOAD_DIR"; - if (dir) - *dir = g_get_user_special_dir (G_USER_DIRECTORY_DOWNLOAD); - return TRUE; - } - if (strcmp (prefix, "xdg-music") == 0) - { - if (config_key) - *config_key = "XDG_MUSIC_DIR"; - if (dir) - *dir = g_get_user_special_dir (G_USER_DIRECTORY_MUSIC); - return TRUE; - } - if (strcmp (prefix, "xdg-pictures") == 0) - { - if (config_key) - *config_key = "XDG_PICTURES_DIR"; - if (dir) - *dir = g_get_user_special_dir (G_USER_DIRECTORY_PICTURES); - return TRUE; - } - if (strcmp (prefix, "xdg-public-share") == 0) - { - if (config_key) - *config_key = "XDG_PUBLICSHARE_DIR"; - if (dir) - *dir = g_get_user_special_dir (G_USER_DIRECTORY_PUBLIC_SHARE); - return TRUE; - } - if (strcmp (prefix, "xdg-templates") == 0) - { - if (config_key) - *config_key = "XDG_TEMPLATES_DIR"; - if (dir) - *dir = g_get_user_special_dir (G_USER_DIRECTORY_TEMPLATES); - return TRUE; - } - if (strcmp (prefix, "xdg-videos") == 0) - { - if (config_key) - *config_key = "XDG_VIDEOS_DIR"; - if (dir) - *dir = g_get_user_special_dir (G_USER_DIRECTORY_VIDEOS); - return TRUE; - } - if (get_xdg_dir_from_prefix (prefix, NULL, dir)) - { - if (config_key) - *config_key = NULL; - return TRUE; - } - /* Don't support xdg-run without suffix, because that doesn't work */ - if (strcmp (prefix, "xdg-run") == 0 && - *rest != 0) - { - if (config_key) - *config_key = NULL; - if (dir) - *dir = g_get_user_runtime_dir (); - return TRUE; - } - - return FALSE; -} - -static char * -parse_filesystem_flags (const char *filesystem, FlatpakFilesystemMode *mode) -{ - gsize len = strlen (filesystem); - - if (mode) - *mode = FLATPAK_FILESYSTEM_MODE_READ_WRITE; - - if (g_str_has_suffix (filesystem, ":ro")) - { - len -= 3; - if (mode) - *mode = FLATPAK_FILESYSTEM_MODE_READ_ONLY; - } - else if (g_str_has_suffix (filesystem, ":rw")) - { - len -= 3; - if (mode) - *mode = FLATPAK_FILESYSTEM_MODE_READ_WRITE; - } - else if (g_str_has_suffix (filesystem, ":create")) - { - len -= 7; - if (mode) - *mode = FLATPAK_FILESYSTEM_MODE_CREATE; - } - - return g_strndup (filesystem, len); -} - -static gboolean -flatpak_context_verify_filesystem (const char *filesystem_and_mode, - GError **error) -{ - g_autofree char *filesystem = parse_filesystem_flags (filesystem_and_mode, NULL); - - if (strcmp (filesystem, "host") == 0) - return TRUE; - if (strcmp (filesystem, "home") == 0) - return TRUE; - if (get_xdg_user_dir_from_string (filesystem, NULL, NULL, NULL)) - return TRUE; - if (g_str_has_prefix (filesystem, "~/")) - return TRUE; - if (g_str_has_prefix (filesystem, "/")) - return TRUE; - - g_set_error (error, G_OPTION_ERROR, G_OPTION_ERROR_FAILED, - _("Unknown filesystem location %s, valid locations are: host, home, xdg-*[/...], ~/dir, /dir"), filesystem); - return FALSE; -} - -static void -flatpak_context_add_filesystem (FlatpakContext *context, - const char *what) -{ - FlatpakFilesystemMode mode; - char *fs = parse_filesystem_flags (what, &mode); - - g_hash_table_insert (context->filesystems, fs, GINT_TO_POINTER (mode)); -} - -static void -flatpak_context_remove_filesystem (FlatpakContext *context, - const char *what) -{ - g_hash_table_insert (context->filesystems, - parse_filesystem_flags (what, NULL), - NULL); -} - -void -flatpak_context_merge (FlatpakContext *context, - FlatpakContext *other) -{ - GHashTableIter iter; - gpointer key, value; - - context->shares &= ~other->shares_valid; - context->shares |= other->shares; - context->shares_valid |= other->shares_valid; - context->sockets &= ~other->sockets_valid; - context->sockets |= other->sockets; - context->sockets_valid |= other->sockets_valid; - context->devices &= ~other->devices_valid; - context->devices |= other->devices; - context->devices_valid |= other->devices_valid; - context->features &= ~other->features_valid; - context->features |= other->features; - context->features_valid |= other->features_valid; - - g_hash_table_iter_init (&iter, other->env_vars); - while (g_hash_table_iter_next (&iter, &key, &value)) - g_hash_table_insert (context->env_vars, g_strdup (key), g_strdup (value)); - - g_hash_table_iter_init (&iter, other->persistent); - while (g_hash_table_iter_next (&iter, &key, &value)) - g_hash_table_insert (context->persistent, g_strdup (key), value); - - g_hash_table_iter_init (&iter, other->filesystems); - while (g_hash_table_iter_next (&iter, &key, &value)) - g_hash_table_insert (context->filesystems, g_strdup (key), value); - - g_hash_table_iter_init (&iter, other->session_bus_policy); - while (g_hash_table_iter_next (&iter, &key, &value)) - g_hash_table_insert (context->session_bus_policy, g_strdup (key), value); - - g_hash_table_iter_init (&iter, other->system_bus_policy); - while (g_hash_table_iter_next (&iter, &key, &value)) - g_hash_table_insert (context->system_bus_policy, g_strdup (key), value); - - g_hash_table_iter_init (&iter, other->system_bus_policy); - while (g_hash_table_iter_next (&iter, &key, &value)) - g_hash_table_insert (context->system_bus_policy, g_strdup (key), value); - - g_hash_table_iter_init (&iter, other->generic_policy); - while (g_hash_table_iter_next (&iter, &key, &value)) - { - const char **policy_values = (const char **)value; - int i; - - for (i = 0; policy_values[i] != NULL; i++) - flatpak_context_apply_generic_policy (context, (char *)key, policy_values[i]); - } - -} - -static gboolean -option_share_cb (const gchar *option_name, - const gchar *value, - gpointer data, - GError **error) -{ - FlatpakContext *context = data; - FlatpakContextShares share; - - share = flatpak_context_share_from_string (value, error); - if (share == 0) - return FALSE; - - flatpak_context_add_shares (context, share); - - return TRUE; -} - -static gboolean -option_unshare_cb (const gchar *option_name, - const gchar *value, - gpointer data, - GError **error) -{ - FlatpakContext *context = data; - FlatpakContextShares share; - - share = flatpak_context_share_from_string (value, error); - if (share == 0) - return FALSE; - - flatpak_context_remove_shares (context, share); - - return TRUE; -} - -static gboolean -option_socket_cb (const gchar *option_name, - const gchar *value, - gpointer data, - GError **error) -{ - FlatpakContext *context = data; - FlatpakContextSockets socket; - - socket = flatpak_context_socket_from_string (value, error); - if (socket == 0) - return FALSE; - - flatpak_context_add_sockets (context, socket); - - return TRUE; -} - -static gboolean -option_nosocket_cb (const gchar *option_name, - const gchar *value, - gpointer data, - GError **error) -{ - FlatpakContext *context = data; - FlatpakContextSockets socket; - - socket = flatpak_context_socket_from_string (value, error); - if (socket == 0) - return FALSE; - - flatpak_context_remove_sockets (context, socket); - - return TRUE; -} - -static gboolean -option_device_cb (const gchar *option_name, - const gchar *value, - gpointer data, - GError **error) -{ - FlatpakContext *context = data; - FlatpakContextDevices device; - - device = flatpak_context_device_from_string (value, error); - if (device == 0) - return FALSE; - - flatpak_context_add_devices (context, device); - - return TRUE; -} - -static gboolean -option_nodevice_cb (const gchar *option_name, - const gchar *value, - gpointer data, - GError **error) -{ - FlatpakContext *context = data; - FlatpakContextDevices device; - - device = flatpak_context_device_from_string (value, error); - if (device == 0) - return FALSE; - - flatpak_context_remove_devices (context, device); - - return TRUE; -} - -static gboolean -option_allow_cb (const gchar *option_name, - const gchar *value, - gpointer data, - GError **error) -{ - FlatpakContext *context = data; - FlatpakContextFeatures feature; - - feature = flatpak_context_feature_from_string (value, error); - if (feature == 0) - return FALSE; - - flatpak_context_add_features (context, feature); - - return TRUE; -} - -static gboolean -option_disallow_cb (const gchar *option_name, - const gchar *value, - gpointer data, - GError **error) -{ - FlatpakContext *context = data; - FlatpakContextFeatures feature; - - feature = flatpak_context_feature_from_string (value, error); - if (feature == 0) - return FALSE; - - flatpak_context_remove_features (context, feature); - - return TRUE; -} - -static gboolean -option_filesystem_cb (const gchar *option_name, - const gchar *value, - gpointer data, - GError **error) -{ - FlatpakContext *context = data; - - if (!flatpak_context_verify_filesystem (value, error)) - return FALSE; - - flatpak_context_add_filesystem (context, value); - return TRUE; -} - -static gboolean -option_nofilesystem_cb (const gchar *option_name, - const gchar *value, - gpointer data, - GError **error) -{ - FlatpakContext *context = data; - - if (!flatpak_context_verify_filesystem (value, error)) - return FALSE; - - flatpak_context_remove_filesystem (context, value); - return TRUE; -} - -static gboolean -option_env_cb (const gchar *option_name, - const gchar *value, - gpointer data, - GError **error) -{ - FlatpakContext *context = data; - - g_auto(GStrv) split = g_strsplit (value, "=", 2); - - if (split == NULL || split[0] == NULL || split[0][0] == 0 || split[1] == NULL) - { - g_set_error (error, G_OPTION_ERROR, G_OPTION_ERROR_FAILED, - _("Invalid env format %s"), value); - return FALSE; - } - - flatpak_context_set_env_var (context, split[0], split[1]); - return TRUE; -} - -static gboolean -option_own_name_cb (const gchar *option_name, - const gchar *value, - gpointer data, - GError **error) -{ - FlatpakContext *context = data; - - if (!flatpak_verify_dbus_name (value, error)) - return FALSE; - - flatpak_context_set_session_bus_policy (context, value, FLATPAK_POLICY_OWN); - return TRUE; -} - -static gboolean -option_talk_name_cb (const gchar *option_name, - const gchar *value, - gpointer data, - GError **error) -{ - FlatpakContext *context = data; - - if (!flatpak_verify_dbus_name (value, error)) - return FALSE; - - flatpak_context_set_session_bus_policy (context, value, FLATPAK_POLICY_TALK); - return TRUE; -} - -static gboolean -option_system_own_name_cb (const gchar *option_name, - const gchar *value, - gpointer data, - GError **error) -{ - FlatpakContext *context = data; - - if (!flatpak_verify_dbus_name (value, error)) - return FALSE; - - flatpak_context_set_system_bus_policy (context, value, FLATPAK_POLICY_OWN); - return TRUE; -} - -static gboolean -option_system_talk_name_cb (const gchar *option_name, - const gchar *value, - gpointer data, - GError **error) -{ - FlatpakContext *context = data; - - if (!flatpak_verify_dbus_name (value, error)) - return FALSE; - - flatpak_context_set_system_bus_policy (context, value, FLATPAK_POLICY_TALK); - return TRUE; -} - -static gboolean -option_add_generic_policy_cb (const gchar *option_name, - const gchar *value, - gpointer data, - GError **error) -{ - FlatpakContext *context = data; - char *t; - g_autofree char *key = NULL; - const char *policy_value; - - t = strchr (value, '='); - if (t == NULL) - return flatpak_fail (error, "--policy arguments must be in the form SUBSYSTEM.KEY=[!]VALUE"); - policy_value = t + 1; - key = g_strndup (value, t - value); - if (strchr (key, '.') == NULL) - return flatpak_fail (error, "--policy arguments must be in the form SUBSYSTEM.KEY=[!]VALUE"); - - if (policy_value[0] == '!') - return flatpak_fail (error, "--policy values can't start with \"!\""); - - flatpak_context_apply_generic_policy (context, key, policy_value); - - return TRUE; -} - -static gboolean -option_remove_generic_policy_cb (const gchar *option_name, - const gchar *value, - gpointer data, - GError **error) -{ - FlatpakContext *context = data; - char *t; - g_autofree char *key = NULL; - const char *policy_value; - g_autofree char *extended_value = NULL; - - t = strchr (value, '='); - if (t == NULL) - return flatpak_fail (error, "--policy arguments must be in the form SUBSYSTEM.KEY=[!]VALUE"); - policy_value = t + 1; - key = g_strndup (value, t - value); - if (strchr (key, '.') == NULL) - return flatpak_fail (error, "--policy arguments must be in the form SUBSYSTEM.KEY=[!]VALUE"); - - if (policy_value[0] == '!') - return flatpak_fail (error, "--policy values can't start with \"!\""); - - extended_value = g_strconcat ("!", policy_value, NULL); - - flatpak_context_apply_generic_policy (context, key, extended_value); - - return TRUE; -} - -static gboolean -option_persist_cb (const gchar *option_name, - const gchar *value, - gpointer data, - GError **error) -{ - FlatpakContext *context = data; - - flatpak_context_set_persistent (context, value); - return TRUE; -} - -static gboolean option_no_desktop_deprecated; - -static GOptionEntry context_options[] = { - { "share", 0, G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_CALLBACK, &option_share_cb, N_("Share with host"), N_("SHARE") }, - { "unshare", 0, G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_CALLBACK, &option_unshare_cb, N_("Unshare with host"), N_("SHARE") }, - { "socket", 0, G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_CALLBACK, &option_socket_cb, N_("Expose socket to app"), N_("SOCKET") }, - { "nosocket", 0, G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_CALLBACK, &option_nosocket_cb, N_("Don't expose socket to app"), N_("SOCKET") }, - { "device", 0, G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_CALLBACK, &option_device_cb, N_("Expose device to app"), N_("DEVICE") }, - { "nodevice", 0, G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_CALLBACK, &option_nodevice_cb, N_("Don't expose device to app"), N_("DEVICE") }, - { "allow", 0, G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_CALLBACK, &option_allow_cb, N_("Allow feature"), N_("FEATURE") }, - { "disallow", 0, G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_CALLBACK, &option_disallow_cb, N_("Don't allow feature"), N_("FEATURE") }, - { "filesystem", 0, G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_CALLBACK, &option_filesystem_cb, N_("Expose filesystem to app (:ro for read-only)"), N_("FILESYSTEM[:ro]") }, - { "nofilesystem", 0, G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_CALLBACK, &option_nofilesystem_cb, N_("Don't expose filesystem to app"), N_("FILESYSTEM") }, - { "env", 0, G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_CALLBACK, &option_env_cb, N_("Set environment variable"), N_("VAR=VALUE") }, - { "own-name", 0, G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_CALLBACK, &option_own_name_cb, N_("Allow app to own name on the session bus"), N_("DBUS_NAME") }, - { "talk-name", 0, G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_CALLBACK, &option_talk_name_cb, N_("Allow app to talk to name on the session bus"), N_("DBUS_NAME") }, - { "system-own-name", 0, G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_CALLBACK, &option_system_own_name_cb, N_("Allow app to own name on the system bus"), N_("DBUS_NAME") }, - { "system-talk-name", 0, G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_CALLBACK, &option_system_talk_name_cb, N_("Allow app to talk to name on the system bus"), N_("DBUS_NAME") }, - { "add-policy", 0, G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_CALLBACK, &option_add_generic_policy_cb, N_("Add generic policy option"), N_("SUBSYSTEM.KEY=VALUE") }, - { "remove-policy", 0, G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_CALLBACK, &option_remove_generic_policy_cb, N_("Remove generic policy option"), N_("SUBSYSTEM.KEY=VALUE") }, - { "persist", 0, G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_CALLBACK, &option_persist_cb, N_("Persist home directory"), N_("FILENAME") }, - /* This is not needed/used anymore, so hidden, but we accept it for backwards compat */ - { "no-desktop", 0, G_OPTION_FLAG_IN_MAIN | G_OPTION_FLAG_HIDDEN, G_OPTION_ARG_NONE, &option_no_desktop_deprecated, N_("Don't require a running session (no cgroups creation)"), NULL }, - { NULL } -}; - -void -flatpak_context_complete (FlatpakContext *context, FlatpakCompletion *completion) -{ - flatpak_complete_options (completion, context_options); -} - -GOptionGroup * -flatpak_context_get_options (FlatpakContext *context) -{ - GOptionGroup *group; - - group = g_option_group_new ("environment", - "Runtime Environment", - "Runtime Environment", - context, - NULL); - g_option_group_set_translation_domain (group, GETTEXT_PACKAGE); - - g_option_group_add_entries (group, context_options); - - return group; -} - -static const char * -parse_negated (const char *option, gboolean *negated) -{ - if (option[0] == '!') - { - option++; - *negated = TRUE; - } - else - { - *negated = FALSE; - } - return option; -} - -/* - * Merge the FLATPAK_METADATA_GROUP_CONTEXT, - * FLATPAK_METADATA_GROUP_SESSION_BUS_POLICY, - * FLATPAK_METADATA_GROUP_SYSTEM_BUS_POLICY and - * FLATPAK_METADATA_GROUP_ENVIRONMENT groups, and all groups starting - * with FLATPAK_METADATA_GROUP_PREFIX_POLICY, from metakey into context. - * - * This is a merge, not a replace! - */ -gboolean -flatpak_context_load_metadata (FlatpakContext *context, - GKeyFile *metakey, - GError **error) -{ - gboolean remove; - g_auto(GStrv) groups = NULL; - int i; - - if (g_key_file_has_key (metakey, FLATPAK_METADATA_GROUP_CONTEXT, FLATPAK_METADATA_KEY_SHARED, NULL)) - { - g_auto(GStrv) shares = g_key_file_get_string_list (metakey, FLATPAK_METADATA_GROUP_CONTEXT, - FLATPAK_METADATA_KEY_SHARED, NULL, error); - if (shares == NULL) - return FALSE; - - for (i = 0; shares[i] != NULL; i++) - { - FlatpakContextShares share; - - share = flatpak_context_share_from_string (parse_negated (shares[i], &remove), error); - if (share == 0) - return FALSE; - if (remove) - flatpak_context_remove_shares (context, share); - else - flatpak_context_add_shares (context, share); - } - } - - if (g_key_file_has_key (metakey, FLATPAK_METADATA_GROUP_CONTEXT, FLATPAK_METADATA_KEY_SOCKETS, NULL)) - { - g_auto(GStrv) sockets = g_key_file_get_string_list (metakey, FLATPAK_METADATA_GROUP_CONTEXT, - FLATPAK_METADATA_KEY_SOCKETS, NULL, error); - if (sockets == NULL) - return FALSE; - - for (i = 0; sockets[i] != NULL; i++) - { - FlatpakContextSockets socket = flatpak_context_socket_from_string (parse_negated (sockets[i], &remove), error); - if (socket == 0) - return FALSE; - if (remove) - flatpak_context_remove_sockets (context, socket); - else - flatpak_context_add_sockets (context, socket); - } - } - - if (g_key_file_has_key (metakey, FLATPAK_METADATA_GROUP_CONTEXT, FLATPAK_METADATA_KEY_DEVICES, NULL)) - { - g_auto(GStrv) devices = g_key_file_get_string_list (metakey, FLATPAK_METADATA_GROUP_CONTEXT, - FLATPAK_METADATA_KEY_DEVICES, NULL, error); - if (devices == NULL) - return FALSE; - - - for (i = 0; devices[i] != NULL; i++) - { - FlatpakContextDevices device = flatpak_context_device_from_string (parse_negated (devices[i], &remove), error); - if (device == 0) - return FALSE; - if (remove) - flatpak_context_remove_devices (context, device); - else - flatpak_context_add_devices (context, device); - } - } - - if (g_key_file_has_key (metakey, FLATPAK_METADATA_GROUP_CONTEXT, FLATPAK_METADATA_KEY_FEATURES, NULL)) - { - g_auto(GStrv) features = g_key_file_get_string_list (metakey, FLATPAK_METADATA_GROUP_CONTEXT, - FLATPAK_METADATA_KEY_FEATURES, NULL, error); - if (features == NULL) - return FALSE; - - - for (i = 0; features[i] != NULL; i++) - { - FlatpakContextFeatures feature = flatpak_context_feature_from_string (parse_negated (features[i], &remove), error); - if (feature == 0) - return FALSE; - if (remove) - flatpak_context_remove_features (context, feature); - else - flatpak_context_add_features (context, feature); - } - } - - if (g_key_file_has_key (metakey, FLATPAK_METADATA_GROUP_CONTEXT, FLATPAK_METADATA_KEY_FILESYSTEMS, NULL)) - { - g_auto(GStrv) filesystems = g_key_file_get_string_list (metakey, FLATPAK_METADATA_GROUP_CONTEXT, - FLATPAK_METADATA_KEY_FILESYSTEMS, NULL, error); - if (filesystems == NULL) - return FALSE; - - for (i = 0; filesystems[i] != NULL; i++) - { - const char *fs = parse_negated (filesystems[i], &remove); - if (!flatpak_context_verify_filesystem (fs, error)) - return FALSE; - if (remove) - flatpak_context_remove_filesystem (context, fs); - else - flatpak_context_add_filesystem (context, fs); - } - } - - if (g_key_file_has_key (metakey, FLATPAK_METADATA_GROUP_CONTEXT, FLATPAK_METADATA_KEY_PERSISTENT, NULL)) - { - g_auto(GStrv) persistent = g_key_file_get_string_list (metakey, FLATPAK_METADATA_GROUP_CONTEXT, - FLATPAK_METADATA_KEY_PERSISTENT, NULL, error); - if (persistent == NULL) - return FALSE; - - for (i = 0; persistent[i] != NULL; i++) - flatpak_context_set_persistent (context, persistent[i]); - } - - if (g_key_file_has_group (metakey, FLATPAK_METADATA_GROUP_SESSION_BUS_POLICY)) - { - g_auto(GStrv) keys = NULL; - gsize i, keys_count; - - keys = g_key_file_get_keys (metakey, FLATPAK_METADATA_GROUP_SESSION_BUS_POLICY, &keys_count, NULL); - for (i = 0; i < keys_count; i++) - { - const char *key = keys[i]; - g_autofree char *value = g_key_file_get_string (metakey, FLATPAK_METADATA_GROUP_SESSION_BUS_POLICY, key, NULL); - FlatpakPolicy policy; - - if (!flatpak_verify_dbus_name (key, error)) - return FALSE; - - policy = flatpak_policy_from_string (value, error); - if ((int) policy == -1) - return FALSE; - - flatpak_context_set_session_bus_policy (context, key, policy); - } - } - - if (g_key_file_has_group (metakey, FLATPAK_METADATA_GROUP_SYSTEM_BUS_POLICY)) - { - g_auto(GStrv) keys = NULL; - gsize i, keys_count; - - keys = g_key_file_get_keys (metakey, FLATPAK_METADATA_GROUP_SYSTEM_BUS_POLICY, &keys_count, NULL); - for (i = 0; i < keys_count; i++) - { - const char *key = keys[i]; - g_autofree char *value = g_key_file_get_string (metakey, FLATPAK_METADATA_GROUP_SYSTEM_BUS_POLICY, key, NULL); - FlatpakPolicy policy; - - if (!flatpak_verify_dbus_name (key, error)) - return FALSE; - - policy = flatpak_policy_from_string (value, error); - if ((int) policy == -1) - return FALSE; - - flatpak_context_set_system_bus_policy (context, key, policy); - } - } - - if (g_key_file_has_group (metakey, FLATPAK_METADATA_GROUP_ENVIRONMENT)) - { - g_auto(GStrv) keys = NULL; - gsize i, keys_count; - - keys = g_key_file_get_keys (metakey, FLATPAK_METADATA_GROUP_ENVIRONMENT, &keys_count, NULL); - for (i = 0; i < keys_count; i++) - { - const char *key = keys[i]; - g_autofree char *value = g_key_file_get_string (metakey, FLATPAK_METADATA_GROUP_ENVIRONMENT, key, NULL); - - flatpak_context_set_env_var (context, key, value); - } - } - - groups = g_key_file_get_groups (metakey, NULL); - for (i = 0; groups[i] != NULL; i++) - { - const char *group = groups[i]; - const char *subsystem; - int j; - - if (g_str_has_prefix (group, FLATPAK_METADATA_GROUP_PREFIX_POLICY)) - { - g_auto(GStrv) keys = NULL; - subsystem = group + strlen (FLATPAK_METADATA_GROUP_PREFIX_POLICY); - keys = g_key_file_get_keys (metakey, group, NULL, NULL); - for (j = 0; keys != NULL && keys[j] != NULL; j++) - { - const char *key = keys[j]; - g_autofree char *policy_key = g_strdup_printf ("%s.%s", subsystem, key); - g_auto(GStrv) values = NULL; - int k; - - values = g_key_file_get_string_list (metakey, group, key, NULL, NULL); - for (k = 0; values != NULL && values[k] != NULL; k++) - flatpak_context_apply_generic_policy (context, policy_key, - values[k]); - } - } - } - - return TRUE; -} - -/* - * Save the FLATPAK_METADATA_GROUP_CONTEXT, - * FLATPAK_METADATA_GROUP_SESSION_BUS_POLICY, - * FLATPAK_METADATA_GROUP_SYSTEM_BUS_POLICY and - * FLATPAK_METADATA_GROUP_ENVIRONMENT groups, and all groups starting - * with FLATPAK_METADATA_GROUP_PREFIX_POLICY, into metakey - */ -void -flatpak_context_save_metadata (FlatpakContext *context, - gboolean flatten, - GKeyFile *metakey) -{ - g_auto(GStrv) shared = NULL; - g_auto(GStrv) sockets = NULL; - g_auto(GStrv) devices = NULL; - g_auto(GStrv) features = NULL; - GHashTableIter iter; - gpointer key, value; - FlatpakContextShares shares_mask = context->shares; - FlatpakContextShares shares_valid = context->shares_valid; - FlatpakContextSockets sockets_mask = context->sockets; - FlatpakContextSockets sockets_valid = context->sockets_valid; - FlatpakContextDevices devices_mask = context->devices; - FlatpakContextDevices devices_valid = context->devices_valid; - FlatpakContextFeatures features_mask = context->features; - FlatpakContextFeatures features_valid = context->features; - g_auto(GStrv) groups = NULL; - int i; - - if (flatten) - { - /* A flattened format means we don't expect this to be merged on top of - another context. In that case we never need to negate any flags. - We calculate this by removing the zero parts of the mask from the valid set. - */ - /* First we make sure only the valid parts of the mask are set, in case we - got some leftover */ - shares_mask &= shares_valid; - sockets_mask &= sockets_valid; - devices_mask &= devices_valid; - features_mask &= features_valid; - - /* Then just set the valid set to be the mask set */ - shares_valid = shares_mask; - sockets_valid = sockets_mask; - devices_valid = devices_mask; - features_valid = features_mask; - } - - shared = flatpak_context_shared_to_string (shares_mask, shares_valid); - sockets = flatpak_context_sockets_to_string (sockets_mask, sockets_valid); - devices = flatpak_context_devices_to_string (devices_mask, devices_valid); - features = flatpak_context_features_to_string (features_mask, features_valid); - - if (shared[0] != NULL) - { - g_key_file_set_string_list (metakey, - FLATPAK_METADATA_GROUP_CONTEXT, - FLATPAK_METADATA_KEY_SHARED, - (const char * const *) shared, g_strv_length (shared)); - } - else - { - g_key_file_remove_key (metakey, - FLATPAK_METADATA_GROUP_CONTEXT, - FLATPAK_METADATA_KEY_SHARED, - NULL); - } - - if (sockets[0] != NULL) - { - g_key_file_set_string_list (metakey, - FLATPAK_METADATA_GROUP_CONTEXT, - FLATPAK_METADATA_KEY_SOCKETS, - (const char * const *) sockets, g_strv_length (sockets)); - } - else - { - g_key_file_remove_key (metakey, - FLATPAK_METADATA_GROUP_CONTEXT, - FLATPAK_METADATA_KEY_SOCKETS, - NULL); - } - - if (devices[0] != NULL) - { - g_key_file_set_string_list (metakey, - FLATPAK_METADATA_GROUP_CONTEXT, - FLATPAK_METADATA_KEY_DEVICES, - (const char * const *) devices, g_strv_length (devices)); - } - else - { - g_key_file_remove_key (metakey, - FLATPAK_METADATA_GROUP_CONTEXT, - FLATPAK_METADATA_KEY_DEVICES, - NULL); - } - - if (features[0] != NULL) - { - g_key_file_set_string_list (metakey, - FLATPAK_METADATA_GROUP_CONTEXT, - FLATPAK_METADATA_KEY_FEATURES, - (const char * const *) features, g_strv_length (features)); - } - else - { - g_key_file_remove_key (metakey, - FLATPAK_METADATA_GROUP_CONTEXT, - FLATPAK_METADATA_KEY_FEATURES, - NULL); - } - - if (g_hash_table_size (context->filesystems) > 0) - { - g_autoptr(GPtrArray) array = g_ptr_array_new_with_free_func (g_free); - - g_hash_table_iter_init (&iter, context->filesystems); - while (g_hash_table_iter_next (&iter, &key, &value)) - { - FlatpakFilesystemMode mode = GPOINTER_TO_INT (value); - - if (mode == FLATPAK_FILESYSTEM_MODE_READ_ONLY) - g_ptr_array_add (array, g_strconcat (key, ":ro", NULL)); - else if (mode == FLATPAK_FILESYSTEM_MODE_CREATE) - g_ptr_array_add (array, g_strconcat (key, ":create", NULL)); - else if (value != NULL) - g_ptr_array_add (array, g_strdup (key)); - } - - g_key_file_set_string_list (metakey, - FLATPAK_METADATA_GROUP_CONTEXT, - FLATPAK_METADATA_KEY_FILESYSTEMS, - (const char * const *) array->pdata, array->len); - } - else - { - g_key_file_remove_key (metakey, - FLATPAK_METADATA_GROUP_CONTEXT, - FLATPAK_METADATA_KEY_FILESYSTEMS, - NULL); - } - - if (g_hash_table_size (context->persistent) > 0) - { - g_autofree char **keys = (char **) g_hash_table_get_keys_as_array (context->persistent, NULL); - - g_key_file_set_string_list (metakey, - FLATPAK_METADATA_GROUP_CONTEXT, - FLATPAK_METADATA_KEY_PERSISTENT, - (const char * const *) keys, g_strv_length (keys)); - } - else - { - g_key_file_remove_key (metakey, - FLATPAK_METADATA_GROUP_CONTEXT, - FLATPAK_METADATA_KEY_PERSISTENT, - NULL); - } - - g_key_file_remove_group (metakey, FLATPAK_METADATA_GROUP_SESSION_BUS_POLICY, NULL); - g_hash_table_iter_init (&iter, context->session_bus_policy); - while (g_hash_table_iter_next (&iter, &key, &value)) - { - FlatpakPolicy policy = GPOINTER_TO_INT (value); - if (policy > 0) - g_key_file_set_string (metakey, - FLATPAK_METADATA_GROUP_SESSION_BUS_POLICY, - (char *) key, flatpak_policy_to_string (policy)); - } - - g_key_file_remove_group (metakey, FLATPAK_METADATA_GROUP_SYSTEM_BUS_POLICY, NULL); - g_hash_table_iter_init (&iter, context->system_bus_policy); - while (g_hash_table_iter_next (&iter, &key, &value)) - { - FlatpakPolicy policy = GPOINTER_TO_INT (value); - if (policy > 0) - g_key_file_set_string (metakey, - FLATPAK_METADATA_GROUP_SYSTEM_BUS_POLICY, - (char *) key, flatpak_policy_to_string (policy)); - } - - g_key_file_remove_group (metakey, FLATPAK_METADATA_GROUP_ENVIRONMENT, NULL); - g_hash_table_iter_init (&iter, context->env_vars); - while (g_hash_table_iter_next (&iter, &key, &value)) - { - g_key_file_set_string (metakey, - FLATPAK_METADATA_GROUP_ENVIRONMENT, - (char *) key, (char *) value); - } - - - groups = g_key_file_get_groups (metakey, NULL); - for (i = 0; groups[i] != NULL; i++) - { - const char *group = groups[i]; - if (g_str_has_prefix (group, FLATPAK_METADATA_GROUP_PREFIX_POLICY)) - g_key_file_remove_group (metakey, group, NULL); - } - - g_hash_table_iter_init (&iter, context->generic_policy); - while (g_hash_table_iter_next (&iter, &key, &value)) - { - g_auto(GStrv) parts = g_strsplit ((const char *)key, ".", 2); - g_autofree char *group = NULL; - g_assert (parts[1] != NULL); - const char **policy_values = (const char **)value; - g_autoptr(GPtrArray) new = g_ptr_array_new (); - - for (i = 0; policy_values[i] != NULL; i++) - { - const char *policy_value = policy_values[i]; - - if (!flatten || policy_value[0] != '!') - g_ptr_array_add (new, (char *)policy_value); - } - - if (new->len > 0) - { - group = g_strconcat (FLATPAK_METADATA_GROUP_PREFIX_POLICY, - parts[0], NULL); - g_key_file_set_string_list (metakey, group, parts[1], - (const char * const*)new->pdata, - new->len); - } - } -} - -void -flatpak_context_allow_host_fs (FlatpakContext *context) -{ - flatpak_context_add_filesystem (context, "host"); -} - -gboolean -flatpak_context_get_needs_session_bus_proxy (FlatpakContext *context) -{ - return g_hash_table_size (context->session_bus_policy) > 0; -} - -gboolean -flatpak_context_get_needs_system_bus_proxy (FlatpakContext *context) -{ - return g_hash_table_size (context->system_bus_policy) > 0; -} - -void -flatpak_context_to_args (FlatpakContext *context, - GPtrArray *args) -{ - GHashTableIter iter; - gpointer key, value; - - flatpak_context_shared_to_args (context->shares, context->shares_valid, args); - flatpak_context_sockets_to_args (context->sockets, context->sockets_valid, args); - flatpak_context_devices_to_args (context->devices, context->devices_valid, args); - flatpak_context_features_to_args (context->features, context->features_valid, args); - - g_hash_table_iter_init (&iter, context->env_vars); - while (g_hash_table_iter_next (&iter, &key, &value)) - g_ptr_array_add (args, g_strdup_printf ("--env=%s=%s", (char *)key, (char *)value)); - - g_hash_table_iter_init (&iter, context->persistent); - while (g_hash_table_iter_next (&iter, &key, &value)) - g_ptr_array_add (args, g_strdup_printf ("--persist=%s", (char *)key)); - - g_hash_table_iter_init (&iter, context->session_bus_policy); - while (g_hash_table_iter_next (&iter, &key, &value)) - { - const char *name = key; - FlatpakPolicy policy = GPOINTER_TO_INT (value); - - g_ptr_array_add (args, g_strdup_printf ("--%s-name=%s", flatpak_policy_to_string (policy), name)); - } - - g_hash_table_iter_init (&iter, context->system_bus_policy); - while (g_hash_table_iter_next (&iter, &key, &value)) - { - const char *name = key; - FlatpakPolicy policy = GPOINTER_TO_INT (value); - - g_ptr_array_add (args, g_strdup_printf ("--system-%s-name=%s", flatpak_policy_to_string (policy), name)); - } - - g_hash_table_iter_init (&iter, context->filesystems); - while (g_hash_table_iter_next (&iter, &key, &value)) - { - FlatpakFilesystemMode mode = GPOINTER_TO_INT (value); - - if (mode == FLATPAK_FILESYSTEM_MODE_READ_ONLY) - g_ptr_array_add (args, g_strdup_printf ("--filesystem=%s:ro", (char *)key)); - else if (mode == FLATPAK_FILESYSTEM_MODE_READ_WRITE) - g_ptr_array_add (args, g_strdup_printf ("--filesystem=%s", (char *)key)); - else if (mode == FLATPAK_FILESYSTEM_MODE_CREATE) - g_ptr_array_add (args, g_strdup_printf ("--filesystem=%s:create", (char *)key)); - else - g_ptr_array_add (args, g_strdup_printf ("--nofilesystem=%s", (char *)key)); - } -} - static char * extract_unix_path_from_dbus_address (const char *address) { @@ -1853,15 +162,6 @@ write_xauth (char *number, FILE *output) } #endif /* ENABLE_XAUTH */ -static void -append_args (GPtrArray *argv_array, GPtrArray *other_array) -{ - int i; - - for (i = 0; i < other_array->len; i++) - g_ptr_array_add (argv_array, g_strdup (g_ptr_array_index (other_array, i))); -} - static void add_args (GPtrArray *argv_array, ...) { @@ -1890,83 +190,8 @@ add_args_data_fd (GPtrArray *argv_array, NULL); } - -/* If memfd_create() is available, generate a sealed memfd with contents of - * @str. Otherwise use an O_TMPFILE @tmpf in anonymous mode, write @str to - * @tmpf, and lseek() back to the start. See also similar uses in e.g. - * rpm-ostree for running dracut. - */ -static gboolean -buffer_to_sealed_memfd_or_tmpfile (GLnxTmpfile *tmpf, - const char *name, - const char *str, - size_t len, - GError **error) -{ - if (len == -1) - len = strlen (str); - glnx_autofd int memfd = memfd_create (name, MFD_CLOEXEC | MFD_ALLOW_SEALING); - int fd; /* Unowned */ - if (memfd != -1) - { - fd = memfd; - } - else - { - /* We use an anonymous fd (i.e. O_EXCL) since we don't want - * the target container to potentially be able to re-link it. - */ - if (!G_IN_SET (errno, ENOSYS, EOPNOTSUPP)) - return glnx_throw_errno_prefix (error, "memfd_create"); - if (!glnx_open_anonymous_tmpfile (O_RDWR | O_CLOEXEC, tmpf, error)) - return FALSE; - fd = tmpf->fd; - } - if (ftruncate (fd, len) < 0) - return glnx_throw_errno_prefix (error, "ftruncate"); - if (glnx_loop_write (fd, str, len) < 0) - return glnx_throw_errno_prefix (error, "write"); - if (lseek (fd, 0, SEEK_SET) < 0) - return glnx_throw_errno_prefix (error, "lseek"); - if (memfd != -1) - { - if (fcntl (memfd, F_ADD_SEALS, F_SEAL_SHRINK | F_SEAL_GROW | F_SEAL_WRITE | F_SEAL_SEAL) < 0) - return glnx_throw_errno_prefix (error, "fcntl(F_ADD_SEALS)"); - /* The other values can stay default */ - tmpf->fd = glnx_steal_fd (&memfd); - tmpf->initialized = TRUE; - } - return TRUE; -} - -/* Given a buffer @content of size @content_size, generate a fd (memfd if available) - * of the data. The @name parameter is used by memfd_create() as a debugging aid; - * it has no semantic meaning. The bwrap command line will inject it into the target - * container as @path. - */ -static gboolean -add_args_data (GPtrArray *argv_array, - GArray *fd_array, - const char *name, - const char *content, - gssize content_size, - const char *path, - GError **error) -{ - g_auto(GLnxTmpfile) args_tmpf = { 0, }; - - if (!buffer_to_sealed_memfd_or_tmpfile (&args_tmpf, name, content, content_size, error)) - return FALSE; - - add_args_data_fd (argv_array, fd_array, - "--bind-data", glnx_steal_fd (&args_tmpf.fd), path); - return TRUE; -} - static void -flatpak_run_add_x11_args (GPtrArray *argv_array, - GArray *fd_array, - char ***envp_p, +flatpak_run_add_x11_args (FlatpakBwrap *bwrap, gboolean allowed) { g_autofree char *x11_socket = NULL; @@ -1976,13 +201,13 @@ flatpak_run_add_x11_args (GPtrArray *argv_array, * we have access to the host /tmp. If you request X access we'll put the right * thing in this anyway. */ - add_args (argv_array, - "--tmpfs", "/tmp/.X11-unix", - NULL); + flatpak_bwrap_add_args (bwrap, + "--tmpfs", "/tmp/.X11-unix", + NULL); if (!allowed) { - *envp_p = g_environ_unsetenv (*envp_p, "DISPLAY"); + flatpak_bwrap_unset_env (bwrap, "DISPLAY"); return; } @@ -2001,10 +226,10 @@ flatpak_run_add_x11_args (GPtrArray *argv_array, d = g_strndup (display_nr, display_nr_end - display_nr); x11_socket = g_strdup_printf ("/tmp/.X11-unix/X%s", d); - add_args (argv_array, - "--bind", x11_socket, "/tmp/.X11-unix/X99", - NULL); - *envp_p = g_environ_setenv (*envp_p, "DISPLAY", ":99.0", TRUE); + flatpak_bwrap_add_args (bwrap, + "--bind", x11_socket, "/tmp/.X11-unix/X99", + NULL); + flatpak_bwrap_set_env (bwrap, "DISPLAY", ":99.0", TRUE); #ifdef ENABLE_XAUTH g_auto(GLnxTmpfile) xauth_tmpf = { 0, }; @@ -2021,10 +246,9 @@ flatpak_run_add_x11_args (GPtrArray *argv_array, g_autofree char *dest = g_strdup_printf ("/run/user/%d/Xauthority", getuid ()); write_xauth (d, output); - add_args_data_fd (argv_array, fd_array, - "--bind-data", tmp_fd, dest); + flatpak_bwrap_add_args_data_fd (bwrap, "--bind-data", tmp_fd, dest); - *envp_p = g_environ_setenv (*envp_p, "XAUTHORITY", dest, TRUE); + flatpak_bwrap_set_env (bwrap, "XAUTHORITY", dest, TRUE); } fclose (output); @@ -2037,18 +261,18 @@ flatpak_run_add_x11_args (GPtrArray *argv_array, } else { - *envp_p = g_environ_unsetenv (*envp_p, "DISPLAY"); + flatpak_bwrap_unset_env (bwrap, "DISPLAY"); } } -static void -flatpak_run_add_wayland_args (GPtrArray *argv_array, - char ***envp_p) +static gboolean +flatpak_run_add_wayland_args (FlatpakBwrap *bwrap) { const char *wayland_display; g_autofree char *wayland_socket = NULL; g_autofree char *sandbox_wayland_socket = NULL; + gboolean res = FALSE; wayland_display = g_getenv ("WAYLAND_DISPLAY"); if (!wayland_display) @@ -2059,20 +283,140 @@ flatpak_run_add_wayland_args (GPtrArray *argv_array, if (g_file_test (wayland_socket, G_FILE_TEST_EXISTS)) { - add_args (argv_array, - "--bind", wayland_socket, sandbox_wayland_socket, - NULL); + res = TRUE; + flatpak_bwrap_add_args (bwrap, + "--bind", wayland_socket, sandbox_wayland_socket, + NULL); } + return res; +} + +/* Try to find a default server from a pulseaudio confguration file */ +static char * +flatpak_run_get_pulseaudio_server_user_config (const char *path) +{ + g_autoptr(GFile) file = g_file_new_for_path (path); + g_autoptr(GError) my_error = NULL; + g_autoptr(GFileInputStream) input_stream = NULL; + g_autoptr(GDataInputStream) data_stream = NULL; + size_t len; + + input_stream = g_file_read (file, NULL, &my_error); + if (my_error) + { + g_debug ("Pulseaudio user configuration file '%s': %s", path, my_error->message); + return NULL; + } + + data_stream = g_data_input_stream_new (G_INPUT_STREAM(input_stream)); + + while (TRUE) + { + g_autofree char *line = g_data_input_stream_read_line (data_stream, &len, NULL, NULL); + if (line == NULL) + break; + + g_strchug (line); + + if ((*line == '\0') || (*line == ';') || (*line == '#')) + continue; + + if (g_str_has_prefix (line, ".include ")) + { + g_autofree char *rec_path = g_strdup (line+9); + g_strstrip (rec_path); + char *found = flatpak_run_get_pulseaudio_server_user_config (rec_path); + if (found) + return found; + } + else if (g_str_has_prefix (line, "[")) + { + return NULL; + } + else + { + g_auto(GStrv) tokens = g_strsplit (line, "=", 2); + + if ((tokens[0] != NULL) && (tokens[1] != NULL)) + { + g_strchomp (tokens[0]); + if (strcmp ("default-server", tokens[0]) == 0) + { + g_strstrip (tokens[1]); + g_debug("Found pulseaudio socket from configuration file '%s': %s", path, tokens[1]); + return g_strdup (tokens[1]); + } + } + } + } + + return NULL; +} + +static char * +flatpak_run_get_pulseaudio_server (void) +{ + const char* pulse_clientconfig; + char *pulse_server; + g_autofree char *pulse_user_config = NULL; + + pulse_server = g_strdup (g_getenv ("PULSE_SERVER")); + if (pulse_server) + return pulse_server; + + pulse_clientconfig = g_getenv ("PULSE_CLIENTCONFIG"); + if (pulse_clientconfig) + return flatpak_run_get_pulseaudio_server_user_config (pulse_clientconfig); + + pulse_user_config = g_build_filename (g_get_user_config_dir(), "pulse/client.conf", NULL); + pulse_server = flatpak_run_get_pulseaudio_server_user_config (pulse_user_config); + if (pulse_server) + return pulse_server; + + pulse_server = flatpak_run_get_pulseaudio_server_user_config ("/etc/pulse/client.conf"); + if (pulse_server) + return pulse_server; + + return NULL; +} + +static char * +flatpak_run_parse_pulse_server (const char *value) +{ + g_auto(GStrv) servers = g_strsplit (value, " ", 0); + gsize i; + + for (i = 0; servers[i] != NULL; i++) + { + const char *server = servers[i]; + if (g_str_has_prefix (server, "{")) + { + const char* closing = strstr (server, "}"); + if (closing == NULL) + continue; + server = closing + 1; + } + if (g_str_has_prefix (server, "unix:")) + return g_strdup (server+5); + } + + return NULL; } static void -flatpak_run_add_pulseaudio_args (GPtrArray *argv_array, - GArray *fd_array, - char ***envp_p) +flatpak_run_add_pulseaudio_args (FlatpakBwrap *bwrap) { - g_autofree char *pulseaudio_socket = g_build_filename (g_get_user_runtime_dir (), "pulse/native", NULL); + g_autofree char *pulseaudio_server = flatpak_run_get_pulseaudio_server (); + g_autofree char *pulseaudio_socket = NULL; + + if (pulseaudio_server) + pulseaudio_socket = flatpak_run_parse_pulse_server (pulseaudio_server); + + if (!pulseaudio_socket) + pulseaudio_socket = g_build_filename (g_get_user_runtime_dir (), "pulse/native", NULL); + + flatpak_bwrap_unset_env (bwrap, "PULSE_SERVER"); - *envp_p = g_environ_unsetenv (*envp_p, "PULSE_SERVER"); if (g_file_test (pulseaudio_socket, G_FILE_TEST_EXISTS)) { gboolean share_shm = FALSE; /* TODO: When do we add this? */ @@ -2082,35 +426,37 @@ flatpak_run_add_pulseaudio_args (GPtrArray *argv_array, g_autofree char *config_path = g_strdup_printf ("/run/user/%d/pulse/config", getuid ()); /* FIXME - error handling */ - if (!add_args_data (argv_array, fd_array, "pulseaudio", client_config, -1, config_path, NULL)) + if (!flatpak_bwrap_add_args_data (bwrap, "pulseaudio", client_config, -1, config_path, NULL)) return; - add_args (argv_array, - "--bind", pulseaudio_socket, sandbox_socket_path, - NULL); + flatpak_bwrap_add_args (bwrap, + "--bind", pulseaudio_socket, sandbox_socket_path, + NULL); - *envp_p = g_environ_setenv (*envp_p, "PULSE_SERVER", pulse_server, TRUE); - *envp_p = g_environ_setenv (*envp_p, "PULSE_CLIENTCONFIG", config_path, TRUE); + flatpak_bwrap_set_env (bwrap, "PULSE_SERVER", pulse_server, TRUE); + flatpak_bwrap_set_env (bwrap, "PULSE_CLIENTCONFIG", config_path, TRUE); } + else + g_debug ("Could not find pulseaudio socket"); } static void -flatpak_run_add_journal_args (GPtrArray *argv_array) +flatpak_run_add_journal_args (FlatpakBwrap *bwrap) { g_autofree char *journal_socket_socket = g_strdup ("/run/systemd/journal/socket"); g_autofree char *journal_stdout_socket = g_strdup ("/run/systemd/journal/stdout"); if (g_file_test (journal_socket_socket, G_FILE_TEST_EXISTS)) { - add_args (argv_array, - "--bind", journal_socket_socket, journal_socket_socket, - NULL); + flatpak_bwrap_add_args (bwrap, + "--bind", journal_socket_socket, journal_socket_socket, + NULL); } if (g_file_test (journal_stdout_socket, G_FILE_TEST_EXISTS)) { - add_args (argv_array, - "--bind", journal_stdout_socket, journal_stdout_socket, - NULL); + flatpak_bwrap_add_args (bwrap, + "--bind", journal_stdout_socket, journal_stdout_socket, + NULL); } } @@ -2135,8 +481,7 @@ create_proxy_socket (char *template) static gboolean flatpak_run_add_system_dbus_args (FlatpakContext *context, - char ***envp_p, - GPtrArray *argv_array, + FlatpakBwrap *bwrap, GPtrArray *dbus_proxy_argv, gboolean unrestricted) { @@ -2151,15 +496,15 @@ flatpak_run_add_system_dbus_args (FlatpakContext *context, if (dbus_system_socket != NULL && unrestricted) { - add_args (argv_array, - "--bind", dbus_system_socket, "/run/dbus/system_bus_socket", - NULL); - *envp_p = g_environ_setenv (*envp_p, "DBUS_SYSTEM_BUS_ADDRESS", "unix:path=/run/dbus/system_bus_socket", TRUE); + flatpak_bwrap_add_args (bwrap, + "--bind", dbus_system_socket, "/run/dbus/system_bus_socket", + NULL); + flatpak_bwrap_set_env (bwrap, "DBUS_SYSTEM_BUS_ADDRESS", "unix:path=/run/dbus/system_bus_socket", TRUE); return TRUE; } else if (dbus_proxy_argv && - g_hash_table_size (context->system_bus_policy) > 0) + flatpak_context_get_needs_system_bus_proxy (context)) { g_autofree char *proxy_socket = create_proxy_socket ("system-bus-proxy-XXXXXX"); @@ -2175,10 +520,10 @@ flatpak_run_add_system_dbus_args (FlatpakContext *context, g_ptr_array_add (dbus_proxy_argv, g_strdup (proxy_socket)); - add_args (argv_array, - "--bind", proxy_socket, "/run/dbus/system_bus_socket", - NULL); - *envp_p = g_environ_setenv (*envp_p, "DBUS_SYSTEM_BUS_ADDRESS", "unix:path=/run/dbus/system_bus_socket", TRUE); + flatpak_bwrap_add_args (bwrap, + "--bind", proxy_socket, "/run/dbus/system_bus_socket", + NULL); + flatpak_bwrap_set_env (bwrap, "DBUS_SYSTEM_BUS_ADDRESS", "unix:path=/run/dbus/system_bus_socket", TRUE); return TRUE; } @@ -2186,8 +531,7 @@ flatpak_run_add_system_dbus_args (FlatpakContext *context, } static gboolean -flatpak_run_add_session_dbus_args (GPtrArray *argv_array, - char ***envp_p, +flatpak_run_add_session_dbus_args (FlatpakBwrap *bwrap, GPtrArray *dbus_proxy_argv, gboolean unrestricted) { @@ -2202,11 +546,10 @@ flatpak_run_add_session_dbus_args (GPtrArray *argv_array, dbus_session_socket = extract_unix_path_from_dbus_address (dbus_address); if (dbus_session_socket != NULL && unrestricted) { - - add_args (argv_array, - "--bind", dbus_session_socket, sandbox_socket_path, - NULL); - *envp_p = g_environ_setenv (*envp_p, "DBUS_SESSION_BUS_ADDRESS", sandbox_dbus_address, TRUE); + flatpak_bwrap_add_args (bwrap, + "--bind", dbus_session_socket, sandbox_socket_path, + NULL); + flatpak_bwrap_set_env (bwrap, "DBUS_SESSION_BUS_ADDRESS", sandbox_dbus_address, TRUE); return TRUE; } @@ -2220,10 +563,10 @@ flatpak_run_add_session_dbus_args (GPtrArray *argv_array, g_ptr_array_add (dbus_proxy_argv, g_strdup (dbus_address)); g_ptr_array_add (dbus_proxy_argv, g_strdup (proxy_socket)); - add_args (argv_array, - "--bind", proxy_socket, sandbox_socket_path, - NULL); - *envp_p = g_environ_setenv (*envp_p, "DBUS_SESSION_BUS_ADDRESS", sandbox_dbus_address, TRUE); + flatpak_bwrap_add_args (bwrap, + "--bind", proxy_socket, sandbox_socket_path, + NULL); + flatpak_bwrap_set_env (bwrap, "DBUS_SESSION_BUS_ADDRESS", sandbox_dbus_address, TRUE); return TRUE; } @@ -2231,32 +574,6 @@ flatpak_run_add_session_dbus_args (GPtrArray *argv_array, return FALSE; } -static void -flatpak_add_bus_filters (GPtrArray *dbus_proxy_argv, - GHashTable *ht, - const char *app_id, - FlatpakContext *context) -{ - GHashTableIter iter; - gpointer key, value; - - g_ptr_array_add (dbus_proxy_argv, g_strdup ("--filter")); - if (app_id) - { - g_ptr_array_add (dbus_proxy_argv, g_strdup_printf ("--own=%s", app_id)); - g_ptr_array_add (dbus_proxy_argv, g_strdup_printf ("--own=%s.*", app_id)); - } - - g_hash_table_iter_init (&iter, ht); - while (g_hash_table_iter_next (&iter, &key, &value)) - { - FlatpakPolicy policy = GPOINTER_TO_INT (value); - - if (policy > 0) - g_ptr_array_add (dbus_proxy_argv, g_strdup_printf ("--%s=%s", flatpak_policy_to_string (policy), (char *) key)); - } -} - static int flatpak_extension_compare_by_path (gconstpointer _a, gconstpointer _b) @@ -2268,9 +585,7 @@ flatpak_extension_compare_by_path (gconstpointer _a, } gboolean -flatpak_run_add_extension_args (GPtrArray *argv_array, - GArray *fd_array, - char ***envp_p, +flatpak_run_add_extension_args (FlatpakBwrap *bwrap, GKeyFile *metakey, const char *full_ref, gboolean use_ld_so_cache, @@ -2317,21 +632,21 @@ flatpak_run_add_extension_args (GPtrArray *argv_array, if (g_hash_table_lookup (mounted_tmpfs, parent) == NULL) { - add_args (argv_array, - "--tmpfs", parent, - NULL); + flatpak_bwrap_add_args (bwrap, + "--tmpfs", parent, + NULL); g_hash_table_insert (mounted_tmpfs, g_steal_pointer (&parent), "mounted"); } } - add_args (argv_array, - "--ro-bind", ext->files_path, full_directory, - NULL); + flatpak_bwrap_add_args (bwrap, + "--ro-bind", ext->files_path, full_directory, + NULL); if (g_file_test (real_ref, G_FILE_TEST_EXISTS)) - add_args (argv_array, - "--lock-file", ref, - NULL); + flatpak_bwrap_add_args (bwrap, + "--lock-file", ref, + NULL); } g_list_free (path_sorted_extensions); @@ -2365,8 +680,8 @@ flatpak_run_add_extension_args (GPtrArray *argv_array, g_autofree char *ld_so_conf_file = g_strdup_printf ("%s-%03d-%s.conf", parts[0], ++count, ext->installed_id); g_autofree char *ld_so_conf_file_path = g_build_filename ("/run/flatpak/ld.so.conf.d", ld_so_conf_file, NULL); - if (!add_args_data (argv_array, fd_array, "ld-so-conf", - contents, -1, ld_so_conf_file_path, error)) + if (!flatpak_bwrap_add_args_data (bwrap, "ld-so-conf", + contents, -1, ld_so_conf_file_path, error)) return FALSE; } else @@ -2394,9 +709,9 @@ flatpak_run_add_extension_args (GPtrArray *argv_array, if (g_hash_table_lookup (created_symlink, symlink_path) == NULL) { g_autofree char *symlink = g_build_filename (directory, ext->merge_dirs[i], dent->d_name, NULL); - add_args (argv_array, - "--symlink", symlink, symlink_path, - NULL); + flatpak_bwrap_add_args (bwrap, + "--symlink", symlink, symlink_path, + NULL); g_hash_table_insert (created_symlink, g_steal_pointer (&symlink_path), "created"); } } @@ -2408,7 +723,7 @@ flatpak_run_add_extension_args (GPtrArray *argv_array, if (ld_library_path->len != 0) { - const gchar *old_ld_path = g_environ_getenv (*envp_p, "LD_LIBRARY_PATH"); + const gchar *old_ld_path = g_environ_getenv (bwrap->envp, "LD_LIBRARY_PATH"); if (old_ld_path != NULL && *old_ld_path != 0) { @@ -2424,7 +739,7 @@ flatpak_run_add_extension_args (GPtrArray *argv_array, } } - *envp_p = g_environ_setenv (*envp_p, "LD_LIBRARY_PATH", ld_library_path->str , TRUE); + flatpak_bwrap_set_env (bwrap, "LD_LIBRARY_PATH", ld_library_path->str , TRUE); } if (extensions_out) @@ -2433,590 +748,8 @@ flatpak_run_add_extension_args (GPtrArray *argv_array, return TRUE; } -static char * -make_relative (const char *base, const char *path) -{ - GString *s = g_string_new (""); - - while (*base != 0) - { - while (*base == '/') - base++; - - if (*base != 0) - g_string_append (s, "../"); - - while (*base != '/' && *base != 0) - base++; - } - - while (*path == '/') - path++; - - g_string_append (s, path); - - return g_string_free (s, FALSE); -} - -#define FAKE_MODE_DIR -1 /* Ensure a dir, either on tmpfs or mapped parent */ -#define FAKE_MODE_TMPFS 0 -#define FAKE_MODE_SYMLINK G_MAXINT - -typedef struct { - char *path; - gint mode; -} ExportedPath; - -struct _FlatpakExports { - GHashTable *hash; -}; - -static void -exported_path_free (ExportedPath *exported_path) -{ - g_free (exported_path->path); - g_free (exported_path); -} - -static FlatpakExports * -exports_new (void) -{ - FlatpakExports *exports = g_new0 (FlatpakExports, 1); - exports->hash = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, (GFreeFunc)exported_path_free); - return exports; -} - -void -flatpak_exports_free (FlatpakExports *exports) -{ - g_hash_table_destroy (exports->hash); - g_free (exports); -} - -/* Returns TRUE if the location of this export - is not visible due to parents being exported */ -static gboolean -path_parent_is_mapped (const char **keys, - guint n_keys, - GHashTable *hash_table, - const char *path) -{ - guint i; - gboolean is_mapped = FALSE; - - /* The keys are sorted so shorter (i.e. parents) are first */ - for (i = 0; i < n_keys; i++) - { - const char *mounted_path = keys[i]; - ExportedPath *ep = g_hash_table_lookup (hash_table, mounted_path); - - if (flatpak_has_path_prefix (path, mounted_path) && - (strcmp (path, mounted_path) != 0)) - { - /* FAKE_MODE_DIR has same mapped value as parent */ - if (ep->mode == FAKE_MODE_DIR) - continue; - - is_mapped = ep->mode != FAKE_MODE_TMPFS; - } - } - - return is_mapped; -} - -static gboolean -path_is_mapped (const char **keys, - guint n_keys, - GHashTable *hash_table, - const char *path) -{ - guint i; - gboolean is_mapped = FALSE; - - /* The keys are sorted so shorter (i.e. parents) are first */ - for (i = 0; i < n_keys; i++) - { - const char *mounted_path = keys[i]; - ExportedPath *ep = g_hash_table_lookup (hash_table, mounted_path); - - if (flatpak_has_path_prefix (path, mounted_path)) - { - /* FAKE_MODE_DIR has same mapped value as parent */ - if (ep->mode == FAKE_MODE_DIR) - continue; - - if (ep->mode == FAKE_MODE_SYMLINK) - is_mapped = strcmp (path, mounted_path) == 0; - else - is_mapped = ep->mode != FAKE_MODE_TMPFS; - } - } - - return is_mapped; -} - -static gint -compare_eps (const ExportedPath *a, - const ExportedPath *b) -{ - return g_strcmp0 (a->path, b->path); -} - -/* This differs from g_file_test (path, G_FILE_TEST_IS_DIR) which - returns true if the path is a symlink to a dir */ -static gboolean -path_is_dir (const char *path) -{ - struct stat s; - - if (lstat (path, &s) != 0) - return FALSE; - - return S_ISDIR (s.st_mode); -} - -static gboolean -path_is_symlink (const char *path) -{ - struct stat s; - - if (lstat (path, &s) != 0) - return FALSE; - - return S_ISLNK (s.st_mode); -} - -static void -exports_add_bwrap_args (FlatpakExports *exports, - GPtrArray *argv_array) -{ - guint n_keys; - g_autofree const char **keys = (const char **)g_hash_table_get_keys_as_array (exports->hash, &n_keys); - g_autoptr(GList) eps = NULL; - GList *l; - - eps = g_hash_table_get_values (exports->hash); - eps = g_list_sort (eps, (GCompareFunc)compare_eps); - - g_qsort_with_data (keys, n_keys, sizeof (char *), (GCompareDataFunc) flatpak_strcmp0_ptr, NULL); - - for (l = eps; l != NULL; l = l->next) - { - ExportedPath *ep = l->data; - const char *path = ep->path; - - if (ep->mode == FAKE_MODE_SYMLINK) - { - if (!path_parent_is_mapped (keys, n_keys, exports->hash, path)) - { - g_autofree char *resolved = flatpak_resolve_link (path, NULL); - if (resolved) - { - g_autofree char *parent = g_path_get_dirname (path); - g_autofree char *relative = make_relative (parent, resolved); - add_args (argv_array, "--symlink", relative, path, NULL); - } - } - } - else if (ep->mode == FAKE_MODE_TMPFS) - { - /* Mount a tmpfs to hide the subdirectory, but only if there - is a pre-existing dir we can mount the path on. */ - if (path_is_dir (path)) - { - if (!path_parent_is_mapped (keys, n_keys, exports->hash, path)) - /* If the parent is not mapped, it will be a tmpfs, no need to mount another one */ - add_args (argv_array, "--dir", path, NULL); - else - add_args (argv_array, "--tmpfs", path, NULL); - } - } - else if (ep->mode == FAKE_MODE_DIR) - { - if (path_is_dir (path)) - add_args (argv_array, "--dir", path, NULL); - } - else - { - add_args (argv_array, - (ep->mode == FLATPAK_FILESYSTEM_MODE_READ_ONLY) ? "--ro-bind" : "--bind", - path, path, NULL); - } - } -} - gboolean -flatpak_exports_path_is_visible (FlatpakExports *exports, - const char *path) -{ - guint n_keys; - g_autofree const char **keys = (const char **)g_hash_table_get_keys_as_array (exports->hash, &n_keys); - g_autofree char *canonical = NULL; - g_auto(GStrv) parts = NULL; - int i; - g_autoptr(GString) path_builder = g_string_new (""); - struct stat st; - - g_qsort_with_data (keys, n_keys, sizeof (char *), (GCompareDataFunc) flatpak_strcmp0_ptr, NULL); - - path = canonical = flatpak_canonicalize_filename (path); - - parts = g_strsplit (path+1, "/", -1); - - /* A path is visible in the sandbox if no parent - * path element that is mapped in the sandbox is - * a symlink, and the final element is mapped. - * If any parent is a symlink we resolve that and - * continue with that instead. - */ - for (i = 0; parts[i] != NULL; i++) - { - g_string_append (path_builder, "/"); - g_string_append (path_builder, parts[i]); - - if (path_is_mapped (keys, n_keys, exports->hash, path_builder->str)) - { - if (lstat (path_builder->str, &st) != 0) - return FALSE; - - if (S_ISLNK (st.st_mode)) - { - g_autofree char *resolved = flatpak_resolve_link (path_builder->str, NULL); - g_autoptr(GString) path2_builder = NULL; - int j; - - if (resolved == NULL) - return FALSE; - path2_builder = g_string_new (resolved); - - for (j = i + 1; parts[j] != NULL; j++) - { - g_string_append (path2_builder, "/"); - g_string_append (path2_builder, parts[j]); - } - - - return flatpak_exports_path_is_visible (exports, path2_builder->str); - } - } - else if (parts[i+1] == NULL) - return FALSE; /* Last part was not mapped */ - } - - return TRUE; -} - -static gboolean -never_export_as_symlink (const char *path) -{ - /* Don't export /tmp as a symlink even if it is on the host, because - that will fail with the pre-existing directory we created for /tmp, - and anyway, it being a symlink is not useful in the sandbox */ - if (strcmp (path, "/tmp") == 0) - return TRUE; - - return FALSE; -} - -static void -do_export_path (FlatpakExports *exports, - const char *path, - gint mode) -{ - ExportedPath *old_ep = g_hash_table_lookup (exports->hash, path); - ExportedPath *ep; - - ep = g_new0 (ExportedPath, 1); - ep->path = g_strdup (path); - - if (old_ep != NULL) - ep->mode = MAX (old_ep->mode, mode); - else - ep->mode = mode; - - g_hash_table_replace (exports->hash, ep->path, ep); -} - - -/* We use level to avoid infinite recursion */ -static gboolean -_exports_path_expose (FlatpakExports *exports, - int mode, - const char *path, - int level) -{ - g_autofree char *canonical = NULL; - struct stat st; - char *slash; - int i; - - if (level > 40) /* 40 is the current kernel ELOOP check */ - { - g_debug ("Expose too deep, bail"); - return FALSE; - } - - if (!g_path_is_absolute (path)) - { - g_debug ("Not exposing relative path %s", path); - return FALSE; - } - - /* Check if it exists at all */ - if (lstat (path, &st) != 0) - return FALSE; - - /* Don't expose weird things */ - if (!(S_ISDIR (st.st_mode) || - S_ISREG (st.st_mode) || - S_ISLNK (st.st_mode) || - S_ISSOCK (st.st_mode))) - return FALSE; - - path = canonical = flatpak_canonicalize_filename (path); - - for (i = 0; dont_export_in[i] != NULL; i++) - { - /* Don't expose files in non-mounted dirs like /app or /usr, as - they are not the same as on the host, and we generally can't - create the parents for them anyway */ - if (flatpak_has_path_prefix (path, dont_export_in[i])) - { - g_debug ("skipping export for path %s", path); - return FALSE; - } - } - - /* Handle any symlinks prior to the target itself. This includes path itself, - because we expose the target of the symlink. */ - slash = canonical; - do - { - slash = strchr (slash + 1, '/'); - if (slash) - *slash = 0; - - if (path_is_symlink (path) && !never_export_as_symlink (path)) - { - g_autofree char *resolved = flatpak_resolve_link (path, NULL); - g_autofree char *new_target = NULL; - - if (resolved) - { - if (slash) - new_target = g_build_filename (resolved, slash + 1, NULL); - else - new_target = g_strdup (resolved); - - if (_exports_path_expose (exports, mode, new_target, level + 1)) - { - do_export_path (exports, path, FAKE_MODE_SYMLINK); - return TRUE; - } - } - - return FALSE; - } - if (slash) - *slash = '/'; - } - while (slash != NULL); - - do_export_path (exports, path, mode); - return TRUE; -} - -static void -exports_path_expose (FlatpakExports *exports, - FlatpakFilesystemMode mode, - const char *path) -{ - _exports_path_expose (exports, mode, path, 0); -} - -static void -exports_path_tmpfs (FlatpakExports *exports, - const char *path) -{ - _exports_path_expose (exports, FAKE_MODE_TMPFS, path, 0); -} - -static void -exports_path_dir (FlatpakExports *exports, - const char *path) -{ - _exports_path_expose (exports, FAKE_MODE_DIR, path, 0); -} - -static void -export_paths_export_context (FlatpakContext *context, - FlatpakExports *exports, - GFile *app_id_dir, - gboolean do_create, - GString *xdg_dirs_conf, - gboolean *home_access_out) -{ - gboolean home_access = FALSE; - FlatpakFilesystemMode fs_mode, home_mode; - GHashTableIter iter; - gpointer key, value; - - fs_mode = (FlatpakFilesystemMode) g_hash_table_lookup (context->filesystems, "host"); - if (fs_mode != 0) - { - DIR *dir; - struct dirent *dirent; - - g_debug ("Allowing host-fs access"); - home_access = TRUE; - - /* Bind mount most dirs in / into the new root */ - dir = opendir ("/"); - if (dir != NULL) - { - while ((dirent = readdir (dir))) - { - g_autofree char *path = NULL; - - if (g_strv_contains (dont_mount_in_root, dirent->d_name)) - continue; - - path = g_build_filename ("/", dirent->d_name, NULL); - exports_path_expose (exports, fs_mode, path); - } - closedir (dir); - } - exports_path_expose (exports, fs_mode, "/run/media"); - } - - home_mode = (FlatpakFilesystemMode) g_hash_table_lookup (context->filesystems, "home"); - if (home_mode != 0) - { - g_debug ("Allowing homedir access"); - home_access = TRUE; - - exports_path_expose (exports, MAX (home_mode, fs_mode), g_get_home_dir ()); - } - - g_hash_table_iter_init (&iter, context->filesystems); - while (g_hash_table_iter_next (&iter, &key, &value)) - { - const char *filesystem = key; - FlatpakFilesystemMode mode = GPOINTER_TO_INT (value); - - if (value == NULL || - strcmp (filesystem, "host") == 0 || - strcmp (filesystem, "home") == 0) - continue; - - if (g_str_has_prefix (filesystem, "xdg-")) - { - const char *path, *rest = NULL; - const char *config_key = NULL; - g_autofree char *subpath = NULL; - - if (!get_xdg_user_dir_from_string (filesystem, &config_key, &rest, &path)) - { - g_warning ("Unsupported xdg dir %s", filesystem); - continue; - } - - if (path == NULL) - continue; /* Unconfigured, ignore */ - - if (strcmp (path, g_get_home_dir ()) == 0) - { - /* xdg-user-dirs sets disabled dirs to $HOME, and its in general not a good - idea to set full access to $HOME other than explicitly, so we ignore - these */ - g_debug ("Xdg dir %s is $HOME (i.e. disabled), ignoring", filesystem); - continue; - } - - subpath = g_build_filename (path, rest, NULL); - - if (mode == FLATPAK_FILESYSTEM_MODE_CREATE && do_create) - g_mkdir_with_parents (subpath, 0755); - - if (g_file_test (subpath, G_FILE_TEST_EXISTS)) - { - if (config_key && xdg_dirs_conf) - g_string_append_printf (xdg_dirs_conf, "%s=\"%s\"\n", - config_key, path); - - exports_path_expose (exports, mode, subpath); - } - } - else if (g_str_has_prefix (filesystem, "~/")) - { - g_autofree char *path = NULL; - - path = g_build_filename (g_get_home_dir (), filesystem + 2, NULL); - - if (mode == FLATPAK_FILESYSTEM_MODE_CREATE && do_create) - g_mkdir_with_parents (path, 0755); - - if (g_file_test (path, G_FILE_TEST_EXISTS)) - exports_path_expose (exports, mode, path); - } - else if (g_str_has_prefix (filesystem, "/")) - { - if (mode == FLATPAK_FILESYSTEM_MODE_CREATE && do_create) - g_mkdir_with_parents (filesystem, 0755); - - if (g_file_test (filesystem, G_FILE_TEST_EXISTS)) - exports_path_expose (exports, mode, filesystem); - } - else - { - g_warning ("Unexpected filesystem arg %s", filesystem); - } - } - - if (app_id_dir) - { - g_autoptr(GFile) apps_dir = g_file_get_parent (app_id_dir); - /* Hide the .var/app dir by default (unless explicitly made visible) */ - exports_path_tmpfs (exports, flatpak_file_get_path_cached (apps_dir)); - /* But let the app write to the per-app dir in it */ - exports_path_expose (exports, FLATPAK_FILESYSTEM_MODE_READ_WRITE, - flatpak_file_get_path_cached (app_id_dir)); - } - - if (home_access_out != NULL) - *home_access_out = home_access; -} - -FlatpakExports * -flatpak_exports_from_context (FlatpakContext *context, - const char *app_id) -{ - g_autoptr(FlatpakExports) exports = exports_new (); - g_autoptr(GFile) app_id_dir = flatpak_get_data_dir (app_id); - - export_paths_export_context (context, exports, app_id_dir, FALSE, NULL, NULL); - return g_steal_pointer (&exports); -} - -/* This resolves the target here rather than the destination, because - it may not resolve in bwrap setup due to absolute relative links - conflicting with /newroot root. */ -static void -add_bind_arg (GPtrArray *argv_array, - const char *type, - const char *src, - const char *dest) -{ - g_autofree char *dest_real = realpath (dest, NULL); - - if (dest_real) - add_args (argv_array, type, src, dest_real, NULL); -} - -gboolean -flatpak_run_add_environment_args (GPtrArray *argv_array, - GArray *fd_array, - char ***envp_p, +flatpak_run_add_environment_args (FlatpakBwrap *bwrap, const char *app_info_path, FlatpakRunFlags flags, const char *app_id, @@ -3026,19 +759,16 @@ flatpak_run_add_environment_args (GPtrArray *argv_array, GCancellable *cancellable, GError **error) { - gboolean home_access = FALSE; - GHashTableIter iter; - gpointer key, value; gboolean unrestricted_session_bus; gboolean unrestricted_system_bus; - g_autoptr(GString) xdg_dirs_conf = g_string_new (""); g_autoptr(GError) my_error = NULL; - g_autoptr(GFile) user_flatpak_dir = NULL; - g_autoptr(FlatpakExports) exports = exports_new (); + g_autoptr(FlatpakExports) exports = NULL; g_autoptr(GPtrArray) session_bus_proxy_argv = NULL; g_autoptr(GPtrArray) system_bus_proxy_argv = NULL; g_autoptr(GPtrArray) a11y_bus_proxy_argv = NULL; int sync_fds[2] = {-1, -1}; + gboolean has_wayland = FALSE; + gboolean allow_x11 = FALSE; if ((flags & FLATPAK_RUN_FLAG_NO_SESSION_BUS_PROXY) == 0) session_bus_proxy_argv = g_ptr_array_new_with_free_func (g_free); @@ -3048,26 +778,26 @@ flatpak_run_add_environment_args (GPtrArray *argv_array, if ((context->shares & FLATPAK_CONTEXT_SHARED_IPC) == 0) { g_debug ("Disallowing ipc access"); - add_args (argv_array, "--unshare-ipc", NULL); + flatpak_bwrap_add_args (bwrap, "--unshare-ipc", NULL); } if ((context->shares & FLATPAK_CONTEXT_SHARED_NETWORK) == 0) { g_debug ("Disallowing network access"); - add_args (argv_array, "--unshare-net", NULL); + flatpak_bwrap_add_args (bwrap, "--unshare-net", NULL); } if (context->devices & FLATPAK_CONTEXT_DEVICE_ALL) { - add_args (argv_array, - "--dev-bind", "/dev", "/dev", - NULL); + flatpak_bwrap_add_args (bwrap, + "--dev-bind", "/dev", "/dev", + NULL); } else { - add_args (argv_array, - "--dev", "/dev", - NULL); + flatpak_bwrap_add_args (bwrap, + "--dev", "/dev", + NULL); if (context->devices & FLATPAK_CONTEXT_DEVICE_DRI) { g_debug ("Allowing dri access"); @@ -3087,7 +817,7 @@ flatpak_run_add_environment_args (GPtrArray *argv_array, for (i = 0; i < G_N_ELEMENTS(dri_devices); i++) { if (g_file_test (dri_devices[i], G_FILE_TEST_EXISTS)) - add_args (argv_array, "--dev-bind", dri_devices[i], dri_devices[i], NULL); + flatpak_bwrap_add_args (bwrap, "--dev-bind", dri_devices[i], dri_devices[i], NULL); } } @@ -3095,143 +825,45 @@ flatpak_run_add_environment_args (GPtrArray *argv_array, { g_debug ("Allowing kvm access"); if (g_file_test ("/dev/kvm", G_FILE_TEST_EXISTS)) - add_args (argv_array, "--dev-bind", "/dev/kvm", "/dev/kvm", NULL); + flatpak_bwrap_add_args (bwrap, "--dev-bind", "/dev/kvm", "/dev/kvm", NULL); } } - export_paths_export_context (context, exports, app_id_dir, TRUE, xdg_dirs_conf, &home_access); - if (app_id_dir != NULL) - *envp_p = flatpak_run_apply_env_appid (*envp_p, app_id_dir); - - if (!home_access) - { - /* Enable persistent mapping only if no access to real home dir */ - - g_hash_table_iter_init (&iter, context->persistent); - while (g_hash_table_iter_next (&iter, &key, NULL)) - { - const char *persist = key; - g_autofree char *src = g_build_filename (g_get_home_dir (), ".var/app", app_id, persist, NULL); - g_autofree char *dest = g_build_filename (g_get_home_dir (), persist, NULL); - - g_mkdir_with_parents (src, 0755); - - /* We stick to add_args instead of add_bind_arg because persisted - * folders don't need to exist outside the chroot. - */ - add_args (argv_array, "--bind", src, dest, NULL); - } - } - - { - g_autofree char *run_user_app_dst = g_strdup_printf ("/run/user/%d/app/%s", getuid (), app_id); - g_autofree char *run_user_app_src = g_build_filename (g_get_user_runtime_dir (), "app", app_id, NULL); - - if (glnx_shutil_mkdir_p_at (AT_FDCWD, - run_user_app_src, - 0700, - NULL, - NULL)) - add_args (argv_array, - "--bind", run_user_app_src, run_user_app_dst, - NULL); - } - - /* Hide the flatpak dir by default (unless explicitly made visible) */ - user_flatpak_dir = flatpak_get_user_base_dir_location (); - exports_path_tmpfs (exports, flatpak_file_get_path_cached (user_flatpak_dir)); - - /* Ensure we always have a homedir */ - exports_path_dir (exports, g_get_home_dir ()); - - /* This actually outputs the args for the hide/expose operations above */ - exports_add_bwrap_args (exports, argv_array); - - /* Special case subdirectories of the cache, config and data xdg - * dirs. If these are accessible explicilty, then we bind-mount - * these in the app-id dir. This allows applications to explicitly - * opt out of keeping some config/cache/data in the app-specific - * directory. - */ - if (app_id_dir) - { - g_hash_table_iter_init (&iter, context->filesystems); - while (g_hash_table_iter_next (&iter, &key, &value)) - { - const char *filesystem = key; - FlatpakFilesystemMode mode = GPOINTER_TO_INT (value); - g_autofree char *xdg_path = NULL; - const char *rest, *where; - - xdg_path = get_xdg_dir_from_string (filesystem, &rest, &where); - - if (xdg_path != NULL && *rest != 0 && - mode >= FLATPAK_FILESYSTEM_MODE_READ_ONLY) - { - g_autoptr(GFile) app_version = g_file_get_child (app_id_dir, where); - g_autoptr(GFile) app_version_subdir = g_file_resolve_relative_path (app_version, rest); - - if (g_file_test (xdg_path, G_FILE_TEST_IS_DIR) || - g_file_test (xdg_path, G_FILE_TEST_IS_REGULAR)) - { - g_autofree char *xdg_path_in_app = g_file_get_path (app_version_subdir); - add_bind_arg (argv_array, - mode == FLATPAK_FILESYSTEM_MODE_READ_ONLY ? "--ro-bind" : "--bind", - xdg_path, xdg_path_in_app); - } - } - } - } - - if (home_access && app_id_dir != NULL) - { - g_autofree char *src_path = g_build_filename (g_get_user_config_dir (), - "user-dirs.dirs", - NULL); - g_autofree char *path = g_build_filename (flatpak_file_get_path_cached (app_id_dir), - "config/user-dirs.dirs", NULL); - if (g_file_test (src_path, G_FILE_TEST_EXISTS)) - add_bind_arg (argv_array, "--ro-bind", src_path, path); - } - else if (xdg_dirs_conf->len > 0 && app_id_dir != NULL) - { - g_autofree char *path = - g_build_filename (flatpak_file_get_path_cached (app_id_dir), - "config/user-dirs.dirs", NULL); - - add_args_data (argv_array, fd_array, "xdg-config-dirs", - xdg_dirs_conf->str, xdg_dirs_conf->len, path, NULL); - } - - flatpak_run_add_x11_args (argv_array, fd_array, envp_p, - (context->sockets & FLATPAK_CONTEXT_SOCKET_X11) != 0); + flatpak_context_append_bwrap_filesystem (context, bwrap, app_id, app_id_dir, &exports); if (context->sockets & FLATPAK_CONTEXT_SOCKET_WAYLAND) { g_debug ("Allowing wayland access"); - flatpak_run_add_wayland_args (argv_array, envp_p); + has_wayland = flatpak_run_add_wayland_args (bwrap); } + if ((context->sockets & FLATPAK_CONTEXT_SOCKET_FALLBACK_X11) != 0) + allow_x11 = !has_wayland; + else + allow_x11 = (context->sockets & FLATPAK_CONTEXT_SOCKET_X11) != 0; + + flatpak_run_add_x11_args (bwrap, allow_x11); + if (context->sockets & FLATPAK_CONTEXT_SOCKET_PULSEAUDIO) { g_debug ("Allowing pulseaudio access"); - flatpak_run_add_pulseaudio_args (argv_array, fd_array, envp_p); + flatpak_run_add_pulseaudio_args (bwrap); } unrestricted_session_bus = (context->sockets & FLATPAK_CONTEXT_SOCKET_SESSION_BUS) != 0; if (unrestricted_session_bus) g_debug ("Allowing session-dbus access"); - if (flatpak_run_add_session_dbus_args (argv_array, envp_p, session_bus_proxy_argv, unrestricted_session_bus) && + if (flatpak_run_add_session_dbus_args (bwrap, session_bus_proxy_argv, unrestricted_session_bus) && !unrestricted_session_bus && session_bus_proxy_argv) - flatpak_add_bus_filters (session_bus_proxy_argv, context->session_bus_policy, app_id, context); + flatpak_context_add_bus_filters (context, app_id, TRUE, session_bus_proxy_argv); unrestricted_system_bus = (context->sockets & FLATPAK_CONTEXT_SOCKET_SYSTEM_BUS) != 0; if (unrestricted_system_bus) g_debug ("Allowing system-dbus access"); - if (flatpak_run_add_system_dbus_args (context, envp_p, argv_array, system_bus_proxy_argv, + if (flatpak_run_add_system_dbus_args (context, bwrap, system_bus_proxy_argv, unrestricted_system_bus) && !unrestricted_system_bus && system_bus_proxy_argv) - flatpak_add_bus_filters (system_bus_proxy_argv, context->system_bus_policy, NULL, context); + flatpak_context_add_bus_filters (context, app_id, FALSE, system_bus_proxy_argv); if ((flags & FLATPAK_RUN_FLAG_NO_A11Y_BUS_PROXY) == 0) { @@ -3300,21 +932,21 @@ flatpak_run_add_environment_args (GPtrArray *argv_array, g_ptr_array_add (a11y_bus_proxy_argv, g_strdup ("--filter=org.a11y.atspi.Registry=org.a11y.atspi.DeviceEventController.NotifyListenersAsync@/org/a11y/atspi/registry/deviceeventcontroller")); - add_args (argv_array, - "--bind", proxy_socket, sandbox_socket_path, - NULL); - *envp_p = g_environ_setenv (*envp_p, "AT_SPI_BUS_ADDRESS", sandbox_dbus_address, TRUE); + flatpak_bwrap_add_args (bwrap, + "--bind", proxy_socket, sandbox_socket_path, + NULL); + flatpak_bwrap_set_env (bwrap, "AT_SPI_BUS_ADDRESS", sandbox_dbus_address, TRUE); } } } - if (g_environ_getenv (*envp_p, "LD_LIBRARY_PATH") != NULL) + if (g_environ_getenv (bwrap->envp, "LD_LIBRARY_PATH") != NULL) { /* LD_LIBRARY_PATH is overridden for setuid helper, so pass it as cmdline arg */ - add_args (argv_array, - "--setenv", "LD_LIBRARY_PATH", g_environ_getenv (*envp_p, "LD_LIBRARY_PATH"), - NULL); - *envp_p = g_environ_unsetenv (*envp_p, "LD_LIBRARY_PATH"); + flatpak_bwrap_add_args (bwrap, + "--setenv", "LD_LIBRARY_PATH", g_environ_getenv (bwrap->envp, "LD_LIBRARY_PATH"), + NULL); + flatpak_bwrap_unset_env (bwrap, "LD_LIBRARY_PATH"); } /* Must run this before spawning the dbus proxy, to ensure it @@ -3327,7 +959,7 @@ flatpak_run_add_environment_args (GPtrArray *argv_array, g_clear_error (&my_error); } - if (!add_dbus_proxy_args (argv_array, + if (!add_dbus_proxy_args (bwrap->argv, session_bus_proxy_argv, (flags & FLATPAK_RUN_FLAG_LOG_SESSION_BUS) != 0, system_bus_proxy_argv, (flags & FLATPAK_RUN_FLAG_LOG_SYSTEM_BUS) != 0, a11y_bus_proxy_argv, (flags & FLATPAK_RUN_FLAG_LOG_A11Y_BUS) != 0, @@ -3483,19 +1115,17 @@ apply_exports (char **envp, return envp; } -char ** -flatpak_run_apply_env_default (char **envp, gboolean use_ld_so_cache) +void +flatpak_run_apply_env_default (FlatpakBwrap *bwrap, gboolean use_ld_so_cache) { - envp = apply_exports (envp, default_exports, G_N_ELEMENTS (default_exports)); + bwrap->envp = apply_exports (bwrap->envp, default_exports, G_N_ELEMENTS (default_exports)); if (!use_ld_so_cache) - envp = apply_exports (envp, no_ld_so_cache_exports, G_N_ELEMENTS (no_ld_so_cache_exports)); - - return envp; + bwrap->envp = apply_exports (bwrap->envp, no_ld_so_cache_exports, G_N_ELEMENTS (no_ld_so_cache_exports)); } -char ** -flatpak_run_apply_env_appid (char **envp, +void +flatpak_run_apply_env_appid (FlatpakBwrap *bwrap, GFile *app_dir) { g_autoptr(GFile) app_dir_data = NULL; @@ -3505,15 +1135,13 @@ flatpak_run_apply_env_appid (char **envp, app_dir_data = g_file_get_child (app_dir, "data"); app_dir_config = g_file_get_child (app_dir, "config"); app_dir_cache = g_file_get_child (app_dir, "cache"); - envp = g_environ_setenv (envp, "XDG_DATA_HOME", flatpak_file_get_path_cached (app_dir_data), TRUE); - envp = g_environ_setenv (envp, "XDG_CONFIG_HOME", flatpak_file_get_path_cached (app_dir_config), TRUE); - envp = g_environ_setenv (envp, "XDG_CACHE_HOME", flatpak_file_get_path_cached (app_dir_cache), TRUE); - - return envp; + flatpak_bwrap_set_env (bwrap, "XDG_DATA_HOME", flatpak_file_get_path_cached (app_dir_data), TRUE); + flatpak_bwrap_set_env (bwrap, "XDG_CONFIG_HOME", flatpak_file_get_path_cached (app_dir_config), TRUE); + flatpak_bwrap_set_env (bwrap, "XDG_CACHE_HOME", flatpak_file_get_path_cached (app_dir_cache), TRUE); } -char ** -flatpak_run_apply_env_vars (char **envp, FlatpakContext *context) +void +flatpak_run_apply_env_vars (FlatpakBwrap *bwrap, FlatpakContext *context) { GHashTableIter iter; gpointer key, value; @@ -3525,12 +1153,10 @@ flatpak_run_apply_env_vars (char **envp, FlatpakContext *context) const char *val = value; if (val && val[0] != 0) - envp = g_environ_setenv (envp, var, val, TRUE); + flatpak_bwrap_set_env (bwrap, var, val, TRUE); else - envp = g_environ_unsetenv (envp, var); + flatpak_bwrap_unset_env (bwrap, var); } - - return envp; } GFile * @@ -3684,7 +1310,7 @@ out: } static void -add_font_path_args (GPtrArray *argv_array) +add_font_path_args (FlatpakBwrap *bwrap) { g_autoptr(GFile) home = NULL; g_autoptr(GFile) user_font1 = NULL; @@ -3696,9 +1322,9 @@ add_font_path_args (GPtrArray *argv_array) if (g_file_test (SYSTEM_FONTS_DIR, G_FILE_TEST_EXISTS)) { - add_args (argv_array, - "--ro-bind", SYSTEM_FONTS_DIR, "/run/host/fonts", - NULL); + flatpak_bwrap_add_args (bwrap, + "--ro-bind", SYSTEM_FONTS_DIR, "/run/host/fonts", + NULL); } system_cache_dirs = g_strsplit (SYSTEM_FONT_CACHE_DIRS, ":", 0); @@ -3706,9 +1332,9 @@ add_font_path_args (GPtrArray *argv_array) { if (g_file_test (system_cache_dirs[i], G_FILE_TEST_EXISTS)) { - add_args (argv_array, - "--ro-bind", system_cache_dirs[i], "/run/host/fonts-cache", - NULL); + flatpak_bwrap_add_args (bwrap, + "--ro-bind", system_cache_dirs[i], "/run/host/fonts-cache", + NULL); found_cache = TRUE; break; } @@ -3718,10 +1344,10 @@ add_font_path_args (GPtrArray *argv_array) { /* We ensure these directories are never writable, or fontconfig will use them to write the default cache */ - add_args (argv_array, - "--tmpfs", "/run/host/fonts-cache", - "--remount-ro", "/run/host/fonts-cache", - NULL); + flatpak_bwrap_add_args (bwrap, + "--tmpfs", "/run/host/fonts-cache", + "--remount-ro", "/run/host/fonts-cache", + NULL); } home = g_file_new_for_path (g_get_home_dir ()); @@ -3730,43 +1356,43 @@ add_font_path_args (GPtrArray *argv_array) if (g_file_query_exists (user_font1, NULL)) { - add_args (argv_array, - "--ro-bind", flatpak_file_get_path_cached (user_font1), "/run/host/user-fonts", - NULL); + flatpak_bwrap_add_args (bwrap, + "--ro-bind", flatpak_file_get_path_cached (user_font1), "/run/host/user-fonts", + NULL); } else if (g_file_query_exists (user_font2, NULL)) { - add_args (argv_array, - "--ro-bind", flatpak_file_get_path_cached (user_font2), "/run/host/user-fonts", - NULL); + flatpak_bwrap_add_args (bwrap, + "--ro-bind", flatpak_file_get_path_cached (user_font2), "/run/host/user-fonts", + NULL); } user_font_cache = g_file_resolve_relative_path (home, ".cache/fontconfig"); if (g_file_query_exists (user_font_cache, NULL)) { - add_args (argv_array, - "--ro-bind", flatpak_file_get_path_cached (user_font_cache), "/run/host/user-fonts-cache", - NULL); + flatpak_bwrap_add_args (bwrap, + "--ro-bind", flatpak_file_get_path_cached (user_font_cache), "/run/host/user-fonts-cache", + NULL); } else { /* We ensure these directories are never writable, or fontconfig will use them to write the default cache */ - add_args (argv_array, - "--tmpfs", "/run/host/user-fonts-cache", - "--remount-ro", "/run/host/user-fonts-cache", - NULL); + flatpak_bwrap_add_args (bwrap, + "--tmpfs", "/run/host/user-fonts-cache", + "--remount-ro", "/run/host/user-fonts-cache", + NULL); } } static void -add_icon_path_args (GPtrArray *argv_array) +add_icon_path_args (FlatpakBwrap *bwrap) { if (g_file_test ("/usr/share/icons", G_FILE_TEST_IS_DIR)) { - add_args (argv_array, - "--ro-bind", "/usr/share/icons", "/run/host/share/icons", - NULL); + flatpak_bwrap_add_args (bwrap, + "--ro-bind", "/usr/share/icons", "/run/host/share/icons", + NULL); } } @@ -3801,8 +1427,7 @@ flatpak_app_compute_permissions (GKeyFile *app_metadata, } gboolean -flatpak_run_add_app_info_args (GPtrArray *argv_array, - GArray *fd_array, +flatpak_run_add_app_info_args (FlatpakBwrap *bwrap, GFile *app_files, GVariant *app_deploy_data, const char *app_extensions, @@ -3918,13 +1543,13 @@ flatpak_run_add_app_info_args (GPtrArray *argv_array, unlink (tmp_path); - add_args_data_fd (argv_array, fd_array, - "--file", fd, "/.flatpak-info"); - add_args_data_fd (argv_array, fd_array, - "--ro-bind-data", fd2, "/.flatpak-info"); - add_args (argv_array, - "--symlink", "../../../.flatpak-info", old_dest, - NULL); + flatpak_bwrap_add_args_data_fd (bwrap, + "--file", fd, "/.flatpak-info"); + flatpak_bwrap_add_args_data_fd (bwrap, + "--ro-bind-data", fd2, "/.flatpak-info"); + flatpak_bwrap_add_args (bwrap, + "--symlink", "../../../.flatpak-info", old_dest, + NULL); if (app_info_path_out != NULL) *app_info_path_out = g_strdup_printf ("/proc/self/fd/%d", fd); @@ -3934,7 +1559,7 @@ flatpak_run_add_app_info_args (GPtrArray *argv_array, static void add_monitor_path_args (gboolean use_session_helper, - GPtrArray *argv_array) + FlatpakBwrap *bwrap) { g_autoptr(AutoFlatpakSessionHelper) session_helper = NULL; g_autofree char *monitor_path = NULL; @@ -3954,13 +1579,13 @@ add_monitor_path_args (gboolean use_session_helper, &monitor_path, NULL, NULL)) { - add_args (argv_array, - "--ro-bind", monitor_path, "/run/host/monitor", - "--symlink", "/run/host/monitor/localtime", "/etc/localtime", - "--symlink", "/run/host/monitor/resolv.conf", "/etc/resolv.conf", - "--symlink", "/run/host/monitor/host.conf", "/etc/host.conf", - "--symlink", "/run/host/monitor/hosts", "/etc/hosts", - NULL); + flatpak_bwrap_add_args (bwrap, + "--ro-bind", monitor_path, "/run/host/monitor", + "--symlink", "/run/host/monitor/localtime", "/etc/localtime", + "--symlink", "/run/host/monitor/resolv.conf", "/etc/resolv.conf", + "--symlink", "/run/host/monitor/host.conf", "/etc/host.conf", + "--symlink", "/run/host/monitor/hosts", "/etc/hosts", + NULL); } else { @@ -3993,35 +1618,35 @@ add_monitor_path_args (gboolean use_session_helper, if (is_reachable) { - add_args (argv_array, - "--symlink", localtime, "/etc/localtime", - NULL); + flatpak_bwrap_add_args (bwrap, + "--symlink", localtime, "/etc/localtime", + NULL); } else { - add_args (argv_array, - "--ro-bind", "/etc/localtime", "/etc/localtime", - NULL); + flatpak_bwrap_add_args (bwrap, + "--ro-bind", "/etc/localtime", "/etc/localtime", + NULL); } } if (g_file_test ("/etc/resolv.conf", G_FILE_TEST_EXISTS)) - add_args (argv_array, - "--ro-bind", "/etc/resolv.conf", "/etc/resolv.conf", - NULL); + flatpak_bwrap_add_args (bwrap, + "--ro-bind", "/etc/resolv.conf", "/etc/resolv.conf", + NULL); if (g_file_test ("/etc/host.conf", G_FILE_TEST_EXISTS)) - add_args (argv_array, - "--ro-bind", "/etc/host.conf", "/etc/host.conf", - NULL); + flatpak_bwrap_add_args (bwrap, + "--ro-bind", "/etc/host.conf", "/etc/host.conf", + NULL); if (g_file_test ("/etc/hosts", G_FILE_TEST_EXISTS)) - add_args (argv_array, - "--ro-bind", "/etc/hosts", "/etc/hosts", - NULL); + flatpak_bwrap_add_args (bwrap, + "--ro-bind", "/etc/hosts", "/etc/hosts", + NULL); } } static void -add_document_portal_args (GPtrArray *argv_array, +add_document_portal_args (FlatpakBwrap *bwrap, const char *app_id, char **out_mount_path) { @@ -4050,7 +1675,10 @@ add_document_portal_args (GPtrArray *argv_array, { if (g_dbus_message_to_gerror (reply, &local_error)) { - g_message ("Can't get document portal: %s", local_error->message); + if (g_error_matches (local_error, G_DBUS_ERROR, G_DBUS_ERROR_SERVICE_UNKNOWN)) + g_debug ("Document portal not available, not mounting /run/user/%d/doc", getuid ()); + else + g_message ("Can't get document portal: %s", local_error->message); } else { @@ -4062,7 +1690,7 @@ add_document_portal_args (GPtrArray *argv_array, src_path = g_strdup_printf ("%s/by-app/%s", doc_mount_path, app_id); dst_path = g_strdup_printf ("/run/user/%d/doc", getuid ()); - add_args (argv_array, "--bind", src_path, dst_path, NULL); + flatpak_bwrap_add_args (bwrap, "--bind", src_path, dst_path, NULL); } } } @@ -4187,7 +1815,7 @@ prepend_bwrap_argv_wrapper (GPtrArray *argv, } bwrap_args_data = join_args (bwrap_args, &bwrap_args_len); - if (!buffer_to_sealed_memfd_or_tmpfile (&args_tmpf, "bwrap-args", bwrap_args_data, bwrap_args_len, error)) + if (!flatpak_buffer_to_sealed_memfd_or_tmpfile (&args_tmpf, "bwrap-args", bwrap_args_data, bwrap_args_len, error)) return FALSE; g_ptr_array_insert (argv, i++, g_strdup (flatpak_get_bwrap ())); @@ -4336,8 +1964,7 @@ cleanup_seccomp (void *p) } static gboolean -setup_seccomp (GPtrArray *argv_array, - GArray *fd_array, +setup_seccomp (FlatpakBwrap *bwrap, const char *arch, gulong allowed_personality, gboolean multiarch, @@ -4384,8 +2011,6 @@ setup_seccomp (GPtrArray *argv_array, {SCMP_SYS (syslog)}, /* Useless old syscall */ {SCMP_SYS (uselib)}, - /* Don't allow you to switch to bsd emulation or whatnot */ - {SCMP_SYS (personality), &SCMP_A0(SCMP_CMP_NE, allowed_personality)}, /* Don't allow disabling accounting */ {SCMP_SYS (acct)}, /* 16-bit code is unnecessary in the sandbox, and modify_ldt is a @@ -4425,6 +2050,8 @@ setup_seccomp (GPtrArray *argv_array, * the sandbox. In particular perf has been the source of many CVEs. */ {SCMP_SYS (perf_event_open)}, + /* Don't allow you to switch to bsd emulation or whatnot */ + {SCMP_SYS (personality), &SCMP_A0(SCMP_CMP_NE, allowed_personality)}, {SCMP_SYS (ptrace)} }; /* Blacklist all but unix, inet, inet6 and netlink */ @@ -4553,15 +2180,15 @@ setup_seccomp (GPtrArray *argv_array, lseek (seccomp_tmpf.fd, 0, SEEK_SET); - add_args_data_fd (argv_array, fd_array, - "--seccomp", glnx_steal_fd (&seccomp_tmpf.fd), NULL); + flatpak_bwrap_add_args_data_fd (bwrap, + "--seccomp", glnx_steal_fd (&seccomp_tmpf.fd), NULL); return TRUE; } #endif static void -flatpak_run_setup_usr_links (GPtrArray *argv_array, +flatpak_run_setup_usr_links (FlatpakBwrap *bwrap, GFile *runtime_files) { const char *usr_links[] = {"lib", "lib32", "lib64", "bin", "sbin"}; @@ -4578,16 +2205,15 @@ flatpak_run_setup_usr_links (GPtrArray *argv_array, { g_autofree char *link = g_strconcat ("usr/", subdir, NULL); g_autofree char *dest = g_strconcat ("/", subdir, NULL); - add_args (argv_array, - "--symlink", link, dest, - NULL); + flatpak_bwrap_add_args (bwrap, + "--symlink", link, dest, + NULL); } } } gboolean -flatpak_run_setup_base_argv (GPtrArray *argv_array, - GArray *fd_array, +flatpak_run_setup_base_argv (FlatpakBwrap *bwrap, GFile *runtime_files, GFile *app_id_dir, const char *arch, @@ -4615,43 +2241,43 @@ flatpak_run_setup_base_argv (GPtrArray *argv_array, g->gr_name, getgid (), g_get_user_name ()); - add_args (argv_array, - "--unshare-pid", - "--proc", "/proc", - "--dir", "/tmp", - "--dir", "/var/tmp", - "--dir", "/run/host", - "--dir", run_dir, - "--setenv", "XDG_RUNTIME_DIR", run_dir, - "--symlink", "../run", "/var/run", - "--ro-bind", "/sys/block", "/sys/block", - "--ro-bind", "/sys/bus", "/sys/bus", - "--ro-bind", "/sys/class", "/sys/class", - "--ro-bind", "/sys/dev", "/sys/dev", - "--ro-bind", "/sys/devices", "/sys/devices", - NULL); + flatpak_bwrap_add_args (bwrap, + "--unshare-pid", + "--proc", "/proc", + "--dir", "/tmp", + "--dir", "/var/tmp", + "--dir", "/run/host", + "--dir", run_dir, + "--setenv", "XDG_RUNTIME_DIR", run_dir, + "--symlink", "../run", "/var/run", + "--ro-bind", "/sys/block", "/sys/block", + "--ro-bind", "/sys/bus", "/sys/bus", + "--ro-bind", "/sys/class", "/sys/class", + "--ro-bind", "/sys/dev", "/sys/dev", + "--ro-bind", "/sys/devices", "/sys/devices", + NULL); if (flags & FLATPAK_RUN_FLAG_DIE_WITH_PARENT) - add_args (argv_array, - "--die-with-parent", - NULL); + flatpak_bwrap_add_args (bwrap, + "--die-with-parent", + NULL); if (flags & FLATPAK_RUN_FLAG_WRITABLE_ETC) - add_args (argv_array, - "--dir", "/usr/etc", - "--symlink", "usr/etc", "/etc", - NULL); + flatpak_bwrap_add_args (bwrap, + "--dir", "/usr/etc", + "--symlink", "usr/etc", "/etc", + NULL); - if (!add_args_data (argv_array, fd_array, "passwd", passwd_contents, -1, "/etc/passwd", error)) + if (!flatpak_bwrap_add_args_data (bwrap, "passwd", passwd_contents, -1, "/etc/passwd", error)) return FALSE; - if (!add_args_data (argv_array, fd_array, "group", group_contents, -1, "/etc/group", error)) + if (!flatpak_bwrap_add_args_data (bwrap, "group", group_contents, -1, "/etc/group", error)) return FALSE; if (g_file_test ("/etc/machine-id", G_FILE_TEST_EXISTS)) - add_args (argv_array, "--ro-bind", "/etc/machine-id", "/etc/machine-id", NULL); + flatpak_bwrap_add_args (bwrap, "--ro-bind", "/etc/machine-id", "/etc/machine-id", NULL); else if (g_file_test ("/var/lib/dbus/machine-id", G_FILE_TEST_EXISTS)) - add_args (argv_array, "--ro-bind", "/var/lib/dbus/machine-id", "/etc/machine-id", NULL); + flatpak_bwrap_add_args (bwrap, "--ro-bind", "/var/lib/dbus/machine-id", "/etc/machine-id", NULL); if (runtime_files) etc = g_file_get_child (runtime_files, "etc"); @@ -4695,11 +2321,11 @@ flatpak_run_setup_base_argv (GPtrArray *argv_array, return FALSE; } path_buffer[symlink_size] = 0; - add_args (argv_array, "--symlink", path_buffer, dest, NULL); + flatpak_bwrap_add_args (bwrap, "--symlink", path_buffer, dest, NULL); } else { - add_args (argv_array, "--bind", src, dest, NULL); + flatpak_bwrap_add_args (bwrap, "--bind", src, dest, NULL); } } } @@ -4711,16 +2337,16 @@ flatpak_run_setup_base_argv (GPtrArray *argv_array, g_autoptr(GFile) app_data_dir = g_file_get_child (app_id_dir, "data"); g_autoptr(GFile) app_config_dir = g_file_get_child (app_id_dir, "config"); - add_args (argv_array, - /* These are nice to have as a fixed path */ - "--bind", flatpak_file_get_path_cached (app_cache_dir), "/var/cache", - "--bind", flatpak_file_get_path_cached (app_data_dir), "/var/data", - "--bind", flatpak_file_get_path_cached (app_config_dir), "/var/config", - "--bind", flatpak_file_get_path_cached (app_tmp_dir), "/var/tmp", - NULL); + flatpak_bwrap_add_args (bwrap, + /* These are nice to have as a fixed path */ + "--bind", flatpak_file_get_path_cached (app_cache_dir), "/var/cache", + "--bind", flatpak_file_get_path_cached (app_data_dir), "/var/data", + "--bind", flatpak_file_get_path_cached (app_config_dir), "/var/config", + "--bind", flatpak_file_get_path_cached (app_tmp_dir), "/var/tmp", + NULL); } - flatpak_run_setup_usr_links (argv_array, runtime_files); + flatpak_run_setup_usr_links (bwrap, runtime_files); pers = PER_LINUX; @@ -4735,8 +2361,7 @@ flatpak_run_setup_base_argv (GPtrArray *argv_array, personality (pers); #ifdef ENABLE_SECCOMP - if (!setup_seccomp (argv_array, - fd_array, + if (!setup_seccomp (bwrap, arch, pers, (flags & FLATPAK_RUN_FLAG_MULTIARCH) != 0, @@ -4746,19 +2371,11 @@ flatpak_run_setup_base_argv (GPtrArray *argv_array, #endif if ((flags & FLATPAK_RUN_FLAG_WRITABLE_ETC) == 0) - add_monitor_path_args ((flags & FLATPAK_RUN_FLAG_NO_SESSION_HELPER) == 0, argv_array); + add_monitor_path_args ((flags & FLATPAK_RUN_FLAG_NO_SESSION_HELPER) == 0, bwrap); return TRUE; } -static void -clear_fd (gpointer data) -{ - int *fd_p = data; - if (fd_p != NULL && *fd_p != -1) - close (*fd_p); -} - /* Unset FD_CLOEXEC on the array of fds passed in @user_data */ static void child_setup (gpointer user_data) @@ -4922,15 +2539,31 @@ add_rest_args (const char *app_id, return TRUE; } +FlatpakContext * +flatpak_context_load_for_deploy (FlatpakDeploy *deploy, + GError **error) +{ + g_autoptr(FlatpakContext) context = NULL; + g_autoptr(FlatpakContext) overrides = NULL; + g_autoptr(GKeyFile) metakey = NULL; + + metakey = flatpak_deploy_get_metadata (deploy); + context = flatpak_app_compute_permissions (metakey, NULL, error); + if (context == NULL) + return NULL; + + overrides = flatpak_deploy_get_overrides (deploy); + flatpak_context_merge (context, overrides); + + return g_steal_pointer (&context); +} + FlatpakContext * flatpak_context_load_for_app (const char *app_id, GError **error) { g_autofree char *app_ref = NULL; - g_autoptr(FlatpakContext) app_context = NULL; g_autoptr(FlatpakDeploy) app_deploy = NULL; - g_autoptr(FlatpakContext) overrides = NULL; - g_autoptr(GKeyFile) metakey = NULL; app_ref = flatpak_find_current_ref (app_id, NULL, error); if (app_ref == NULL) @@ -4940,15 +2573,7 @@ flatpak_context_load_for_app (const char *app_id, if (app_deploy == NULL) return NULL; - metakey = flatpak_deploy_get_metadata (app_deploy); - app_context = flatpak_app_compute_permissions (metakey, NULL, error); - if (app_context == NULL) - return NULL; - - overrides = flatpak_deploy_get_overrides (app_deploy); - flatpak_context_merge (app_context, overrides); - - return g_steal_pointer (&app_context); + return flatpak_context_load_for_deploy (app_deploy, error); } static char * @@ -4970,8 +2595,7 @@ calculate_ld_cache_checksum (GVariant *app_deploy_data, } static gboolean -add_ld_so_conf (GPtrArray *argv_array, - GArray *fd_array, +add_ld_so_conf (FlatpakBwrap *bwrap, GError **error) { const char *contents = @@ -4980,8 +2604,8 @@ add_ld_so_conf (GPtrArray *argv_array, "/app/lib\n" "include /run/flatpak/ld.so.conf.d/runtime-*.conf\n"; - return add_args_data (argv_array, fd_array, "ld-so-conf", - contents, -1, "/etc/ld.so.conf", error); + return flatpak_bwrap_add_args_data (bwrap, "ld-so-conf", + contents, -1, "/etc/ld.so.conf", error); } static int @@ -4994,12 +2618,11 @@ regenerate_ld_cache (GPtrArray *base_argv_array, GCancellable *cancellable, GError **error) { - g_autoptr(GPtrArray) argv_array = NULL; - g_autoptr(GArray) fd_array = NULL; + g_autoptr(FlatpakBwrap) bwrap = NULL; g_autoptr(GArray) combined_fd_array = NULL; g_autoptr(GFile) ld_so_cache = NULL; g_autofree char *sandbox_cache_path = NULL; - g_auto(GStrv) envp = NULL; + g_auto(GStrv) minimal_envp = NULL; g_autofree char *commandline = NULL; int exit_status; glnx_autofd int ld_so_fd = -1; @@ -5023,50 +2646,47 @@ regenerate_ld_cache (GPtrArray *base_argv_array, if (!flatpak_mkdir_p (ld_so_dir, cancellable, error)) return FALSE; - argv_array = g_ptr_array_new_with_free_func (g_free); - g_ptr_array_add (argv_array, g_strdup (flatpak_get_bwrap ())); - append_args (argv_array, base_argv_array); + minimal_envp = flatpak_run_get_minimal_env (FALSE, FALSE); + bwrap = flatpak_bwrap_new (minimal_envp); + flatpak_bwrap_add_args (bwrap, flatpak_get_bwrap (), NULL); - fd_array = g_array_new (FALSE, TRUE, sizeof (int)); - g_array_set_clear_func (fd_array, clear_fd); + flatpak_bwrap_append_args (bwrap, base_argv_array); - envp = flatpak_run_get_minimal_env (FALSE, FALSE); - - flatpak_run_setup_usr_links (argv_array, runtime_files); + flatpak_run_setup_usr_links (bwrap, runtime_files); if (generate_ld_so_conf) { - if (!add_ld_so_conf(argv_array, fd_array, error)) + if (!add_ld_so_conf (bwrap, error)) return -1; } else - add_args (argv_array, - "--symlink", "../usr/etc/ld.so.conf", "/etc/ld.so.conf", - NULL); + flatpak_bwrap_add_args (bwrap, + "--symlink", "../usr/etc/ld.so.conf", "/etc/ld.so.conf", + NULL); sandbox_cache_path = g_build_filename ("/run/ld-so-cache-dir", checksum, NULL); - add_args (argv_array, - "--unshare-pid", - "--unshare-ipc", - "--unshare-net", - "--proc", "/proc", - "--dev", "/dev", - "--bind", flatpak_file_get_path_cached (ld_so_dir), "/run/ld-so-cache-dir", - "ldconfig", "-X", "-C", sandbox_cache_path, NULL); + flatpak_bwrap_add_args (bwrap, + "--unshare-pid", + "--unshare-ipc", + "--unshare-net", + "--proc", "/proc", + "--dev", "/dev", + "--bind", flatpak_file_get_path_cached (ld_so_dir), "/run/ld-so-cache-dir", + "ldconfig", "-X", "-C", sandbox_cache_path, NULL); - g_ptr_array_add (argv_array, NULL); + g_ptr_array_add (bwrap->argv, NULL); - commandline = flatpak_quote_argv ((const char **) argv_array->pdata); + commandline = flatpak_quote_argv ((const char **) bwrap->argv->pdata); flatpak_debug2 ("Running: '%s'", commandline); combined_fd_array = g_array_new (FALSE, TRUE, sizeof (int)); g_array_append_vals (combined_fd_array, base_fd_array->data, base_fd_array->len); - g_array_append_vals (combined_fd_array, fd_array->data, fd_array->len); + g_array_append_vals (combined_fd_array, bwrap->fds->data, bwrap->fds->len); if (!g_spawn_sync (NULL, - (char **) argv_array->pdata, - envp, + (char **) bwrap->argv->pdata, + bwrap->envp, G_SPAWN_SEARCH_PATH, child_setup, combined_fd_array, NULL, NULL, @@ -5125,17 +2745,16 @@ flatpak_run_app (const char *app_ref, g_autoptr(GVariant) app_deploy_data = NULL; g_autoptr(GFile) app_files = NULL; g_autoptr(GFile) runtime_files = NULL; + g_autoptr(GFile) bin_ldconfig = NULL; g_autoptr(GFile) app_id_dir = NULL; g_autofree char *default_runtime = NULL; g_autofree char *default_command = NULL; g_autofree char *runtime_ref = NULL; g_autoptr(GKeyFile) metakey = NULL; g_autoptr(GKeyFile) runtime_metakey = NULL; - g_autoptr(GPtrArray) argv_array = NULL; + g_autoptr(FlatpakBwrap) bwrap = NULL; g_auto(GLnxTmpfile) arg_tmpf = { 0, }; - g_autoptr(GArray) fd_array = NULL; g_autoptr(GPtrArray) real_argv_array = NULL; - g_auto(GStrv) envp = NULL; const char *command = "/bin/sh"; g_autoptr(GError) my_error = NULL; g_auto(GStrv) runtime_parts = NULL; @@ -5162,9 +2781,7 @@ flatpak_run_app (const char *app_ref, if (app_ref_parts == NULL) return FALSE; - argv_array = g_ptr_array_new_with_free_func (g_free); - fd_array = g_array_new (FALSE, TRUE, sizeof (int)); - g_array_set_clear_func (fd_array, clear_fd); + bwrap = flatpak_bwrap_new (NULL); if (app_deploy == NULL) { @@ -5251,6 +2868,10 @@ flatpak_run_app (const char *app_ref, flatpak_context_merge (app_context, extra_context); runtime_files = flatpak_deploy_get_files (runtime_deploy); + bin_ldconfig = g_file_resolve_relative_path (runtime_files, "bin/ldconfig"); + if (!g_file_query_exists (bin_ldconfig, NULL)) + use_ld_so_cache = FALSE; + if (app_deploy != NULL) { app_files = flatpak_deploy_get_files (app_deploy); @@ -5258,30 +2879,29 @@ flatpak_run_app (const char *app_ref, return FALSE; } - envp = g_get_environ (); - envp = flatpak_run_apply_env_default (envp, use_ld_so_cache); - envp = flatpak_run_apply_env_vars (envp, app_context); + flatpak_run_apply_env_default (bwrap, use_ld_so_cache); + flatpak_run_apply_env_vars (bwrap, app_context); - add_args (argv_array, - "--ro-bind", flatpak_file_get_path_cached (runtime_files), "/usr", - "--lock-file", "/usr/.ref", - NULL); + flatpak_bwrap_add_args (bwrap, + "--ro-bind", flatpak_file_get_path_cached (runtime_files), "/usr", + "--lock-file", "/usr/.ref", + NULL); if (app_files != NULL) - add_args (argv_array, - "--ro-bind", flatpak_file_get_path_cached (app_files), "/app", - "--lock-file", "/app/.ref", - NULL); + flatpak_bwrap_add_args (bwrap, + "--ro-bind", flatpak_file_get_path_cached (app_files), "/app", + "--lock-file", "/app/.ref", + NULL); else - add_args (argv_array, - "--dir", "/app", - NULL); + flatpak_bwrap_add_args (bwrap, + "--dir", "/app", + NULL); if (metakey != NULL && - !flatpak_run_add_extension_args (argv_array, fd_array, &envp, metakey, app_ref, use_ld_so_cache, &app_extensions, cancellable, error)) + !flatpak_run_add_extension_args (bwrap, metakey, app_ref, use_ld_so_cache, &app_extensions, cancellable, error)) return FALSE; - if (!flatpak_run_add_extension_args (argv_array, fd_array, &envp, runtime_metakey, runtime_ref, use_ld_so_cache, &runtime_extensions, cancellable, error)) + if (!flatpak_run_add_extension_args (bwrap, runtime_metakey, runtime_ref, use_ld_so_cache, &runtime_extensions, cancellable, error)) return FALSE; runtime_ld_so_conf = g_file_resolve_relative_path (runtime_files, "etc/ld.so.conf"); @@ -5290,63 +2910,65 @@ flatpak_run_app (const char *app_ref, /* At this point we have the minimal argv set up, with just the app, runtime and extensions. We can reuse this to generate the ld.so.cache (if needed) */ - checksum = calculate_ld_cache_checksum (app_deploy_data, runtime_deploy_data, - app_extensions, runtime_extensions); - ld_so_fd = regenerate_ld_cache (argv_array, - fd_array, - app_id_dir, - checksum, - runtime_files, - generate_ld_so_conf, - cancellable, error); - if (ld_so_fd == -1) - return FALSE; - g_array_append_val (fd_array, ld_so_fd); + if (use_ld_so_cache) + { + checksum = calculate_ld_cache_checksum (app_deploy_data, runtime_deploy_data, + app_extensions, runtime_extensions); + ld_so_fd = regenerate_ld_cache (bwrap->argv, + bwrap->fds, + app_id_dir, + checksum, + runtime_files, + generate_ld_so_conf, + cancellable, error); + if (ld_so_fd == -1) + return FALSE; + g_array_append_val (bwrap->fds, ld_so_fd); + } - if (app_context->features & FLATPAK_CONTEXT_FEATURE_DEVEL) + if (flatpak_context_allows_features (app_context, FLATPAK_CONTEXT_FEATURE_DEVEL)) flags |= FLATPAK_RUN_FLAG_DEVEL; - if (app_context->features & FLATPAK_CONTEXT_FEATURE_MULTIARCH) + if (flatpak_context_allows_features (app_context, FLATPAK_CONTEXT_FEATURE_MULTIARCH)) flags |= FLATPAK_RUN_FLAG_MULTIARCH; - if (!flatpak_run_setup_base_argv (argv_array, fd_array, runtime_files, app_id_dir, app_ref_parts[2], flags, error)) + if (!flatpak_run_setup_base_argv (bwrap, runtime_files, app_id_dir, app_ref_parts[2], flags, error)) return FALSE; if (generate_ld_so_conf) { - if (!add_ld_so_conf (argv_array, fd_array, error)) + if (!add_ld_so_conf (bwrap, error)) return FALSE; } if (ld_so_fd != -1) { /* Don't add to fd_array, its already there */ - add_args_data_fd (argv_array, NULL, "--ro-bind-data", ld_so_fd, "/etc/ld.so.cache"); + add_args_data_fd (bwrap->argv, NULL, "--ro-bind-data", ld_so_fd, "/etc/ld.so.cache"); } - if (!flatpak_run_add_app_info_args (argv_array, fd_array, + if (!flatpak_run_add_app_info_args (bwrap, app_files, app_deploy_data, app_extensions, runtime_files, runtime_deploy_data, runtime_extensions, app_ref_parts[1], app_ref_parts[3], runtime_ref, app_context, &app_info_path, error)) return FALSE; - add_document_portal_args (argv_array, app_ref_parts[1], &doc_mount_path); + add_document_portal_args (bwrap, app_ref_parts[1], &doc_mount_path); - if (!flatpak_run_add_environment_args (argv_array, fd_array, &envp, - app_info_path, flags, + if (!flatpak_run_add_environment_args (bwrap, app_info_path, flags, app_ref_parts[1], app_context, app_id_dir, &exports, cancellable, error)) return FALSE; - flatpak_run_add_journal_args (argv_array); - add_font_path_args (argv_array); - add_icon_path_args (argv_array); + flatpak_run_add_journal_args (bwrap); + add_font_path_args (bwrap); + add_icon_path_args (bwrap); - add_args (argv_array, - /* Not in base, because we don't want this for flatpak build */ - "--symlink", "/app/lib/debug/source", "/run/build", - "--symlink", "/usr/lib/debug/source", "/run/build-runtime", - NULL); + flatpak_bwrap_add_args (bwrap, + /* Not in base, because we don't want this for flatpak build */ + "--symlink", "/app/lib/debug/source", "/run/build", + "--symlink", "/usr/lib/debug/source", "/run/build-runtime", + NULL); if (custom_command) { @@ -5371,12 +2993,12 @@ flatpak_run_app (const char *app_ref, { gsize len; - g_autofree char *args = join_args (argv_array, &len); + g_autofree char *args = join_args (bwrap->argv, &len); - if (!buffer_to_sealed_memfd_or_tmpfile (&arg_tmpf, "bwrap-args", args, len, error)) + if (!flatpak_buffer_to_sealed_memfd_or_tmpfile (&arg_tmpf, "bwrap-args", args, len, error)) return FALSE; - add_args_data_fd (real_argv_array, fd_array, + add_args_data_fd (real_argv_array, bwrap->fds, "--args", glnx_steal_fd (&arg_tmpf.fd), NULL); } @@ -5389,9 +3011,9 @@ flatpak_run_app (const char *app_ref, return FALSE; g_ptr_array_add (real_argv_array, NULL); - g_ptr_array_add (argv_array, NULL); + g_ptr_array_add (bwrap->argv, NULL); - commandline = flatpak_quote_argv ((const char **) argv_array->pdata); + commandline = flatpak_quote_argv ((const char **) bwrap->argv->pdata); commandline2 = flatpak_quote_argv (((const char **) real_argv_array->pdata) + commandline_2_start); flatpak_debug2 ("Running '%s %s'", commandline, commandline2); @@ -5399,9 +3021,9 @@ flatpak_run_app (const char *app_ref, { if (!g_spawn_async (NULL, (char **) real_argv_array->pdata, - envp, + bwrap->envp, G_SPAWN_SEARCH_PATH, - child_setup, fd_array, + child_setup, bwrap->fds, NULL, error)) return FALSE; @@ -5409,8 +3031,8 @@ flatpak_run_app (const char *app_ref, else { /* Ensure we unset O_CLOEXEC */ - child_setup (fd_array); - if (execvpe (flatpak_get_bwrap (), (char **) real_argv_array->pdata, envp) == -1) + child_setup (bwrap->fds); + if (execvpe (flatpak_get_bwrap (), (char **) real_argv_array->pdata, bwrap->envp) == -1) { g_set_error_literal (error, G_IO_ERROR, g_io_error_from_errno (errno), _("Unable to start app")); diff --git a/common/flatpak-run.h b/common/flatpak-run.h index d2f1189e..77f077c4 100644 --- a/common/flatpak-run.h +++ b/common/flatpak-run.h @@ -22,9 +22,11 @@ #define __FLATPAK_RUN_H__ #include "libglnx/libglnx.h" -#include "dbus-proxy/flatpak-proxy.h" #include "flatpak-common-types.h" +#include "flatpak-context.h" +#include "flatpak-bwrap.h" #include "flatpak-utils.h" +#include "flatpak-exports.h" gboolean flatpak_run_in_transient_unit (const char *app_id, GError **error); @@ -95,40 +97,6 @@ gboolean flatpak_run_in_transient_unit (const char *app_id, #define FLATPAK_METADATA_KEY_PRIORITY "priority" #define FLATPAK_METADATA_KEY_REF "ref" -extern const char *flatpak_context_sockets[]; -extern const char *flatpak_context_devices[]; -extern const char *flatpak_context_features[]; -extern const char *flatpak_context_shares[]; - -FlatpakContext *flatpak_context_new (void); -void flatpak_context_free (FlatpakContext *context); -void flatpak_context_merge (FlatpakContext *context, - FlatpakContext *other); -GOptionGroup *flatpak_context_get_options (FlatpakContext *context); -void flatpak_context_complete (FlatpakContext *context, - FlatpakCompletion *completion); -gboolean flatpak_context_load_metadata (FlatpakContext *context, - GKeyFile *metakey, - GError **error); -void flatpak_context_save_metadata (FlatpakContext *context, - gboolean flatten, - GKeyFile *metakey); -void flatpak_context_allow_host_fs (FlatpakContext *context); -void flatpak_context_set_session_bus_policy (FlatpakContext *context, - const char *name, - FlatpakPolicy policy); -void flatpak_context_set_system_bus_policy (FlatpakContext *context, - const char *name, - FlatpakPolicy policy); -void flatpak_context_to_args (FlatpakContext *context, - GPtrArray *args); -gboolean flatpak_context_get_needs_session_bus_proxy (FlatpakContext *context); -gboolean flatpak_context_get_needs_system_bus_proxy (FlatpakContext *context); - -FlatpakContext *flatpak_context_load_for_app (const char *app_id, - GError **error); - -G_DEFINE_AUTOPTR_CLEANUP_FUNC (FlatpakContext, flatpak_context_free) typedef enum { FLATPAK_RUN_FLAG_DEVEL = (1 << 0), @@ -147,29 +115,14 @@ typedef enum { FLATPAK_RUN_FLAG_NO_A11Y_BUS_PROXY = (1 << 13), } FlatpakRunFlags; -typedef struct _FlatpakExports FlatpakExports; - -void flatpak_exports_free (FlatpakExports *exports); - -gboolean flatpak_exports_path_is_visible (FlatpakExports *exports, - const char *path); -FlatpakExports *flatpak_exports_from_context (FlatpakContext *context, - const char *app_id); - -G_DEFINE_AUTOPTR_CLEANUP_FUNC (FlatpakExports, flatpak_exports_free); - -gboolean flatpak_run_add_extension_args (GPtrArray *argv_array, - GArray *fd_array, - char ***envp_p, +gboolean flatpak_run_add_extension_args (FlatpakBwrap *bwrap, GKeyFile *metakey, const char *full_ref, gboolean use_ld_so_cache, char **extensions_out, GCancellable *cancellable, GError **error); -gboolean flatpak_run_add_environment_args (GPtrArray *argv_array, - GArray *fd_array, - char ***envp_p, +gboolean flatpak_run_add_environment_args (FlatpakBwrap *bwrap, const char *app_info_path, FlatpakRunFlags flags, const char *app_id, @@ -179,29 +132,26 @@ gboolean flatpak_run_add_environment_args (GPtrArray *argv_array, GCancellable *cancellable, GError **error); char ** flatpak_run_get_minimal_env (gboolean devel, gboolean use_ld_so_cache); -char ** flatpak_run_apply_env_default (char **envp, gboolean use_ld_so_cache); -char ** flatpak_run_apply_env_appid (char **envp, +void flatpak_run_apply_env_default (FlatpakBwrap *bwrap, gboolean use_ld_so_cache); +void flatpak_run_apply_env_appid (FlatpakBwrap *bwrap, GFile *app_dir); -char ** flatpak_run_apply_env_vars (char **envp, - FlatpakContext *context); +void flatpak_run_apply_env_vars (FlatpakBwrap *bwrap, + FlatpakContext *context); FlatpakContext *flatpak_app_compute_permissions (GKeyFile *app_metadata, GKeyFile *runtime_metadata, GError **error); - GFile *flatpak_get_data_dir (const char *app_id); GFile *flatpak_ensure_data_dir (const char *app_id, GCancellable *cancellable, GError **error); -gboolean flatpak_run_setup_base_argv (GPtrArray *argv_array, - GArray *fd_array, +gboolean flatpak_run_setup_base_argv (FlatpakBwrap *bwrap, GFile *runtime_files, GFile *app_id_dir, const char *arch, FlatpakRunFlags flags, GError **error); -gboolean flatpak_run_add_app_info_args (GPtrArray *argv_array, - GArray *fd_array, +gboolean flatpak_run_add_app_info_args (FlatpakBwrap *bwrap, GFile *app_files, GVariant *app_deploy_data, const char *app_extensions, diff --git a/common/flatpak-table-printer.c b/common/flatpak-table-printer.c index 8bb7ab1f..bafe23da 100644 --- a/common/flatpak-table-printer.c +++ b/common/flatpak-table-printer.c @@ -226,10 +226,15 @@ flatpak_table_printer_print (FlatpakTablePrinter *printer) for (j = 0; j < row->len; j++) { Cell *cell = g_ptr_array_index (row, j); - if (cell->align < 0) - g_print ("%s%-*s", (j == 0) ? "" : " ", widths[j], cell->text); + if (flatpak_fancy_output ()) + { + if (cell->align < 0) + g_print ("%s%-*s", (j == 0) ? "" : " ", widths[j], cell->text); + else + g_print ("%s%*s%-*s", (j == 0) ? "" : " ", lwidths[j] - cell->align, "", widths[j] - (lwidths[j] - cell->align), cell->text); + } else - g_print ("%s%*s%-*s", (j == 0) ? "" : " ", lwidths[j] - cell->align, "", widths[j] - (lwidths[j] - cell->align), cell->text); + g_print ("%s%s", cell->text, (j < row->len - 1) ? "\t" : ""); } g_print ("\n"); } diff --git a/common/flatpak-utils.c b/common/flatpak-utils.c index c8f8719e..afa15909 100644 --- a/common/flatpak-utils.c +++ b/common/flatpak-utils.c @@ -38,6 +38,7 @@ #include #include #include +#include #include #include #include @@ -503,6 +504,52 @@ flatpak_get_gl_drivers (void) return (const char **)drivers; } +static gboolean +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); + + return have_intel; +} + +static const char * +flatpak_get_gtk_theme (void) +{ + static char *gtk_theme; + + if (g_once_init_enter (>k_theme)) + { + /* The schema may not be installed so check first */ + GSettingsSchemaSource *source = g_settings_schema_source_get_default (); + g_autoptr(GSettingsSchema) schema = NULL; + + if (source == NULL) + g_once_init_leave (>k_theme, g_strdup ("")); + else + { + schema = g_settings_schema_source_lookup (source, + "org.gnome.desktop.interface", FALSE); + + if (schema == NULL) + g_once_init_leave (>k_theme, g_strdup ("")); + else + { + /* GSettings is used to store the theme if you use Wayland or GNOME. + * TODO: Check XSettings Net/ThemeName for other desktops. + * We don't care about any other method (like settings.ini) because they + * aren't passed through the sandbox anyway. */ + g_autoptr(GSettings) settings = g_settings_new ("org.gnome.desktop.interface"); + g_once_init_leave (>k_theme, g_settings_get_string (settings, "gtk-theme")); + } + } + } + + return (const char*)gtk_theme; +} + gboolean flatpak_is_in_sandbox (void) { @@ -2492,6 +2539,54 @@ gboolean flatpak_file_rename (GFile *from, return TRUE; } +/* If memfd_create() is available, generate a sealed memfd with contents of + * @str. Otherwise use an O_TMPFILE @tmpf in anonymous mode, write @str to + * @tmpf, and lseek() back to the start. See also similar uses in e.g. + * rpm-ostree for running dracut. + */ +gboolean +flatpak_buffer_to_sealed_memfd_or_tmpfile (GLnxTmpfile *tmpf, + const char *name, + const char *str, + size_t len, + GError **error) +{ + if (len == -1) + len = strlen (str); + glnx_autofd int memfd = memfd_create (name, MFD_CLOEXEC | MFD_ALLOW_SEALING); + int fd; /* Unowned */ + if (memfd != -1) + { + fd = memfd; + } + else + { + /* We use an anonymous fd (i.e. O_EXCL) since we don't want + * the target container to potentially be able to re-link it. + */ + if (!G_IN_SET (errno, ENOSYS, EOPNOTSUPP)) + return glnx_throw_errno_prefix (error, "memfd_create"); + if (!glnx_open_anonymous_tmpfile (O_RDWR | O_CLOEXEC, tmpf, error)) + return FALSE; + fd = tmpf->fd; + } + if (ftruncate (fd, len) < 0) + return glnx_throw_errno_prefix (error, "ftruncate"); + if (glnx_loop_write (fd, str, len) < 0) + return glnx_throw_errno_prefix (error, "write"); + if (lseek (fd, 0, SEEK_SET) < 0) + return glnx_throw_errno_prefix (error, "lseek"); + if (memfd != -1) + { + if (fcntl (memfd, F_ADD_SEALS, F_SEAL_SHRINK | F_SEAL_GROW | F_SEAL_WRITE | F_SEAL_SEAL) < 0) + return glnx_throw_errno_prefix (error, "fcntl(F_ADD_SEALS)"); + /* The other values can stay default */ + tmpf->fd = glnx_steal_fd (&memfd); + tmpf->initialized = TRUE; + } + return TRUE; +} + gboolean flatpak_open_in_tmpdir_at (int tmpdir_fd, int mode, @@ -3821,15 +3916,20 @@ extract_appstream (OstreeRepo *repo, component_id_text_node = flatpak_xml_find (component_id, NULL, NULL); component_id_text = g_strstrip (g_strdup (component_id_text_node->text)); - if (!g_str_has_prefix (component_id_text, id) || - !g_str_has_suffix (component_id_text, ".desktop")) + + /* .desktop suffix in component ID is suggested, not required + (unless app ID actually ends in .desktop) */ + if (g_str_has_suffix (component_id_text, ".desktop") && + !g_str_has_suffix (id, ".desktop")) + component_id_text[strlen (component_id_text) - strlen (".desktop")] = 0; + + if (!g_str_has_prefix (component_id_text, id)) { component = component->next_sibling; continue; } g_print ("Extracting icons for component %s\n", component_id_text); - component_id_text[strlen (component_id_text) - strlen (".desktop")] = 0; if (!copy_icon (component_id_text, root, dest, "64x64", &my_error)) { @@ -4225,6 +4325,16 @@ flatpak_extension_matches_reason (const char *extension_id, return FALSE; } + else if (strcmp (reason, "active-gtk-theme") == 0) + { + const char *gtk_theme = flatpak_get_gtk_theme (); + return (strcmp (gtk_theme, extension_basename) == 0); + } + else if (strcmp (reason, "have-intel-gpu") == 0) + { + /* Used for Intel VAAPI driver extension */ + return flatpak_get_have_intel_gpu (); + } return FALSE; } @@ -4954,8 +5064,8 @@ oci_layer_progress (guint64 downloaded_bytes, gboolean flatpak_mirror_image_from_oci (FlatpakOciRegistry *dst_registry, FlatpakOciRegistry *registry, + const char *oci_repository, const char *digest, - const char *signature_digest, FlatpakOciPullProgress progress_cb, gpointer progress_user_data, GCancellable *cancellable, @@ -4969,14 +5079,10 @@ flatpak_mirror_image_from_oci (FlatpakOciRegistry *dst_registry, g_autoptr(FlatpakOciIndex) index = NULL; int i; - if (!flatpak_oci_registry_mirror_blob (dst_registry, registry, digest, NULL, NULL, cancellable, error)) + if (!flatpak_oci_registry_mirror_blob (dst_registry, registry, oci_repository, TRUE, digest, NULL, NULL, cancellable, error)) return FALSE; - if (signature_digest && - !flatpak_oci_registry_mirror_blob (dst_registry, registry, signature_digest, NULL, NULL, cancellable, error)) - return FALSE; - - versioned = flatpak_oci_registry_load_versioned (dst_registry, digest, &versioned_size, cancellable, error); + versioned = flatpak_oci_registry_load_versioned (dst_registry, NULL, digest, &versioned_size, cancellable, error); if (versioned == NULL) return FALSE; @@ -4991,7 +5097,7 @@ flatpak_mirror_image_from_oci (FlatpakOciRegistry *dst_registry, if (manifest->config.digest != NULL) { - if (!flatpak_oci_registry_mirror_blob (dst_registry, registry, manifest->config.digest, NULL, NULL, cancellable, error)) + if (!flatpak_oci_registry_mirror_blob (dst_registry, registry, oci_repository, FALSE, manifest->config.digest, NULL, NULL, cancellable, error)) return FALSE; } @@ -5011,7 +5117,7 @@ flatpak_mirror_image_from_oci (FlatpakOciRegistry *dst_registry, { FlatpakOciDescriptor *layer = manifest->layers[i]; - if (!flatpak_oci_registry_mirror_blob (dst_registry, registry, layer->digest, + if (!flatpak_oci_registry_mirror_blob (dst_registry, registry, oci_repository, FALSE, layer->digest, oci_layer_progress, &progress_data, cancellable, error)) return FALSE; @@ -5029,11 +5135,6 @@ flatpak_mirror_image_from_oci (FlatpakOciRegistry *dst_registry, flatpak_oci_export_annotations (manifest->annotations, manifest_desc->annotations); - if (signature_digest) - g_hash_table_replace (manifest_desc->annotations, - g_strdup ("org.flatpak.signature-digest"), - g_strdup (signature_digest)); - flatpak_oci_index_add_manifest (index, manifest_desc); if (!flatpak_oci_registry_save_index (dst_registry, index, cancellable, error)) @@ -5046,11 +5147,11 @@ flatpak_mirror_image_from_oci (FlatpakOciRegistry *dst_registry, char * flatpak_pull_from_oci (OstreeRepo *repo, FlatpakOciRegistry *registry, + const char *oci_repository, const char *digest, FlatpakOciManifest *manifest, const char *remote, const char *ref, - const char *signature_digest, FlatpakOciPullProgress progress_cb, gpointer progress_user_data, GCancellable *cancellable, @@ -5069,58 +5170,11 @@ flatpak_pull_from_oci (OstreeRepo *repo, g_autoptr(GVariantBuilder) metadata_builder = g_variant_builder_new (G_VARIANT_TYPE ("a{sv}")); g_autoptr(GVariant) metadata = NULL; GHashTable *annotations; - gboolean gpg_verify = FALSE; int i; g_assert (ref != NULL); g_assert (g_str_has_prefix (digest, "sha256:")); - if (remote && - !ostree_repo_remote_get_gpg_verify (repo, remote, - &gpg_verify, error)) - return NULL; - - if (gpg_verify) - { - g_autoptr(GBytes) signature_bytes = NULL; - g_autoptr(FlatpakOciSignature) signature = NULL; - - if (signature_digest == NULL) - { - flatpak_fail (error, "GPG verification enabled, but no OCI signature found"); - return NULL; - } - - signature_bytes = flatpak_oci_registry_load_blob (registry, signature_digest, cancellable, error); - if (signature_bytes == NULL) - return NULL; - - signature = flatpak_oci_verify_signature (repo, remote, signature_bytes, error); - if (signature == NULL) - return NULL; - - if (g_strcmp0 (signature->critical.type, FLATPAK_OCI_SIGNATURE_TYPE_FLATPAK) != 0) - { - flatpak_fail (error, "Invalid signature type %s", signature->critical.type); - return NULL; - } - - if (g_strcmp0 (signature->critical.image.digest, digest) != 0) - { - flatpak_fail (error, "Invalid signature digest %s", signature->critical.image.digest); - return NULL; - } - - if (g_strcmp0 (signature->critical.identity.ref, ref) != 0) - { - flatpak_fail (error, "Invalid signature ref %s", signature->critical.identity.ref); - return NULL; - } - - /* Success! It is valid */ - g_debug ("Verified OCI signature for %s %s", signature->critical.identity.ref, digest); - } - annotations = flatpak_oci_manifest_get_annotations (manifest); if (annotations) flatpak_oci_parse_commit_annotations (annotations, ×tamp, @@ -5173,7 +5227,8 @@ flatpak_pull_from_oci (OstreeRepo *repo, opts.autocreate_parents = TRUE; opts.ignore_unsupported_content = TRUE; - layer_fd = flatpak_oci_registry_download_blob (registry, layer->digest, + layer_fd = flatpak_oci_registry_download_blob (registry, oci_repository, FALSE, + layer->digest, oci_layer_progress, &progress_data, cancellable, error); if (layer_fd == -1) @@ -5444,7 +5499,7 @@ flatpak_number_prompt (int min, int max, const char *prompt, ...) { char buf[512]; va_list var_args; - gchar *s; + g_autofree char *s = NULL; va_start (var_args, prompt); s = g_strdup_vprintf (prompt, var_args); @@ -5635,6 +5690,7 @@ flatpak_create_soup_session (const char *user_agent) GBytes * flatpak_load_http_uri (SoupSession *soup_session, const char *uri, + FlatpakHTTPFlags flags, const char *etag, char **out_etag, FlatpakLoadUriProgress progress, @@ -5648,6 +5704,7 @@ flatpak_load_http_uri (SoupSession *soup_session, g_autoptr(GMainLoop) loop = NULL; g_autoptr(GString) content = g_string_new (""); LoadUriData data = { NULL }; + SoupMessage *m; g_debug ("Loading %s using libsoup", uri); @@ -5666,11 +5723,13 @@ flatpak_load_http_uri (SoupSession *soup_session, if (request == NULL) return NULL; + m = soup_request_http_get_message (request); if (etag) - { - SoupMessage *m = soup_request_http_get_message (request); - soup_message_headers_replace (m->request_headers, "If-None-Match", etag); - } + soup_message_headers_replace (m->request_headers, "If-None-Match", etag); + + if (flags & FLATPAK_HTTP_FLAGS_ACCEPT_OCI) + soup_message_headers_replace (m->request_headers, "Accept", + "application/vnd.oci.image.manifest.v1+json"); soup_request_send_async (SOUP_REQUEST(request), cancellable, @@ -5699,6 +5758,7 @@ flatpak_load_http_uri (SoupSession *soup_session, gboolean flatpak_download_http_uri (SoupSession *soup_session, const char *uri, + FlatpakHTTPFlags flags, GOutputStream *out, FlatpakLoadUriProgress progress, gpointer user_data, @@ -5709,6 +5769,7 @@ flatpak_download_http_uri (SoupSession *soup_session, g_autoptr(GMainLoop) loop = NULL; g_autoptr(GMainContext) context = NULL; LoadUriData data = { NULL }; + SoupMessage *m; g_debug ("Loading %s using libsoup", uri); @@ -5727,6 +5788,11 @@ flatpak_download_http_uri (SoupSession *soup_session, if (request == NULL) return FALSE; + m = soup_request_http_get_message (request); + if (flags & FLATPAK_HTTP_FLAGS_ACCEPT_OCI) + soup_message_headers_replace (m->request_headers, "Accept", + "application/vnd.oci.image.manifest.v1+json"); + soup_request_send_async (SOUP_REQUEST(request), cancellable, load_uri_callback, &data); @@ -6568,7 +6634,11 @@ progress_cb (OstreeAsyncProgress *progress, gpointer user_data) } /* The download progress goes up to 97% */ - new_progress = 5 + ((total_transferred / (gdouble) total) * 92); + if (total > 0) { + new_progress = 5 + ((total_transferred / (gdouble) total) * 92); + } else { + new_progress = 97; + } /* And the writing of the objects adds 3% to the progress */ new_progress += get_write_progress (outstanding_writes); diff --git a/common/flatpak-utils.h b/common/flatpak-utils.h index 38de0ee9..9e5bf7e4 100644 --- a/common/flatpak-utils.h +++ b/common/flatpak-utils.h @@ -29,9 +29,9 @@ #include #include #include "flatpak-dbus.h" +#include "flatpak-document-dbus.h" #include #include -#include "document-portal/xdp-dbus.h" typedef enum { FLATPAK_HOST_COMMAND_FLAGS_CLEAR_ENV = 1 << 0, @@ -375,11 +375,11 @@ typedef void (*FlatpakOciPullProgress) (guint64 total_size, guint64 pulled_size, char * flatpak_pull_from_oci (OstreeRepo *repo, FlatpakOciRegistry *registry, + const char *oci_repository, const char *digest, FlatpakOciManifest *manifest, const char *remote, const char *ref, - const char *signature_digest, FlatpakOciPullProgress progress_cb, gpointer progress_data, GCancellable *cancellable, @@ -387,8 +387,8 @@ char * flatpak_pull_from_oci (OstreeRepo *repo, gboolean flatpak_mirror_image_from_oci (FlatpakOciRegistry *dst_registry, FlatpakOciRegistry *registry, + const char *oci_repository, const char *digest, - const char *signature_digest, FlatpakOciPullProgress progress_cb, gpointer progress_data, GCancellable *cancellable, @@ -487,6 +487,13 @@ gboolean flatpak_open_in_tmpdir_at (int tmpdir_fd, GCancellable *cancellable, GError **error); +gboolean +flatpak_buffer_to_sealed_memfd_or_tmpfile (GLnxTmpfile *tmpf, + const char *name, + const char *str, + size_t len, + GError **error); + static inline void flatpak_temp_dir_destroy (void *p) { @@ -643,8 +650,15 @@ gboolean flatpak_yes_no_prompt (const char *prompt, ...) G_GNUC_PRINTF(1, 2); long flatpak_number_prompt (int min, int max, const char *prompt, ...) G_GNUC_PRINTF(3, 4); SoupSession * flatpak_create_soup_session (const char *user_agent); + +typedef enum { + FLATPAK_HTTP_FLAGS_NONE = 0, + FLATPAK_HTTP_FLAGS_ACCEPT_OCI = 1<<0, +} FlatpakHTTPFlags; + GBytes * flatpak_load_http_uri (SoupSession *soup_session, const char *uri, + FlatpakHTTPFlags flags, const char *etag, char **out_etag, FlatpakLoadUriProgress progress, @@ -653,6 +667,7 @@ GBytes * flatpak_load_http_uri (SoupSession *soup_session, GError **error); gboolean flatpak_download_http_uri (SoupSession *soup_session, const char *uri, + FlatpakHTTPFlags flags, GOutputStream *out, FlatpakLoadUriProgress progress, gpointer user_data, diff --git a/common/gvdb/.gitignore b/common/gvdb/.gitignore deleted file mode 100644 index 8b5dee6a..00000000 --- a/common/gvdb/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -libgvdb.a -libgvdb-shared.a diff --git a/common/gvdb/README b/common/gvdb/README deleted file mode 100644 index 94e6c5d1..00000000 --- a/common/gvdb/README +++ /dev/null @@ -1,7 +0,0 @@ -DO NOT MODIFY ANY FILE IN THIS DIRECTORY - -(except maybe the Makefile.am) - -This directory is the result of a git subtree merge with the 'gvdb' -module on git.gnome.org. Please apply fixes to the 'gvdb' module and -perform a git merge. diff --git a/common/gvdb/gvdb-builder.c b/common/gvdb/gvdb-builder.c deleted file mode 100644 index ded77086..00000000 --- a/common/gvdb/gvdb-builder.c +++ /dev/null @@ -1,537 +0,0 @@ -/* - * Copyright © 2010 Codethink Limited - * - * 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 licence, 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 . - * - * Author: Ryan Lortie - */ - -#include "gvdb-builder.h" -#include "gvdb-format.h" - -#include -#include -#if !defined(G_OS_WIN32) || !defined(_MSC_VER) -#include -#endif -#include - - -struct _GvdbItem -{ - gchar *key; - guint32 hash_value; - guint32_le assigned_index; - GvdbItem *parent; - GvdbItem *sibling; - GvdbItem *next; - - /* one of: - * this: - */ - GVariant *value; - - /* this: */ - GHashTable *table; - - /* or this: */ - GvdbItem *child; -}; - -static void -gvdb_item_free (gpointer data) -{ - GvdbItem *item = data; - - g_free (item->key); - - if (item->value) - g_variant_unref (item->value); - - if (item->table) - g_hash_table_unref (item->table); - - g_slice_free (GvdbItem, item); -} - -GHashTable * -gvdb_hash_table_new (GHashTable *parent, - const gchar *name_in_parent) -{ - GHashTable *table; - - table = g_hash_table_new_full (g_str_hash, g_str_equal, - g_free, gvdb_item_free); - - if (parent) - { - GvdbItem *item; - - item = gvdb_hash_table_insert (parent, name_in_parent); - gvdb_item_set_hash_table (item, table); - } - - return table; -} - -static guint32 -djb_hash (const gchar *key) -{ - guint32 hash_value = 5381; - - while (*key) - hash_value = hash_value * 33 + *(signed char *)key++; - - return hash_value; -} - -GvdbItem * -gvdb_hash_table_insert (GHashTable *table, - const gchar *key) -{ - GvdbItem *item; - - item = g_slice_new0 (GvdbItem); - item->key = g_strdup (key); - item->hash_value = djb_hash (key); - - g_hash_table_insert (table, g_strdup (key), item); - - return item; -} - -void -gvdb_hash_table_insert_string (GHashTable *table, - const gchar *key, - const gchar *value) -{ - GvdbItem *item; - - item = gvdb_hash_table_insert (table, key); - gvdb_item_set_value (item, g_variant_new_string (value)); -} - -void -gvdb_item_set_value (GvdbItem *item, - GVariant *value) -{ - g_return_if_fail (!item->value && !item->table && !item->child); - - item->value = g_variant_ref_sink (value); -} - -void -gvdb_item_set_hash_table (GvdbItem *item, - GHashTable *table) -{ - g_return_if_fail (!item->value && !item->table && !item->child); - - item->table = g_hash_table_ref (table); -} - -void -gvdb_item_set_parent (GvdbItem *item, - GvdbItem *parent) -{ - GvdbItem **node; - - g_return_if_fail (g_str_has_prefix (item->key, parent->key)); - g_return_if_fail (!parent->value && !parent->table); - g_return_if_fail (!item->parent && !item->sibling); - - for (node = &parent->child; *node; node = &(*node)->sibling) - if (strcmp ((*node)->key, item->key) > 0) - break; - - item->parent = parent; - item->sibling = *node; - *node = item; -} - -typedef struct -{ - GvdbItem **buckets; - gint n_buckets; -} HashTable; - -static HashTable * -hash_table_new (gint n_buckets) -{ - HashTable *table; - - table = g_slice_new (HashTable); - table->buckets = g_new0 (GvdbItem *, n_buckets); - table->n_buckets = n_buckets; - - return table; -} - -static void -hash_table_free (HashTable *table) -{ - g_free (table->buckets); - - g_slice_free (HashTable, table); -} - -static void -hash_table_insert (gpointer key, - gpointer value, - gpointer data) -{ - guint32 hash_value, bucket; - HashTable *table = data; - GvdbItem *item = value; - - hash_value = djb_hash (key); - bucket = hash_value % table->n_buckets; - item->next = table->buckets[bucket]; - table->buckets[bucket] = item; -} - -static guint32_le -item_to_index (GvdbItem *item) -{ - if (item != NULL) - return item->assigned_index; - - return guint32_to_le (-1u); -} - -typedef struct -{ - GQueue *chunks; - guint64 offset; - gboolean byteswap; -} FileBuilder; - -typedef struct -{ - gsize offset; - gsize size; - gpointer data; -} FileChunk; - -static gpointer -file_builder_allocate (FileBuilder *fb, - guint alignment, - gsize size, - struct gvdb_pointer *pointer) -{ - FileChunk *chunk; - - if (size == 0) - return NULL; - - fb->offset += (-fb->offset) & (alignment - 1); - chunk = g_slice_new (FileChunk); - chunk->offset = fb->offset; - chunk->size = size; - chunk->data = g_malloc (size); - - pointer->start = guint32_to_le (fb->offset); - fb->offset += size; - pointer->end = guint32_to_le (fb->offset); - - g_queue_push_tail (fb->chunks, chunk); - - return chunk->data; -} - -static void -file_builder_add_value (FileBuilder *fb, - GVariant *value, - struct gvdb_pointer *pointer) -{ - GVariant *variant, *normal; - gpointer data; - gsize size; - - if (fb->byteswap) - { - value = g_variant_byteswap (value); - variant = g_variant_new_variant (value); - g_variant_unref (value); - } - else - variant = g_variant_new_variant (value); - - normal = g_variant_get_normal_form (variant); - g_variant_unref (variant); - - size = g_variant_get_size (normal); - data = file_builder_allocate (fb, 8, size, pointer); - g_variant_store (normal, data); - g_variant_unref (normal); -} - -static void -file_builder_add_string (FileBuilder *fb, - const gchar *string, - guint32_le *start, - guint16_le *size) -{ - FileChunk *chunk; - gsize length; - - length = strlen (string); - - chunk = g_slice_new (FileChunk); - chunk->offset = fb->offset; - chunk->size = length; - chunk->data = g_malloc (length); - memcpy (chunk->data, string, length); - - *start = guint32_to_le (fb->offset); - *size = guint16_to_le (length); - fb->offset += length; - - g_queue_push_tail (fb->chunks, chunk); -} - -static void -file_builder_allocate_for_hash (FileBuilder *fb, - gsize n_buckets, - gsize n_items, - guint bloom_shift, - gsize n_bloom_words, - guint32_le **bloom_filter, - guint32_le **hash_buckets, - struct gvdb_hash_item **hash_items, - struct gvdb_pointer *pointer) -{ - guint32_le bloom_hdr, table_hdr; - guchar *data; - gsize size; - - g_assert (n_bloom_words < (1u << 27)); - - bloom_hdr = guint32_to_le (bloom_shift << 27 | n_bloom_words); - table_hdr = guint32_to_le (n_buckets); - - size = sizeof bloom_hdr + sizeof table_hdr + - n_bloom_words * sizeof (guint32_le) + - n_buckets * sizeof (guint32_le) + - n_items * sizeof (struct gvdb_hash_item); - - data = file_builder_allocate (fb, 4, size, pointer); - -#define chunk(s) (size -= (s), data += (s), data - (s)) - memcpy (chunk (sizeof bloom_hdr), &bloom_hdr, sizeof bloom_hdr); - memcpy (chunk (sizeof table_hdr), &table_hdr, sizeof table_hdr); - *bloom_filter = (guint32_le *) chunk (n_bloom_words * sizeof (guint32_le)); - *hash_buckets = (guint32_le *) chunk (n_buckets * sizeof (guint32_le)); - *hash_items = (struct gvdb_hash_item *) chunk (n_items * - sizeof (struct gvdb_hash_item)); - g_assert (size == 0); -#undef chunk - - memset (*bloom_filter, 0, n_bloom_words * sizeof (guint32_le)); - - /* NOTE - the code to actually fill in the bloom filter here is missing. - * Patches welcome! - * - * http://en.wikipedia.org/wiki/Bloom_filter - * http://0pointer.de/blog/projects/bloom.html - */ -} - -static void -file_builder_add_hash (FileBuilder *fb, - GHashTable *table, - struct gvdb_pointer *pointer) -{ - guint32_le *buckets, *bloom_filter; - struct gvdb_hash_item *items; - HashTable *mytable; - GvdbItem *item; - guint32 index; - gint bucket; - - mytable = hash_table_new (g_hash_table_size (table)); - g_hash_table_foreach (table, hash_table_insert, mytable); - index = 0; - - for (bucket = 0; bucket < mytable->n_buckets; bucket++) - for (item = mytable->buckets[bucket]; item; item = item->next) - item->assigned_index = guint32_to_le (index++); - - file_builder_allocate_for_hash (fb, mytable->n_buckets, index, 5, 0, - &bloom_filter, &buckets, &items, pointer); - - index = 0; - for (bucket = 0; bucket < mytable->n_buckets; bucket++) - { - buckets[bucket] = guint32_to_le (index); - - for (item = mytable->buckets[bucket]; item; item = item->next) - { - struct gvdb_hash_item *entry = items++; - const gchar *basename; - - g_assert (index == guint32_from_le (item->assigned_index)); - entry->hash_value = guint32_to_le (item->hash_value); - entry->parent = item_to_index (item->parent); - entry->unused = 0; - - if (item->parent != NULL) - basename = item->key + strlen (item->parent->key); - else - basename = item->key; - - file_builder_add_string (fb, basename, - &entry->key_start, - &entry->key_size); - - if (item->value != NULL) - { - g_assert (item->child == NULL && item->table == NULL); - - file_builder_add_value (fb, item->value, &entry->value.pointer); - entry->type = 'v'; - } - - if (item->child != NULL) - { - guint32 children = 0, i = 0; - guint32_le *offsets; - GvdbItem *child; - - g_assert (item->table == NULL); - - for (child = item->child; child; child = child->sibling) - children++; - - offsets = file_builder_allocate (fb, 4, 4 * children, - &entry->value.pointer); - entry->type = 'L'; - - for (child = item->child; child; child = child->sibling) - offsets[i++] = child->assigned_index; - - g_assert (children == i); - } - - if (item->table != NULL) - { - entry->type = 'H'; - file_builder_add_hash (fb, item->table, &entry->value.pointer); - } - - index++; - } - } - - hash_table_free (mytable); -} - -static FileBuilder * -file_builder_new (gboolean byteswap) -{ - FileBuilder *builder; - - builder = g_slice_new (FileBuilder); - builder->chunks = g_queue_new (); - builder->offset = sizeof (struct gvdb_header); - builder->byteswap = byteswap; - - return builder; -} - -static GString * -file_builder_serialise (FileBuilder *fb, - struct gvdb_pointer root) -{ - struct gvdb_header header = { { 0, }, }; - GString *result; - - if (fb->byteswap) - { - header.signature[0] = GVDB_SWAPPED_SIGNATURE0; - header.signature[1] = GVDB_SWAPPED_SIGNATURE1; - } - else - { - header.signature[0] = GVDB_SIGNATURE0; - header.signature[1] = GVDB_SIGNATURE1; - } - - result = g_string_new (NULL); - - header.root = root; - g_string_append_len (result, (gpointer) &header, sizeof header); - - while (!g_queue_is_empty (fb->chunks)) - { - FileChunk *chunk = g_queue_pop_head (fb->chunks); - - if (result->len != chunk->offset) - { - gchar zero[8] = { 0, }; - - g_assert (chunk->offset > result->len); - g_assert (chunk->offset - result->len < 8); - - g_string_append_len (result, zero, chunk->offset - result->len); - g_assert (result->len == chunk->offset); - } - - g_string_append_len (result, chunk->data, chunk->size); - g_free (chunk->data); - - g_slice_free (FileChunk, chunk); - } - - g_queue_free (fb->chunks); - g_slice_free (FileBuilder, fb); - - return result; -} - -GBytes * -gvdb_table_get_content (GHashTable *table, - gboolean byteswap) -{ - struct gvdb_pointer root; - FileBuilder *fb; - GString *str; - GBytes *res; - - fb = file_builder_new (byteswap); - file_builder_add_hash (fb, table, &root); - str = file_builder_serialise (fb, root); - - res = g_bytes_new_take (str->str, str->len); - g_string_free (str, FALSE); - - return res; -} - -gboolean -gvdb_table_write_contents (GHashTable *table, - const gchar *filename, - gboolean byteswap, - GError **error) -{ - GBytes *content; - gboolean status; - - content = gvdb_table_get_content (table, byteswap); - - status = g_file_set_contents (filename, g_bytes_get_data (content, NULL), g_bytes_get_size (content), error); - - g_bytes_unref (content); - - return status; -} diff --git a/common/gvdb/gvdb-builder.h b/common/gvdb/gvdb-builder.h deleted file mode 100644 index ad361dc6..00000000 --- a/common/gvdb/gvdb-builder.h +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright © 2010 Codethink Limited - * - * 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 licence, 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 . - * - * Author: Ryan Lortie - */ - -#ifndef __gvdb_builder_h__ -#define __gvdb_builder_h__ - -#include - -typedef struct _GvdbItem GvdbItem; - -G_GNUC_INTERNAL -GHashTable * gvdb_hash_table_new (GHashTable *parent, - const gchar *key); - -G_GNUC_INTERNAL -GvdbItem * gvdb_hash_table_insert (GHashTable *table, - const gchar *key); -G_GNUC_INTERNAL -void gvdb_hash_table_insert_string (GHashTable *table, - const gchar *key, - const gchar *value); - -G_GNUC_INTERNAL -void gvdb_item_set_value (GvdbItem *item, - GVariant *value); -G_GNUC_INTERNAL -void gvdb_item_set_hash_table (GvdbItem *item, - GHashTable *table); -G_GNUC_INTERNAL -void gvdb_item_set_parent (GvdbItem *item, - GvdbItem *parent); - -G_GNUC_INTERNAL -gboolean gvdb_table_write_contents (GHashTable *table, - const gchar *filename, - gboolean byteswap, - GError **error); - -G_GNUC_INTERNAL -GBytes * gvdb_table_get_content (GHashTable *table, - gboolean byteswap); - - -#endif /* __gvdb_builder_h__ */ diff --git a/common/gvdb/gvdb-format.h b/common/gvdb/gvdb-format.h deleted file mode 100644 index 486e8547..00000000 --- a/common/gvdb/gvdb-format.h +++ /dev/null @@ -1,85 +0,0 @@ -/* - * Copyright © 2010 Codethink Limited - * - * 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 licence, 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 . - * - * Author: Ryan Lortie - */ - -#ifndef __gvdb_format_h__ -#define __gvdb_format_h__ - -#include - -typedef struct { guint16 value; } guint16_le; -typedef struct { guint32 value; } guint32_le; - -struct gvdb_pointer { - guint32_le start; - guint32_le end; -}; - -struct gvdb_hash_header { - guint32_le n_bloom_words; - guint32_le n_buckets; -}; - -struct gvdb_hash_item { - guint32_le hash_value; - guint32_le parent; - - guint32_le key_start; - guint16_le key_size; - gchar type; - gchar unused; - - union - { - struct gvdb_pointer pointer; - gchar direct[8]; - } value; -}; - -struct gvdb_header { - guint32 signature[2]; - guint32_le version; - guint32_le options; - - struct gvdb_pointer root; -}; - -static inline guint32_le guint32_to_le (guint32 value) { - guint32_le result = { GUINT32_TO_LE (value) }; - return result; -} - -static inline guint32 guint32_from_le (guint32_le value) { - return GUINT32_FROM_LE (value.value); -} - -static inline guint16_le guint16_to_le (guint16 value) { - guint16_le result = { GUINT16_TO_LE (value) }; - return result; -} - -static inline guint16 guint16_from_le (guint16_le value) { - return GUINT16_FROM_LE (value.value); -} - -#define GVDB_SIGNATURE0 1918981703 -#define GVDB_SIGNATURE1 1953390953 -#define GVDB_SWAPPED_SIGNATURE0 GUINT32_SWAP_LE_BE (GVDB_SIGNATURE0) -#define GVDB_SWAPPED_SIGNATURE1 GUINT32_SWAP_LE_BE (GVDB_SIGNATURE1) - -#endif /* __gvdb_format_h__ */ diff --git a/common/gvdb/gvdb-reader.c b/common/gvdb/gvdb-reader.c deleted file mode 100644 index 08b5bc8c..00000000 --- a/common/gvdb/gvdb-reader.c +++ /dev/null @@ -1,718 +0,0 @@ -/* - * Copyright © 2010 Codethink Limited - * - * 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 licence, 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 . - * - * Author: Ryan Lortie - */ - -#include "gvdb-reader.h" -#include "gvdb-format.h" - -#include - -struct _GvdbTable { - GBytes *bytes; - - const gchar *data; - gsize size; - - gboolean byteswapped; - gboolean trusted; - - const guint32_le *bloom_words; - guint32 n_bloom_words; - guint bloom_shift; - - const guint32_le *hash_buckets; - guint32 n_buckets; - - struct gvdb_hash_item *hash_items; - guint32 n_hash_items; -}; - -static const gchar * -gvdb_table_item_get_key (GvdbTable *file, - const struct gvdb_hash_item *item, - gsize *size) -{ - guint32 start, end; - - start = guint32_from_le (item->key_start); - *size = guint16_from_le (item->key_size); - end = start + *size; - - if G_UNLIKELY (start > end || end > file->size) - return NULL; - - return file->data + start; -} - -static gconstpointer -gvdb_table_dereference (GvdbTable *file, - const struct gvdb_pointer *pointer, - gint alignment, - gsize *size) -{ - guint32 start, end; - - start = guint32_from_le (pointer->start); - end = guint32_from_le (pointer->end); - - if G_UNLIKELY (start > end || end > file->size || start & (alignment - 1)) - return NULL; - - *size = end - start; - - return file->data + start; -} - -static void -gvdb_table_setup_root (GvdbTable *file, - const struct gvdb_pointer *pointer) -{ - const struct gvdb_hash_header *header; - guint32 n_bloom_words; - guint32 n_buckets; - gsize size; - - header = gvdb_table_dereference (file, pointer, 4, &size); - - if G_UNLIKELY (header == NULL || size < sizeof *header) - return; - - size -= sizeof *header; - - n_bloom_words = guint32_from_le (header->n_bloom_words); - n_buckets = guint32_from_le (header->n_buckets); - n_bloom_words &= (1u << 27) - 1; - - if G_UNLIKELY (n_bloom_words * sizeof (guint32_le) > size) - return; - - file->bloom_words = (gpointer) (header + 1); - size -= n_bloom_words * sizeof (guint32_le); - file->n_bloom_words = n_bloom_words; - - if G_UNLIKELY (n_buckets > G_MAXUINT / sizeof (guint32_le) || - n_buckets * sizeof (guint32_le) > size) - return; - - file->hash_buckets = file->bloom_words + file->n_bloom_words; - size -= n_buckets * sizeof (guint32_le); - file->n_buckets = n_buckets; - - if G_UNLIKELY (size % sizeof (struct gvdb_hash_item)) - return; - - file->hash_items = (gpointer) (file->hash_buckets + n_buckets); - file->n_hash_items = size / sizeof (struct gvdb_hash_item); -} - -/** - * gvdb_table_new_from_bytes: - * @bytes: the #GBytes with the data - * @trusted: if the contents of @bytes are trusted - * @error: %NULL, or a pointer to a %NULL #GError - * @returns: a new #GvdbTable - * - * Creates a new #GvdbTable from the contents of @bytes. - * - * This call can fail if the header contained in @bytes is invalid. - * - * You should call gvdb_table_free() on the return result when you no - * longer require it. - **/ -GvdbTable * -gvdb_table_new_from_bytes (GBytes *bytes, - gboolean trusted, - GError **error) -{ - const struct gvdb_header *header; - GvdbTable *file; - - file = g_slice_new0 (GvdbTable); - file->bytes = g_bytes_ref (bytes); - file->data = g_bytes_get_data (bytes, &file->size); - file->trusted = trusted; - - if (file->size < sizeof (struct gvdb_header)) - goto invalid; - - header = (gpointer) file->data; - - if (header->signature[0] == GVDB_SIGNATURE0 && - header->signature[1] == GVDB_SIGNATURE1 && - guint32_from_le (header->version) == 0) - file->byteswapped = FALSE; - - else if (header->signature[0] == GVDB_SWAPPED_SIGNATURE0 && - header->signature[1] == GVDB_SWAPPED_SIGNATURE1 && - guint32_from_le (header->version) == 0) - file->byteswapped = TRUE; - - else - goto invalid; - - gvdb_table_setup_root (file, &header->root); - - return file; - -invalid: - g_set_error_literal (error, G_FILE_ERROR, G_FILE_ERROR_INVAL, "invalid gvdb header"); - - g_bytes_unref (file->bytes); - - g_slice_free (GvdbTable, file); - - return NULL; -} - -/** - * gvdb_table_new: - * @filename: a filename - * @trusted: if the contents of @bytes are trusted - * @error: %NULL, or a pointer to a %NULL #GError - * @returns: a new #GvdbTable - * - * Creates a new #GvdbTable using the #GMappedFile for @filename as the - * #GBytes. - **/ -GvdbTable * -gvdb_table_new (const gchar *filename, - gboolean trusted, - GError **error) -{ - GMappedFile *mapped; - GvdbTable *table; - GBytes *bytes; - - mapped = g_mapped_file_new (filename, FALSE, error); - if (!mapped) - return NULL; - - bytes = g_mapped_file_get_bytes (mapped); - table = gvdb_table_new_from_bytes (bytes, trusted, error); - g_mapped_file_unref (mapped); - g_bytes_unref (bytes); - - g_prefix_error (error, "%s: ", filename); - - return table; -} - -static gboolean -gvdb_table_bloom_filter (GvdbTable *file, - guint32 hash_value) -{ - guint32 word, mask; - - if (file->n_bloom_words == 0) - return TRUE; - - word = (hash_value / 32) % file->n_bloom_words; - mask = 1 << (hash_value & 31); - mask |= 1 << ((hash_value >> file->bloom_shift) & 31); - - return (guint32_from_le (file->bloom_words[word]) & mask) == mask; -} - -static gboolean -gvdb_table_check_name (GvdbTable *file, - struct gvdb_hash_item *item, - const gchar *key, - guint key_length) -{ - const gchar *this_key; - gsize this_size; - guint32 parent; - - this_key = gvdb_table_item_get_key (file, item, &this_size); - - if G_UNLIKELY (this_key == NULL || this_size > key_length) - return FALSE; - - key_length -= this_size; - - if G_UNLIKELY (memcmp (this_key, key + key_length, this_size) != 0) - return FALSE; - - parent = guint32_from_le (item->parent); - if (key_length == 0 && parent == 0xffffffffu) - return TRUE; - - if G_LIKELY (parent < file->n_hash_items && this_size > 0) - return gvdb_table_check_name (file, - &file->hash_items[parent], - key, key_length); - - return FALSE; -} - -static const struct gvdb_hash_item * -gvdb_table_lookup (GvdbTable *file, - const gchar *key, - gchar type) -{ - guint32 hash_value = 5381; - guint key_length; - guint32 bucket; - guint32 lastno; - guint32 itemno; - - if G_UNLIKELY (file->n_buckets == 0 || file->n_hash_items == 0) - return NULL; - - for (key_length = 0; key[key_length]; key_length++) - hash_value = (hash_value * 33) + ((signed char *) key)[key_length]; - - if (!gvdb_table_bloom_filter (file, hash_value)) - return NULL; - - bucket = hash_value % file->n_buckets; - itemno = guint32_from_le (file->hash_buckets[bucket]); - - if (bucket == file->n_buckets - 1 || - (lastno = guint32_from_le(file->hash_buckets[bucket + 1])) > file->n_hash_items) - lastno = file->n_hash_items; - - while G_LIKELY (itemno < lastno) - { - struct gvdb_hash_item *item = &file->hash_items[itemno]; - - if (hash_value == guint32_from_le (item->hash_value)) - if G_LIKELY (gvdb_table_check_name (file, item, key, key_length)) - if G_LIKELY (item->type == type) - return item; - - itemno++; - } - - return NULL; -} - -static gboolean -gvdb_table_list_from_item (GvdbTable *table, - const struct gvdb_hash_item *item, - const guint32_le **list, - guint *length) -{ - gsize size; - - *list = gvdb_table_dereference (table, &item->value.pointer, 4, &size); - - if G_LIKELY (*list == NULL || size % 4) - return FALSE; - - *length = size / 4; - - return TRUE; -} - -/** - * gvdb_table_get_names: - * @table: a #GvdbTable - * @length: the number of items returned, or %NULL - * - * Gets a list of all names contained in @table. - * - * No call to gvdb_table_get_table(), gvdb_table_list() or - * gvdb_table_get_value() will succeed unless it is for one of the - * names returned by this function. - * - * Note that some names that are returned may still fail for all of the - * above calls in the case of the corrupted file. Note also that the - * returned strings may not be utf8. - * - * Returns: a %NULL-terminated list of strings, of length @length - **/ -gchar ** -gvdb_table_get_names (GvdbTable *table, - gint *length) -{ - gchar **names; - gint n_names; - gint filled; - gint total; - gint i; - - /* We generally proceed by iterating over the list of items in the - * hash table (in order of appearance) recording them into an array. - * - * Each item has a parent item (except root items). The parent item - * forms part of the name of the item. We could go fetching the - * parent item chain at the point that we encounter each item but then - * we would need to implement some sort of recursion along with checks - * for self-referential items. - * - * Instead, we do a number of passes. Each pass will build up one - * level of names (starting from the root). We continue to do passes - * until no more items are left. The first pass will only add root - * items and each further pass will only add items whose direct parent - * is an item added in the immediately previous pass. It's also - * possible that items get filled if they follow their parent within a - * particular pass. - * - * At most we will have a number of passes equal to the depth of the - * tree. Self-referential items will never be filled in (since their - * parent will have never been filled in). We continue until we have - * a pass that fills in no additional items. - * - * This takes an O(n) algorithm and turns it into O(n*m) where m is - * the depth of the tree, but in all sane cases the tree won't be very - * deep and the constant factor of this algorithm is lower (and the - * complexity of coding it, as well). - */ - - n_names = table->n_hash_items; - names = g_new0 (gchar *, n_names + 1); - - /* 'names' starts out all-NULL. On each pass we record the number - * of items changed from NULL to non-NULL in 'filled' so we know if we - * should repeat the loop. 'total' counts the total number of items - * filled. If 'total' ends up equal to 'n_names' then we know that - * 'names' has been completely filled. - */ - - total = 0; - do - { - /* Loop until we have filled no more entries */ - filled = 0; - - for (i = 0; i < n_names; i++) - { - const struct gvdb_hash_item *item = &table->hash_items[i]; - const gchar *name; - gsize name_length; - guint32 parent; - - /* already got it on a previous pass */ - if (names[i] != NULL) - continue; - - parent = guint32_from_le (item->parent); - - if (parent == 0xffffffffu) - { - /* it's a root item */ - name = gvdb_table_item_get_key (table, item, &name_length); - - if (name != NULL) - { - names[i] = g_strndup (name, name_length); - filled++; - } - } - - else if (parent < n_names && names[parent] != NULL) - { - /* It's a non-root item whose parent was filled in already. - * - * Calculate the name of this item by combining it with - * its parent name. - */ - name = gvdb_table_item_get_key (table, item, &name_length); - - if (name != NULL) - { - const gchar *parent_name = names[parent]; - gsize parent_length; - gchar *fullname; - - parent_length = strlen (parent_name); - fullname = g_malloc (parent_length + name_length + 1); - memcpy (fullname, parent_name, parent_length); - memcpy (fullname + parent_length, name, name_length); - fullname[parent_length + name_length] = '\0'; - names[i] = fullname; - filled++; - } - } - } - - total += filled; - } - while (filled && total < n_names); - - /* If the table was corrupted then 'names' may have holes in it. - * Collapse those. - */ - if G_UNLIKELY (total != n_names) - { - GPtrArray *fixed_names; - - fixed_names = g_ptr_array_new (); - for (i = 0; i < n_names; i++) - if (names[i] != NULL) - g_ptr_array_add (fixed_names, names[i]); - - g_free (names); - n_names = fixed_names->len; - g_ptr_array_add (fixed_names, NULL); - names = (gchar **) g_ptr_array_free (fixed_names, FALSE); - } - - if (length) - *length = n_names; - - return names; -} - -/** - * gvdb_table_list: - * @file: a #GvdbTable - * @key: a string - * @returns: a %NULL-terminated string array - * - * List all of the keys that appear below @key. The nesting of keys - * within the hash file is defined by the program that created the hash - * file. One thing is constant: each item in the returned array can be - * concatenated to @key to obtain the full name of that key. - * - * It is not possible to tell from this function if a given key is - * itself a path, a value, or another hash table; you are expected to - * know this for yourself. - * - * You should call g_strfreev() on the return result when you no longer - * require it. - **/ -gchar ** -gvdb_table_list (GvdbTable *file, - const gchar *key) -{ - const struct gvdb_hash_item *item; - const guint32_le *list; - gchar **strv; - guint length; - guint i; - - if ((item = gvdb_table_lookup (file, key, 'L')) == NULL) - return NULL; - - if (!gvdb_table_list_from_item (file, item, &list, &length)) - return NULL; - - strv = g_new (gchar *, length + 1); - for (i = 0; i < length; i++) - { - guint32 itemno = guint32_from_le (list[i]); - - if (itemno < file->n_hash_items) - { - const struct gvdb_hash_item *item; - const gchar *string; - gsize strsize; - - item = file->hash_items + itemno; - - string = gvdb_table_item_get_key (file, item, &strsize); - - if (string != NULL) - strv[i] = g_strndup (string, strsize); - else - strv[i] = g_malloc0 (1); - } - else - strv[i] = g_malloc0 (1); - } - - strv[i] = NULL; - - return strv; -} - -/** - * gvdb_table_has_value: - * @file: a #GvdbTable - * @key: a string - * @returns: %TRUE if @key is in the table - * - * Checks for a value named @key in @file. - * - * Note: this function does not consider non-value nodes (other hash - * tables, for example). - **/ -gboolean -gvdb_table_has_value (GvdbTable *file, - const gchar *key) -{ - static const struct gvdb_hash_item *item; - gsize size; - - item = gvdb_table_lookup (file, key, 'v'); - - if (item == NULL) - return FALSE; - - return gvdb_table_dereference (file, &item->value.pointer, 8, &size) != NULL; -} - -static GVariant * -gvdb_table_value_from_item (GvdbTable *table, - const struct gvdb_hash_item *item) -{ - GVariant *variant, *value; - gconstpointer data; - GBytes *bytes; - gsize size; - - data = gvdb_table_dereference (table, &item->value.pointer, 8, &size); - - if G_UNLIKELY (data == NULL) - return NULL; - - bytes = g_bytes_new_from_bytes (table->bytes, ((gchar *) data) - table->data, size); - variant = g_variant_new_from_bytes (G_VARIANT_TYPE_VARIANT, bytes, table->trusted); - value = g_variant_get_variant (variant); - g_variant_unref (variant); - g_bytes_unref (bytes); - - return value; -} - -/** - * gvdb_table_get_value: - * @file: a #GvdbTable - * @key: a string - * @returns: a #GVariant, or %NULL - * - * Looks up a value named @key in @file. - * - * If the value is not found then %NULL is returned. Otherwise, a new - * #GVariant instance is returned. The #GVariant does not depend on the - * continued existence of @file. - * - * You should call g_variant_unref() on the return result when you no - * longer require it. - **/ -GVariant * -gvdb_table_get_value (GvdbTable *file, - const gchar *key) -{ - const struct gvdb_hash_item *item; - GVariant *value; - - if ((item = gvdb_table_lookup (file, key, 'v')) == NULL) - return NULL; - - value = gvdb_table_value_from_item (file, item); - - if (value && file->byteswapped) - { - GVariant *tmp; - - tmp = g_variant_byteswap (value); - g_variant_unref (value); - value = tmp; - } - - return value; -} - -/** - * gvdb_table_get_raw_value: - * @table: a #GvdbTable - * @key: a string - * @returns: a #GVariant, or %NULL - * - * Looks up a value named @key in @file. - * - * This call is equivalent to gvdb_table_get_value() except that it - * never byteswaps the value. - **/ -GVariant * -gvdb_table_get_raw_value (GvdbTable *table, - const gchar *key) -{ - const struct gvdb_hash_item *item; - - if ((item = gvdb_table_lookup (table, key, 'v')) == NULL) - return NULL; - - return gvdb_table_value_from_item (table, item); -} - -/** - * gvdb_table_get_table: - * @file: a #GvdbTable - * @key: a string - * @returns: a new #GvdbTable, or %NULL - * - * Looks up the hash table named @key in @file. - * - * The toplevel hash table in a #GvdbTable can contain reference to - * child hash tables (and those can contain further references...). - * - * If @key is not found in @file then %NULL is returned. Otherwise, a - * new #GvdbTable is returned, referring to the child hashtable as - * contained in the file. This newly-created #GvdbTable does not depend - * on the continued existence of @file. - * - * You should call gvdb_table_free() on the return result when you no - * longer require it. - **/ -GvdbTable * -gvdb_table_get_table (GvdbTable *file, - const gchar *key) -{ - const struct gvdb_hash_item *item; - GvdbTable *new; - - item = gvdb_table_lookup (file, key, 'H'); - - if (item == NULL) - return NULL; - - new = g_slice_new0 (GvdbTable); - new->bytes = g_bytes_ref (file->bytes); - new->byteswapped = file->byteswapped; - new->trusted = file->trusted; - new->data = file->data; - new->size = file->size; - - gvdb_table_setup_root (new, &item->value.pointer); - - return new; -} - -/** - * gvdb_table_free: - * @file: a #GvdbTable - * - * Frees @file. - **/ -void -gvdb_table_free (GvdbTable *file) -{ - g_bytes_unref (file->bytes); - g_slice_free (GvdbTable, file); -} - -/** - * gvdb_table_is_valid: - * @table: a #GvdbTable - * @returns: %TRUE if @table is still valid - * - * Checks if the table is still valid. - * - * An on-disk GVDB can be marked as invalid. This happens when the file - * has been replaced. The appropriate action is typically to reopen the - * file. - **/ -gboolean -gvdb_table_is_valid (GvdbTable *table) -{ - return !!*table->data; -} diff --git a/common/gvdb/gvdb-reader.h b/common/gvdb/gvdb-reader.h deleted file mode 100644 index 241b41ae..00000000 --- a/common/gvdb/gvdb-reader.h +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Copyright © 2010 Codethink Limited - * - * 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 licence, 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 . - * - * Author: Ryan Lortie - */ - -#ifndef __gvdb_reader_h__ -#define __gvdb_reader_h__ - -#include - -typedef struct _GvdbTable GvdbTable; - -G_BEGIN_DECLS - -G_GNUC_INTERNAL -GvdbTable * gvdb_table_new_from_bytes (GBytes *bytes, - gboolean trusted, - GError **error); -G_GNUC_INTERNAL -GvdbTable * gvdb_table_new (const gchar *filename, - gboolean trusted, - GError **error); -G_GNUC_INTERNAL -void gvdb_table_free (GvdbTable *table); -G_GNUC_INTERNAL -gchar ** gvdb_table_get_names (GvdbTable *table, - gint *length); -G_GNUC_INTERNAL -gchar ** gvdb_table_list (GvdbTable *table, - const gchar *key); -G_GNUC_INTERNAL -GvdbTable * gvdb_table_get_table (GvdbTable *table, - const gchar *key); -G_GNUC_INTERNAL -GVariant * gvdb_table_get_raw_value (GvdbTable *table, - const gchar *key); -G_GNUC_INTERNAL -GVariant * gvdb_table_get_value (GvdbTable *table, - const gchar *key); - -G_GNUC_INTERNAL -gboolean gvdb_table_has_value (GvdbTable *table, - const gchar *key); -G_GNUC_INTERNAL -gboolean gvdb_table_is_valid (GvdbTable *table); - -G_END_DECLS - -#endif /* __gvdb_reader_h__ */ diff --git a/common/gvdb/gvdb.doap b/common/gvdb/gvdb.doap deleted file mode 100644 index b4ae60c8..00000000 --- a/common/gvdb/gvdb.doap +++ /dev/null @@ -1,32 +0,0 @@ - - - - - gvdb - GVariant Database file - - A simple database file format that stores a mapping from strings to - GVariant values in a way that is extremely efficient for lookups. - - The database is written once and can not be modified. - - Included here is reader code and a first-pass implementation of a - writer (that does not currently produce particularly optimised - output). - - It is intended that this code be used by copy-pasting into your - project or by making use of git-merge(1). - - - - - Ryan Lortie - - ryanl - - - - diff --git a/configure.ac b/configure.ac index d444f041..5c83e1d5 100644 --- a/configure.ac +++ b/configure.ac @@ -14,10 +14,10 @@ AC_PREREQ([2.63]) # on the unstable (ie master), interface age = 0 m4_define([flatpak_major_version], [0]) -m4_define([flatpak_minor_version], [9]) -m4_define([flatpak_micro_version], [99]) +m4_define([flatpak_minor_version], [11]) +m4_define([flatpak_micro_version], [3]) m4_define([flatpak_extra_version], []) -m4_define([flatpak_interface_age], [98]) +m4_define([flatpak_interface_age], [0]) m4_define([flatpak_binary_age], [m4_eval(10000 * flatpak_major_version + 100 * flatpak_minor_version + flatpak_micro_version)]) m4_define([flatpak_version], @@ -31,7 +31,8 @@ AC_INIT([Flatpak], GLIB_REQS=2.44 SYSTEM_BWRAP_REQS=0.1.8 -OSTREE_REQS=2017.12 +OSTREE_REQS=2017.14 +OSTREE_P2P_REQS=2018.2 AC_USE_SYSTEM_EXTENSIONS AC_SYS_LARGEFILE @@ -222,10 +223,10 @@ fi PKG_CHECK_MODULES(OSTREE, [ostree-1 >= $OSTREE_REQS]) -PKG_CHECK_MODULES(FUSE, [fuse]) - PKG_CHECK_MODULES(JSON, [json-glib-1.0]) +PKG_CHECK_MODULES(APPSTREAM_GLIB, [appstream-glib >= 0.5.10]) + AC_ARG_ENABLE([seccomp], AC_HELP_STRING([--disable-seccomp], [Disable seccomp]), @@ -259,7 +260,7 @@ AC_ARG_ENABLE([p2p], [Enable unstable peer to peer support [default=no]])],, [enable_p2p=no]) AS_IF([test x$enable_p2p = xyes],[ - PKG_CHECK_MODULES(OSTREE, [ostree-1 >= $OSTREE_REQS]) + PKG_CHECK_MODULES(OSTREE, [ostree-1 >= $OSTREE_P2P_REQS]) ostree_features=$($PKG_CONFIG --variable=features ostree-1) AS_CASE(["$ostree_features"], diff --git a/data/Makefile.am.inc b/data/Makefile.am.inc index 71e514e6..9bfe6782 100644 --- a/data/Makefile.am.inc +++ b/data/Makefile.am.inc @@ -1,13 +1,10 @@ introspectiondir = $(datadir)/dbus-1/interfaces introspection_DATA = \ - data/org.freedesktop.impl.portal.PermissionStore.xml \ - data/org.freedesktop.portal.Documents.xml \ data/org.freedesktop.Flatpak.xml \ $(NULL) EXTRA_DIST += \ data/org.freedesktop.portal.Documents.xml \ - data/org.freedesktop.impl.portal.PermissionStore.xml \ data/org.freedesktop.systemd1.xml \ data/org.freedesktop.Flatpak.xml \ $(NULL) diff --git a/data/org.freedesktop.impl.portal.PermissionStore.xml b/data/org.freedesktop.impl.portal.PermissionStore.xml deleted file mode 100644 index 0e59e386..00000000 --- a/data/org.freedesktop.impl.portal.PermissionStore.xml +++ /dev/null @@ -1,163 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/data/org.freedesktop.portal.Documents.xml b/data/org.freedesktop.portal.Documents.xml index 78a09d8a..7faf2313 100644 --- a/data/org.freedesktop.portal.Documents.xml +++ b/data/org.freedesktop.portal.Documents.xml @@ -72,6 +72,7 @@ access to the file. --> + @@ -89,6 +90,7 @@ Creates an entry in the document store for writing a new file. --> + @@ -124,6 +126,7 @@ This method was added in version 2 of the org.freedesktop.portal.Documents interface. --> + @@ -132,6 +135,43 @@ + + + + + + + + + + + + + + + + + + flatpak remote-info + flatpak + + + + Developer + Alexander + Larsson + alexl@redhat.com + + + + + + flatpak remote-info + 1 + + + + flatpak-remote-info + Show information about an application or runtime in a remote + + + + + flatpak remote-info + OPTION + REMOTE + REF + + + + + Description + + + Shows information about the runtime or application REF from the + remote repository with the name REMOTE. + You can find all configured remote repositories with flatpak remotes. + + + By default, the output is formatted in a friendly format. + If you specify one of the options --show-ref, --show-commit, + --show-parent, or --show-metadata, the output is instead formatted + in a machine-readable format. + + + Unless overridden with the --system, --user, or --installation options, + this command uses either the default system-wide installation or the + per-user one, depending on which has the specified + REMOTE. + + + + + + Options + + The following options are understood: + + + + + + + + Show help options and exit. + + + + + + + + Use the per-user configuration. + + + + + + + + Use the default system-wide configuration. + + + + + + + + Use a system-wide installation specified by NAME + among those defined in /etc/flatpak/installations.d/. + Using --installation=default is equivalent to using + --system. + + + + + + + + Assume that REF is a runtime if not explicitly specified. + + + + + + + + Assume that REF is an app if not explicitly specified. + + + + + + + + The default architecture to look for, if not given explicitly in the REF. + + + + + + + + Show information about the specific commit, rather than the latest version. + + + + + + + + Display a log of previous versions. + + + + + + + + + Show the matched ref. + + + + + + + + + Show the commit id. + + + + + + + + + Show the parent commit id. + + + + + + + + + Show the metadata. + + + + + + + + + Print debug information during command processing. + + + + + + + + Print OSTree debug information during command processing. + + + + + + + + Examples + + + $ flatpak --user remote-info flathub org.gnome.gedit + + +Ref: app/org.gnome.gedit/x86_64/stable +ID: org.gnome.gedit +Arch: x86_64 +Branch: stable +Date: 2017-07-31 16:05:22 +0000 +Subject: Build org.gnome.gedit at 3ec291fc1ce4d78220527fa79576f4cc1481ebe5 +Commit: 3de7e9dde3bb8382aad9dfbbff20eccd9bf2100bc1887a3619ec0372e8066bf7 +Parent: - +Download size: 3,4 MB +Installed size: 11,1 MB +Runtime: org.gnome.Platform/x86_64/3.24 + + + + + + See also + + + flatpak1, + flatpak-remotes1 + flatpak-remote-ls1 + + + + diff --git a/doc/flatpak-remote-ls.xml b/doc/flatpak-remote-ls.xml index 98fde511..33bcc294 100644 --- a/doc/flatpak-remote-ls.xml +++ b/doc/flatpak-remote-ls.xml @@ -32,7 +32,7 @@ flatpak remote-ls OPTION - REMOTE + REMOTE @@ -41,12 +41,15 @@ Shows runtimes and applications that are available in the - remote repository with the name REMOTE. - You can find all configured remote repositories with flatpak remote-list. + remote repository with the name REMOTE, + or all remotes if one isn't specified. You can find all configured + remote repositories with flatpak-remotes1. - Unless overridden with the --user or --installation options, this command - uses the default system-wide configuration. + Unless overridden with the --system, --user, or --installation options, + this command uses either the default system-wide installation or the + per-user one, depending on which has the specified + REMOTE. @@ -190,7 +193,7 @@ org.freedesktop.glxgears flatpak1, - flatpak-remote-list1 + flatpak-remotes1 diff --git a/doc/flatpak-remote-modify.xml b/doc/flatpak-remote-modify.xml index 3f5b58bc..9e961435 100644 --- a/doc/flatpak-remote-modify.xml +++ b/doc/flatpak-remote-modify.xml @@ -44,8 +44,10 @@ NAME is the name for the remote. - Unless overridden with the --user or --installation options, this command - changes the default system-wide installation. + Unless overridden with the --system, --user, or --installation options, + this command uses either the default system-wide installation or the + per-user one, depending on which has the specified + REMOTE. diff --git a/doc/flatpak-remotes.xml b/doc/flatpak-remotes.xml index af755671..e89374f2 100644 --- a/doc/flatpak-remotes.xml +++ b/doc/flatpak-remotes.xml @@ -96,7 +96,7 @@ - Show more information each repository in addition to the name. + Show more information for each repository in addition to the name. @@ -151,8 +151,8 @@ testrepo Test Repository http://209.132.179.91/repo/ no-gpg-verify flatpak1, - flatpak-add-remote1, - flatpak-delete-remote1 + flatpak-remote-add1, + flatpak-remote-delete1 diff --git a/doc/flatpak-run.xml b/doc/flatpak-run.xml index 0294a150..4de12bb3 100644 --- a/doc/flatpak-run.xml +++ b/doc/flatpak-run.xml @@ -181,7 +181,7 @@ Expose a well known socket to the application. This overrides to the Context section from the application metadata. - SOCKET must be one of: x11, wayland, pulseaudio, system-bus, session-bus. + SOCKET must be one of: x11, wayland, fallback-x11, pulseaudio, system-bus, session-bus. This option can be used multiple times. @@ -192,7 +192,7 @@ Don't expose a well known socket to the application. This overrides to the Context section from the application metadata. - SOCKET must be one of: x11, wayland, pulseaudio, system-bus, session-bus. + SOCKET must be one of: x11, wayland, fallback-x11, pulseaudio, system-bus, session-bus. This option can be used multiple times. diff --git a/doc/flatpak-search.xml b/doc/flatpak-search.xml new file mode 100644 index 00000000..67544cae --- /dev/null +++ b/doc/flatpak-search.xml @@ -0,0 +1,102 @@ + + + + + + + flatpak search + flatpak + + + + Developer + Patrick + Griffis + tingping@tingping.se + + + + + + flatpak search + 1 + + + + flatpak-search + Search for applications and runtimes + + + + + flatpak search + TEXT + + + + + Description + + + Searches for applications and runtimes matching + TEXT. Note that this uses appstream data + that can be updated with flatpak-update1. + The appstream data is updated automatically only if it's at least a day old. + + + + + Options + + The following options are understood: + + + + + + + Only search through remotes in the per-user installation. + + + + + + + + Only search through remotes in the default system-wide installation. + + + + + + + + Show a system-wide installation by NAME among + those defined in /etc/flatpak/installations.d/. + Using --installation=default is equivalent to using + --system. + + + + + + + + + Show help options and exit. + + + + + + + + + Print debug information during command processing. + + + + + + diff --git a/doc/flatpak-uninstall.xml b/doc/flatpak-uninstall.xml index 03c4deae..0a19b612 100644 --- a/doc/flatpak-uninstall.xml +++ b/doc/flatpak-uninstall.xml @@ -41,8 +41,7 @@ Uninstalls an application or runtime. REF is a reference to the - application or runtime to install. If no REF is given, everything - is updated. + application or runtime to uninstall. Each REF arguments is a full or partial indentifier in the @@ -147,7 +146,7 @@ - Only look for an runtime with the given name. + Only look for a runtime with the given name. diff --git a/doc/flatpak-update.xml b/doc/flatpak-update.xml index 028147fb..52924caf 100644 --- a/doc/flatpak-update.xml +++ b/doc/flatpak-update.xml @@ -34,6 +34,12 @@ OPTION REF + + flatpak update + OPTION + --appstream + REMOTE + @@ -41,8 +47,8 @@ Updates applications and runtimes. REF is a reference to the - application or runtime to install. If no REF is given, everything - is updated. + application or runtime to update. If no REF is given, everything + is updated, as well as appstream info for all remotes. Each REF arguments is a full or partial indentifier in the @@ -53,9 +59,9 @@ will list the alternatives. - By default this looks for both apps and runtime with the given REF in - the specified REMOTE, but you can limit this by using the --app or - --runtime option, or by supplying the initial element in the REF. + By default this looks for both apps and runtimes with the given REF, + but you can limit this by using the --app or --runtime option, or by supplying the initial + element in the REF. Normally, this command updates the application to the tip @@ -70,8 +76,8 @@ version, with the --commit option. - Unless overridden with the --user or the --installation option, this command updates - the default system-wide installation. + Unless overridden with the --user, --system or --installation option, this command updates + any matching refs in the standard system-wide installation and the per-user one. @@ -156,7 +162,7 @@ - Don't download the latest version, deploy it whatever is locally available. + Don't download the latest version, deploy whatever is locally available. @@ -188,7 +194,7 @@ - Update appstream for the remote. + Update appstream for REMOTE, or all remotes if no remote is specified. @@ -196,7 +202,7 @@ - Only look for an runtime with the given name. + Only look for a runtime with the given name. diff --git a/doc/flatpak.xml b/doc/flatpak.xml index 082d2d50..d29aa724 100644 --- a/doc/flatpak.xml +++ b/doc/flatpak.xml @@ -102,7 +102,7 @@ - Print debug information during command processing. + Print debug information during command processing. Use -vv for more detail. @@ -200,6 +200,19 @@ + Commands for finding applications and runtimes: + + + + flatpak-search1 + + + Search for applications and runtimes. + + + + + Commands for running applications: @@ -305,6 +318,13 @@ List contents of a configured remote repository. + + flatpak-remote-info1 + + + Show information about a ref in a configured remote repository. + + Commands for building applications: @@ -342,7 +362,7 @@ flatpak-build-bundle1 - Create a bundle file from a build directory. + Create a bundle file from a ref in a local repository. diff --git a/document-portal/Makefile.am.inc b/document-portal/Makefile.am.inc deleted file mode 100644 index f011ccdf..00000000 --- a/document-portal/Makefile.am.inc +++ /dev/null @@ -1,43 +0,0 @@ -libexec_PROGRAMS += \ - xdg-document-portal \ - $(NULL) - -xdp_dbus_built_sources = document-portal/xdp-dbus.c document-portal/xdp-dbus.h -BUILT_SOURCES += $(xdp_dbus_built_sources) - -document-portal/xdp-dbus.c: data/org.freedesktop.portal.Documents.xml Makefile - mkdir -p $(builddir)/document-portal - $(AM_V_GEN) $(GDBUS_CODEGEN) \ - --interface-prefix org.freedesktop.portal. \ - --c-namespace XdpDbus \ - --generate-c-code $(builddir)/document-portal/xdp-dbus \ - --annotate "org.freedesktop.portal.Documents.Add()" org.gtk.GDBus.C.UnixFD "yes" \ - --annotate "org.freedesktop.portal.Documents.AddFull()" org.gtk.GDBus.C.UnixFD "yes" \ - $(srcdir)/data/org.freedesktop.portal.Documents.xml \ - $(NULL) - -document-portal/%-dbus.h: document-portal/%-dbus.c - @true # Built as a side-effect of the rules for the .c - -service_in_files += document-portal/xdg-document-portal.service.in -systemduserunit_DATA += document-portal/xdg-document-portal.service - -service_in_files += document-portal/org.freedesktop.portal.Documents.service.in -dbus_service_DATA += document-portal/org.freedesktop.portal.Documents.service - -nodist_xdg_document_portal_SOURCES = \ - $(xdp_dbus_built_sources) \ - $(ps_dbus_built_sources) \ - $(NULL) - -xdg_document_portal_SOURCES = \ - document-portal/xdp-main.c \ - document-portal/xdp-enums.h \ - document-portal/xdp-util.h \ - document-portal/xdp-util.c \ - document-portal/xdp-fuse.h \ - document-portal/xdp-fuse.c \ - $(NULL) - -xdg_document_portal_LDADD = $(AM_LDADD) $(BASE_LIBS) $(FUSE_LIBS) libflatpak-common.la -xdg_document_portal_CFLAGS = $(AM_CFLAGS) $(BASE_CFLAGS) $(OSTREE_CFLAGS) $(SOUP_CFLAGS) $(JSON_CFLAGS) $(FUSE_CFLAGS) -I$(srcdir)/document-portal -I$(builddir)/document-portal -I$(srcdir)/permission-store -I$(builddir)/permission-store -DFLATPAK_COMPILATION diff --git a/document-portal/org.freedesktop.portal.Documents.service.in b/document-portal/org.freedesktop.portal.Documents.service.in deleted file mode 100644 index cf0c1efc..00000000 --- a/document-portal/org.freedesktop.portal.Documents.service.in +++ /dev/null @@ -1,4 +0,0 @@ -[D-BUS Service] -Name=org.freedesktop.portal.Documents -Exec=@libexecdir@/xdg-document-portal -SystemdService=xdg-document-portal.service diff --git a/document-portal/xdg-document-portal.service.in b/document-portal/xdg-document-portal.service.in deleted file mode 100644 index 66f9cbd7..00000000 --- a/document-portal/xdg-document-portal.service.in +++ /dev/null @@ -1,7 +0,0 @@ -[Unit] -Description=flatpak document portal service - -[Service] -BusName=org.freedesktop.portal.Documents -ExecStart=@libexecdir@/xdg-document-portal -Type=dbus diff --git a/document-portal/xdp-enums.h b/document-portal/xdp-enums.h deleted file mode 100644 index f9cd223d..00000000 --- a/document-portal/xdp-enums.h +++ /dev/null @@ -1,25 +0,0 @@ -#ifndef XDP_ENUMS_H -#define XDP_ENUMS_H - -G_BEGIN_DECLS - -typedef enum { - XDP_PERMISSION_FLAGS_READ = (1 << 0), - XDP_PERMISSION_FLAGS_WRITE = (1 << 1), - XDP_PERMISSION_FLAGS_GRANT_PERMISSIONS = (1 << 2), - XDP_PERMISSION_FLAGS_DELETE = (1 << 3), - - XDP_PERMISSION_FLAGS_ALL = ((1 << 4) - 1) -} XdpPermissionFlags; - -typedef enum { - XDP_ADD_FLAGS_REUSE_EXISTING = (1 << 0), - XDP_ADD_FLAGS_PERSISTENT = (1 << 1), - XDP_ADD_FLAGS_AS_NEEDED_BY_APP = (1 << 2), - - XDP_ADD_FLAGS_FLAGS_ALL = ((1 << 3) - 1) -} XdpAddFullFlags; - -G_END_DECLS - -#endif /* XDP_ENUMS_H */ diff --git a/document-portal/xdp-fuse.c b/document-portal/xdp-fuse.c deleted file mode 100644 index 0d2f413f..00000000 --- a/document-portal/xdp-fuse.c +++ /dev/null @@ -1,2369 +0,0 @@ -#include "config.h" - -#define FUSE_USE_VERSION 26 - -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "flatpak-portal-error.h" -#include "xdp-fuse.h" -#include "xdp-util.h" -#include "flatpak-utils.h" - -#define NON_DOC_DIR_PERMS 0500 -#define DOC_DIR_PERMS 0700 - -/* TODO: What do we put here */ -#define ATTR_CACHE_TIME 60.0 -#define ENTRY_CACHE_TIME 60.0 - -/* We pretend that the file is hardlinked. This causes most apps to do - a truncating overwrite, which suits us better, as we do the atomic - rename ourselves anyway. */ -#define DOC_FILE_NLINK 2 - -typedef enum { - XDP_INODE_ROOT, - XDP_INODE_BY_APP, - XDP_INODE_APP_DIR, /* app id */ - XDP_INODE_APP_DOC_DIR, /* app_id + doc id */ - XDP_INODE_DOC_DIR, /* doc id */ - XDP_INODE_DOC_FILE, /* doc id (NULL if tmp), name (== basename) */ -} XdpInodeType; - -typedef struct _XdpInode XdpInode; - -struct _XdpInode -{ - gint ref_count; /* atomic */ - - /* These are all immutable */ - fuse_ino_t ino; - XdpInodeType type; - XdpInode *parent; - char *app_id; - char *doc_id; - - /* For doc dirs */ - char *basename; - char *dirname; - dev_t dir_dev; - ino_t dir_ino; - - /* mutable data */ - - GList *children; /* lazily filled, protected by inodes lock */ - char *filename; /* variable (for non-dirs), null if deleted, - protected by inodes lock *and* mutex */ - gboolean is_doc; /* True if this is the document file for this dir */ - - /* Used when the file is open, protected by mutex */ - GMutex mutex; /* Always lock inodes lock (if needed) before mutex */ - GList *open_files; - int dir_fd; - int fd; /* RW fd for tempfiles, RO fd for doc files */ - char *backing_filename; - char *trunc_filename; - int trunc_fd; - gboolean truncated; -}; - -typedef struct _XdpFile XdpFile; - -struct _XdpFile -{ - XdpInode *inode; - int open_mode; -}; - -#define ROOT_INODE 1 -#define BY_APP_INODE 2 -#define BY_APP_NAME "by-app" - -static GHashTable *dir_to_inode_nr; - -static GHashTable *inodes; /* The in memory XdpInode:s, protected by inodes lock */ -static XdpInode *root_inode; -static XdpInode *by_app_inode; -static fuse_ino_t next_inode_nr = 3; - -G_LOCK_DEFINE (inodes); - -static GThread *fuse_thread = NULL; -static struct fuse_session *session = NULL; -static struct fuse_chan *main_ch = NULL; -static char *mount_path = NULL; -static pthread_t fuse_pthread = 0; - -static int -reopen_fd (int fd, int flags) -{ - g_autofree char *path = g_strdup_printf ("/proc/self/fd/%d", fd); - - return open (path, flags | O_CLOEXEC); -} - -/* Call with inodes lock held */ -static fuse_ino_t -allocate_inode_unlocked (void) -{ - fuse_ino_t next = next_inode_nr++; - - /* Bail out on overflow, to avoid reuse */ - if (next <= 0) - g_assert_not_reached (); - - return next; -} - -static fuse_ino_t -get_dir_inode_nr_unlocked (const char *app_id, const char *doc_id) -{ - gpointer res; - fuse_ino_t allocated; - g_autofree char *dir = NULL; - - if (app_id == NULL) - { - dir = g_strdup (doc_id); - } - else - { - if (doc_id == NULL) - dir = g_strconcat (app_id, "/", NULL); - else - dir = g_build_filename (app_id, doc_id, NULL); - } - - res = g_hash_table_lookup (dir_to_inode_nr, dir); - if (res != NULL) - return (fuse_ino_t) (gsize) res; - - allocated = allocate_inode_unlocked (); - g_hash_table_insert (dir_to_inode_nr, g_strdup (dir), (gpointer) allocated); - return allocated; -} - -static fuse_ino_t -get_dir_inode_nr (const char *app_id, const char *doc_id) -{ - AUTOLOCK (inodes); - return get_dir_inode_nr_unlocked (app_id, doc_id); -} - -static void -allocate_app_dir_inode_nr (char **app_ids) -{ - int i; - - AUTOLOCK (inodes); - for (i = 0; app_ids[i] != NULL; i++) - get_dir_inode_nr_unlocked (app_ids[i], NULL); -} - -static char ** -get_allocated_app_dirs (void) -{ - GHashTableIter iter; - gpointer key, value; - GPtrArray *array = g_ptr_array_new (); - - AUTOLOCK (inodes); - g_hash_table_iter_init (&iter, dir_to_inode_nr); - while (g_hash_table_iter_next (&iter, &key, &value)) - { - const char *name = key; - - if (g_str_has_suffix (name, "/")) - { - char *app = strndup (name, strlen (name) - 1); - g_ptr_array_add (array, app); - } - } - g_ptr_array_add (array, NULL); - return (char **) g_ptr_array_free (array, FALSE); -} - -static void xdp_inode_unref_internal (XdpInode *inode, - gboolean locked); -static void xdp_inode_unref (XdpInode *inode); - -G_DEFINE_AUTOPTR_CLEANUP_FUNC (XdpInode, xdp_inode_unref) - -static void -xdp_inode_destroy (XdpInode *inode, gboolean locked) -{ - g_assert (inode->dir_fd == -1); - g_assert (inode->fd == -1); - g_assert (inode->trunc_fd == -1); - g_assert (inode->trunc_filename == NULL); - g_assert (inode->children == NULL); - xdp_inode_unref_internal (inode->parent, locked); - g_free (inode->backing_filename); - g_free (inode->filename); - g_free (inode->dirname); - g_free (inode->app_id); - g_free (inode->doc_id); - g_free (inode); -} - -static XdpInode * -xdp_inode_ref (XdpInode *inode) -{ - if (inode) - g_atomic_int_inc (&inode->ref_count); - return inode; -} - -static void -xdp_inode_unref_internal (XdpInode *inode, gboolean locked) -{ - gint old_ref; - - if (inode == NULL) - return; - - /* here we want to atomically do: if (ref_count>1) { ref_count--; return; } */ -retry_atomic_decrement1: - old_ref = g_atomic_int_get (&inode->ref_count); - if (old_ref > 1) - { - if (!g_atomic_int_compare_and_exchange ((int *) &inode->ref_count, old_ref, old_ref - 1)) - goto retry_atomic_decrement1; - } - else - { - if (old_ref <= 0) - { - g_warning ("Can't unref dead inode"); - return; - } - /* Protect against revival from xdp_inode_lookup() */ - if (!locked) - G_LOCK (inodes); - if (!g_atomic_int_compare_and_exchange ((int *) &inode->ref_count, old_ref, old_ref - 1)) - { - if (!locked) - G_UNLOCK (inodes); - goto retry_atomic_decrement1; - } - - g_hash_table_remove (inodes, (gpointer) inode->ino); - if (inode->parent) - inode->parent->children = g_list_remove (inode->parent->children, inode); - - if (!locked) - G_UNLOCK (inodes); - - xdp_inode_destroy (inode, locked); - } -} - -static void -xdp_inode_unref (XdpInode *inode) -{ - return xdp_inode_unref_internal (inode, FALSE); -} - -static XdpInode * -xdp_inode_new_unlocked (fuse_ino_t ino, - XdpInodeType type, - XdpInode *parent, - const char *filename, - const char *app_id, - const char *doc_id) -{ - XdpInode *inode; - - inode = g_new0 (XdpInode, 1); - inode->ino = ino; - inode->type = type; - inode->parent = xdp_inode_ref (parent); - inode->filename = g_strdup (filename); - inode->app_id = g_strdup (app_id); - inode->doc_id = g_strdup (doc_id); - inode->ref_count = 1; - inode->dir_fd = -1; - inode->fd = -1; - inode->trunc_fd = -1; - - if (parent) - parent->children = g_list_prepend (parent->children, inode); - g_hash_table_insert (inodes, (gpointer) ino, inode); - - return inode; -} - -static XdpInode * -xdp_inode_new (fuse_ino_t ino, - XdpInodeType type, - XdpInode *parent, - const char *filename, - const char *app_id, - const char *doc_id) -{ - AUTOLOCK (inodes); - return xdp_inode_new_unlocked (ino, type, parent, filename, app_id, doc_id); -} - -static XdpInode * -xdp_inode_lookup_unlocked (fuse_ino_t inode_nr) -{ - XdpInode *inode; - - inode = g_hash_table_lookup (inodes, (gpointer) inode_nr); - if (inode != NULL) - return xdp_inode_ref (inode); - return NULL; -} - -static GList * -xdp_inode_list_children (XdpInode *inode) -{ - GList *list = NULL, *l; - - AUTOLOCK (inodes); - for (l = inode->children; l != NULL; l = l->next) - { - XdpInode *child = l->data; - - list = g_list_prepend (list, xdp_inode_ref (child)); - } - - return g_list_reverse (list); -} - -static XdpInode * -xdp_inode_lookup_child_unlocked (XdpInode *inode, const char *filename) -{ - GList *l; - - for (l = inode->children; l != NULL; l = l->next) - { - XdpInode *child = l->data; - if (child->filename != NULL && strcmp (child->filename, filename) == 0) - return xdp_inode_ref (child); - } - - return NULL; -} - -static XdpInode * -xdp_inode_lookup_child (XdpInode *inode, const char *filename) -{ - AUTOLOCK (inodes); - return xdp_inode_lookup_child_unlocked (inode, filename); -} - -static int -xdp_inode_open_dir_fd (XdpInode *dir) -{ - struct stat st_buf; - glnx_autofd int fd = -1; - - g_assert (dir->dirname != NULL); - - fd = open (dir->dirname, O_CLOEXEC | O_PATH | O_DIRECTORY); - if (fd == -1) - return -1; - - if (fstat (fd, &st_buf) < 0) - { - errno = ENOENT; - return -1; - } - - if (st_buf.st_ino != dir->dir_ino || - st_buf.st_dev != dir->dir_dev) - { - errno = ENOENT; - return -1; - } - - return glnx_steal_fd (&fd); -} - -static void -xdp_inode_unlink_backing_files (XdpInode *child_inode, int dir_fd) -{ - if (dir_fd == -1) - { - g_debug ("Can't unlink child inode due to no dir_fd"); - return; - } - - if (child_inode->is_doc) - { - g_debug ("unlinking doc file %s", child_inode->filename); - unlinkat (dir_fd, child_inode->filename, 0); - if (child_inode->trunc_filename != NULL) - { - g_debug ("unlinking doc trunc_file %s", child_inode->trunc_filename); - unlinkat (dir_fd, child_inode->trunc_filename, 0); - } - } - else - { - g_debug ("unlinking tmp_file %s", child_inode->backing_filename); - unlinkat (dir_fd, child_inode->backing_filename, 0); - } -} - -static void -xdp_inode_do_unlink (XdpInode *child_inode, int dir_fd, gboolean unlink_backing) -{ - if (unlink_backing) - xdp_inode_unlink_backing_files (child_inode, dir_fd); - - /* Zero out filename to mark it deleted */ - g_free (child_inode->filename); - child_inode->filename = NULL; - - /* Drop keep-alive-until-unlink ref */ - if (!child_inode->is_doc) - xdp_inode_unref (child_inode); -} - -static XdpInode * -xdp_inode_unlink_child (XdpInode *dir, const char *filename) -{ - XdpInode *child_inode; - glnx_autofd int dir_fd = -1; - - AUTOLOCK (inodes); - child_inode = xdp_inode_lookup_child_unlocked (dir, filename); - if (child_inode == NULL) - return NULL; - - g_assert (child_inode->type == XDP_INODE_DOC_FILE); - g_assert (child_inode->filename != NULL); - - /* Here we take *both* the inodes lock and the mutex. - The inodes lock is to make this safe against concurrent lookups, - but the mutex is to make it safe to access inode->filename inside - a mutex-only lock */ - g_mutex_lock (&child_inode->mutex); - - dir_fd = xdp_inode_open_dir_fd (dir); - - xdp_inode_do_unlink (child_inode, dir_fd, TRUE); - - g_mutex_unlock (&child_inode->mutex); - - return child_inode; -} - -/* Sets errno */ -static int -xdp_inode_rename_child (XdpInode *dir, - const char *src_filename, - const char *dst_filename) -{ - g_autoptr(XdpInode) src_inode = NULL; - g_autoptr(XdpInode) dst_inode = NULL; - glnx_autofd int dir_fd = -1; - int res; - - AUTOLOCK (inodes); - src_inode = xdp_inode_lookup_child_unlocked (dir, src_filename); - if (src_inode == NULL) - { - errno = ENOENT; - return -1; - } - - g_assert (src_inode->type == XDP_INODE_DOC_FILE); - g_assert (src_inode->filename != NULL); - - dst_inode = xdp_inode_lookup_child_unlocked (dir, dst_filename); - if (dst_inode) - { - g_assert (dst_inode->type == XDP_INODE_DOC_FILE); - g_assert (dst_inode->filename != NULL); - } - - /* Here we take *both* the inodes lock and the mutex. - The inodes lock is to make this safe against concurrent lookups, - but the mutex is to make it safe to access inode->filename inside - a mutex-only lock */ - g_mutex_lock (&src_inode->mutex); - if (dst_inode) - g_mutex_lock (&dst_inode->mutex); - - dir_fd = xdp_inode_open_dir_fd (dir); - res = 0; - - if (src_inode->is_doc) - { - /* doc -> tmp */ - - /* We don't want to allow renaming an exiting doc file, because - doing so would make a tmpfile of the real doc-file which some - host-side app may have open. You have to make a copy and - remove instead. */ - errno = EACCES; - res = -1; - } - else if (strcmp (dst_filename, dir->basename) != 0) - { - /* tmp -> tmp */ - - if (dst_inode) - xdp_inode_do_unlink (dst_inode, dir_fd, TRUE); - - g_free (src_inode->filename); - src_inode->filename = g_strdup (dst_filename); - } - else - { - /* tmp -> doc */ - - g_debug ("atomic renaming %s to %s", src_inode->backing_filename, dst_filename); - res = renameat (dir_fd, src_inode->backing_filename, - dir_fd, dst_filename); - if (res == 0) - { - if (dst_inode != NULL) - { - /* Unlink, but don't remove backing files, which are now the new one */ - xdp_inode_do_unlink (dst_inode, dir_fd, FALSE); - - /* However, unlink trunc_file if its there */ - if (dst_inode->trunc_filename) - unlinkat (dir_fd, dst_inode->trunc_filename, 0); - } - - src_inode->is_doc = TRUE; - g_free (src_inode->filename); - src_inode->filename = g_strdup (dst_filename); - g_free (src_inode->backing_filename); - src_inode->backing_filename = g_strdup (dst_filename); - - /* Convert ->fd to read-only */ - if (src_inode->fd != -1) - { - int new_fd = reopen_fd (src_inode->fd, O_RDONLY); - close (src_inode->fd); - src_inode->fd = new_fd; - } - - /* This neuters any outstanding write files, since we have no trunc_fd at this point. - However, that is not really a problem, we would not support them well anyway as - a newly opened trunc file would have to have a truncate operation initially for - it to work anyway */ - } - } - - g_mutex_unlock (&src_inode->mutex); - if (dst_inode) - g_mutex_unlock (&dst_inode->mutex); - - return res; -} - -/* NULL if removed */ -static char * -xdp_inode_get_filename (XdpInode *inode) -{ - AUTOLOCK (inodes); - return g_strdup (inode->filename); -} - -static XdpInode * -xdp_inode_ensure_document_file (XdpInode *dir) -{ - XdpInode *inode; - - g_assert (dir->type == XDP_INODE_APP_DOC_DIR || dir->type == XDP_INODE_DOC_DIR); - - AUTOLOCK (inodes); - - inode = xdp_inode_lookup_child_unlocked (dir, dir->basename); - if (inode == NULL) - { - inode = xdp_inode_new_unlocked (allocate_inode_unlocked (), - XDP_INODE_DOC_FILE, - dir, - dir->basename, - dir->app_id, - dir->doc_id); - inode->backing_filename = g_strdup (dir->basename); - inode->is_doc = TRUE; - } - - return inode; -} - -static char * -create_tmp_for_doc (XdpInode *dir, int dir_fd, int flags, mode_t mode, int *fd_out) -{ - g_autofree char *template = g_strconcat (".xdp_", dir->basename, ".XXXXXX", NULL); - int fd; - - fd = flatpak_mkstempat (dir_fd, template, flags | O_CLOEXEC, mode); - if (fd == -1) - return NULL; - - g_debug ("Created temp file %s", template); - *fd_out = fd; - return g_steal_pointer (&template); -} - -/* sets errno */ -static XdpInode * -xdp_inode_create_file (XdpInode *dir, - const char *filename, - mode_t mode, - gboolean truncate, - gboolean exclusive) -{ - XdpInode *inode; - g_autofree char *backing_filename = NULL; - g_autofree char *trunc_filename = NULL; - gboolean is_doc; - glnx_autofd int dir_fd = -1; - glnx_autofd int fd = -1; - glnx_autofd int trunc_fd = -1; - - g_assert (dir->type == XDP_INODE_APP_DOC_DIR || dir->type == XDP_INODE_DOC_DIR); - - AUTOLOCK (inodes); - - inode = xdp_inode_lookup_child_unlocked (dir, filename); - if (inode != NULL) - { - if (exclusive) - { - xdp_inode_unref (inode); - errno = EEXIST; - return NULL; - } - - if (truncate) - { - /* TODO: Handle extra truncate for existing file */ - errno = ENOSYS; - return NULL; - } - - return inode; - } - - dir_fd = xdp_inode_open_dir_fd (dir); - if (dir_fd == -1) - return NULL; - - is_doc = strcmp (dir->basename, filename) == 0; - - if (is_doc) - { - backing_filename = g_strdup (filename); - int flags = O_CREAT | O_RDONLY | O_NOFOLLOW | O_CLOEXEC; - - if (exclusive) - flags |= O_EXCL; - - g_debug ("Creating doc file %s", dir->basename); - fd = openat (dir_fd, dir->basename, flags, mode & 0777); - if (fd < 0) - return NULL; - - trunc_filename = create_tmp_for_doc (dir, dir_fd, O_RDWR, mode & 0777, &trunc_fd); - if (trunc_filename == NULL) - return NULL; - } - else - { - backing_filename = create_tmp_for_doc (dir, dir_fd, O_RDWR, mode & 0777, &fd); - if (backing_filename == NULL) - return NULL; - } - - inode = xdp_inode_new_unlocked (allocate_inode_unlocked (), - XDP_INODE_DOC_FILE, - dir, - filename, - dir->app_id, - dir->doc_id); - inode->backing_filename = g_steal_pointer (&backing_filename); - inode->trunc_filename = g_steal_pointer (&trunc_filename); - inode->is_doc = is_doc; - inode->dir_fd = glnx_steal_fd (&dir_fd); - inode->fd = glnx_steal_fd (&fd); - inode->trunc_fd = glnx_steal_fd (&trunc_fd); - if (inode->trunc_fd != -1 && (truncate || exclusive)) - { - inode->truncated = TRUE; - g_free (inode->backing_filename); - inode->backing_filename = g_strdup (inode->trunc_filename); - } - - /* We add an extra ref for tmp files to keep them alive until unlink */ - if (!is_doc) - xdp_inode_ref (inode); - - return inode; -} - -static XdpInode * -xdp_inode_lookup (fuse_ino_t inode_nr) -{ - AUTOLOCK (inodes); - return xdp_inode_lookup_unlocked (inode_nr); -} - -static XdpInode * -xdp_inode_get_dir_unlocked (const char *app_id, const char *doc_id, FlatpakDbEntry *entry) -{ - fuse_ino_t ino; - XdpInode *inode; - XdpInode *parent = NULL; - XdpInodeType type; - const char *filename; - - ino = get_dir_inode_nr_unlocked (app_id, doc_id); - - inode = xdp_inode_lookup_unlocked (ino); - if (inode) - return inode; - - if (app_id == NULL) - { - g_assert (doc_id != NULL); - parent = xdp_inode_ref (root_inode); - type = XDP_INODE_DOC_DIR; - filename = doc_id; - } - else - { - if (doc_id == NULL) - { - parent = xdp_inode_ref (by_app_inode); - filename = app_id; - type = XDP_INODE_APP_DIR; - } - else - { - parent = xdp_inode_get_dir_unlocked (app_id, NULL, NULL); - filename = doc_id; - type = XDP_INODE_APP_DOC_DIR; - } - } - - inode = xdp_inode_new_unlocked (ino, type, parent, filename, app_id, doc_id); - xdp_inode_unref_internal (parent, TRUE); - - if (entry) - { - inode->basename = xdp_entry_dup_basename (entry); - inode->dirname = xdp_entry_dup_dirname (entry); - inode->dir_ino = xdp_entry_get_inode (entry); - inode->dir_dev = xdp_entry_get_device (entry); - } - - return inode; -} - -static XdpInode * -xdp_inode_get_dir (const char *app_id, const char *doc_id, FlatpakDbEntry *entry) -{ - AUTOLOCK (inodes); - return xdp_inode_get_dir_unlocked (app_id, doc_id, entry); -} - -/********************************************************************** \ -* FUSE Implementation -\***********************************************************************/ - -static int -get_user_perms (const struct stat *stbuf) -{ - /* Strip out exec and setuid bits */ - return stbuf->st_mode & 0666; -} - -static gboolean -app_can_write_doc (FlatpakDbEntry *entry, const char *app_id) -{ - if (app_id == NULL) - return TRUE; - - if (xdp_entry_has_permissions (entry, app_id, XDP_PERMISSION_FLAGS_WRITE)) - return TRUE; - - return FALSE; -} - -static gboolean -app_can_see_doc (FlatpakDbEntry *entry, const char *app_id) -{ - if (app_id == NULL) - return TRUE; - - if (xdp_entry_has_permissions (entry, app_id, XDP_PERMISSION_FLAGS_READ)) - return TRUE; - - return FALSE; -} - -/* Call with mutex held! */ -static int -xdp_inode_locked_get_fd (XdpInode *inode) -{ - if (inode->truncated) - return inode->trunc_fd; - - return inode->fd; -} - -/* Call with mutex held! */ -static int -xdp_inode_locked_get_write_fd (XdpInode *inode) -{ - if (inode->is_doc) - { - if (!inode->truncated) - { - errno = ENOSYS; - return -1; - } - return inode->trunc_fd; - } - - return inode->fd; -} - -static int -xdp_inode_stat (XdpInode *inode, - struct stat *stbuf) -{ - stbuf->st_ino = inode->ino; - stbuf->st_uid = getuid (); - stbuf->st_gid = getgid (); - - switch (inode->type) - { - case XDP_INODE_ROOT: - case XDP_INODE_BY_APP: - case XDP_INODE_APP_DIR: - stbuf->st_mode = S_IFDIR | NON_DOC_DIR_PERMS; - stbuf->st_nlink = 2; - break; - - case XDP_INODE_DOC_DIR: - case XDP_INODE_APP_DOC_DIR: - stbuf->st_mode = S_IFDIR | DOC_DIR_PERMS; - stbuf->st_nlink = 2; - break; - - case XDP_INODE_DOC_FILE: - { - g_autoptr(FlatpakDbEntry) entry = NULL; - struct stat tmp_stbuf; - gboolean can_see, can_write; - int fd, res, errsv; - - entry = xdp_lookup_doc (inode->doc_id); - if (entry == NULL) - { - errno = ENOENT; - return -1; - } - - can_see = app_can_see_doc (entry, inode->app_id); - can_write = app_can_write_doc (entry, inode->app_id); - - if (!can_see) - { - errno = ENOENT; - return -1; - } - - g_mutex_lock (&inode->mutex); - - fd = xdp_inode_locked_get_fd (inode); - if (fd != -1) - { - res = fstat (fd, &tmp_stbuf); - } - else - { - glnx_autofd int dir_fd = xdp_inode_open_dir_fd (inode->parent); - - if (dir_fd == -1) - res = -1; - else - res = fstatat (dir_fd, inode->backing_filename, - &tmp_stbuf, AT_SYMLINK_NOFOLLOW); - } - errsv = errno; - - g_mutex_unlock (&inode->mutex); - - if (res != 0) - { - errno = errsv; - return -1; - } - - stbuf->st_mode = S_IFREG | get_user_perms (&tmp_stbuf); - if (!can_write) - stbuf->st_mode &= ~(0222); - stbuf->st_size = tmp_stbuf.st_size; - stbuf->st_uid = tmp_stbuf.st_uid; - stbuf->st_gid = tmp_stbuf.st_gid; - stbuf->st_blksize = tmp_stbuf.st_blksize; - stbuf->st_blocks = tmp_stbuf.st_blocks; - stbuf->st_atim = tmp_stbuf.st_atim; - stbuf->st_mtim = tmp_stbuf.st_mtim; - stbuf->st_ctim = tmp_stbuf.st_ctim; - } - break; - - default: - g_assert_not_reached (); - } - - return 0; -} - -static void -xdp_fuse_lookup (fuse_req_t req, - fuse_ino_t parent, - const char *name) -{ - g_autoptr(XdpInode) parent_inode = NULL; - struct fuse_entry_param e = {0}; - g_autoptr(XdpInode) child_inode = NULL; - g_autoptr(FlatpakDbEntry) entry = NULL; - - g_debug ("xdp_fuse_lookup %lx/%s -> ", parent, name); - - parent_inode = xdp_inode_lookup (parent); - if (parent_inode == NULL) - { - g_debug ("xdp_fuse_lookup <- error parent ENOENT"); - fuse_reply_err (req, ENOENT); - return; - } - - /* Default */ - e.attr_timeout = ATTR_CACHE_TIME; - e.entry_timeout = ENTRY_CACHE_TIME; - - switch (parent_inode->type) - { - case XDP_INODE_ROOT: - if (strcmp (name, BY_APP_NAME) == 0) - { - child_inode = xdp_inode_ref (by_app_inode); - } - else - { - entry = xdp_lookup_doc (name); - if (entry != NULL) - child_inode = xdp_inode_get_dir (NULL, name, entry); - } - break; - - case XDP_INODE_BY_APP: - /* This lazily creates the app dir */ - if (flatpak_is_valid_name (name, NULL)) - child_inode = xdp_inode_get_dir (name, NULL, NULL); - break; - - case XDP_INODE_APP_DIR: - entry = xdp_lookup_doc (name); - if (entry != NULL && - app_can_see_doc (entry, parent_inode->app_id)) - child_inode = xdp_inode_get_dir (parent_inode->app_id, name, entry); - break; - - case XDP_INODE_APP_DOC_DIR: - case XDP_INODE_DOC_DIR: - { - g_autoptr(XdpInode) doc_inode = NULL; - entry = xdp_lookup_doc (parent_inode->doc_id); - if (entry == NULL) - { - g_debug ("xdp_fuse_lookup <- error no parent entry ENOENT"); - fuse_reply_err (req, ENOENT); - return; - } - - /* Ensure it is alive at least during lookup_child () */ - doc_inode = xdp_inode_ensure_document_file (parent_inode); - - child_inode = xdp_inode_lookup_child (parent_inode, name); - - /* We verify in the stat below if the backing file exists */ - - /* Files can be changed from outside the fuse fs, so don't cache any data */ - e.attr_timeout = 0; - e.entry_timeout = 0; - } - break; - - case XDP_INODE_DOC_FILE: - fuse_reply_err (req, ENOTDIR); - return; - - default: - break; - } - - if (child_inode == NULL) - { - g_debug ("xdp_fuse_lookup <- error child ENOENT"); - fuse_reply_err (req, ENOENT); - return; - } - - if (xdp_inode_stat (child_inode, &e.attr) != 0) - { - fuse_reply_err (req, errno); - return; - } - - e.ino = child_inode->ino; - - g_debug ("xdp_fuse_lookup <- inode %lx", (long) e.ino); - xdp_inode_ref (child_inode); /* Ref given to the kernel, returned in xdp_fuse_forget() */ - fuse_reply_entry (req, &e); -} - -static void -xdp_fuse_forget (fuse_req_t req, fuse_ino_t ino, unsigned long nlookup) -{ - g_autoptr(XdpInode) inode = NULL; - g_debug ("xdp_fuse_forget %lx %ld -> ", ino, nlookup); - - inode = xdp_inode_lookup (ino); - if (inode == NULL) - { - g_warning ("xdp_fuse_forget, unknown inode"); - } - else - { - while (nlookup > 0) - { - xdp_inode_unref (inode); - nlookup--; - } - } - - fuse_reply_none (req); -} - -struct dirbuf -{ - char *p; - size_t size; -}; - -static void -dirbuf_add (fuse_req_t req, - struct dirbuf *b, - const char *name, - fuse_ino_t ino, - mode_t mode) -{ - struct stat stbuf; - - size_t oldsize = b->size; - - b->size += fuse_add_direntry (req, NULL, 0, name, NULL, 0); - b->p = (char *) g_realloc (b->p, b->size); - memset (&stbuf, 0, sizeof (stbuf)); - stbuf.st_ino = ino; - stbuf.st_mode = mode; - fuse_add_direntry (req, b->p + oldsize, - b->size - oldsize, - name, &stbuf, - b->size); -} - -static void -dirbuf_add_docs (fuse_req_t req, - struct dirbuf *b, - const char *app_id) -{ - g_auto(GStrv) docs = NULL; - fuse_ino_t ino; - int i; - - docs = xdp_list_docs (); - for (i = 0; docs[i] != NULL; i++) - { - if (app_id) - { - g_autoptr(FlatpakDbEntry) entry = xdp_lookup_doc (docs[i]); - if (entry == NULL || - !app_can_see_doc (entry, app_id)) - continue; - } - ino = get_dir_inode_nr (app_id, docs[i]); - dirbuf_add (req, b, docs[i], ino, S_IFDIR); - } -} - -static int -reply_buf_limited (fuse_req_t req, - const char *buf, - size_t bufsize, - off_t off, - size_t maxsize) -{ - if (off < bufsize) - return fuse_reply_buf (req, buf + off, - MIN (bufsize - off, maxsize)); - else - return fuse_reply_buf (req, NULL, 0); -} - -static void -xdp_fuse_readdir (fuse_req_t req, fuse_ino_t ino, size_t size, - off_t off, struct fuse_file_info *fi) -{ - struct dirbuf *b = (struct dirbuf *) (gsize) (fi->fh); - - reply_buf_limited (req, b->p, b->size, off, size); -} - -static void -xdp_fuse_opendir (fuse_req_t req, - fuse_ino_t ino, - struct fuse_file_info *fi) -{ - g_autoptr(XdpInode) inode = NULL; - struct dirbuf b = {0}; - - g_debug ("xdp_fuse_opendir %lx", ino); - - inode = xdp_inode_lookup (ino); - if (inode == NULL) - { - g_debug ("xdp_fuse_opendir <- error ENOENT"); - fuse_reply_err (req, ENOENT); - return; - } - - switch (inode->type) - { - case XDP_INODE_ROOT: - dirbuf_add (req, &b, ".", ROOT_INODE, S_IFDIR); - dirbuf_add (req, &b, "..", ROOT_INODE, S_IFDIR); - dirbuf_add (req, &b, BY_APP_NAME, BY_APP_INODE, S_IFDIR); - dirbuf_add_docs (req, &b, NULL); - break; - - case XDP_INODE_BY_APP: - { - g_auto(GStrv) db_app_ids = NULL; - g_auto(GStrv) app_ids = NULL; - int i; - - dirbuf_add (req, &b, ".", BY_APP_INODE, S_IFDIR); - dirbuf_add (req, &b, "..", ROOT_INODE, S_IFDIR); - - /* Ensure that all apps from db are allocated */ - db_app_ids = xdp_list_apps (); - allocate_app_dir_inode_nr (db_app_ids); - - /* But return all allocated dirs. We might have app dirs - that have no permissions, and are thus not in the db */ - app_ids = get_allocated_app_dirs (); - for (i = 0; app_ids[i] != NULL; i++) - dirbuf_add (req, &b, app_ids[i], - get_dir_inode_nr (app_ids[i], NULL), S_IFDIR); - } - break; - - case XDP_INODE_APP_DIR: - dirbuf_add (req, &b, ".", inode->ino, S_IFDIR); - dirbuf_add (req, &b, "..", BY_APP_INODE, S_IFDIR); - dirbuf_add_docs (req, &b, inode->app_id); - break; - - case XDP_INODE_DOC_FILE: - fuse_reply_err (req, ENOTDIR); - break; - - case XDP_INODE_APP_DOC_DIR: - case XDP_INODE_DOC_DIR: - { - GList *children, *l; - g_autoptr(XdpInode) doc_inode = NULL; - g_autoptr(FlatpakDbEntry) entry = NULL; - - entry = xdp_lookup_doc (inode->doc_id); - if (entry == NULL) - { - fuse_reply_err (req, ENOENT); - break; - } - - dirbuf_add (req, &b, ".", inode->ino, S_IFDIR); - dirbuf_add (req, &b, "..", inode->parent->ino, S_IFDIR); - - /* Ensure it is alive at least during list_children () */ - doc_inode = xdp_inode_ensure_document_file (inode); - - children = xdp_inode_list_children (inode); - - for (l = children; l != NULL; l = l->next) - { - struct stat stbuf; - XdpInode *child = l->data; - g_autofree char *filename = xdp_inode_get_filename (child); - if (filename != NULL && xdp_inode_stat (child, &stbuf) == 0) - dirbuf_add (req, &b, filename, child->ino, stbuf.st_mode); - xdp_inode_unref (child); - } - g_list_free (children); - } - break; - - default: - g_assert_not_reached (); - } - - if (b.p != NULL) - { - fi->fh = (gsize) g_memdup (&b, sizeof (b)); - if (fuse_reply_open (req, fi) == -ENOENT) - { - g_free (b.p); - g_free ((gpointer) (gsize) (fi->fh)); - } - } -} - -static void -xdp_fuse_releasedir (fuse_req_t req, - fuse_ino_t ino, - struct fuse_file_info *fi) -{ - struct dirbuf *b = (struct dirbuf *) (gsize) (fi->fh); - - g_free (b->p); - g_free (b); - fuse_reply_err (req, 0); -} - - - -static void -xdp_fuse_getattr (fuse_req_t req, - fuse_ino_t ino, - struct fuse_file_info *fi) -{ - g_autoptr(XdpInode) inode = NULL; - struct stat stbuf = { 0 }; - - g_debug ("xdp_fuse_getattr %lx (fi=%p)", ino, fi); - - inode = xdp_inode_lookup (ino); - if (inode == NULL) - { - g_debug ("xdp_fuse_getattr <- error ENOENT"); - fuse_reply_err (req, ENOENT); - return; - } - - if (xdp_inode_stat (inode, &stbuf) != 0) - { - fuse_reply_err (req, errno); - return; - } - - fuse_reply_attr (req, &stbuf, ATTR_CACHE_TIME); -} - -static void -xdp_fuse_fsyncdir (fuse_req_t req, - fuse_ino_t ino, - int datasync, - struct fuse_file_info *fi) -{ - g_autoptr(XdpInode) inode = NULL; - - g_debug ("xdp_fuse_fsyncdir %lx %p", ino, fi); - - inode = xdp_inode_lookup (ino); - if (inode == NULL) - { - g_debug ("xdp_fuse_fsyncdir <- error ENOENT"); - fuse_reply_err (req, ENOENT); - return; - } - - if (inode->type == XDP_INODE_APP_DOC_DIR || - inode->type == XDP_INODE_DOC_DIR) - { - g_autoptr(FlatpakDbEntry) entry = xdp_lookup_doc (inode->doc_id); - if (entry != NULL) - { - g_autofree char *dirname = xdp_entry_dup_dirname (entry); - int fd = open (dirname, O_DIRECTORY | O_RDONLY); - if (fd >= 0) - { - if (datasync) - fdatasync (fd); - else - fsync (fd); - close (fd); - } - } - } - - fuse_reply_err (req, 0); -} - -static XdpFile * -xdp_file_new (XdpInode *inode, - int open_mode) -{ - XdpFile *file = g_new (XdpFile, 1); - - file->inode = xdp_inode_ref (inode); - file->open_mode = open_mode; - - return file; -} - -/* Call with mutex held */ -static void -xdp_inode_locked_close_unneeded_fds (XdpInode *inode) -{ - gboolean has_open_for_write = FALSE; - GList *l; - - for (l = inode->open_files; l != NULL; l = l->next) - { - XdpFile *file = l->data; - - if (file->open_mode != O_RDONLY) - { - has_open_for_write = TRUE; - break; - } - } - - if (!has_open_for_write) - { - if (inode->truncated) - { - if (inode->open_files != NULL && inode->fd != -1) - { - /* We're not going to close the ->fd, so we repoint it to the trunc_fd, but reopened O_RDONLY */ - close (inode->fd); - inode->fd = reopen_fd (inode->trunc_fd, O_RDONLY); - } - - if (inode->filename != NULL) - { - /* not removed, replace original */ - fsync (inode->trunc_fd); - g_free (inode->backing_filename); - inode->backing_filename = g_strdup (inode->filename); - g_debug ("moving %s to %s", inode->trunc_filename, inode->backing_filename); - if (renameat (inode->dir_fd, inode->trunc_filename, - inode->dir_fd, inode->backing_filename) != 0) - g_warning ("Unable to replace truncated document: %s", g_strerror (errno)); - } - - inode->truncated = FALSE; - } - else if (inode->trunc_filename != NULL) - { - unlinkat (inode->dir_fd, inode->trunc_filename, 0); - g_debug ("unlinked truc_filename %s", inode->trunc_filename); - } - - if (inode->trunc_fd != -1) - { - close (inode->trunc_fd); - inode->trunc_fd = -1; - g_free (inode->trunc_filename); - inode->trunc_filename = NULL; - } - } - - if (inode->open_files == NULL) - { - if (inode->fd != -1) - { - close (inode->fd); - inode->fd = -1; - } - - if (inode->dir_fd != -1) - { - close (inode->dir_fd); - inode->dir_fd = -1; - } - } -} - -static void -xdp_file_free (XdpFile *file) -{ - XdpInode *inode = file->inode; - - g_mutex_lock (&inode->mutex); - inode->open_files = g_list_remove (inode->open_files, file); - - xdp_inode_locked_close_unneeded_fds (inode); - - g_mutex_unlock (&inode->mutex); - xdp_inode_unref (inode); - g_free (file); -} - -/* sets errno */ -static int -xdp_inode_locked_ensure_fd_open (XdpInode *inode, - FlatpakDbEntry *entry, - gboolean for_write) -{ - /* Ensure all fds are open */ - if (inode->dir_fd == -1) - { - inode->dir_fd = xdp_inode_open_dir_fd (inode->parent); - if (inode->dir_fd == -1) - return -1; - } - - if (for_write) - { - if (faccessat (inode->dir_fd, inode->backing_filename, W_OK, 0) != 0) - return -1; - } - - if (inode->fd == -1) - { - int mode = O_NOFOLLOW | O_CLOEXEC; - - if (inode->is_doc) - mode |= O_RDONLY; - else - mode |= O_RDWR; - - inode->fd = openat (inode->dir_fd, inode->backing_filename, mode); - if (inode->fd < 0) - return -1; - } - - if (inode->is_doc && for_write && inode->trunc_fd == -1) - { - struct stat st_buf; - mode_t mode = 0600; - - if (fstat (inode->fd, &st_buf) == 0) - mode = get_user_perms (&st_buf); - - g_assert (inode->trunc_filename == NULL); - inode->trunc_filename = create_tmp_for_doc (inode->parent, inode->dir_fd, O_RDWR, mode, - &inode->trunc_fd); - if (inode->trunc_filename == NULL) - return -1; - } - - return 0; -} - -static void -xdp_fuse_open (fuse_req_t req, - fuse_ino_t ino, - struct fuse_file_info *fi) -{ - g_autoptr(XdpInode) inode = NULL; - g_autoptr(FlatpakDbEntry) entry = NULL; - gboolean can_write; - int open_mode; - XdpFile *file = NULL; - int errsv; - - g_debug ("xdp_fuse_open %lx flags %o", ino, fi->flags); - - inode = xdp_inode_lookup (ino); - if (inode == NULL) - { - g_debug ("xdp_fuse_open <- no inode error ENOENT"); - fuse_reply_err (req, ENOENT); - return; - } - - if (inode->type != XDP_INODE_DOC_FILE) - { - g_debug ("xdp_fuse_open <- error EISDIR"); - fuse_reply_err (req, EISDIR); - return; - } - - entry = xdp_lookup_doc (inode->doc_id); - if (entry == NULL || - !app_can_see_doc (entry, inode->app_id)) - { - g_debug ("xdp_fuse_open <- no entry error ENOENT"); - fuse_reply_err (req, ENOENT); - return; - } - - can_write = app_can_write_doc (entry, inode->app_id); - - open_mode = fi->flags & 3; - - if (open_mode != O_RDONLY && !can_write) - { - g_debug ("xdp_fuse_open <- no write EACCES"); - fuse_reply_err (req, EACCES); - return; - } - - g_mutex_lock (&inode->mutex); - - if (xdp_inode_locked_ensure_fd_open (inode, entry, - open_mode != O_RDONLY) == 0) - { - file = xdp_file_new (inode, open_mode); - inode->open_files = g_list_prepend (inode->open_files, file); - errsv = 0; - } - else - { - errsv = errno; - xdp_inode_locked_close_unneeded_fds (inode); - } - - g_mutex_unlock (&inode->mutex); - - if (file != NULL) - { - fi->fh = (gsize) file; - if (fuse_reply_open (req, fi)) - xdp_file_free (file); - } - else - { - fuse_reply_err (req, errsv); - } -} - - -static void -xdp_fuse_create (fuse_req_t req, - fuse_ino_t parent, - const char *filename, - mode_t mode, - struct fuse_file_info *fi) -{ - g_autoptr(XdpInode) parent_inode = NULL; - g_autoptr(FlatpakDbEntry) entry = NULL; - struct fuse_entry_param e = {0}; - gboolean can_see, can_write; - int open_mode; - XdpFile *file = NULL; - XdpInode *inode; - int errsv; - - g_debug ("xdp_fuse_create %lx/%s, flags %o", parent, filename, fi->flags); - - parent_inode = xdp_inode_lookup (parent); - if (parent_inode == NULL) - { - g_debug ("xdp_fuse_create <- error parent ENOENT"); - fuse_reply_err (req, ENOENT); - return; - } - - if (parent_inode->type == XDP_INODE_DOC_FILE) - { - g_debug ("xdp_fuse_create <- error parent ENOTDIR"); - fuse_reply_err (req, ENOTDIR); - return; - } - - if (parent_inode->type != XDP_INODE_APP_DOC_DIR && - parent_inode->type != XDP_INODE_DOC_DIR) - { - fuse_reply_err (req, EACCES); - return; - } - - entry = xdp_lookup_doc (parent_inode->doc_id); - if (entry == NULL) - { - fuse_reply_err (req, ENOENT); - return; - } - - can_see = app_can_see_doc (entry, parent_inode->app_id); - if (!can_see) - { - fuse_reply_err (req, ENOENT); - return; - } - - can_write = app_can_write_doc (entry, parent_inode->app_id); - if (!can_write) - { - fuse_reply_err (req, EACCES); - return; - } - - inode = xdp_inode_create_file (parent_inode, filename, - mode, - (fi->flags & O_TRUNC) != 0, - (fi->flags & O_EXCL) != 0); - if (inode == NULL) - { - fuse_reply_err (req, errno); - return; - } - - g_mutex_lock (&inode->mutex); - - open_mode = fi->flags & 3; - - if (xdp_inode_locked_ensure_fd_open (inode, entry, - open_mode != O_RDONLY) == 0) - { - file = xdp_file_new (inode, open_mode); - inode->open_files = g_list_prepend (inode->open_files, file); - errsv = 0; - } - else - { - errsv = errno; - xdp_inode_locked_close_unneeded_fds (inode); - } - - g_mutex_unlock (&inode->mutex); - - if (file != NULL) - { - if (xdp_inode_stat (inode, &e.attr) != 0) - { - xdp_file_free (file); - fuse_reply_err (req, errno); - return; - } - - e.ino = inode->ino; - if (inode->is_doc) - { - e.attr_timeout = 0; - e.entry_timeout = 0; - } - else - { - e.attr_timeout = ATTR_CACHE_TIME; - e.entry_timeout = ENTRY_CACHE_TIME; - } - - xdp_inode_ref (inode); /* Ref given to the kernel, returned in xdp_fuse_forget() */ - - fi->fh = (gsize) file; - if (fuse_reply_create (req, &e, fi)) - { - xdp_file_free (file); - xdp_inode_unref (inode); - } - } - else - { - fuse_reply_err (req, errsv); - } -} - -static void -xdp_fuse_read (fuse_req_t req, - fuse_ino_t ino, - size_t size, - off_t off, - struct fuse_file_info *fi) -{ - XdpFile *file = (gpointer) (gsize) fi->fh; - XdpInode *inode = file->inode; - struct fuse_bufvec bufv = FUSE_BUFVEC_INIT (size); - int fd; - - g_debug ("xdp_fuse_real %lx %ld %ld", ino, (long) size, (long) off); - - g_mutex_lock (&inode->mutex); - - fd = xdp_inode_locked_get_fd (inode); - if (fd == -1) - { - static char c = 'x'; - bufv.buf[0].flags = 0; - bufv.buf[0].mem = &c; - bufv.buf[0].size = 0; - - fuse_reply_data (req, &bufv, FUSE_BUF_NO_SPLICE); - } - else - { - bufv.buf[0].flags = FUSE_BUF_IS_FD | FUSE_BUF_FD_SEEK; - bufv.buf[0].fd = fd; - bufv.buf[0].pos = off; - - fuse_reply_data (req, &bufv, FUSE_BUF_SPLICE_MOVE); - } - - g_mutex_unlock (&inode->mutex); -} - -static void -xdp_fuse_release (fuse_req_t req, - fuse_ino_t ino, - struct fuse_file_info *fi) -{ - XdpFile *file = (gpointer) (gsize) fi->fh; - - g_debug ("xdp_fuse_release %lx (fi=%p)", ino, fi); - - xdp_file_free (file); - fuse_reply_err (req, 0); -} - -static int -truncateat (int dir_fd, const char *filename, int size) -{ - int fd; - int errsv, res; - - fd = openat (dir_fd, filename, O_RDWR); - if (fd == -1) - return -1; - - res = ftruncate (fd, size); - errsv = errno; - - close (fd); - - errno = errsv; - return res; -} - -static void -xdp_fuse_setattr (fuse_req_t req, - fuse_ino_t ino, - struct stat *attr, - int to_set, - struct fuse_file_info *fi) -{ - g_autoptr(XdpInode) inode = NULL; - g_autoptr(FlatpakDbEntry) entry = NULL; - double attr_cache_time = ATTR_CACHE_TIME; - struct stat newattr = {0}; - gboolean can_write; - int res = 0; - - g_debug ("xdp_fuse_setattr %lx %x %p", ino, to_set, fi); - - inode = xdp_inode_lookup (ino); - if (inode == NULL) - { - g_debug ("xdp_fuse_setattr <- error ENOENT"); - fuse_reply_err (req, ENOENT); - return; - } - - if (inode->type != XDP_INODE_DOC_FILE) - { - g_debug ("xdp_fuse_setattr <- not file ENOSYS"); - fuse_reply_err (req, ENOSYS); - return; - } - - entry = xdp_lookup_doc (inode->doc_id); - if (entry == NULL || - !app_can_see_doc (entry, inode->app_id)) - { - g_debug ("xdp_fuse_setattr <- no entry error ENOENT"); - fuse_reply_err (req, ENOENT); - return; - } - - can_write = app_can_write_doc (entry, inode->app_id); - - if (to_set == FUSE_SET_ATTR_SIZE) - { - g_mutex_lock (&inode->mutex); - - if (!can_write) - { - res = EACCES; - } - else if (inode->is_doc) - { - /* Only allow ftruncate with the file open for write. We could - * allow a truncate, but it would have to be implemented as - * an atomic-replace-with-empty-file to not affect other apps - * having the file open. - * Also, only support truncate-to-zero on first truncation, to - * avoid having to copy lots of data from the old file to the - * trunc_fd. - */ - if (inode->trunc_fd == -1) - { - res = EACCES; - } - else if (!inode->truncated && attr->st_size != 0) - { - res = ENOSYS; - } - else - { - if (ftruncate (inode->trunc_fd, attr->st_size) != 0) - { - res = errno; - } - else if (!inode->truncated) - { - inode->truncated = TRUE; - g_free (inode->backing_filename); - inode->backing_filename = g_strdup (inode->trunc_filename); - } - } - } - else - { - if (inode->fd) - { - if (ftruncate (inode->fd, attr->st_size) != 0) - res = errno; - } - else - { - glnx_autofd int dir_fd = xdp_inode_open_dir_fd (inode->parent); - if (dir_fd == -1 || - truncateat (dir_fd, inode->backing_filename, attr->st_size) != 0) - res = errno; - } - } - g_mutex_unlock (&inode->mutex); - } - else if (to_set == FUSE_SET_ATTR_MODE) - { - if (!can_write) - { - res = EACCES; - } - else - { - int fd = xdp_inode_locked_get_write_fd (inode); - if (fd == -1 || - fchmod (fd, get_user_perms (attr)) != 0) - res = errno; - } - } - else - { - res = ENOSYS; - } - - if (res != 0) - { - fuse_reply_err (req, res); - } - else - { - if (xdp_inode_stat (inode, &newattr) != 0) - fuse_reply_err (req, errno); - else - fuse_reply_attr (req, &newattr, attr_cache_time); - } -} - -static void -xdp_fuse_write (fuse_req_t req, - fuse_ino_t ino, - const char *buf, - size_t size, - off_t off, - struct fuse_file_info *fi) -{ - XdpFile *file = (gpointer) (gsize) fi->fh; - XdpInode *inode = file->inode; - int fd; - int res; - - g_debug ("xdp_fuse_write %lx %ld %ld", ino, (long) size, (long) off); - - g_mutex_lock (&inode->mutex); - - fd = xdp_inode_locked_get_write_fd (inode); - if (fd < 0) - { - fuse_reply_err (req, errno); - } - else - { - res = pwrite (fd, buf, size, off); - if (res < 0) - fuse_reply_err (req, errno); - else - fuse_reply_write (req, res); - } - - g_mutex_unlock (&inode->mutex); -} - -static void -xdp_fuse_write_buf (fuse_req_t req, - fuse_ino_t ino, - struct fuse_bufvec *bufv, - off_t off, - struct fuse_file_info *fi) -{ - XdpFile *file = (gpointer) (gsize) fi->fh; - struct fuse_bufvec dst = FUSE_BUFVEC_INIT (fuse_buf_size (bufv)); - XdpInode *inode = file->inode; - int fd; - int res; - - g_debug ("xdp_fuse_write_buf %lx %ld", ino, (long) off); - - g_mutex_lock (&inode->mutex); - - fd = xdp_inode_locked_get_write_fd (inode); - if (fd == -1) - { - g_debug ("xdp_fuse_write_buf <- error %s", strerror (errno)); - fuse_reply_err (req, errno); - } - else - { - dst.buf[0].flags = FUSE_BUF_IS_FD | FUSE_BUF_FD_SEEK; - dst.buf[0].fd = fd; - dst.buf[0].pos = off; - - res = fuse_buf_copy (&dst, bufv, FUSE_BUF_SPLICE_NONBLOCK); - if (res < 0) - fuse_reply_err (req, -res); - else - fuse_reply_write (req, res); - } - - g_mutex_unlock (&inode->mutex); -} - -static void -xdp_fuse_fsync (fuse_req_t req, - fuse_ino_t ino, - int datasync, - struct fuse_file_info *fi) -{ - g_autoptr(XdpInode) inode = NULL; - int fd; - int res = 0; - - g_debug ("xdp_fuse_fsync %lx", ino); - - inode = xdp_inode_lookup (ino); - if (inode == NULL) - { - g_debug ("xdp_fuse_setattr <- error ENOENT"); - fuse_reply_err (req, ENOENT); - return; - } - - if (inode->type == XDP_INODE_DOC_FILE) - { - g_mutex_lock (&inode->mutex); - - fd = xdp_inode_locked_get_write_fd (inode); - if (fd != -1 && fsync (fd) != 0) - res = errno; - - g_mutex_unlock (&inode->mutex); - } - - fuse_reply_err (req, res); -} - -static void -xdp_fuse_unlink (fuse_req_t req, - fuse_ino_t parent, - const char *filename) -{ - g_autoptr(XdpInode) parent_inode = NULL; - g_autoptr(XdpInode) child_inode = NULL; - - g_debug ("xdp_fuse_unlink %lx/%s", parent, filename); - - parent_inode = xdp_inode_lookup (parent); - if (parent_inode == NULL) - { - g_debug ("xdp_fuse_lookup <- error parent ENOENT"); - fuse_reply_err (req, ENOENT); - return; - } - - if (parent_inode->type == XDP_INODE_DOC_FILE) - { - fuse_reply_err (req, ENOTDIR); - return; - } - - if (parent_inode->type != XDP_INODE_APP_DOC_DIR && - parent_inode->type != XDP_INODE_DOC_DIR) - { - fuse_reply_err (req, EACCES); - return; - } - - child_inode = xdp_inode_unlink_child (parent_inode, filename); - if (child_inode == NULL) - { - fuse_reply_err (req, ENOENT); - return; - } - - fuse_reply_err (req, 0); -} - -static void -xdp_fuse_rename (fuse_req_t req, - fuse_ino_t parent, - const char *name, - fuse_ino_t newparent, - const char *newname) -{ - g_autoptr(XdpInode) parent_inode = NULL; - g_autoptr(FlatpakDbEntry) entry = NULL; - gboolean can_see, can_write; - - g_debug ("xdp_fuse_rename %lx/%s -> %lx/%s", parent, name, newparent, newname); - - parent_inode = xdp_inode_lookup (parent); - if (parent_inode == NULL) - { - g_debug ("xdp_fuse_rename <- error parent ENOENT"); - fuse_reply_err (req, ENOENT); - return; - } - - if (parent_inode->type == XDP_INODE_DOC_FILE) - { - fuse_reply_err (req, ENOTDIR); - return; - } - - if (parent_inode->type != XDP_INODE_APP_DOC_DIR && - parent_inode->type != XDP_INODE_DOC_DIR) - { - fuse_reply_err (req, EACCES); - return; - } - - if (newparent != parent) - { - g_debug ("xdp_fuse_rename <- error different parents EACCES"); - fuse_reply_err (req, EACCES); - return; - } - - if (strcmp (name, newname) == 0) - { - fuse_reply_err (req, 0); - return; - } - - entry = xdp_lookup_doc (parent_inode->doc_id); - if (entry == NULL) - { - fuse_reply_err (req, ENOENT); - return; - } - - can_see = app_can_see_doc (entry, parent_inode->app_id); - can_write = app_can_write_doc (entry, parent_inode->app_id); - - if (!can_see) - { - fuse_reply_err (req, ENOENT); - return; - } - - if (!can_write) - { - fuse_reply_err (req, EACCES); - return; - } - - if (xdp_inode_rename_child (parent_inode, name, newname) != 0) - fuse_reply_err (req, errno); - else - fuse_reply_err (req, 0); -} - -static void -xdp_fuse_access (fuse_req_t req, fuse_ino_t ino, int mask) -{ - g_autoptr(XdpInode) inode = NULL; - g_autoptr(FlatpakDbEntry) entry = NULL; - - g_debug ("xdp_fuse_access %lx %d", ino, mask); - - if (mask != F_OK && (mask & ~(R_OK|W_OK|X_OK)) != 0) - { - g_debug ("xdp_fuse_access <- error EINVAL"); - fuse_reply_err (req, EINVAL); - return; - } - - inode = xdp_inode_lookup (ino); - if (inode == NULL) - { - g_debug ("xdp_fuse_access <- error ENOENT"); - fuse_reply_err (req, ENOENT); - return; - } - - if (inode->type != XDP_INODE_DOC_FILE) - { - int dir_mask = 0; - - switch (inode->type) - { - case XDP_INODE_ROOT: - case XDP_INODE_BY_APP: - case XDP_INODE_APP_DIR: - dir_mask = R_OK | X_OK; - break; - case XDP_INODE_APP_DOC_DIR: - case XDP_INODE_DOC_DIR: - dir_mask = R_OK | X_OK | W_OK; - break; - - default: - g_assert_not_reached (); - } - - if (mask != F_OK && ((mask & dir_mask) != mask)) - { - fuse_reply_err (req, EACCES); - return; - } - } - else /* A file */ - { - entry = xdp_lookup_doc (inode->doc_id); - if (entry == NULL || - !app_can_see_doc (entry, inode->app_id)) - { - g_debug ("xdp_fuse_access <- no entry error ENOENT"); - fuse_reply_err (req, ENOENT); - return; - } - - if (mask == F_OK) - { - if (!app_can_see_doc (entry, inode->app_id)) - { - fuse_reply_err (req, EACCES); - return; - } - } - else - { - if (((mask & R_OK) && !app_can_see_doc (entry, inode->app_id)) || - ((mask & W_OK) && !app_can_write_doc (entry, inode->app_id)) || - (mask & X_OK)) - { - fuse_reply_err (req, EACCES); - return; - } - } - } - - fuse_reply_err (req, 0); -} - -static struct fuse_lowlevel_ops xdp_fuse_oper = { - .lookup = xdp_fuse_lookup, - .forget = xdp_fuse_forget, - .getattr = xdp_fuse_getattr, - .opendir = xdp_fuse_opendir, - .readdir = xdp_fuse_readdir, - .releasedir = xdp_fuse_releasedir, - .fsyncdir = xdp_fuse_fsyncdir, - .open = xdp_fuse_open, - .read = xdp_fuse_read, - .release = xdp_fuse_release, - .setattr = xdp_fuse_setattr, - .write = xdp_fuse_write, - .write_buf = xdp_fuse_write_buf, - .fsync = xdp_fuse_fsync, - .create = xdp_fuse_create, - .unlink = xdp_fuse_unlink, - .rename = xdp_fuse_rename, - .access = xdp_fuse_access, -}; - -/* Called when a apps permissions to see a document is changed, - and with null opt_app_id when the doc is created/removed */ -void -xdp_fuse_invalidate_doc_app (const char *doc_id, - const char *opt_app_id) -{ - g_autoptr(XdpInode) inode = NULL; - fuse_ino_t ino; - GList *l; - - /* This can happen if fuse is not initialized yet for the very - first dbus message that activated the service */ - if (main_ch == NULL) - return; - - g_debug ("invalidate %s/%s", doc_id, opt_app_id ? opt_app_id : "*"); - - AUTOLOCK (inodes); - ino = get_dir_inode_nr_unlocked (opt_app_id, doc_id); - inode = xdp_inode_lookup_unlocked (ino); - if (inode != NULL) - { - fuse_lowlevel_notify_inval_inode (main_ch, inode->ino, 0, 0); - fuse_lowlevel_notify_inval_entry (main_ch, inode->parent->ino, - inode->filename, strlen (inode->filename)); - - for (l = inode->children; l != NULL; l = l->next) - { - XdpInode *child = l->data; - - fuse_lowlevel_notify_inval_inode (main_ch, child->ino, 0, 0); - if (child->filename != NULL) - fuse_lowlevel_notify_inval_entry (main_ch, inode->ino, - child->filename, strlen (child->filename)); - } - } -} - -char * -xdp_fuse_lookup_id_for_inode (ino_t ino) -{ - g_autoptr(XdpInode) inode = NULL; - - inode = xdp_inode_lookup (ino); - if (inode == NULL) - return NULL; - - if (inode->type != XDP_INODE_DOC_FILE || - !inode->is_doc) - return NULL; - - return g_strdup (inode->doc_id); -} - -const char * -xdp_fuse_get_mountpoint (void) -{ - if (mount_path == NULL) - mount_path = g_build_filename (g_get_user_runtime_dir (), "doc", NULL); - return mount_path; -} - -void -xdp_fuse_exit (void) -{ - if (session) - fuse_session_exit (session); - - if (fuse_pthread) - pthread_kill (fuse_pthread, SIGHUP); - - if (fuse_thread) - g_thread_join (fuse_thread); -} - -static gpointer -xdp_fuse_mainloop (gpointer data) -{ - fuse_pthread = pthread_self (); - - fuse_session_loop_mt (session); - - fuse_session_remove_chan (main_ch); - fuse_session_destroy (session); - fuse_unmount (mount_path, main_ch); - return NULL; -} - -gboolean -xdp_fuse_init (GError **error) -{ - char *argv[] = { "xdp-fuse", "-osplice_write,splice_move" }; - struct fuse_args args = FUSE_ARGS_INIT (G_N_ELEMENTS (argv), argv); - struct stat st; - struct statfs stfs; - const char *path; - int statfs_res; - - inodes = - g_hash_table_new_full (g_direct_hash, g_direct_equal, NULL, NULL); - root_inode = xdp_inode_new (ROOT_INODE, XDP_INODE_ROOT, NULL, "/", NULL, NULL); - by_app_inode = xdp_inode_new (BY_APP_INODE, XDP_INODE_BY_APP, root_inode, BY_APP_NAME, NULL, NULL); - dir_to_inode_nr = - g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL); - - path = xdp_fuse_get_mountpoint (); - if ((stat (path, &st) == -1 && errno == ENOTCONN) || - (((statfs_res = statfs (path, &stfs)) == -1 && errno == ENOTCONN) || - (statfs_res == 0 && stfs.f_type == 0x65735546 /* fuse */))) - { - int count; - char *umount_argv[] = { "fusermount", "-u", "-z", (char *) path, NULL }; - - g_spawn_sync (NULL, umount_argv, NULL, G_SPAWN_SEARCH_PATH, - NULL, NULL, NULL, NULL, NULL, NULL); - - g_usleep (10000); /* 10ms */ - count = 0; - while (stat (path, &st) == -1 && count < 10) - g_usleep (10000); /* 10ms */ - } - - if (g_mkdir_with_parents (path, 0700)) - { - g_set_error (error, FLATPAK_PORTAL_ERROR, FLATPAK_PORTAL_ERROR_FAILED, - "Unable to create dir %s", path); - return FALSE; - } - - main_ch = fuse_mount (path, &args); - if (main_ch == NULL) - { - g_set_error (error, FLATPAK_PORTAL_ERROR, FLATPAK_PORTAL_ERROR_FAILED, "Can't mount fuse fs"); - return FALSE; - } - - session = fuse_lowlevel_new (&args, &xdp_fuse_oper, - sizeof (xdp_fuse_oper), NULL); - if (session == NULL) - { - g_set_error (error, FLATPAK_PORTAL_ERROR, FLATPAK_PORTAL_ERROR_FAILED, - "Can't create fuse session"); - return FALSE; - } - fuse_session_add_chan (session, main_ch); - - fuse_thread = g_thread_new ("fuse mainloop", xdp_fuse_mainloop, session); - - return TRUE; -} diff --git a/document-portal/xdp-fuse.h b/document-portal/xdp-fuse.h deleted file mode 100644 index e208b53d..00000000 --- a/document-portal/xdp-fuse.h +++ /dev/null @@ -1,23 +0,0 @@ -#ifndef XDP_FUSE_H -#define XDP_FUSE_H - -#include -#include "flatpak-db.h" - -G_BEGIN_DECLS - -char ** xdp_list_apps (void); -char ** xdp_list_docs (void); -FlatpakDbEntry *xdp_lookup_doc (const char *doc_id); - -gboolean xdp_fuse_init (GError **error); -void xdp_fuse_exit (void); -const char *xdp_fuse_get_mountpoint (void); -void xdp_fuse_invalidate_doc_app (const char *doc_id, - const char *opt_app_id); -char *xdp_fuse_lookup_id_for_inode (ino_t inode); - - -G_END_DECLS - -#endif /* XDP_FUSE_H */ diff --git a/document-portal/xdp-main.c b/document-portal/xdp-main.c deleted file mode 100644 index ec81a0c7..00000000 --- a/document-portal/xdp-main.c +++ /dev/null @@ -1,1377 +0,0 @@ -#include "config.h" - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include "xdp-dbus.h" -#include "xdp-util.h" -#include "flatpak-db.h" -#include "flatpak-dbus.h" -#include "flatpak-utils.h" -#include "flatpak-dir.h" -#include "flatpak-run.h" -#include "flatpak-portal-error.h" -#include "permission-store/permission-store-dbus.h" -#include "xdp-fuse.h" - -#include - -#define TABLE_NAME "documents" - -typedef struct -{ - char *doc_id; - int fd; - char *owner; - guint flags; - - GDBusMethodInvocation *finish_invocation; -} XdpDocUpdate; - - -static GMainLoop *loop = NULL; -static FlatpakDb *db = NULL; -static XdgPermissionStore *permission_store; -static int daemon_event_fd = -1; -static int final_exit_status = 0; -static GError *exit_error = NULL; -static dev_t fuse_dev = 0; -static GQueue get_mount_point_invocations = G_QUEUE_INIT; -static XdpDbusDocuments *dbus_api; - -G_LOCK_DEFINE (db); - -char ** -xdp_list_apps (void) -{ - AUTOLOCK (db); - return flatpak_db_list_apps (db); -} - -char ** -xdp_list_docs (void) -{ - AUTOLOCK (db); - return flatpak_db_list_ids (db); -} - -FlatpakDbEntry * -xdp_lookup_doc (const char *doc_id) -{ - AUTOLOCK (db); - return flatpak_db_lookup (db, doc_id); -} - -static gboolean -persist_entry (FlatpakDbEntry *entry) -{ - guint32 flags = xdp_entry_get_flags (entry); - - return (flags & XDP_ENTRY_FLAG_TRANSIENT) == 0; -} - -static void -do_set_permissions (FlatpakDbEntry *entry, - const char *doc_id, - const char *app_id, - XdpPermissionFlags perms) -{ - g_autofree const char **perms_s = xdg_unparse_permissions (perms); - - g_autoptr(FlatpakDbEntry) new_entry = NULL; - - g_debug ("set_permissions %s %s %x", doc_id, app_id, perms); - - new_entry = flatpak_db_entry_set_app_permissions (entry, app_id, perms_s); - flatpak_db_set_entry (db, doc_id, new_entry); - - if (persist_entry (new_entry)) - { - xdg_permission_store_call_set_permission (permission_store, - TABLE_NAME, - FALSE, - doc_id, - app_id, - perms_s, - NULL, - NULL, NULL); - } -} - -static void -portal_grant_permissions (GDBusMethodInvocation *invocation, - GVariant *parameters, - const char *app_id) -{ - g_autoptr(GError) my_error = NULL; - const char *target_app_id; - const char *id; - g_autofree const char **permissions = NULL; - XdpPermissionFlags perms; - - g_autoptr(FlatpakDbEntry) entry = NULL; - - g_variant_get (parameters, "(&s&s^a&s)", &id, &target_app_id, &permissions); - - { - AUTOLOCK (db); - - entry = flatpak_db_lookup (db, id); - if (entry == NULL) - { - g_dbus_method_invocation_return_error (invocation, - FLATPAK_PORTAL_ERROR, FLATPAK_PORTAL_ERROR_NOT_FOUND, - "No such document: %s", id); - return; - } - - if (!flatpak_is_valid_name (target_app_id, &my_error)) - { - g_dbus_method_invocation_return_error (invocation, - FLATPAK_PORTAL_ERROR, FLATPAK_PORTAL_ERROR_INVALID_ARGUMENT, - "'%s' is not a valid app name: %s", target_app_id, my_error->message); - return; - } - - perms = xdp_parse_permissions (permissions); - - /* Must have grant-permissions and all the newly granted permissions */ - if (!xdp_entry_has_permissions (entry, app_id, - XDP_PERMISSION_FLAGS_GRANT_PERMISSIONS | perms)) - { - g_dbus_method_invocation_return_error (invocation, - FLATPAK_PORTAL_ERROR, FLATPAK_PORTAL_ERROR_NOT_ALLOWED, - "Not enough permissions"); - return; - } - - do_set_permissions (entry, id, target_app_id, - perms | xdp_entry_get_permissions (entry, target_app_id)); - } - - /* Invalidate with lock dropped to avoid deadlock */ - xdp_fuse_invalidate_doc_app (id, target_app_id); - - g_dbus_method_invocation_return_value (invocation, g_variant_new ("()")); -} - -static void -portal_revoke_permissions (GDBusMethodInvocation *invocation, - GVariant *parameters, - const char *app_id) -{ - const char *target_app_id; - const char *id; - g_autofree const char **permissions = NULL; - - g_autoptr(FlatpakDbEntry) entry = NULL; - g_autoptr(GError) my_error = NULL; - XdpPermissionFlags perms; - - g_variant_get (parameters, "(&s&s^a&s)", &id, &target_app_id, &permissions); - - { - AUTOLOCK (db); - - entry = flatpak_db_lookup (db, id); - if (entry == NULL) - { - g_dbus_method_invocation_return_error (invocation, - FLATPAK_PORTAL_ERROR, FLATPAK_PORTAL_ERROR_NOT_FOUND, - "No such document: %s", id); - return; - } - - if (!flatpak_is_valid_name (target_app_id, &my_error)) - { - g_dbus_method_invocation_return_error (invocation, - FLATPAK_PORTAL_ERROR, FLATPAK_PORTAL_ERROR_INVALID_ARGUMENT, - "'%s' is not a valid app name: %s", target_app_id, my_error->message); - return; - } - - perms = xdp_parse_permissions (permissions); - - /* Must have grant-permissions, or be itself */ - if (!xdp_entry_has_permissions (entry, app_id, - XDP_PERMISSION_FLAGS_GRANT_PERMISSIONS) || - strcmp (app_id, target_app_id) == 0) - { - g_dbus_method_invocation_return_error (invocation, - FLATPAK_PORTAL_ERROR, FLATPAK_PORTAL_ERROR_NOT_ALLOWED, - "Not enough permissions"); - return; - } - - do_set_permissions (entry, id, target_app_id, - ~perms & xdp_entry_get_permissions (entry, target_app_id)); - } - - /* Invalidate with lock dropped to avoid deadlock */ - xdp_fuse_invalidate_doc_app (id, target_app_id); - - g_dbus_method_invocation_return_value (invocation, g_variant_new ("()")); -} - -static void -portal_delete (GDBusMethodInvocation *invocation, - GVariant *parameters, - const char *app_id) -{ - const char *id; - - g_autoptr(FlatpakDbEntry) entry = NULL; - g_autofree const char **old_apps = NULL; - int i; - - g_variant_get (parameters, "(s)", &id); - - { - AUTOLOCK (db); - - entry = flatpak_db_lookup (db, id); - if (entry == NULL) - { - g_dbus_method_invocation_return_error (invocation, - FLATPAK_PORTAL_ERROR, FLATPAK_PORTAL_ERROR_NOT_FOUND, - "No such document: %s", id); - return; - } - - if (!xdp_entry_has_permissions (entry, app_id, XDP_PERMISSION_FLAGS_DELETE)) - { - g_dbus_method_invocation_return_error (invocation, - FLATPAK_PORTAL_ERROR, FLATPAK_PORTAL_ERROR_NOT_ALLOWED, - "Not enough permissions"); - return; - } - - g_debug ("delete %s", id); - - flatpak_db_set_entry (db, id, NULL); - - if (persist_entry (entry)) - xdg_permission_store_call_delete (permission_store, TABLE_NAME, - id, NULL, NULL, NULL); - } - - /* All i/o is done now, so drop the lock so we can invalidate the fuse caches */ - old_apps = flatpak_db_entry_list_apps (entry); - for (i = 0; old_apps[i] != NULL; i++) - xdp_fuse_invalidate_doc_app (id, old_apps[i]); - xdp_fuse_invalidate_doc_app (id, NULL); - - /* Now fuse view is up-to-date, so we can return the call */ - g_dbus_method_invocation_return_value (invocation, g_variant_new ("()")); -} - -static char * -do_create_doc (struct stat *parent_st_buf, const char *path, gboolean reuse_existing, gboolean persistent) -{ - g_autoptr(GVariant) data = NULL; - g_autoptr(FlatpakDbEntry) entry = NULL; - g_auto(GStrv) ids = NULL; - char *id = NULL; - guint32 flags = 0; - - if (!reuse_existing) - flags |= XDP_ENTRY_FLAG_UNIQUE; - if (!persistent) - flags |= XDP_ENTRY_FLAG_TRANSIENT; - data = - g_variant_ref_sink (g_variant_new ("(^ayttu)", - path, - (guint64) parent_st_buf->st_dev, - (guint64) parent_st_buf->st_ino, - flags)); - - if (reuse_existing) - { - ids = flatpak_db_list_ids_by_value (db, data); - - if (ids[0] != NULL) - return g_strdup (ids[0]); /* Reuse pre-existing entry with same path */ - } - - while (TRUE) - { - g_autoptr(FlatpakDbEntry) existing = NULL; - - g_clear_pointer (&id, g_free); - id = xdp_name_from_id ((guint32) g_random_int ()); - existing = flatpak_db_lookup (db, id); - if (existing == NULL) - break; - } - - g_debug ("create_doc %s", id); - - entry = flatpak_db_entry_new (data); - flatpak_db_set_entry (db, id, entry); - - if (persistent) - { - xdg_permission_store_call_set (permission_store, - TABLE_NAME, - TRUE, - id, - g_variant_new_array (G_VARIANT_TYPE ("{sas}"), NULL, 0), - g_variant_new_variant (data), - NULL, NULL, NULL); - } - - return id; -} - -static gboolean -validate_fd_common (int fd, - struct stat *st_buf, - mode_t st_mode, - char *path_buffer, - GError **error) -{ - g_autofree char *proc_path = NULL; - ssize_t symlink_size; - int fd_flags; - - proc_path = g_strdup_printf ("/proc/self/fd/%d", fd); - - if (fd == -1 || - /* Must be able to get fd flags */ - (fd_flags = fcntl (fd, F_GETFL)) == -1 || - /* Must be O_PATH */ - ((fd_flags & O_PATH) != O_PATH) || - /* Must not be O_NOFOLLOW (because we want the target file) */ - ((fd_flags & O_NOFOLLOW) == O_NOFOLLOW) || - /* Must be able to fstat */ - fstat (fd, st_buf) < 0 || - /* Must be a regular file or directory (depending on use) */ - (st_buf->st_mode & S_IFMT) != st_mode || - /* Must be able to read path from /proc/self/fd */ - /* This is an absolute and (at least at open time) symlink-expanded path */ - (symlink_size = readlink (proc_path, path_buffer, PATH_MAX)) < 0) - { - g_set_error (error, - FLATPAK_PORTAL_ERROR, FLATPAK_PORTAL_ERROR_INVALID_ARGUMENT, - "Invalid fd passed"); - return FALSE; - } - - path_buffer[symlink_size] = 0; - return TRUE; -} - -static gboolean -validate_parent_dir (const char *path, - struct stat *st_buf, - struct stat *real_parent_st_buf, - GError **error) -{ - g_autofree char *dirname = NULL; - g_autofree char *name = NULL; - glnx_autofd int dir_fd = -1; - struct stat real_st_buf; - - /* We open the parent directory and do the stat in that, so that we have - * trustworthy parent dev/ino for later verification. Otherwise the caller - * could later replace a parent with a symlink and make us read some other file - */ - dirname = g_path_get_dirname (path); - name = g_path_get_basename (path); - dir_fd = open (dirname, O_CLOEXEC | O_PATH); - - if (dir_fd < 0 || - fstat (dir_fd, real_parent_st_buf) < 0 || - fstatat (dir_fd, name, &real_st_buf, AT_SYMLINK_NOFOLLOW) < 0 || - st_buf->st_dev != real_st_buf.st_dev || - st_buf->st_ino != real_st_buf.st_ino) - { - /* Don't leak any info about real file path existence, etc */ - g_set_error (error, - FLATPAK_PORTAL_ERROR, FLATPAK_PORTAL_ERROR_INVALID_ARGUMENT, - "Invalid fd passed"); - return FALSE; - } - - return TRUE; -} - -static gboolean -validate_fd (int fd, - GKeyFile *app_info, - struct stat *st_buf, - struct stat *real_parent_st_buf, - char *path_buffer, - GError **error) -{ - g_autofree char *app_path = NULL; - g_autofree char *runtime_path = NULL; - - if (!validate_fd_common (fd, st_buf, S_IFREG, path_buffer, error)) - return FALSE; - - /* For apps we translate /app and /usr to the installed locations. - Also, we need to rewrite to drop the /newroot prefix added by - bubblewrap for other files to work. See - https://github.com/projectatomic/bubblewrap/pull/172 - for a bit more information on the /newroot issue. - */ - app_path = g_key_file_get_string (app_info, FLATPAK_METADATA_GROUP_INSTANCE, - FLATPAK_METADATA_KEY_APP_PATH, NULL); - runtime_path = g_key_file_get_string (app_info, - FLATPAK_METADATA_GROUP_INSTANCE, - FLATPAK_METADATA_KEY_RUNTIME_PATH, - NULL); - if (app_path != NULL || runtime_path != NULL) - { - gboolean had_newroot_prefix = g_str_has_prefix (path_buffer, "/newroot/"); - const char *tmp_path_buf; - if (had_newroot_prefix) - tmp_path_buf = path_buffer + strlen ("/newroot"); - else - tmp_path_buf = path_buffer; - if (app_path != NULL && - g_str_has_prefix (tmp_path_buf, "/app/")) - { - const char *rel_path = tmp_path_buf + strlen ("/app/"); - g_autofree char *real_path = g_build_filename (app_path, rel_path, NULL); - strncpy (path_buffer, real_path, PATH_MAX); - } - else if (runtime_path != NULL && - g_str_has_prefix (path_buffer, "/usr/")) - { - const char *rel_path = tmp_path_buf + strlen ("/usr/"); - g_autofree char *real_path = g_build_filename (runtime_path, rel_path, NULL); - strncpy (path_buffer, real_path, PATH_MAX); - } - else if (had_newroot_prefix) - { - /* Create a separate copy to avoid memcpy-type issues where - * source and destination overlap. - */ - const char *rel_path = strdupa (tmp_path_buf); - g_strlcpy (path_buffer, rel_path, PATH_MAX); - } - } - - if (!validate_parent_dir (path_buffer, st_buf, real_parent_st_buf, error)) - return FALSE; - - return TRUE; -} - -static char * -verify_existing_document (struct stat *st_buf, gboolean reuse_existing) -{ - g_autoptr(FlatpakDbEntry) old_entry = NULL; - g_autofree char *id = NULL; - - g_assert (st_buf->st_dev == fuse_dev); - - /* The passed in fd is on the fuse filesystem itself */ - id = xdp_fuse_lookup_id_for_inode (st_buf->st_ino); - g_debug ("path on fuse, id %s", id); - if (id == NULL) - return NULL; - - /* Don't lock the db before doing the fuse call above, because it takes takes a lock - that can block something calling back, causing a deadlock on the db lock */ - AUTOLOCK (db); - - /* If the entry doesn't exist anymore, fail. Also fail if not - * reuse_existing, because otherwise the user could use this to - * get a copy with permissions and thus escape later permission - * revocations - */ - old_entry = flatpak_db_lookup (db, id); - if (old_entry == NULL || !reuse_existing) - return NULL; - - return g_steal_pointer (&id); -} - -static void -portal_add (GDBusMethodInvocation *invocation, - GVariant *parameters, - const char *app_id) -{ - GDBusMessage *message; - GUnixFDList *fd_list; - g_autofree char *id = NULL; - int fd_id, fd, fds_len; - char path_buffer[PATH_MAX + 1]; - const int *fds; - struct stat st_buf, real_parent_st_buf; - gboolean reuse_existing, persistent; - GError *error = NULL; - GKeyFile *app_info = g_object_get_data (G_OBJECT (invocation), "app-info"); - - g_variant_get (parameters, "(hbb)", &fd_id, &reuse_existing, &persistent); - - message = g_dbus_method_invocation_get_message (invocation); - fd_list = g_dbus_message_get_unix_fd_list (message); - - fd = -1; - if (fd_list != NULL) - { - fds = g_unix_fd_list_peek_fds (fd_list, &fds_len); - if (fd_id < fds_len) - fd = fds[fd_id]; - } - - if (!validate_fd (fd, app_info, &st_buf, &real_parent_st_buf, path_buffer, &error)) - { - g_dbus_method_invocation_take_error (invocation, error); - return; - } - - if (st_buf.st_dev == fuse_dev) - { - /* The passed in fd is on the fuse filesystem itself */ - id = verify_existing_document (&st_buf, reuse_existing); - if (id == NULL) - { - g_dbus_method_invocation_return_error (invocation, - FLATPAK_PORTAL_ERROR, FLATPAK_PORTAL_ERROR_INVALID_ARGUMENT, - "Invalid fd passed"); - return; - } - } - else - { - { - AUTOLOCK (db); - - id = do_create_doc (&real_parent_st_buf, path_buffer, reuse_existing, persistent); - - if (app_id[0] != '\0') - { - g_autoptr(FlatpakDbEntry) entry = flatpak_db_lookup (db, id); - XdpPermissionFlags perms = - XDP_PERMISSION_FLAGS_GRANT_PERMISSIONS | - XDP_PERMISSION_FLAGS_READ | - XDP_PERMISSION_FLAGS_WRITE; - - /* If its a unique one its safe for the creator to - delete it at will */ - if (!reuse_existing) - perms |= XDP_PERMISSION_FLAGS_DELETE; - - do_set_permissions (entry, id, app_id, perms); - } - } - - /* Invalidate with lock dropped to avoid deadlock */ - xdp_fuse_invalidate_doc_app (id, NULL); - if (app_id[0] != '\0') - xdp_fuse_invalidate_doc_app (id, app_id); - } - - g_dbus_method_invocation_return_value (invocation, - g_variant_new ("(s)", id)); -} - -static void -portal_add_full (GDBusMethodInvocation *invocation, - GVariant *parameters, - const char *app_id) -{ - GDBusMessage *message; - GUnixFDList *fd_list; - char *id; - int fd_id, fd, fds_len; - char path_buffer[PATH_MAX + 1]; - const int *fds = NULL; - struct stat st_buf; - gboolean reuse_existing, persistent, as_needed_by_app; - GError *error = NULL; - guint32 flags = 0; - GKeyFile *app_info = g_object_get_data (G_OBJECT (invocation), "app-info"); - g_autoptr(GVariant) array = NULL; - const char *target_app_id; - g_autofree const char **permissions = NULL; - g_autoptr(GPtrArray) ids = g_ptr_array_new_with_free_func (g_free); - g_autoptr(GPtrArray) paths = g_ptr_array_new_with_free_func (g_free); - g_autofree struct stat *real_parent_st_bufs = NULL; - int i; - gsize n_args; - XdpPermissionFlags target_perms; - GVariantBuilder builder; - g_autoptr(FlatpakExports) app_exports = NULL; - - g_variant_get (parameters, "(@ahus^a&s)", - &array, &flags, &target_app_id, &permissions); - - if ((flags & ~XDP_ADD_FLAGS_FLAGS_ALL) != 0) - { - g_dbus_method_invocation_return_error (invocation, - FLATPAK_PORTAL_ERROR, FLATPAK_PORTAL_ERROR_INVALID_ARGUMENT, - "Invalid flags"); - return; - } - - reuse_existing = (flags & XDP_ADD_FLAGS_REUSE_EXISTING) != 0; - persistent = (flags & XDP_ADD_FLAGS_PERSISTENT) != 0; - as_needed_by_app = (flags & XDP_ADD_FLAGS_AS_NEEDED_BY_APP) != 0; - - if (as_needed_by_app && target_app_id[0] != '\0') - { - g_autoptr(FlatpakContext) app_context = flatpak_context_load_for_app (target_app_id, NULL); - if (app_context) - app_exports = flatpak_exports_from_context (app_context, target_app_id); - } - - target_perms = xdp_parse_permissions (permissions); - - n_args = g_variant_n_children (array); - g_ptr_array_set_size (ids, n_args + 1); - g_ptr_array_set_size (paths, n_args + 1); - real_parent_st_bufs = g_new0 (struct stat, n_args); - - message = g_dbus_method_invocation_get_message (invocation); - fd_list = g_dbus_message_get_unix_fd_list (message); - if (fd_list != NULL) - fds = g_unix_fd_list_peek_fds (fd_list, &fds_len); - - for (i = 0; i < n_args; i++) - { - g_variant_get_child (array, i, "h", &fd_id); - - fd = -1; - if (fds != NULL && fd_id < fds_len) - fd = fds[fd_id]; - - if (!validate_fd (fd, app_info, &st_buf, &real_parent_st_bufs[i], path_buffer, &error)) - { - g_dbus_method_invocation_take_error (invocation, error); - return; - } - - g_ptr_array_index(paths,i) = g_strdup (path_buffer); - - if (st_buf.st_dev == fuse_dev) - { - /* The passed in fd is on the fuse filesystem itself */ - id = verify_existing_document (&st_buf, reuse_existing); - if (id == NULL) - { - g_dbus_method_invocation_return_error (invocation, - FLATPAK_PORTAL_ERROR, FLATPAK_PORTAL_ERROR_INVALID_ARGUMENT, - "Invalid fd passed"); - return; - } - g_ptr_array_index(ids,i) = id; - } - } - - { - XdpPermissionFlags caller_perms = - XDP_PERMISSION_FLAGS_GRANT_PERMISSIONS | - XDP_PERMISSION_FLAGS_READ | - XDP_PERMISSION_FLAGS_WRITE; - - /* If its a unique one its safe for the creator to - delete it at will */ - if (!reuse_existing) - caller_perms |= XDP_PERMISSION_FLAGS_DELETE; - - AUTOLOCK (db); /* Lock once for all ops */ - - for (i = 0; i < n_args; i++) - { - const char *path = g_ptr_array_index(paths,i); - g_assert (path != NULL); - - if (app_exports && - flatpak_exports_path_is_visible (app_exports, path)) - { - g_free (g_ptr_array_index(ids,i)); - g_ptr_array_index(ids,i) = g_strdup (""); - continue; - } - - if (g_ptr_array_index(ids,i) == NULL) - { - id = do_create_doc (&real_parent_st_bufs[i], path, reuse_existing, persistent); - g_ptr_array_index(ids,i) = id; - - if (app_id[0] != '\0' && strcmp (app_id, target_app_id) != 0) - { - g_autoptr(FlatpakDbEntry) entry = flatpak_db_lookup (db, id);; - do_set_permissions (entry, id, app_id, caller_perms); - } - - if (target_app_id[0] != '\0' && target_perms != 0) - { - g_autoptr(FlatpakDbEntry) entry = flatpak_db_lookup (db, id); - do_set_permissions (entry, id, target_app_id, target_perms); - } - } - } - } - - /* Invalidate with lock dropped to avoid deadlock */ - for (i = 0; i < n_args; i++) - { - id = g_ptr_array_index (ids,i); - g_assert (id != NULL); - - if (*id == 0) - continue; - - xdp_fuse_invalidate_doc_app (id, NULL); - if (app_id[0] != '\0') - xdp_fuse_invalidate_doc_app (id, app_id); - if (target_app_id[0] != '\0' && target_perms != 0) - xdp_fuse_invalidate_doc_app (id, target_app_id); - } - - g_variant_builder_init (&builder, G_VARIANT_TYPE ("a{sv}")); - g_variant_builder_add (&builder, "{sv}", "mountpoint", - g_variant_new_bytestring (xdp_fuse_get_mountpoint ())); - - g_dbus_method_invocation_return_value (invocation, - g_variant_new ("(^as@a{sv})", - (char **)ids->pdata, - g_variant_builder_end (&builder))); -} - -static void -portal_add_named (GDBusMethodInvocation *invocation, - GVariant *parameters, - const char *app_id) -{ - GDBusMessage *message; - GUnixFDList *fd_list; - g_autofree char *id = NULL; - int parent_fd_id, parent_fd, fds_len; - const int *fds; - char parent_path_buffer[PATH_MAX + 1]; - g_autofree char *path = NULL; - struct stat parent_st_buf; - const char *filename; - gboolean reuse_existing, persistent; - g_autoptr(GError) error = NULL; - - g_autoptr(GVariant) filename_v = NULL; - - g_variant_get (parameters, "(h@aybb)", &parent_fd_id, &filename_v, &reuse_existing, &persistent); - filename = g_variant_get_bytestring (filename_v); - - /* This is only allowed from the host, or else we could leak existence of files */ - if (*app_id != 0) - { - g_dbus_method_invocation_return_error (invocation, - FLATPAK_PORTAL_ERROR, FLATPAK_PORTAL_ERROR_NOT_ALLOWED, - "Not enough permissions"); - return; - } - - message = g_dbus_method_invocation_get_message (invocation); - fd_list = g_dbus_message_get_unix_fd_list (message); - - parent_fd = -1; - if (fd_list != NULL) - { - fds = g_unix_fd_list_peek_fds (fd_list, &fds_len); - if (parent_fd_id < fds_len) - parent_fd = fds[parent_fd_id]; - } - - if (strchr (filename, '/') != NULL) - { - g_dbus_method_invocation_return_error (invocation, - FLATPAK_PORTAL_ERROR, FLATPAK_PORTAL_ERROR_INVALID_ARGUMENT, - "Invalid filename passed"); - return; - } - - if (!validate_fd_common (parent_fd, &parent_st_buf, S_IFDIR, parent_path_buffer, &error)) - { - g_dbus_method_invocation_return_gerror (invocation, error); - return; - } - - if (parent_st_buf.st_dev == fuse_dev) - { - g_dbus_method_invocation_return_error (invocation, - FLATPAK_PORTAL_ERROR, FLATPAK_PORTAL_ERROR_INVALID_ARGUMENT, - "Invalid fd passed"); - return; - } - - path = g_build_filename (parent_path_buffer, filename, NULL); - - g_debug ("portal_add_named %s", path); - - AUTOLOCK (db); - - id = do_create_doc (&parent_st_buf, path, reuse_existing, persistent); - - g_dbus_method_invocation_return_value (invocation, - g_variant_new ("(s)", id)); -} - - -typedef void (*PortalMethod) (GDBusMethodInvocation *invocation, - GVariant *parameters, - const char *app_id); - -static void -got_app_id_cb (GObject *source_object, - GAsyncResult *res, - gpointer user_data) -{ - GDBusMethodInvocation *invocation = G_DBUS_METHOD_INVOCATION (source_object); - - g_autoptr(GError) error = NULL; - g_autoptr(GKeyFile) app_info = NULL; - g_autofree char *app_id = NULL; - PortalMethod portal_method = user_data; - - app_info = flatpak_invocation_lookup_app_info_finish (invocation, res, &error); - if (app_info != NULL) - app_id = g_key_file_get_string (app_info, - FLATPAK_METADATA_GROUP_APPLICATION, - FLATPAK_METADATA_KEY_NAME, &error); - - if (app_id == NULL) - g_dbus_method_invocation_return_gerror (invocation, error); - else - { - g_object_set_data_full (G_OBJECT (invocation), "app-info", g_steal_pointer (&app_info), (GDestroyNotify)g_key_file_unref); - portal_method (invocation, g_dbus_method_invocation_get_parameters (invocation), app_id); - } -} - -static gboolean -handle_method (GCallback method_callback, - GDBusMethodInvocation *invocation) -{ - flatpak_invocation_lookup_app_info (invocation, NULL, got_app_id_cb, method_callback); - - return TRUE; -} - -static gboolean -handle_get_mount_point (XdpDbusDocuments *object, GDBusMethodInvocation *invocation) -{ - if (fuse_dev == 0) - { - /* We mustn't reply to this until the FUSE mount point is open for - * business. */ - g_queue_push_tail (&get_mount_point_invocations, g_object_ref (invocation)); - return TRUE; - } - - xdp_dbus_documents_complete_get_mount_point (object, invocation, xdp_fuse_get_mountpoint ()); - return TRUE; -} - -static gboolean -portal_lookup (GDBusMethodInvocation *invocation, - GVariant *parameters, - const char *app_id) -{ - const char *filename; - char path_buffer[PATH_MAX + 1]; - glnx_autofd int fd = -1; - struct stat st_buf, real_parent_st_buf; - g_auto(GStrv) ids = NULL; - g_autofree char *id = NULL; - GError *error = NULL; - GKeyFile *app_info = g_object_get_data (G_OBJECT (invocation), "app-info"); - - if (strcmp (app_id, "") != 0) - { - g_dbus_method_invocation_return_error (invocation, - FLATPAK_PORTAL_ERROR, FLATPAK_PORTAL_ERROR_NOT_ALLOWED, - "Not allowed in sandbox"); - return TRUE; - } - - g_variant_get (parameters, "(^&ay)", &filename); - - fd = open (filename, O_PATH | O_CLOEXEC); - if (fd == -1) - { - glnx_set_error_from_errno (&error); - g_dbus_method_invocation_take_error (invocation, error); - return TRUE; - } - - if (!validate_fd (fd, app_info, &st_buf, &real_parent_st_buf, path_buffer, &error)) - { - g_dbus_method_invocation_take_error (invocation, error); - return TRUE; - } - - if (st_buf.st_dev == fuse_dev) - { - /* The passed in fd is on the fuse filesystem itself */ - id = xdp_fuse_lookup_id_for_inode (st_buf.st_ino); - g_debug ("path on fuse, id %s", id); - } - else - { - g_autoptr(GVariant) data = NULL; - - data = g_variant_ref_sink (g_variant_new ("(^ayttu)", - path_buffer, - (guint64)real_parent_st_buf.st_dev, - (guint64)real_parent_st_buf.st_ino, - 0)); - ids = flatpak_db_list_ids_by_value (db, data); - if (ids[0] != NULL) - id = g_strdup (ids[0]); - } - - g_dbus_method_invocation_return_value (invocation, - g_variant_new ("(s)", id ? id : "")); - - return TRUE; -} - -static GVariant * -get_app_permissions (FlatpakDbEntry *entry) -{ - g_autofree const char **apps = NULL; - GVariantBuilder builder; - int i; - - apps = flatpak_db_entry_list_apps (entry); - g_variant_builder_init (&builder, G_VARIANT_TYPE ("a{sas}")); - - for (i = 0; apps[i] != NULL; i++) - { - g_autofree const char **permissions = flatpak_db_entry_list_permissions (entry, apps[i]); - g_variant_builder_add_value (&builder, - g_variant_new ("{s^as}", apps[i], permissions)); - } - - return g_variant_builder_end (&builder); -} - -static GVariant * -get_path (FlatpakDbEntry *entry) -{ - g_autoptr (GVariant) data = flatpak_db_entry_get_data (entry); - const char *path; - - g_variant_get (data, "(^ayttu)", &path, NULL, NULL, NULL); - return g_variant_new_bytestring (path); -} - -static gboolean -portal_info (GDBusMethodInvocation *invocation, - GVariant *parameters, - const char *app_id) -{ - const char *id = NULL; - g_autoptr(FlatpakDbEntry) entry = NULL; - - if (strcmp (app_id, "") != 0) - { - g_dbus_method_invocation_return_error (invocation, - FLATPAK_PORTAL_ERROR, FLATPAK_PORTAL_ERROR_NOT_ALLOWED, - "Not allowed in sandbox"); - return TRUE; - } - - g_variant_get (parameters, "(&s)", &id); - - AUTOLOCK (db); - - entry = flatpak_db_lookup (db, id); - - if (!entry) - { - g_dbus_method_invocation_return_error (invocation, - FLATPAK_PORTAL_ERROR, FLATPAK_PORTAL_ERROR_INVALID_ARGUMENT, - "Invalid ID passed"); - return TRUE; - } - - g_dbus_method_invocation_return_value (invocation, - g_variant_new ("(@ay@a{sas})", - get_path (entry), - get_app_permissions (entry))); - - return TRUE; -} - -static gboolean -portal_list (GDBusMethodInvocation *invocation, - GVariant *parameters, - const char *app_id) -{ - g_auto(GStrv) ids = NULL; - GVariantBuilder builder; - int i; - - if (strcmp (app_id, "") != 0) - { - g_dbus_method_invocation_return_error (invocation, - FLATPAK_PORTAL_ERROR, FLATPAK_PORTAL_ERROR_NOT_ALLOWED, - "Not allowed in sandbox"); - return TRUE; - } - - g_variant_get (parameters, "(&s)", &app_id); - - AUTOLOCK (db); - - if (strcmp (app_id, "") == 0) - ids = flatpak_db_list_ids (db); - else - ids = flatpak_db_list_ids_by_app (db, app_id); - - g_variant_builder_init (&builder, G_VARIANT_TYPE ("a{say}")); - for (i = 0; ids[i]; i++) - { - g_autoptr(FlatpakDbEntry) entry = NULL; - - entry = flatpak_db_lookup (db, ids[i]); - - g_variant_builder_add (&builder, "{s@ay}", ids[i], get_path (entry)); - } - - g_dbus_method_invocation_return_value (invocation, - g_variant_new ("(@a{say})", - g_variant_builder_end (&builder))); - - return TRUE; -} - -static void -on_bus_acquired (GDBusConnection *connection, - const gchar *name, - gpointer user_data) -{ - GError *error = NULL; - - dbus_api = xdp_dbus_documents_skeleton_new (); - - xdp_dbus_documents_set_version (XDP_DBUS_DOCUMENTS (dbus_api), 2); - - g_signal_connect_swapped (dbus_api, "handle-get-mount-point", G_CALLBACK (handle_get_mount_point), NULL); - g_signal_connect_swapped (dbus_api, "handle-add", G_CALLBACK (handle_method), portal_add); - g_signal_connect_swapped (dbus_api, "handle-add-named", G_CALLBACK (handle_method), portal_add_named); - g_signal_connect_swapped (dbus_api, "handle-add-full", G_CALLBACK (handle_method), portal_add_full); - g_signal_connect_swapped (dbus_api, "handle-grant-permissions", G_CALLBACK (handle_method), portal_grant_permissions); - g_signal_connect_swapped (dbus_api, "handle-revoke-permissions", G_CALLBACK (handle_method), portal_revoke_permissions); - g_signal_connect_swapped (dbus_api, "handle-delete", G_CALLBACK (handle_method), portal_delete); - g_signal_connect_swapped (dbus_api, "handle-lookup", G_CALLBACK (handle_method), portal_lookup); - g_signal_connect_swapped (dbus_api, "handle-info", G_CALLBACK (handle_method), portal_info); - g_signal_connect_swapped (dbus_api, "handle-list", G_CALLBACK (handle_method), portal_list); - - flatpak_connection_track_name_owners (connection); - - if (!g_dbus_interface_skeleton_export (G_DBUS_INTERFACE_SKELETON (dbus_api), - connection, - "/org/freedesktop/portal/documents", - &error)) - { - g_warning ("error: %s", error->message); - g_error_free (error); - } -} - -static void -daemon_report_done (int status) -{ - if (daemon_event_fd != -1) - { - guint64 counter; - - counter = status + 1; - if (write (daemon_event_fd, &counter, sizeof (counter)) < 0) - g_critical ("Unable to report exit status: %s", g_strerror (errno)); - - daemon_event_fd = -1; - } -} - -static void -do_exit (int status) -{ - daemon_report_done (status); - exit (status); -} - -static void -on_name_acquired (GDBusConnection *connection, - const gchar *name, - gpointer user_data) -{ - struct stat stbuf; - gpointer invocation; - - g_debug ("%s acquired", name); - - if (!xdp_fuse_init (&exit_error)) - { - final_exit_status = 6; - g_printerr ("fuse init failed: %s", exit_error->message); - g_main_loop_quit (loop); - return; - } - - if (stat (xdp_fuse_get_mountpoint (), &stbuf) != 0) - { - g_set_error (&exit_error, G_DBUS_ERROR, G_DBUS_ERROR_FAILED, "fuse stat failed: %s", g_strerror (errno)); - final_exit_status = 7; - g_printerr ("fuse stat failed: %s", g_strerror (errno)); - g_main_loop_quit (loop); - return; - } - - fuse_dev = stbuf.st_dev; - - while ((invocation = g_queue_pop_head (&get_mount_point_invocations)) != NULL) - { - xdp_dbus_documents_complete_get_mount_point (dbus_api, invocation, xdp_fuse_get_mountpoint ()); - g_object_unref (invocation); - } - - daemon_report_done (0); -} - -static void -on_name_lost (GDBusConnection *connection, - const gchar *name, - gpointer user_data) -{ - g_debug ("%s lost", name); - - if (final_exit_status == 0) - final_exit_status = 20; - - if (exit_error == NULL) - g_set_error (&exit_error, G_DBUS_ERROR, G_DBUS_ERROR_FAILED, "D-Bus name \"%s\" lost", name); - - g_main_loop_quit (loop); -} - -static void -exit_handler (int sig) -{ - /* We cannot set exit_error here, because malloc() in a signal handler - * is undefined behaviour. Rely on main() coping gracefully with - * that. */ - g_main_loop_quit (loop); -} - -static void -session_bus_closed (GDBusConnection *connection, - gboolean remote_peer_vanished, - GError *bus_error) -{ - if (exit_error == NULL) - g_set_error (&exit_error, G_IO_ERROR, G_IO_ERROR_BROKEN_PIPE, "Disconnected from session bus"); - - g_main_loop_quit (loop); -} - -static int -set_one_signal_handler (int sig, - void (*handler)(int), - int remove) -{ - struct sigaction sa; - struct sigaction old_sa; - - memset (&sa, 0, sizeof (struct sigaction)); - sa.sa_handler = remove ? SIG_DFL : handler; - sigemptyset (&(sa.sa_mask)); - sa.sa_flags = 0; - - if (sigaction (sig, NULL, &old_sa) == -1) - { - g_warning ("cannot get old signal handler"); - return -1; - } - - if (old_sa.sa_handler == (remove ? handler : SIG_DFL) && - sigaction (sig, &sa, NULL) == -1) - { - g_warning ("cannot set signal handler"); - return -1; - } - - return 0; -} - -static gboolean opt_verbose; -static gboolean opt_daemon; -static gboolean opt_replace; -static gboolean opt_version; - -static GOptionEntry entries[] = { - { "verbose", 'v', 0, G_OPTION_ARG_NONE, &opt_verbose, "Print debug information", NULL }, - { "daemon", 'd', 0, G_OPTION_ARG_NONE, &opt_daemon, "Run in background", NULL }, - { "replace", 'r', 0, G_OPTION_ARG_NONE, &opt_replace, "Replace", NULL }, - { "version", 0, 0, G_OPTION_ARG_NONE, &opt_version, "Print version and exit", NULL }, - { NULL } -}; - -static void -message_handler (const gchar *log_domain, - GLogLevelFlags log_level, - const gchar *message, - gpointer user_data) -{ - /* Make this look like normal console output */ - if (log_level & G_LOG_LEVEL_DEBUG) - printf ("XDP: %s\n", message); - else - printf ("%s: %s\n", g_get_prgname (), message); -} - -static void -printerr_handler (const gchar *string) -{ - const char *prefix = ""; - const char *suffix = ""; - if (flatpak_fancy_output ()) - { - prefix = FLATPAK_ANSI_RED FLATPAK_ANSI_BOLD_ON; - suffix = FLATPAK_ANSI_BOLD_OFF FLATPAK_ANSI_COLOR_RESET; - } - fprintf (stderr, "%serror: %s%s\n", prefix, suffix, string); -} - -int -main (int argc, - char **argv) -{ - guint owner_id; - - g_autoptr(GError) error = NULL; - g_autofree char *path = NULL; - GDBusConnection *session_bus; - GOptionContext *context; - GDBusMethodInvocation *invocation; - - setlocale (LC_ALL, ""); - - /* Avoid even loading gvfs to avoid accidental confusion */ - g_setenv ("GIO_USE_VFS", "local", TRUE); - - flatpak_migrate_from_xdg_app (); - - g_set_printerr_handler (printerr_handler); - - context = g_option_context_new ("- document portal"); - g_option_context_add_main_entries (context, entries, NULL); - if (!g_option_context_parse (context, &argc, &argv, &error)) - { - g_printerr ("Option parsing failed: %s", error->message); - return 1; - } - - if (opt_version) - { - g_print ("%s\n", PACKAGE_STRING); - exit (EXIT_SUCCESS); - } - - if (opt_daemon) - { - pid_t pid; - ssize_t read_res; - - daemon_event_fd = eventfd (0, EFD_CLOEXEC); - pid = fork (); - if (pid != 0) - { - guint64 counter; - - read_res = read (daemon_event_fd, &counter, sizeof (counter)); - if (read_res != 8) - exit (1); - exit (counter - 1); - } - } - - if (opt_verbose) - g_log_set_handler (G_LOG_DOMAIN, G_LOG_LEVEL_DEBUG, message_handler, NULL); - - g_set_prgname (argv[0]); - - loop = g_main_loop_new (NULL, FALSE); - - path = g_build_filename (g_get_user_data_dir (), "flatpak/db", TABLE_NAME, NULL); - db = flatpak_db_new (path, FALSE, &error); - if (db == NULL) - { - g_printerr ("Failed to load db: %s", error->message); - do_exit (2); - } - - session_bus = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, &error); - if (session_bus == NULL) - { - g_printerr ("No session bus: %s", error->message); - do_exit (3); - } - - permission_store = xdg_permission_store_proxy_new_sync (session_bus, G_DBUS_PROXY_FLAGS_NONE, - "org.freedesktop.impl.portal.PermissionStore", - "/org/freedesktop/impl/portal/PermissionStore", - NULL, &error); - if (permission_store == NULL) - { - g_print ("No permission store: %s", error->message); - do_exit (4); - } - - /* We want do do our custom post-mainloop exit */ - g_dbus_connection_set_exit_on_close (session_bus, FALSE); - - g_signal_connect (session_bus, "closed", G_CALLBACK (session_bus_closed), NULL); - - if (set_one_signal_handler (SIGHUP, exit_handler, 0) == -1 || - set_one_signal_handler (SIGINT, exit_handler, 0) == -1 || - set_one_signal_handler (SIGTERM, exit_handler, 0) == -1 || - set_one_signal_handler (SIGPIPE, SIG_IGN, 0) == -1) - do_exit (5); - - owner_id = g_bus_own_name (G_BUS_TYPE_SESSION, - "org.freedesktop.portal.Documents", - G_BUS_NAME_OWNER_FLAGS_ALLOW_REPLACEMENT | (opt_replace ? G_BUS_NAME_OWNER_FLAGS_REPLACE : 0), - on_bus_acquired, - on_name_acquired, - on_name_lost, - NULL, - NULL); - - g_main_loop_run (loop); - - while ((invocation = g_queue_pop_head (&get_mount_point_invocations)) != NULL) - { - if (exit_error != NULL) - g_dbus_method_invocation_return_gerror (invocation, exit_error); - else - g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR, G_DBUS_ERROR_FAILED, "Terminated"); - - g_object_unref (invocation); - } - - xdp_fuse_exit (); - - g_bus_unown_name (owner_id); - - do_exit (final_exit_status); - - return 0; -} diff --git a/document-portal/xdp-util.c b/document-portal/xdp-util.c deleted file mode 100644 index 0f5f0854..00000000 --- a/document-portal/xdp-util.c +++ /dev/null @@ -1,129 +0,0 @@ -#include "config.h" -#include -#include -#include -#include "flatpak-portal-error.h" -#include "xdp-util.h" - -const char ** -xdg_unparse_permissions (XdpPermissionFlags permissions) -{ - GPtrArray *array; - - array = g_ptr_array_new (); - - if (permissions & XDP_PERMISSION_FLAGS_READ) - g_ptr_array_add (array, "read"); - if (permissions & XDP_PERMISSION_FLAGS_WRITE) - g_ptr_array_add (array, "write"); - if (permissions & XDP_PERMISSION_FLAGS_GRANT_PERMISSIONS) - g_ptr_array_add (array, "grant-permissions"); - if (permissions & XDP_PERMISSION_FLAGS_DELETE) - g_ptr_array_add (array, "delete"); - - g_ptr_array_add (array, NULL); - return (const char **) g_ptr_array_free (array, FALSE); -} - -XdpPermissionFlags -xdp_parse_permissions (const char **permissions) -{ - XdpPermissionFlags perms; - int i; - - perms = 0; - for (i = 0; permissions[i]; i++) - { - if (strcmp (permissions[i], "read") == 0) - perms |= XDP_PERMISSION_FLAGS_READ; - else if (strcmp (permissions[i], "write") == 0) - perms |= XDP_PERMISSION_FLAGS_WRITE; - else if (strcmp (permissions[i], "grant-permissions") == 0) - perms |= XDP_PERMISSION_FLAGS_GRANT_PERMISSIONS; - else if (strcmp (permissions[i], "delete") == 0) - perms |= XDP_PERMISSION_FLAGS_DELETE; - else - g_warning ("No such permission: %s", permissions[i]); - } - - return perms; -} - -XdpPermissionFlags -xdp_entry_get_permissions (FlatpakDbEntry *entry, - const char *app_id) -{ - g_autofree const char **permissions = NULL; - - if (strcmp (app_id, "") == 0) - return XDP_PERMISSION_FLAGS_ALL; - - permissions = flatpak_db_entry_list_permissions (entry, app_id); - return xdp_parse_permissions (permissions); -} - -gboolean -xdp_entry_has_permissions (FlatpakDbEntry *entry, - const char *app_id, - XdpPermissionFlags perms) -{ - XdpPermissionFlags current_perms; - - current_perms = xdp_entry_get_permissions (entry, app_id); - - return (current_perms & perms) == perms; -} - -char * -xdp_name_from_id (guint32 doc_id) -{ - return g_strdup_printf ("%x", doc_id); -} - -const char * -xdp_entry_get_path (FlatpakDbEntry *entry) -{ - g_autoptr(GVariant) v = flatpak_db_entry_get_data (entry); - g_autoptr(GVariant) c = g_variant_get_child_value (v, 0); - return g_variant_get_bytestring (c); -} - -char * -xdp_entry_dup_basename (FlatpakDbEntry *entry) -{ - const char *path = xdp_entry_get_path (entry); - - return g_path_get_basename (path); -} - -char * -xdp_entry_dup_dirname (FlatpakDbEntry *entry) -{ - const char *path = xdp_entry_get_path (entry); - - return g_path_get_dirname (path); -} - -guint64 -xdp_entry_get_device (FlatpakDbEntry *entry) -{ - g_autoptr(GVariant) v = flatpak_db_entry_get_data (entry); - g_autoptr(GVariant) c = g_variant_get_child_value (v, 1); - return g_variant_get_uint64 (c); -} - -guint64 -xdp_entry_get_inode (FlatpakDbEntry *entry) -{ - g_autoptr(GVariant) v = flatpak_db_entry_get_data (entry); - g_autoptr(GVariant) c = g_variant_get_child_value (v, 2); - return g_variant_get_uint64 (c); -} - -guint32 -xdp_entry_get_flags (FlatpakDbEntry *entry) -{ - g_autoptr(GVariant) v = flatpak_db_entry_get_data (entry); - g_autoptr(GVariant) c = g_variant_get_child_value (v, 3); - return g_variant_get_uint32 (c); -} diff --git a/document-portal/xdp-util.h b/document-portal/xdp-util.h deleted file mode 100644 index 007a2438..00000000 --- a/document-portal/xdp-util.h +++ /dev/null @@ -1,33 +0,0 @@ -#ifndef XDP_UTIL_H -#define XDP_UTIL_H - -#include -#include "flatpak-db.h" -#include "xdp-enums.h" - -G_BEGIN_DECLS - -#define XDP_ENTRY_FLAG_UNIQUE (1 << 0) -#define XDP_ENTRY_FLAG_TRANSIENT (1 << 1) - -const char ** xdg_unparse_permissions (XdpPermissionFlags permissions); -XdpPermissionFlags xdp_parse_permissions (const char **permissions); - -XdpPermissionFlags xdp_entry_get_permissions (FlatpakDbEntry *entry, - const char *app_id); -gboolean xdp_entry_has_permissions (FlatpakDbEntry *entry, - const char *app_id, - XdpPermissionFlags perms); -const char * xdp_entry_get_path (FlatpakDbEntry *entry); -char * xdp_entry_dup_basename (FlatpakDbEntry *entry); -char * xdp_entry_dup_dirname (FlatpakDbEntry *entry); -guint64 xdp_entry_get_device (FlatpakDbEntry *entry); -guint64 xdp_entry_get_inode (FlatpakDbEntry *entry); -guint32 xdp_entry_get_flags (FlatpakDbEntry *entry); - -char * xdp_name_from_id (guint32 doc_id); - - -G_END_DECLS - -#endif /* XDP_UTIL_H */ diff --git a/lib/flatpak-installation.c b/lib/flatpak-installation.c index ec24682a..47af020c 100644 --- a/lib/flatpak-installation.c +++ b/lib/flatpak-installation.c @@ -144,7 +144,7 @@ flatpak_installation_new_for_dir (FlatpakDir *dir, FlatpakInstallation *self; FlatpakInstallationPrivate *priv; - if (!flatpak_dir_ensure_repo (dir, NULL, error)) + if (!flatpak_dir_maybe_ensure_repo (dir, NULL, error)) { g_object_unref (dir); return NULL; @@ -215,18 +215,19 @@ flatpak_get_system_installations (GCancellable *cancellable, { g_autoptr(GError) local_error = NULL; FlatpakDir *install_dir = g_ptr_array_index (system_dirs, i); - FlatpakInstallation *installation = NULL; + g_autoptr(FlatpakInstallation) installation = NULL; installation = flatpak_installation_new_for_dir (g_object_ref (install_dir), cancellable, &local_error); if (installation != NULL) - g_ptr_array_add (installs, installation); + g_ptr_array_add (installs, g_steal_pointer (&installation)); else { - g_warning ("Unable to create FlatpakInstallation for: %s", local_error->message); - g_propagate_error (error, g_steal_pointer (&local_error)); - goto out; + /* Warn about the problem and continue without listing this installation. */ + g_autofree char *dir_name = flatpak_dir_get_name (install_dir); + g_warning ("Unable to create FlatpakInstallation for %s: %s", + dir_name, local_error->message); } } @@ -336,16 +337,41 @@ flatpak_installation_new_for_path (GFile *path, gboolean user, } static FlatpakDir * -flatpak_installation_get_dir (FlatpakInstallation *self) +_flatpak_installation_get_dir (FlatpakInstallation *self, gboolean ensure_repo, GError **error) { FlatpakInstallationPrivate *priv = flatpak_installation_get_instance_private (self); FlatpakDir *dir; + G_LOCK (dir); + + if (ensure_repo && flatpak_dir_get_repo (priv->dir_unlocked) == NULL) + { + if (!flatpak_dir_ensure_repo (priv->dir_unlocked, NULL, error)) + { + dir = NULL; + goto out; + } + } + dir = g_object_ref (priv->dir_unlocked); + +out: G_UNLOCK (dir); return dir; } +static FlatpakDir * +flatpak_installation_get_dir (FlatpakInstallation *self, GError **error) +{ + return _flatpak_installation_get_dir (self, TRUE, error); +} + +static FlatpakDir * +flatpak_installation_get_dir_maybe_no_repo (FlatpakInstallation *self) +{ + return _flatpak_installation_get_dir (self, FALSE, NULL); +} + /** * flatpak_installation_drop_caches: * @self: a #FlatpakInstallation @@ -371,7 +397,7 @@ flatpak_installation_drop_caches (FlatpakInstallation *self, old = priv->dir_unlocked; clone = flatpak_dir_clone (priv->dir_unlocked); - if (flatpak_dir_ensure_repo (clone, cancellable, error)) + if (flatpak_dir_maybe_ensure_repo (clone, cancellable, error)) { priv->dir_unlocked = clone; g_object_unref (old); @@ -394,7 +420,7 @@ flatpak_installation_drop_caches (FlatpakInstallation *self, gboolean flatpak_installation_get_is_user (FlatpakInstallation *self) { - g_autoptr(FlatpakDir) dir = flatpak_installation_get_dir (self); + g_autoptr(FlatpakDir) dir = flatpak_installation_get_dir_maybe_no_repo (self); return flatpak_dir_is_user (dir); } @@ -410,7 +436,7 @@ flatpak_installation_get_is_user (FlatpakInstallation *self) GFile * flatpak_installation_get_path (FlatpakInstallation *self) { - g_autoptr(FlatpakDir) dir = flatpak_installation_get_dir (self); + g_autoptr(FlatpakDir) dir = flatpak_installation_get_dir_maybe_no_repo (self); return g_object_ref (flatpak_dir_get_path (dir)); } @@ -428,7 +454,7 @@ flatpak_installation_get_path (FlatpakInstallation *self) const char * flatpak_installation_get_id (FlatpakInstallation *self) { - g_autoptr(FlatpakDir) dir = flatpak_installation_get_dir (self); + g_autoptr(FlatpakDir) dir = flatpak_installation_get_dir_maybe_no_repo (self); return flatpak_dir_get_id (dir); } @@ -446,7 +472,7 @@ flatpak_installation_get_id (FlatpakInstallation *self) const char * flatpak_installation_get_display_name (FlatpakInstallation *self) { - g_autoptr(FlatpakDir) dir = flatpak_installation_get_dir (self); + g_autoptr(FlatpakDir) dir = flatpak_installation_get_dir_maybe_no_repo (self); return flatpak_dir_get_display_name (dir); } @@ -464,7 +490,7 @@ flatpak_installation_get_display_name (FlatpakInstallation *self) gint flatpak_installation_get_priority (FlatpakInstallation *self) { - g_autoptr(FlatpakDir) dir = flatpak_installation_get_dir (self); + g_autoptr(FlatpakDir) dir = flatpak_installation_get_dir_maybe_no_repo (self); return flatpak_dir_get_priority (dir); } @@ -481,7 +507,7 @@ flatpak_installation_get_priority (FlatpakInstallation *self) */FlatpakStorageType flatpak_installation_get_storage_type (FlatpakInstallation *self) { - g_autoptr(FlatpakDir) dir = flatpak_installation_get_dir (self); + g_autoptr(FlatpakDir) dir = flatpak_installation_get_dir_maybe_no_repo (self); switch (flatpak_dir_get_storage_type (dir)) { @@ -494,6 +520,9 @@ flatpak_installation_get_storage_type (FlatpakInstallation *self) case FLATPAK_DIR_STORAGE_TYPE_MMC: return FLATPAK_STORAGE_TYPE_MMC; + case FLATPAK_DIR_STORAGE_TYPE_NETWORK: + return FLATPAK_STORAGE_TYPE_NETWORK; + default: return FLATPAK_STORAGE_TYPE_DEFAULT; } @@ -528,10 +557,13 @@ flatpak_installation_launch (FlatpakInstallation *self, GCancellable *cancellable, GError **error) { - g_autoptr(FlatpakDir) dir = flatpak_installation_get_dir (self); + g_autoptr(FlatpakDir) dir = NULL; + g_autoptr(FlatpakDeploy) app_deploy = NULL; g_autofree char *app_ref = NULL; - g_autoptr(FlatpakDeploy) app_deploy = NULL; + dir = flatpak_installation_get_dir (self, error); + if (dir == NULL) + return FALSE; app_ref = flatpak_build_app_ref (name, branch, arch); @@ -634,11 +666,14 @@ flatpak_installation_get_installed_ref (FlatpakInstallation *self, GCancellable *cancellable, GError **error) { - g_autoptr(FlatpakDir) dir = flatpak_installation_get_dir (self); - + g_autoptr(FlatpakDir) dir = NULL; g_autoptr(GFile) deploy = NULL; g_autofree char *ref = NULL; + dir = flatpak_installation_get_dir (self, error); + if (dir == NULL) + return NULL; + if (arch == NULL) arch = flatpak_get_arch (); @@ -679,12 +714,15 @@ flatpak_installation_get_current_installed_app (FlatpakInstallation *self, GCancellable *cancellable, GError **error) { - g_autoptr(FlatpakDir) dir = flatpak_installation_get_dir (self); - + g_autoptr(FlatpakDir) dir = NULL; g_autoptr(GFile) deploy = NULL; - g_autofree char *current = - flatpak_dir_current_ref (dir, name, cancellable); + g_autofree char *current = NULL; + dir = flatpak_installation_get_dir (self, error); + if (dir == NULL) + return NULL; + + current = flatpak_dir_current_ref (dir, name, cancellable); if (current) deploy = flatpak_dir_get_if_deployed (dir, current, NULL, cancellable); @@ -715,7 +753,7 @@ flatpak_installation_list_installed_refs (FlatpakInstallation *self, GCancellable *cancellable, GError **error) { - g_autoptr(FlatpakDir) dir = flatpak_installation_get_dir (self); + g_autoptr(FlatpakDir) dir = flatpak_installation_get_dir_maybe_no_repo (self); g_auto(GStrv) raw_refs_app = NULL; g_auto(GStrv) raw_refs_runtime = NULL; g_autoptr(GPtrArray) refs = g_ptr_array_new_with_free_func (g_object_unref); @@ -774,7 +812,7 @@ flatpak_installation_list_installed_refs_by_kind (FlatpakInstallation *self, GCancellable *cancellable, GError **error) { - g_autoptr(FlatpakDir) dir = flatpak_installation_get_dir (self); + g_autoptr(FlatpakDir) dir = flatpak_installation_get_dir_maybe_no_repo (self); g_auto(GStrv) raw_refs = NULL; g_autoptr(GPtrArray) refs = g_ptr_array_new_with_free_func (g_object_unref); int i; @@ -990,7 +1028,7 @@ flatpak_installation_list_remotes (FlatpakInstallation *self, GCancellable *cancellable, GError **error) { - g_autoptr(FlatpakDir) dir = flatpak_installation_get_dir (self); + g_autoptr(FlatpakDir) dir = flatpak_installation_get_dir_maybe_no_repo (self); g_autoptr(FlatpakDir) dir_clone = NULL; g_auto(GStrv) remote_names = NULL; g_autoptr(GPtrArray) remotes = g_ptr_array_new_with_free_func (g_object_unref); @@ -1003,7 +1041,7 @@ flatpak_installation_list_remotes (FlatpakInstallation *self, /* We clone the dir here to make sure we re-read the latest ostree repo config, in case it has local changes */ dir_clone = flatpak_dir_clone (dir); - if (!flatpak_dir_ensure_repo (dir_clone, cancellable, error)) + if (!flatpak_dir_maybe_ensure_repo (dir_clone, cancellable, error)) return NULL; for (i = 0; remote_names[i] != NULL; i++) @@ -1037,13 +1075,13 @@ flatpak_installation_modify_remote (FlatpakInstallation *self, GCancellable *cancellable, GError **error) { - g_autoptr(FlatpakDir) dir = flatpak_installation_get_dir (self); + g_autoptr(FlatpakDir) dir = flatpak_installation_get_dir_maybe_no_repo (self); g_autoptr(FlatpakDir) dir_clone = NULL; /* We clone the dir here to make sure we re-read the latest ostree repo config, in case it has local changes */ dir_clone = flatpak_dir_clone (dir); - if (!flatpak_dir_ensure_repo (dir_clone, cancellable, error)) + if (!flatpak_dir_maybe_ensure_repo (dir_clone, cancellable, error)) return FALSE; if (!flatpak_remote_commit (remote, dir_clone, cancellable, error)) @@ -1072,9 +1110,13 @@ flatpak_installation_remove_remote (FlatpakInstallation *self, GCancellable *cancellable, GError **error) { - g_autoptr(FlatpakDir) dir = flatpak_installation_get_dir (self); + g_autoptr(FlatpakDir) dir = NULL; g_autoptr(FlatpakDir) dir_clone = NULL; + dir = flatpak_installation_get_dir (self, error); + if (dir == NULL) + return FALSE; + /* We clone the dir here to make sure we re-read the latest ostree repo config, in case it has local changes */ dir_clone = flatpak_dir_clone (dir); @@ -1112,9 +1154,13 @@ flatpak_installation_set_config_sync (FlatpakInstallation *self, GCancellable *cancellable, GError **error) { - g_autoptr(FlatpakDir) dir = flatpak_installation_get_dir (self); + g_autoptr(FlatpakDir) dir = NULL; g_autoptr(FlatpakDir) dir_clone = NULL; + dir = flatpak_installation_get_dir (self, error); + if (dir == NULL) + return FALSE; + /* We clone the dir here to make sure we re-read the latest ostree repo config, in case it has local changes */ dir_clone = flatpak_dir_clone (dir); @@ -1148,7 +1194,11 @@ flatpak_installation_get_config (FlatpakInstallation *self, GCancellable *cancellable, GError **error) { - g_autoptr(FlatpakDir) dir = flatpak_installation_get_dir (self); + g_autoptr(FlatpakDir) dir = NULL; + + dir = flatpak_installation_get_dir (self, error); + if (dir == NULL) + return NULL; return flatpak_dir_get_config (dir, key, error); } @@ -1174,9 +1224,13 @@ flatpak_installation_update_remote_sync (FlatpakInstallation *self, GCancellable *cancellable, GError **error) { - g_autoptr(FlatpakDir) dir = flatpak_installation_get_dir (self); + g_autoptr(FlatpakDir) dir = NULL; g_autoptr(FlatpakDir) dir_clone = NULL; + dir = flatpak_installation_get_dir (self, error); + if (dir == NULL) + return FALSE; + /* We clone the dir here to make sure we re-read the latest ostree repo config, in case it has local changes */ dir_clone = flatpak_dir_clone (dir); @@ -1209,7 +1263,7 @@ flatpak_installation_get_remote_by_name (FlatpakInstallation *self, GCancellable *cancellable, GError **error) { - g_autoptr(FlatpakDir) dir = flatpak_installation_get_dir (self); + g_autoptr(FlatpakDir) dir = flatpak_installation_get_dir_maybe_no_repo (self); g_autoptr(FlatpakDir) dir_clone = NULL; g_auto(GStrv) remote_names = NULL; int i; @@ -1254,10 +1308,14 @@ flatpak_installation_load_app_overrides (FlatpakInstallation *self, GCancellable *cancellable, GError **error) { - g_autoptr(FlatpakDir) dir = flatpak_installation_get_dir (self); + g_autoptr(FlatpakDir) dir = NULL; g_autofree char *metadata_contents = NULL; gsize metadata_size; + dir = flatpak_installation_get_dir (self, error); + if (dir == NULL) + return NULL; + metadata_contents = flatpak_dir_load_override (dir, app_id, &metadata_size, error); if (metadata_contents == NULL) return NULL; @@ -1287,12 +1345,16 @@ flatpak_installation_install_bundle (FlatpakInstallation *self, GCancellable *cancellable, GError **error) { - g_autoptr(FlatpakDir) dir = flatpak_installation_get_dir (self); + g_autoptr(FlatpakDir) dir = NULL; g_autoptr(FlatpakDir) dir_clone = NULL; g_autofree char *ref = NULL; g_autofree char *remote = NULL; FlatpakInstalledRef *result = NULL; + dir = flatpak_installation_get_dir (self, error); + if (dir == NULL) + return NULL; + remote = flatpak_dir_ensure_bundle_remote (dir, file, NULL, &ref, NULL, NULL, cancellable, error); if (remote == NULL) return NULL; @@ -1342,10 +1404,14 @@ flatpak_installation_install_ref_file (FlatpakInstallation *self, GCancellable *cancellable, GError **error) { - g_autoptr(FlatpakDir) dir = flatpak_installation_get_dir (self); + g_autoptr(FlatpakDir) dir = NULL; g_autofree char *remote = NULL; g_autofree char *ref = NULL; + dir = flatpak_installation_get_dir (self, error); + if (dir == NULL) + return NULL; + if (!flatpak_dir_create_remote_for_ref_file (dir, ref_file_data, NULL, &remote, &ref, error)) return NULL; @@ -1364,7 +1430,7 @@ flatpak_installation_install_ref_file (FlatpakInstallation *self, * @name: name of the app/runtime to fetch * @arch: (nullable): which architecture to fetch (default: current architecture) * @branch: (nullable): which branch to fetch (default: 'master') - * @subpaths: (nullable): A list of subpaths to fetch, or %NULL for everything + * @subpaths: (nullable) (array zero-terminated=1): A list of subpaths to fetch, or %NULL for everything * @progress: (scope call) (nullable): progress callback * @progress_data: (closure progress) (nullable): user data passed to @progress * @cancellable: (nullable): a #GCancellable @@ -1396,7 +1462,7 @@ flatpak_installation_install_full (FlatpakInstallation *self, GCancellable *cancellable, GError **error) { - g_autoptr(FlatpakDir) dir = flatpak_installation_get_dir (self); + g_autoptr(FlatpakDir) dir = NULL; g_autofree char *ref = NULL; g_autoptr(FlatpakDir) dir_clone = NULL; g_autoptr(GMainContext) main_context = NULL; @@ -1404,6 +1470,10 @@ flatpak_installation_install_full (FlatpakInstallation *self, FlatpakInstalledRef *result = NULL; g_autoptr(GFile) deploy_dir = NULL; + dir = flatpak_installation_get_dir (self, error); + if (dir == NULL) + return NULL; + ref = flatpak_compose_ref (kind == FLATPAK_REF_KIND_APP, name, branch, arch, error); if (ref == NULL) return NULL; @@ -1435,6 +1505,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, ref, remote_name, (const char **)subpaths, ostree_progress, cancellable, error)) goto out; @@ -1516,7 +1587,7 @@ flatpak_installation_install (FlatpakInstallation *self, * @name: name of the app or runtime to update * @arch: (nullable): architecture of the app or runtime to update (default: current architecture) * @branch: (nullable): name of the branch of the app or runtime to update (default: master) - * @subpaths: (nullable): A list of subpaths to fetch, or %NULL for everything + * @subpaths: (nullable) (array zero-terminated=1): A list of subpaths to fetch, or %NULL for everything * @progress: (scope call) (nullable): the callback * @progress_data: (closure progress) (nullable): user data passed to @progress * @cancellable: (nullable): a #GCancellable @@ -1524,7 +1595,13 @@ flatpak_installation_install (FlatpakInstallation *self, * * Update an application or runtime. * - * Returns: (transfer full): The ref for the newly updated app (or the same if no update) or %NULL on failure + * If the specified package is not installed, then %FLATPAK_ERROR_NOT_INSTALLED + * will be thrown. + * + * If no updates could be found on the remote end and the package is + * already up to date, then %FLATPAK_ERROR_ALREADY_INSTALLED will be thrown. + * + * Returns: (transfer full): The ref for the newly updated app or %NULL on failure */ FlatpakInstalledRef * flatpak_installation_update_full (FlatpakInstallation *self, @@ -1539,7 +1616,7 @@ flatpak_installation_update_full (FlatpakInstallation *self, GCancellable *cancellable, GError **error) { - g_autoptr(FlatpakDir) dir = flatpak_installation_get_dir (self); + g_autoptr(FlatpakDir) dir = NULL; g_autofree char *ref = NULL; g_autoptr(GFile) deploy_dir = NULL; g_autoptr(FlatpakDir) dir_clone = NULL; @@ -1550,6 +1627,10 @@ flatpak_installation_update_full (FlatpakInstallation *self, g_autofree char *target_commit = NULL; g_auto(OstreeRepoFinderResultv) check_results = NULL; + dir = flatpak_installation_get_dir (self, error); + if (dir == NULL) + return NULL; + ref = flatpak_compose_ref (kind == FLATPAK_REF_KIND_APP, name, branch, arch, error); if (ref == NULL) return NULL; @@ -1629,7 +1710,13 @@ out: * * Update an application or runtime. * - * Returns: (transfer full): The ref for the newly updated app (or the same if no update) or %NULL on failure + * If the specified package is not installed, then %FLATPAK_ERROR_NOT_INSTALLED + * will be thrown. + * + * If no updates could be found on the remote end and the package is + * already up to date, then %FLATPAK_ERROR_ALREADY_INSTALLED will be thrown. + * + * Returns: (transfer full): The ref for the newly updated app or %NULL on failure */ FlatpakInstalledRef * flatpak_installation_update (FlatpakInstallation *self, @@ -1675,10 +1762,14 @@ flatpak_installation_uninstall (FlatpakInstallation *self, GCancellable *cancellable, GError **error) { - g_autoptr(FlatpakDir) dir = flatpak_installation_get_dir (self); + g_autoptr(FlatpakDir) dir = NULL; g_autofree char *ref = NULL; g_autoptr(FlatpakDir) dir_clone = NULL; + dir = flatpak_installation_get_dir (self, error); + if (dir == NULL) + return FALSE; + ref = flatpak_compose_ref (kind == FLATPAK_REF_KIND_APP, name, branch, arch, error); if (ref == NULL) return FALSE; @@ -1724,9 +1815,13 @@ flatpak_installation_fetch_remote_size_sync (FlatpakInstallation *self, GCancellable *cancellable, GError **error) { - g_autoptr(FlatpakDir) dir = flatpak_installation_get_dir (self); + g_autoptr(FlatpakDir) dir = NULL; g_autofree char *full_ref = flatpak_ref_format_ref (ref); + dir = flatpak_installation_get_dir (self, error); + if (dir == NULL) + return FALSE; + return flatpak_dir_fetch_ref_cache (dir, remote_name, full_ref, download_size, installed_size, NULL, @@ -1754,10 +1849,14 @@ flatpak_installation_fetch_remote_metadata_sync (FlatpakInstallation *self, GCancellable *cancellable, GError **error) { - g_autoptr(FlatpakDir) dir = flatpak_installation_get_dir (self); + g_autoptr(FlatpakDir) dir = NULL; g_autofree char *full_ref = flatpak_ref_format_ref (ref); char *res = NULL; + dir = flatpak_installation_get_dir (self, error); + if (dir == NULL) + return NULL; + if (!flatpak_dir_fetch_ref_cache (dir, remote_name, full_ref, NULL, NULL, &res, @@ -1785,13 +1884,17 @@ flatpak_installation_list_remote_refs_sync (FlatpakInstallation *self, GCancellable *cancellable, GError **error) { - g_autoptr(FlatpakDir) dir = flatpak_installation_get_dir (self); + g_autoptr(FlatpakDir) dir = NULL; g_autoptr(GPtrArray) refs = g_ptr_array_new_with_free_func (g_object_unref); g_autoptr(GHashTable) ht = NULL; GHashTableIter iter; gpointer key; gpointer value; + dir = flatpak_installation_get_dir (self, error); + if (dir == NULL) + return NULL; + if (!flatpak_dir_list_remote_refs (dir, remote_name, &ht, @@ -1840,7 +1943,7 @@ flatpak_installation_fetch_remote_ref_sync (FlatpakInstallation *self, GCancellable *cancellable, GError **error) { - g_autoptr(FlatpakDir) dir = flatpak_installation_get_dir (self); + g_autoptr(FlatpakDir) dir = NULL; g_autoptr(GHashTable) ht = NULL; g_autofree char *ref = NULL; const char *checksum; @@ -1848,6 +1951,10 @@ flatpak_installation_fetch_remote_ref_sync (FlatpakInstallation *self, if (branch == NULL) branch = "master"; + dir = flatpak_installation_get_dir (self, error); + if (dir == NULL) + return NULL; + if (!flatpak_dir_list_remote_refs (dir, remote_name, &ht, @@ -1927,12 +2034,16 @@ flatpak_installation_update_appstream_full_sync (FlatpakInstallation *self, GCancellable *cancellable, GError **error) { - g_autoptr(FlatpakDir) dir = flatpak_installation_get_dir (self); + g_autoptr(FlatpakDir) dir = NULL; g_autoptr(FlatpakDir) dir_clone = NULL; g_autoptr(OstreeAsyncProgress) ostree_progress = NULL; g_autoptr(GMainContext) main_context = NULL; gboolean res; + dir = flatpak_installation_get_dir (self, error); + if (dir == NULL) + return FALSE; + /* Pull, prune, etc are not threadsafe, so we work on a copy */ dir_clone = flatpak_dir_clone (dir); if (!flatpak_dir_ensure_repo (dir_clone, cancellable, error)) @@ -1981,7 +2092,7 @@ flatpak_installation_create_monitor (FlatpakInstallation *self, GCancellable *cancellable, GError **error) { - g_autoptr(FlatpakDir) dir = flatpak_installation_get_dir (self); + g_autoptr(FlatpakDir) dir = flatpak_installation_get_dir_maybe_no_repo (self); g_autoptr(GFile) path = NULL; path = flatpak_dir_get_changed_path (dir); @@ -2023,11 +2134,15 @@ flatpak_installation_list_remote_related_refs_sync (FlatpakInstallation *self, GCancellable *cancellable, GError **error) { - g_autoptr(FlatpakDir) dir = flatpak_installation_get_dir (self); + g_autoptr(FlatpakDir) dir = NULL; g_autoptr(GPtrArray) related = NULL; g_autoptr(GPtrArray) refs = g_ptr_array_new_with_free_func (g_object_unref); int i; + dir = flatpak_installation_get_dir (self, error); + if (dir == NULL) + return NULL; + related = flatpak_dir_find_remote_related (dir, ref, remote_name, cancellable, error); if (related == NULL) @@ -2079,11 +2194,15 @@ flatpak_installation_list_installed_related_refs_sync (FlatpakInstallation *self GCancellable *cancellable, GError **error) { - g_autoptr(FlatpakDir) dir = flatpak_installation_get_dir (self); + g_autoptr(FlatpakDir) dir = NULL; g_autoptr(GPtrArray) related = NULL; g_autoptr(GPtrArray) refs = g_ptr_array_new_with_free_func (g_object_unref); int i; + dir = flatpak_installation_get_dir (self, error); + if (dir == NULL) + return NULL; + related = flatpak_dir_find_local_related (dir, ref, remote_name, cancellable, error); if (related == NULL) @@ -2131,7 +2250,11 @@ flatpak_installation_remove_local_ref_sync (FlatpakInstallation *self, GCancellable *cancellable, GError **error) { - g_autoptr(FlatpakDir) dir = flatpak_installation_get_dir (self); + g_autoptr(FlatpakDir) dir = NULL; + + dir = flatpak_installation_get_dir (self, error); + if (dir == NULL) + return FALSE; return flatpak_dir_remove_ref (dir, remote_name, ref, cancellable, error); } @@ -2160,7 +2283,11 @@ flatpak_installation_cleanup_local_refs_sync (FlatpakInstallation *self, GCancellable *cancellable, GError **error) { - g_autoptr(FlatpakDir) dir = flatpak_installation_get_dir (self); + g_autoptr(FlatpakDir) dir = NULL; + + dir = flatpak_installation_get_dir (self, error); + if (dir == NULL) + return FALSE; return flatpak_dir_cleanup_undeployed_refs (dir, cancellable, error); } @@ -2181,7 +2308,11 @@ flatpak_installation_prune_local_repo (FlatpakInstallation *self, GCancellable *cancellable, GError **error) { - g_autoptr(FlatpakDir) dir = flatpak_installation_get_dir (self); + g_autoptr(FlatpakDir) dir = NULL; + + dir = flatpak_installation_get_dir (self, error); + if (dir == NULL) + return FALSE; return flatpak_dir_prune (dir, cancellable, error); } diff --git a/lib/flatpak-installation.h b/lib/flatpak-installation.h index 2f857c47..b6d43ca4 100644 --- a/lib/flatpak-installation.h +++ b/lib/flatpak-installation.h @@ -81,6 +81,7 @@ typedef enum { * @FLATPAK_STORAGE_TYPE_HARD_DISK: installation is on a hard disk * @FLATPAK_STORAGE_TYPE_SDCARD: installation is on a SD card * @FLATPAK_STORAGE_TYPE_MMC: installation is on an MMC + * @FLATPAK_STORAGE_TYPE_NETWORK: installation is on the network * * Flags to alter the behavior of flatpak_installation_install_full(). * @@ -91,6 +92,7 @@ typedef enum { FLATPAK_STORAGE_TYPE_HARD_DISK, FLATPAK_STORAGE_TYPE_SDCARD, FLATPAK_STORAGE_TYPE_MMC, + FLATPAK_STORAGE_TYPE_NETWORK, } FlatpakStorageType; diff --git a/lib/flatpak-remote.c b/lib/flatpak-remote.c index 03644266..fca0a831 100644 --- a/lib/flatpak-remote.c +++ b/lib/flatpak-remote.c @@ -790,6 +790,7 @@ flatpak_remote_commit (FlatpakRemote *self, GError **error) { FlatpakRemotePrivate *priv = flatpak_remote_get_instance_private (self); + OstreeRepo *repo; g_autofree char *url = NULL; g_autoptr(GKeyFile) config = NULL; g_autofree char *group = g_strdup_printf ("remote \"%s\"", priv->name); @@ -801,7 +802,12 @@ flatpak_remote_commit (FlatpakRemote *self, if (priv->type != FLATPAK_REMOTE_TYPE_STATIC) return flatpak_fail (error, "Dynamic remote cannot be committed"); - config = ostree_repo_copy_config (flatpak_dir_get_repo (dir)); + repo = flatpak_dir_get_repo (dir); + if (repo == NULL) + config = g_key_file_new (); + else + config = ostree_repo_copy_config (repo); + if (priv->local_url_set) g_key_file_set_string (config, group, "url", priv->local_url); diff --git a/libglnx b/libglnx index 5362f6bc..0c82203c 160000 --- a/libglnx +++ b/libglnx @@ -1 +1 @@ -Subproject commit 5362f6bc3ff3e30f379e767b203d15c9e56d6f08 +Subproject commit 0c82203cd459a35cc3f471e3205355e9fb79160f diff --git a/permission-store/Makefile.am.inc b/permission-store/Makefile.am.inc deleted file mode 100644 index 023aad31..00000000 --- a/permission-store/Makefile.am.inc +++ /dev/null @@ -1,37 +0,0 @@ -libexec_PROGRAMS += \ - xdg-permission-store \ - $(NULL) - -service_in_files += permission-store/xdg-permission-store.service.in -systemduserunit_DATA += permission-store/xdg-permission-store.service - -service_in_files += permission-store/org.freedesktop.impl.portal.PermissionStore.service.in -dbus_service_DATA += permission-store/org.freedesktop.impl.portal.PermissionStore.service - -nodist_xdg_permission_store_SOURCES = permission-store/permission-store-dbus.c permission-store/permission-store-dbus.h -BUILT_SOURCES += $(nodist_xdg_permission_store_SOURCES) -CLEANFILES += $(nodist_xdg_permission_store_SOURCES) - -permission-store/permission-store-dbus.c: data/org.freedesktop.impl.portal.PermissionStore.xml Makefile - mkdir -p $(builddir)/permission-store - $(AM_V_GEN) $(GDBUS_CODEGEN) \ - --interface-prefix org.freedesktop.impl.portal. \ - --c-namespace Xdg \ - --generate-c-code $(builddir)/permission-store/permission-store-dbus \ - $(srcdir)/data/org.freedesktop.impl.portal.PermissionStore.xml \ - $(NULL) - -permission-store/%-dbus.h: permission-store/%-dbus.c - @true # Built as a side-effect of the rules for the .c - -# also used by the document portal -ps_dbus_built_sources = $(nodist_xdg_permission_store_SOURCES) - -xdg_permission_store_SOURCES = \ - permission-store/permission-store.c \ - permission-store/xdg-permission-store.c \ - permission-store/xdg-permission-store.h \ - $(NULL) - -xdg_permission_store_LDADD = $(AM_LDADD) $(BASE_LIBS) libflatpak-common.la -xdg_permission_store_CFLAGS = $(AM_CFLAGS) $(BASE_CFLAGS) $(SOUP_CFLAGS) $(JSON_CFLAGS) $(OSTREE_CFLAGS) $(GSYSTEM_CFLAGS) -I$(srcdir)/permission-store -I$(builddir)/permission-store diff --git a/permission-store/org.freedesktop.impl.portal.PermissionStore.service.in b/permission-store/org.freedesktop.impl.portal.PermissionStore.service.in deleted file mode 100644 index cb444f1d..00000000 --- a/permission-store/org.freedesktop.impl.portal.PermissionStore.service.in +++ /dev/null @@ -1,4 +0,0 @@ -[D-BUS Service] -Name=org.freedesktop.impl.portal.PermissionStore -Exec=@libexecdir@/xdg-permission-store -SystemdService=xdg-permission-store.service diff --git a/permission-store/permission-store.c b/permission-store/permission-store.c deleted file mode 100644 index 30971af4..00000000 --- a/permission-store/permission-store.c +++ /dev/null @@ -1,146 +0,0 @@ -/* - * Copyright © 2014 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: - * Alexander Larsson - */ - -#include "config.h" - -#include -#include -#include -#include -#include -#include "permission-store-dbus.h" -#include "xdg-permission-store.h" -#include "flatpak-utils.h" - -static void -on_bus_acquired (GDBusConnection *connection, - const gchar *name, - gpointer user_data) -{ - xdg_permission_store_start (connection); -} - -static void -on_name_acquired (GDBusConnection *connection, - const gchar *name, - gpointer user_data) -{ -} - -static void -on_name_lost (GDBusConnection *connection, - const gchar *name, - gpointer user_data) -{ - exit (1); -} - -static gboolean opt_verbose; -static gboolean opt_replace; -static gboolean opt_version; - -static GOptionEntry entries[] = { - { "verbose", 'v', 0, G_OPTION_ARG_NONE, &opt_verbose, "Print debug information", NULL }, - { "replace", 'r', 0, G_OPTION_ARG_NONE, &opt_replace, "Replace", NULL }, - { "version", 0, 0, G_OPTION_ARG_NONE, &opt_version, "Print version and exit", NULL }, - { NULL } -}; - -static void -message_handler (const gchar *log_domain, - GLogLevelFlags log_level, - const gchar *message, - gpointer user_data) -{ - /* Make this look like normal console output */ - if (log_level & G_LOG_LEVEL_DEBUG) - printf ("XDP: %s\n", message); - else - printf ("%s: %s\n", g_get_prgname (), message); -} - -static void -printerr_handler (const gchar *string) -{ - const char *prefix = ""; - const char *suffix = ""; - if (flatpak_fancy_output ()) - { - prefix = FLATPAK_ANSI_RED FLATPAK_ANSI_BOLD_ON; - suffix = FLATPAK_ANSI_BOLD_OFF FLATPAK_ANSI_COLOR_RESET; - } - fprintf (stderr, "%serror: %s%s\n", prefix, suffix, string); -} - -int -main (int argc, - char **argv) -{ - guint owner_id; - GMainLoop *loop; - GOptionContext *context; - g_autoptr(GError) error = NULL; - - setlocale (LC_ALL, ""); - - g_setenv ("GIO_USE_VFS", "local", TRUE); - - g_set_prgname (argv[0]); - - flatpak_migrate_from_xdg_app (); - - g_set_printerr_handler (printerr_handler); - - context = g_option_context_new ("- permission store"); - g_option_context_add_main_entries (context, entries, NULL); - if (!g_option_context_parse (context, &argc, &argv, &error)) - { - g_printerr ("Option parsing failed: %s", error->message); - return 1; - } - - if (opt_version) - { - g_print ("%s\n", PACKAGE_STRING); - exit (EXIT_SUCCESS); - } - - if (opt_verbose) - g_log_set_handler (G_LOG_DOMAIN, G_LOG_LEVEL_DEBUG, message_handler, NULL); - - g_set_prgname (argv[0]); - - owner_id = g_bus_own_name (G_BUS_TYPE_SESSION, - "org.freedesktop.impl.portal.PermissionStore", - G_BUS_NAME_OWNER_FLAGS_ALLOW_REPLACEMENT | (opt_replace ? G_BUS_NAME_OWNER_FLAGS_REPLACE : 0), - - on_bus_acquired, - on_name_acquired, - on_name_lost, - NULL, - NULL); - - loop = g_main_loop_new (NULL, FALSE); - g_main_loop_run (loop); - - g_bus_unown_name (owner_id); - - return 0; -} diff --git a/permission-store/xdg-permission-store.c b/permission-store/xdg-permission-store.c deleted file mode 100644 index 499a35f1..00000000 --- a/permission-store/xdg-permission-store.c +++ /dev/null @@ -1,468 +0,0 @@ -/* - * Copyright © 2015 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: - * Alexander Larsson - */ - -#include "config.h" - -#include -#include -#include -#include -#include "permission-store/permission-store-dbus.h" -#include "xdg-permission-store.h" -#include "flatpak-db.h" -#include "flatpak-portal-error.h" - -GHashTable *tables = NULL; - -typedef struct -{ - char *name; - FlatpakDb *db; - GList *outstanding_writes; - GList *current_writes; - gboolean writing; -} Table; - -static void start_writeout (Table *table); - -static void -table_free (Table *table) -{ - g_free (table->name); - g_object_unref (table->db); - g_free (table); -} - -static Table * -lookup_table (const char *name, - GDBusMethodInvocation *invocation) -{ - Table *table; - FlatpakDb *db; - g_autofree char *dir = NULL; - g_autofree char *path = NULL; - - g_autoptr(GError) error = NULL; - - table = g_hash_table_lookup (tables, name); - if (table != NULL) - return table; - - dir = g_build_filename (g_get_user_data_dir (), "flatpak/db", NULL); - g_mkdir_with_parents (dir, 0755); - - path = g_build_filename (dir, name, NULL); - db = flatpak_db_new (path, FALSE, &error); - if (db == NULL) - { - g_dbus_method_invocation_return_error (invocation, - FLATPAK_PORTAL_ERROR, FLATPAK_PORTAL_ERROR_FAILED, - "Unable to load db file: %s", error->message); - return NULL; - } - - table = g_new0 (Table, 1); - table->name = g_strdup (name); - table->db = db; - - g_hash_table_insert (tables, table->name, table); - - return table; -} - -static void -writeout_done (GObject *source_object, - GAsyncResult *res, - gpointer user_data) -{ - Table *table = user_data; - GList *l; - - g_autoptr(GError) error = NULL; - gboolean ok; - - ok = flatpak_db_save_content_finish (table->db, res, &error); - - for (l = table->current_writes; l != NULL; l = l->next) - { - GDBusMethodInvocation *invocation = l->data; - - if (ok) - g_dbus_method_invocation_return_value (invocation, - g_variant_new ("()")); - else - g_dbus_method_invocation_return_error (invocation, - FLATPAK_PORTAL_ERROR, FLATPAK_PORTAL_ERROR_FAILED, - "Unable to write db: %s", error->message); - } - - g_list_free (table->current_writes); - table->current_writes = NULL; - table->writing = FALSE; - - if (table->outstanding_writes != NULL) - start_writeout (table); -} - -static void -start_writeout (Table *table) -{ - g_assert (table->current_writes == NULL); - table->current_writes = table->outstanding_writes; - table->outstanding_writes = NULL; - table->writing = TRUE; - - flatpak_db_update (table->db); - - flatpak_db_save_content_async (table->db, NULL, writeout_done, table); -} - -static void -ensure_writeout (Table *table, - GDBusMethodInvocation *invocation) -{ - table->outstanding_writes = g_list_prepend (table->outstanding_writes, invocation); - - if (!table->writing) - start_writeout (table); -} - -static gboolean -handle_list (XdgPermissionStore *object, - GDBusMethodInvocation *invocation, - const gchar *table_name) -{ - Table *table; - - g_auto(GStrv) ids = NULL; - - table = lookup_table (table_name, invocation); - if (table == NULL) - return TRUE; - - ids = flatpak_db_list_ids (table->db); - - xdg_permission_store_complete_list (object, invocation, (const char * const *) ids); - - return TRUE; -} - -static GVariant * -get_app_permissions (FlatpakDbEntry *entry) -{ - g_autofree const char **apps = NULL; - GVariantBuilder builder; - int i; - - apps = flatpak_db_entry_list_apps (entry); - g_variant_builder_init (&builder, G_VARIANT_TYPE ("a{sas}")); - - for (i = 0; apps[i] != NULL; i++) - { - g_autofree const char **permissions = flatpak_db_entry_list_permissions (entry, apps[i]); - g_variant_builder_add_value (&builder, - g_variant_new ("{s@as}", - apps[i], - g_variant_new_strv (permissions, -1))); - } - - return g_variant_ref_sink (g_variant_builder_end (&builder)); -} - -static gboolean -handle_lookup (XdgPermissionStore *object, - GDBusMethodInvocation *invocation, - const gchar *table_name, - const gchar *id) -{ - Table *table; - - g_autoptr(GVariant) data = NULL; - g_autoptr(GVariant) permissions = NULL; - g_autoptr(FlatpakDbEntry) entry = NULL; - - table = lookup_table (table_name, invocation); - if (table == NULL) - return TRUE; - - entry = flatpak_db_lookup (table->db, id); - if (entry == NULL) - { - g_dbus_method_invocation_return_error (invocation, - FLATPAK_PORTAL_ERROR, FLATPAK_PORTAL_ERROR_NOT_FOUND, - "No entry for %s", id); - return TRUE; - } - - data = flatpak_db_entry_get_data (entry); - permissions = get_app_permissions (entry); - - xdg_permission_store_complete_lookup (object, invocation, - permissions, - g_variant_new_variant (data)); - - return TRUE; -} - -static void -emit_deleted (XdgPermissionStore *object, - const gchar *table_name, - const gchar *id, - FlatpakDbEntry *entry) -{ - g_autoptr(GVariant) data = NULL; - g_autoptr(GVariant) permissions = NULL; - - data = flatpak_db_entry_get_data (entry); - permissions = g_variant_ref_sink (g_variant_new_array (G_VARIANT_TYPE ("{sas}"), NULL, 0)); - - xdg_permission_store_emit_changed (object, - table_name, id, - TRUE, - g_variant_new_variant (data), - permissions); -} - - -static void -emit_changed (XdgPermissionStore *object, - const gchar *table_name, - const gchar *id, - FlatpakDbEntry *entry) -{ - g_autoptr(GVariant) data = NULL; - g_autoptr(GVariant) permissions = NULL; - - data = flatpak_db_entry_get_data (entry); - permissions = get_app_permissions (entry); - - xdg_permission_store_emit_changed (object, - table_name, id, - FALSE, - g_variant_new_variant (data), - permissions); -} - -static gboolean -handle_delete (XdgPermissionStore *object, - GDBusMethodInvocation *invocation, - const gchar *table_name, - const gchar *id) -{ - Table *table; - - g_autoptr(FlatpakDbEntry) entry = NULL; - - table = lookup_table (table_name, invocation); - if (table == NULL) - return TRUE; - - entry = flatpak_db_lookup (table->db, id); - if (entry == NULL) - { - g_dbus_method_invocation_return_error (invocation, - FLATPAK_PORTAL_ERROR, FLATPAK_PORTAL_ERROR_NOT_FOUND, - "No entry for %s", id); - return TRUE; - } - - flatpak_db_set_entry (table->db, id, NULL); - emit_deleted (object, table_name, id, entry); - - ensure_writeout (table, invocation); - - return TRUE; -} - -static gboolean -handle_set (XdgPermissionStore *object, - GDBusMethodInvocation *invocation, - const gchar *table_name, - gboolean create, - const gchar *id, - GVariant *app_permissions, - GVariant *data) -{ - Table *table; - GVariantIter iter; - GVariant *child; - - g_autoptr(GVariant) data_child = NULL; - g_autoptr(FlatpakDbEntry) old_entry = NULL; - g_autoptr(FlatpakDbEntry) new_entry = NULL; - - table = lookup_table (table_name, invocation); - if (table == NULL) - return TRUE; - - old_entry = flatpak_db_lookup (table->db, id); - if (old_entry == NULL && !create) - { - g_dbus_method_invocation_return_error (invocation, - FLATPAK_PORTAL_ERROR, FLATPAK_PORTAL_ERROR_NOT_FOUND, - "Id %s not found", id); - return TRUE; - } - - data_child = g_variant_get_child_value (data, 0); - new_entry = flatpak_db_entry_new (data_child); - - /* Add all the given app permissions */ - - g_variant_iter_init (&iter, app_permissions); - while ((child = g_variant_iter_next_value (&iter))) - { - g_autoptr(FlatpakDbEntry) old_entry = NULL; - const char *child_app_id; - g_autofree const char **permissions; - - g_variant_get (child, "{&s^a&s}", &child_app_id, &permissions); - - old_entry = new_entry; - new_entry = flatpak_db_entry_set_app_permissions (new_entry, child_app_id, (const char **) permissions); - - g_variant_unref (child); - } - - flatpak_db_set_entry (table->db, id, new_entry); - emit_changed (object, table_name, id, new_entry); - - ensure_writeout (table, invocation); - - return TRUE; -} - -static gboolean -handle_set_permission (XdgPermissionStore *object, - GDBusMethodInvocation *invocation, - const gchar *table_name, - gboolean create, - const gchar *id, - const gchar *app, - const gchar *const *permissions) -{ - Table *table; - - g_autoptr(FlatpakDbEntry) entry = NULL; - g_autoptr(FlatpakDbEntry) new_entry = NULL; - - table = lookup_table (table_name, invocation); - if (table == NULL) - return TRUE; - - entry = flatpak_db_lookup (table->db, id); - if (entry == NULL) - { - if (create) - { - entry = flatpak_db_entry_new (NULL); - } - else - { - g_dbus_method_invocation_return_error (invocation, - FLATPAK_PORTAL_ERROR, FLATPAK_PORTAL_ERROR_NOT_FOUND, - "Id %s not found", id); - return TRUE; - } - } - - new_entry = flatpak_db_entry_set_app_permissions (entry, app, (const char **) permissions); - flatpak_db_set_entry (table->db, id, new_entry); - emit_changed (object, table_name, id, new_entry); - - ensure_writeout (table, invocation); - - return TRUE; -} - -static gboolean -handle_set_value (XdgPermissionStore *object, - GDBusMethodInvocation *invocation, - const gchar *table_name, - gboolean create, - const gchar *id, - GVariant *data) -{ - Table *table; - - g_autoptr(FlatpakDbEntry) entry = NULL; - g_autoptr(FlatpakDbEntry) new_entry = NULL; - - table = lookup_table (table_name, invocation); - if (table == NULL) - return TRUE; - - entry = flatpak_db_lookup (table->db, id); - if (entry == NULL) - { - if (create) - { - new_entry = flatpak_db_entry_new (data); - } - else - { - g_dbus_method_invocation_return_error (invocation, - FLATPAK_PORTAL_ERROR, FLATPAK_PORTAL_ERROR_NOT_FOUND, - "Id %s not found", id); - return TRUE; - } - } - else - { - new_entry = flatpak_db_entry_modify_data (entry, data); - } - - flatpak_db_set_entry (table->db, id, new_entry); - emit_changed (object, table_name, id, new_entry); - - ensure_writeout (table, invocation); - - return TRUE; -} - -void -xdg_permission_store_start (GDBusConnection *connection) -{ - XdgPermissionStore *store; - GError *error = NULL; - - tables = g_hash_table_new_full (g_str_hash, g_str_equal, - g_free, (GDestroyNotify) table_free); - - store = xdg_permission_store_skeleton_new (); - - xdg_permission_store_set_version (XDG_PERMISSION_STORE (store), 1); - - g_signal_connect (store, "handle-list", G_CALLBACK (handle_list), NULL); - g_signal_connect (store, "handle-lookup", G_CALLBACK (handle_lookup), NULL); - g_signal_connect (store, "handle-set", G_CALLBACK (handle_set), NULL); - g_signal_connect (store, "handle-set-permission", G_CALLBACK (handle_set_permission), NULL); - g_signal_connect (store, "handle-set-value", G_CALLBACK (handle_set_value), NULL); - g_signal_connect (store, "handle-delete", G_CALLBACK (handle_delete), NULL); - - if (!g_dbus_interface_skeleton_export (G_DBUS_INTERFACE_SKELETON (store), - connection, - "/org/freedesktop/impl/portal/PermissionStore", - &error)) - { - g_warning ("error: %s", error->message); - g_error_free (error); - } -} diff --git a/permission-store/xdg-permission-store.h b/permission-store/xdg-permission-store.h deleted file mode 100644 index 55dcc5c2..00000000 --- a/permission-store/xdg-permission-store.h +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Copyright © 2015 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: - * Alexander Larsson - */ - -#ifndef __FLATPAK_PERMISSION_STORE_H__ -#define __FLATPAK_PERMISSION_STORE_H__ - -#include "flatpak-dbus.h" - -void xdg_permission_store_start (GDBusConnection *connection); - -#endif /* __FLATPAK_PERMISSION_STORE_H__ */ diff --git a/permission-store/xdg-permission-store.service.in b/permission-store/xdg-permission-store.service.in deleted file mode 100644 index 66854306..00000000 --- a/permission-store/xdg-permission-store.service.in +++ /dev/null @@ -1,7 +0,0 @@ -[Unit] -Description=sandboxed app permission store - -[Service] -BusName=org.freedesktop.impl.portal.PermissionStore -ExecStart=@libexecdir@/xdg-permission-store -Type=dbus diff --git a/po/POTFILES.in b/po/POTFILES.in index 05336acc..1386581a 100644 --- a/po/POTFILES.in +++ b/po/POTFILES.in @@ -17,6 +17,7 @@ app/flatpak-builtins-document-list.c app/flatpak-builtins-document-unexport.c app/flatpak-builtins-enter.c app/flatpak-builtins-info.c +app/flatpak-builtins-info-remote.c app/flatpak-builtins-install.c app/flatpak-builtins-list.c app/flatpak-builtins-list-remotes.c @@ -26,10 +27,13 @@ app/flatpak-builtins-override.c app/flatpak-builtins-repo.c app/flatpak-builtins-repo-update.c app/flatpak-builtins-run.c +app/flatpak-builtins-search.c app/flatpak-builtins-uninstall.c app/flatpak-builtins-update.c +app/flatpak-builtins-utils.c app/flatpak-main.c app/flatpak-transaction.c +common/flatpak-context.c common/flatpak-dir.c common/flatpak-run.c common/flatpak-utils.c diff --git a/po/cs.po b/po/cs.po index 47646f31..09e028fd 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: 2017-10-09 12:40+0200\n" -"PO-Revision-Date: 2017-10-14 00:44+0200\n" +"POT-Creation-Date: 2018-02-19 14:20+0100\n" +"PO-Revision-Date: 2018-01-25 14:08+0100\n" "Last-Translator: Daniel Rusek \n" "Language-Team: Czech \n" "Language: cs\n" @@ -42,10 +42,9 @@ msgstr "Označit vzdálený repozitář jako použit pro závislosti" msgid "Set a new url" msgstr "Nastavit novou url" -#: app/flatpak-builtins-add-remote.c:66 app/flatpak-builtins-build-bundle.c:57 -#: app/flatpak-builtins-build-bundle.c:58 -#: app/flatpak-builtins-list-remotes.c:109 -#: app/flatpak-builtins-repo-update.c:52 +#: app/flatpak-builtins-add-remote.c:66 app/flatpak-builtins-build-bundle.c:58 +#: app/flatpak-builtins-build-bundle.c:59 +#: app/flatpak-builtins-list-remotes.c:70 app/flatpak-builtins-repo-update.c:52 msgid "URL" msgstr "URL" @@ -103,15 +102,15 @@ msgstr "ID kolekce" #: app/flatpak-builtins-add-remote.c:80 app/flatpak-builtins-repo-update.c:56 msgid "COLLECTION-ID" -msgstr "KOLEKCE-ID" +msgstr "ID-KOLEKCE" #: app/flatpak-builtins-add-remote.c:82 msgid "Import GPG key from FILE (- for stdin)" msgstr "Importovat klíč GPG ze SOUBORU (- pro standardní vstup)" -#: app/flatpak-builtins-add-remote.c:82 app/flatpak-builtins-build-bundle.c:59 -#: app/flatpak-builtins-build.c:50 app/flatpak-builtins-build-export.c:60 -#: app/flatpak-builtins-install.c:66 app/flatpak-builtins-repo-update.c:59 +#: app/flatpak-builtins-add-remote.c:82 app/flatpak-builtins-build-bundle.c:60 +#: app/flatpak-builtins-build.c:54 app/flatpak-builtins-build-export.c:60 +#: app/flatpak-builtins-install.c:67 app/flatpak-builtins-repo-update.c:59 msgid "FILE" msgstr "SOUBOR" @@ -123,129 +122,147 @@ msgstr "Zakázat vzdálený repozitář" msgid "Add OCI registry" msgstr "Přidat OCI registr" -#: app/flatpak-builtins-add-remote.c:312 +#: app/flatpak-builtins-add-remote.c:218 app/flatpak-builtins-add-remote.c:225 +#, c-format +msgid "Can't load uri %s: %s\n" +msgstr "Nelze načíst uri %s: %s\n" + +#: app/flatpak-builtins-add-remote.c:233 +#, c-format +msgid "Can't load file %s: %s\n" +msgstr "Nelze načíst soubor %s: %s\n" + +#: app/flatpak-builtins-add-remote.c:241 +msgid "Invalid file format" +msgstr "Neplatný formát souboru" + +#: app/flatpak-builtins-add-remote.c:249 +#, c-format +msgid "Invalid version %s, only 1 supported" +msgstr "Neplatná verze %s, pouze 1 je podporována" + +#: app/flatpak-builtins-add-remote.c:293 +msgid "Invalid gpg key" +msgstr "Neplatný klíč gpg" + +#: app/flatpak-builtins-add-remote.c:320 msgid "NAME LOCATION - Add a remote repository" msgstr "NÁZEV UMÍSTĚNÍ - Přidat vzdálený repozitář" -#: app/flatpak-builtins-add-remote.c:321 -#: app/flatpak-builtins-delete-remote.c:58 app/flatpak-builtins-info.c:104 +#: app/flatpak-builtins-add-remote.c:333 +#: app/flatpak-builtins-delete-remote.c:61 app/flatpak-builtins-info.c:125 msgid "NAME must be specified" msgstr "NÁZEV musí být určen" -#: app/flatpak-builtins-add-remote.c:324 app/flatpak-builtins-build-sign.c:71 -#: app/flatpak-builtins-repo.c:174 app/flatpak-builtins-repo-update.c:429 +#: app/flatpak-builtins-add-remote.c:336 app/flatpak-builtins-build-sign.c:71 +#: app/flatpak-builtins-repo.c:175 app/flatpak-builtins-repo-update.c:429 msgid "LOCATION must be specified" msgstr "UMÍSTĚNÍ musí být určeno" -#: app/flatpak-builtins-add-remote.c:327 -#: app/flatpak-builtins-build-bundle.c:479 +#: app/flatpak-builtins-add-remote.c:339 +#: app/flatpak-builtins-build-bundle.c:461 #: app/flatpak-builtins-build-export.c:676 #: app/flatpak-builtins-build-import-bundle.c:182 #: app/flatpak-builtins-build-init.c:181 app/flatpak-builtins-build-sign.c:74 -#: app/flatpak-builtins-delete-remote.c:63 +#: app/flatpak-builtins-delete-remote.c:66 #: app/flatpak-builtins-document-export.c:102 #: app/flatpak-builtins-document-info.c:75 #: app/flatpak-builtins-document-list.c:70 -#: app/flatpak-builtins-document-unexport.c:67 app/flatpak-builtins-info.c:111 -#: app/flatpak-builtins-install.c:265 app/flatpak-builtins-install.c:399 -#: app/flatpak-builtins-list.c:382 app/flatpak-builtins-list-remotes.c:66 -#: app/flatpak-builtins-ls-remote.c:84 app/flatpak-builtins-make-current.c:67 -#: app/flatpak-builtins-override.c:66 +#: app/flatpak-builtins-document-unexport.c:67 app/flatpak-builtins-info.c:132 +#: app/flatpak-builtins-install.c:267 app/flatpak-builtins-install.c:401 +#: app/flatpak-builtins-list.c:314 app/flatpak-builtins-list-remotes.c:61 +#: app/flatpak-builtins-ls-remote.c:107 app/flatpak-builtins-make-current.c:72 +#: app/flatpak-builtins-override.c:68 msgid "Too many arguments" msgstr "Příliš mnoho parametrů" -#: app/flatpak-builtins-add-remote.c:332 +#: app/flatpak-builtins-add-remote.c:344 #: app/flatpak-builtins-build-export.c:692 #, c-format msgid "‘%s’ is not a valid collection ID: %s" msgstr "„%s“ není platným ID kolekce: %s" -#: app/flatpak-builtins-add-remote.c:336 +#: app/flatpak-builtins-add-remote.c:348 msgid "GPG verification is required if collections are enabled" msgstr "Ověřování pomocí GPG je vyžadováno, pokud jsou povoleny kolekce" #. Do nothing -#: app/flatpak-builtins-add-remote.c:351 +#: app/flatpak-builtins-add-remote.c:363 #, c-format msgid "Remote %s already exists" msgstr "Vzdálený repozitář %s již existuje" -#: app/flatpak-builtins-add-remote.c:359 +#: app/flatpak-builtins-add-remote.c:371 msgid "No url specified in flatpakrepo file" msgstr "Žádný url není určen ve flatpakrepo souboru" -#: app/flatpak-builtins-add-remote.c:403 +#: app/flatpak-builtins-add-remote.c:415 #, c-format msgid "Warning: Could not update extra metadata for '%s': %s\n" msgstr "Varování: Nepodařilo se aktualizovat dodatečná metadata pro „%s“: %s\n" -#: app/flatpak-builtins-add-remote.c:451 +#: app/flatpak-builtins-add-remote.c:464 msgid "NAME - Modify a remote repository" msgstr "NÁZEV - Upravit vzdálený repozitář" -#: app/flatpak-builtins-add-remote.c:460 +#: app/flatpak-builtins-add-remote.c:474 msgid "Remote NAME must be specified" msgstr "NÁZEV vzdáleného repozitáře musí být určen" -#: app/flatpak-builtins-add-remote.c:465 -#, c-format -msgid "No remote %s" -msgstr "Žádný vzdálený repozitář %s" - -#: app/flatpak-builtins-add-remote.c:471 +#: app/flatpak-builtins-add-remote.c:485 #, c-format msgid "Updating extra metadata from remote summary for %s\n" msgstr "Aktualizuji dodatečná metadata ze vzdáleného shrnutí pro %s\n" -#: app/flatpak-builtins-add-remote.c:474 +#: app/flatpak-builtins-add-remote.c:488 #, c-format msgid "Error updating extra metadata for '%s': %s\n" msgstr "Chyba během aktualizace dodatečných metadat pro „%s“: %s\n" -#: app/flatpak-builtins-add-remote.c:475 +#: app/flatpak-builtins-add-remote.c:489 #, c-format msgid "Could not update extra metadata for %s" msgstr "Nepodařilo se aktualizovat dodatečná metadata pro %s" -#: app/flatpak-builtins-build-bundle.c:55 +#: app/flatpak-builtins-build-bundle.c:56 msgid "Export runtime instead of app" msgstr "Exportovat prostředí namísto aplikace" -#: app/flatpak-builtins-build-bundle.c:56 +#: app/flatpak-builtins-build-bundle.c:57 msgid "Arch to bundle for" msgstr "Architektura, pro kterou se má vytvořit balík" -#: app/flatpak-builtins-build-bundle.c:56 +#: app/flatpak-builtins-build-bundle.c:57 #: app/flatpak-builtins-build-export.c:55 app/flatpak-builtins-build-init.c:49 -#: app/flatpak-builtins-build-sign.c:41 app/flatpak-builtins-info.c:48 -#: app/flatpak-builtins-install.c:56 app/flatpak-builtins-list.c:52 -#: app/flatpak-builtins-ls-remote.c:48 app/flatpak-builtins-make-current.c:38 -#: app/flatpak-builtins-run.c:52 app/flatpak-builtins-uninstall.c:44 -#: app/flatpak-builtins-update.c:53 +#: app/flatpak-builtins-build-sign.c:41 app/flatpak-builtins-info.c:51 +#: app/flatpak-builtins-info-remote.c:48 app/flatpak-builtins-install.c:57 +#: app/flatpak-builtins-list.c:46 app/flatpak-builtins-ls-remote.c:49 +#: app/flatpak-builtins-make-current.c:38 app/flatpak-builtins-run.c:52 +#: app/flatpak-builtins-uninstall.c:44 app/flatpak-builtins-update.c:53 msgid "ARCH" msgstr "ARCHITEKTURA" -#: app/flatpak-builtins-build-bundle.c:57 +#: app/flatpak-builtins-build-bundle.c:58 msgid "Url for repo" msgstr "Url pro repozitář" -#: app/flatpak-builtins-build-bundle.c:58 +#: app/flatpak-builtins-build-bundle.c:59 msgid "Url for runtime flatpakrepo file" msgstr "Url pro flatpakrepo soubor prostředí" -#: app/flatpak-builtins-build-bundle.c:59 +#: app/flatpak-builtins-build-bundle.c:60 msgid "Add GPG key from FILE (- for stdin)" msgstr "Přidat klíč GPG ze SOUBORU (- pro standardní vstup)" -#: app/flatpak-builtins-build-bundle.c:60 +#: app/flatpak-builtins-build-bundle.c:61 msgid "Export oci image instead of flatpak bundle" msgstr "Exportovat oci obraz namísto flatpak balíku" -#: app/flatpak-builtins-build-bundle.c:61 +#: app/flatpak-builtins-build-bundle.c:62 msgid "GPG Key ID to sign the OCI image with" -msgstr "ID GPG klíče pro podepsání OCI obrazu" +msgstr "ID klíče GPG pro podepsání OCI obrazu" -#: app/flatpak-builtins-build-bundle.c:61 +#: app/flatpak-builtins-build-bundle.c:62 #: app/flatpak-builtins-build-commit-from.c:55 #: app/flatpak-builtins-build-export.c:61 #: app/flatpak-builtins-build-import-bundle.c:46 @@ -253,7 +270,7 @@ msgstr "ID GPG klíče pro podepsání OCI obrazu" msgid "KEY-ID" msgstr "KLÍČ-ID" -#: app/flatpak-builtins-build-bundle.c:62 +#: app/flatpak-builtins-build-bundle.c:63 #: app/flatpak-builtins-build-commit-from.c:56 #: app/flatpak-builtins-build-export.c:64 #: app/flatpak-builtins-build-import-bundle.c:47 @@ -261,7 +278,7 @@ msgstr "KLÍČ-ID" msgid "GPG Homedir to use when looking for keyrings" msgstr "Domovský adresář pro použití při hledání klíčenek" -#: app/flatpak-builtins-build-bundle.c:62 +#: app/flatpak-builtins-build-bundle.c:63 #: app/flatpak-builtins-build-commit-from.c:56 #: app/flatpak-builtins-build-export.c:64 #: app/flatpak-builtins-build-import-bundle.c:47 @@ -269,7 +286,16 @@ msgstr "Domovský adresář pro použití při hledání klíčenek" msgid "HOMEDIR" msgstr "DOMOVSKÝ_ADRESÁŘ" -#: app/flatpak-builtins-build-bundle.c:469 +#: app/flatpak-builtins-build-bundle.c:64 +msgid "OSTree commit to create a delta bundle from" +msgstr "" + +#: app/flatpak-builtins-build-bundle.c:64 app/flatpak-builtins-info-remote.c:49 +#: app/flatpak-builtins-update.c:54 +msgid "COMMIT" +msgstr "COMMIT" + +#: app/flatpak-builtins-build-bundle.c:451 msgid "" "LOCATION FILENAME NAME [BRANCH] - Create a single file bundle from a local " "repository" @@ -277,94 +303,106 @@ msgstr "" "UMÍSTĚNÍ NÁZEV_SOUBORU NÁZEV [VĚTEV] - Vytvořit jeden soubor balíku z " "místního repozitáře" -#: app/flatpak-builtins-build-bundle.c:476 +#: app/flatpak-builtins-build-bundle.c:458 msgid "LOCATION, FILENAME and NAME must be specified" msgstr "UMÍSTĚNÍ, NÁZEV_SOUBORU A NÁZEV musí být určeny" -#: app/flatpak-builtins-build-bundle.c:494 -#: app/flatpak-builtins-build-commit-from.c:103 -#: app/flatpak-builtins-build-commit-from.c:113 +#: app/flatpak-builtins-build-bundle.c:476 +#: app/flatpak-builtins-build-commit-from.c:253 +#: app/flatpak-builtins-build-commit-from.c:263 #: app/flatpak-builtins-build-import-bundle.c:191 #, c-format msgid "'%s' is not a valid repository" msgstr "„%s“ není platným repozitářem" -#: app/flatpak-builtins-build-bundle.c:506 app/flatpak-builtins-build-sign.c:86 +#: app/flatpak-builtins-build-bundle.c:488 app/flatpak-builtins-build-sign.c:86 #, c-format msgid "'%s' is not a valid name: %s" msgstr "„%s“ není platným názvem: %s" -#: app/flatpak-builtins-build-bundle.c:509 +#: app/flatpak-builtins-build-bundle.c:491 #: app/flatpak-builtins-build-export.c:699 app/flatpak-builtins-build-sign.c:89 #, 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.c:46 +#: app/flatpak-builtins-build.c:49 msgid "Use Platform runtime rather than Sdk" msgstr "" -#: app/flatpak-builtins-build.c:47 +#: app/flatpak-builtins-build.c:50 +msgid "Make destination readonly" +msgstr "Udělat cíl pouze pro čtení" + +#: app/flatpak-builtins-build.c:51 msgid "Add bind mount" msgstr "Přidat vázané připojení" -#: app/flatpak-builtins-build.c:47 +#: app/flatpak-builtins-build.c:51 msgid "DEST=SRC" msgstr "CÍL=ZDROJ" -#: app/flatpak-builtins-build.c:48 +#: app/flatpak-builtins-build.c:52 msgid "Start build in this directory" msgstr "Spustit sestavení v tomto adresáři" -#: app/flatpak-builtins-build.c:48 app/flatpak-builtins-build.c:49 +#: app/flatpak-builtins-build.c:52 app/flatpak-builtins-build.c:53 #: app/flatpak-builtins-build-init.c:58 msgid "DIR" msgstr "ADRESÁŘ" -#: app/flatpak-builtins-build.c:49 +#: app/flatpak-builtins-build.c:53 msgid "Where to look for custom sdk dir (defaults to 'usr')" msgstr "" -#: app/flatpak-builtins-build.c:50 app/flatpak-builtins-build-export.c:60 +#: app/flatpak-builtins-build.c:54 app/flatpak-builtins-build-export.c:60 msgid "Use alternative file for the metadata" msgstr "Použít alternativní soubor pro metadata" -#: app/flatpak-builtins-build.c:51 +#: app/flatpak-builtins-build.c:55 msgid "Kill processes when the parent process dies" msgstr "Zabít procesy v případě, že rodičovský proces zemře" -#: app/flatpak-builtins-build.c:52 +#: app/flatpak-builtins-build.c:56 msgid "Export application homedir directory to build" -msgstr "" +msgstr "Exportovat domovský adresář aplikace do sestavení" -#: app/flatpak-builtins-build.c:139 +#: app/flatpak-builtins-build.c:57 app/flatpak-builtins-run.c:58 +msgid "Log session bus calls" +msgstr "Zaznamenávat volání sběrnice sezení" + +#: app/flatpak-builtins-build.c:58 app/flatpak-builtins-run.c:59 +msgid "Log system bus calls" +msgstr "Zaznamenávat volání systémové sběrnice" + +#: app/flatpak-builtins-build.c:126 msgid "DIRECTORY [COMMAND [args...]] - Build in directory" msgstr "ADRESÁŘ [PŘÍKAZ [parametry...]] - Sestavit v adresáři" -#: app/flatpak-builtins-build.c:162 app/flatpak-builtins-build-finish.c:533 +#: app/flatpak-builtins-build.c:149 app/flatpak-builtins-build-finish.c:533 msgid "DIRECTORY must be specified" msgstr "ADRESÁŘ musí být určen" -#: app/flatpak-builtins-build.c:173 app/flatpak-builtins-build-export.c:721 +#: app/flatpak-builtins-build.c:160 app/flatpak-builtins-build-export.c:721 #, 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:192 +#: app/flatpak-builtins-build.c:179 msgid "metadata invalid, not application or runtime" msgstr "neplatná metadata, není aplikace nebo prostředí" -#: app/flatpak-builtins-build.c:292 +#: app/flatpak-builtins-build.c:283 #, c-format msgid "No extension point matching %s in %s" msgstr "" -#: app/flatpak-builtins-build.c:432 +#: app/flatpak-builtins-build.c:433 #, c-format msgid "Missing '=' in bind mount option '%s'" msgstr "" -#: app/flatpak-builtins-build.c:460 common/flatpak-run.c:5406 +#: app/flatpak-builtins-build.c:462 common/flatpak-run.c:3038 msgid "Unable to start app" msgstr "Není možné spustit aplikaci" @@ -421,36 +459,41 @@ msgstr "Neaktualizovat shrnutí" #: app/flatpak-builtins-build-import-bundle.c:46 #: app/flatpak-builtins-build-sign.c:43 msgid "GPG Key ID to sign the commit with" -msgstr "ID GPG klíče pro podepsání commitu" +msgstr "ID klíče GPG pro podepsání commitu" -#: app/flatpak-builtins-build-commit-from.c:78 +#: app/flatpak-builtins-build-commit-from.c:228 msgid "DST-REPO [DST-REF]... - Make a new commit based on existing commit(s)" msgstr "" "CÍL-REPO [CÍL-REF]... - Vytvořit nový commit založený na existujícím commitu " "(commitech)" -#: app/flatpak-builtins-build-commit-from.c:85 +#: app/flatpak-builtins-build-commit-from.c:235 msgid "DST-REPO must be specified" msgstr "CÍL-REPO musí být určeno" -#: app/flatpak-builtins-build-commit-from.c:93 +#: app/flatpak-builtins-build-commit-from.c:243 msgid "" "If --src-repo is not specified, exactly one destination ref must be specified" msgstr "" -#: app/flatpak-builtins-build-commit-from.c:96 +#: app/flatpak-builtins-build-commit-from.c:246 msgid "" "If --src-ref is specified, exactly one destination ref must be specified" msgstr "" -#: app/flatpak-builtins-build-commit-from.c:99 +#: app/flatpak-builtins-build-commit-from.c:249 msgid "Either --src-repo or --src-ref must be specified." msgstr "" -#: app/flatpak-builtins-build-commit-from.c:251 +#: app/flatpak-builtins-build-commit-from.c:402 msgid "Can't commit from partial source commit." msgstr "" +#: app/flatpak-builtins-build-commit-from.c:407 +#, c-format +msgid "%s: no change\n" +msgstr "%s: žádná změna\n" + #: app/flatpak-builtins-build-export.c:55 msgid "Architecture to export for (must be host compatible)" msgstr "" @@ -489,6 +532,42 @@ msgstr "Přepsat časovou značku commitu" msgid "ISO-8601-TIMESTAMP" msgstr "ISO-8601-TIMESTAMP" +#: app/flatpak-builtins-build-export.c:341 +#, c-format +msgid "WARNING: Error running desktop-file-validate: %s\n" +msgstr "" + +#: app/flatpak-builtins-build-export.c:349 +#, c-format +msgid "WARNING: Error reading from desktop-file-validate: %s\n" +msgstr "" + +#: app/flatpak-builtins-build-export.c:355 +#, c-format +msgid "WARNING: Failed to validate desktop file %s: %s\n" +msgstr "" + +#: app/flatpak-builtins-build-export.c:370 +#, c-format +msgid "WARNING: Can't find Exec key in %s: %s\n" +msgstr "" + +#: app/flatpak-builtins-build-export.c:378 +#: app/flatpak-builtins-build-export.c:475 +#, c-format +msgid "WARNING: Binary not found for Exec line in %s: %s\n" +msgstr "" + +#: app/flatpak-builtins-build-export.c:385 +#, c-format +msgid "WARNING: Icon not matching app id in %s: %s\n" +msgstr "" + +#: app/flatpak-builtins-build-export.c:413 +#, c-format +msgid "WARNING: Icon referenced in desktop file but not exported: %s\n" +msgstr "" + #: app/flatpak-builtins-build-export.c:551 #, c-format msgid "Invalid uri type %s, only http/https supported" @@ -526,12 +605,41 @@ msgstr "UMÍSTĚNÍ a ADRESÁŘ musí být určeny" msgid "No name specified in the metadata" msgstr "Není určen žádný název v metadatech" +#: app/flatpak-builtins-build-export.c:976 +#, c-format +msgid "Commit: %s\n" +msgstr "Commit: %s\n" + +#: app/flatpak-builtins-build-export.c:977 +#, c-format +msgid "Metadata Total: %u\n" +msgstr "Celková metadata: %u\n" + +#: app/flatpak-builtins-build-export.c:978 +#, c-format +msgid "Metadata Written: %u\n" +msgstr "Zapsaná metadata: %u\n" + +#: app/flatpak-builtins-build-export.c:979 +#, c-format +msgid "Content Total: %u\n" +msgstr "Celkový obsah: %u\n" + +#: app/flatpak-builtins-build-export.c:980 +#, c-format +msgid "Content Written: %u\n" +msgstr "Zapsaný obsah: %u\n" + +#: app/flatpak-builtins-build-export.c:981 +msgid "Content Bytes Written:" +msgstr "Zapsáno bajtů obsahu:" + #: app/flatpak-builtins-build-finish.c:48 msgid "Command to set" msgstr "Příkaz, který se má nastavit" #: app/flatpak-builtins-build-finish.c:48 app/flatpak-builtins-run.c:53 -#: app/flatpak-main.c:159 +#: app/flatpak-main.c:166 msgid "COMMAND" msgstr "PŘÍKAZ" @@ -592,6 +700,29 @@ msgstr "Nastavit generickou volbu metadat" msgid "GROUP=KEY[=VALUE]" msgstr "SKUPINA=KLÍČ[=HODNOTA]" +#: app/flatpak-builtins-build-finish.c:139 +#, c-format +msgid "Not exporting %s, wrong prefix\n" +msgstr "" + +#: app/flatpak-builtins-build-finish.c:143 +#, c-format +msgid "Exporting %s\n" +msgstr "Exportuji %s\n" + +#: app/flatpak-builtins-build-finish.c:384 +msgid "More than one executable found\n" +msgstr "Nalezen více než jeden spustitelný soubor\n" + +#: app/flatpak-builtins-build-finish.c:395 +#, c-format +msgid "Using %s as command\n" +msgstr "Používám %s jako příkaz\n" + +#: app/flatpak-builtins-build-finish.c:400 +msgid "No executable found\n" +msgstr "Nenalezen žádný spustitelný soubor\n" + #: app/flatpak-builtins-build-finish.c:433 #, c-format msgid "Too few elements in --extra-data argument %s" @@ -650,6 +781,12 @@ msgstr "Ref „%s“ nebyl nalezen v registru" msgid "Multiple images in registry, specify a ref with --ref" msgstr "" +#: app/flatpak-builtins-build-import-bundle.c:123 +#: app/flatpak-builtins-build-import-bundle.c:151 +#, c-format +msgid "Importing %s (%s)\n" +msgstr "Importuji %s (%s)\n" + #: app/flatpak-builtins-build-import-bundle.c:172 msgid "LOCATION FILENAME - Import a file bundle into a local repository" msgstr "" @@ -659,7 +796,7 @@ msgstr "" msgid "LOCATION and FILENAME must be specified" msgstr "UMÍSTĚNÍ a NÁZEV_SOUBORU musí být určeny" -#: app/flatpak-builtins-build-init.c:49 app/flatpak-builtins-info.c:48 +#: app/flatpak-builtins-build-init.c:49 app/flatpak-builtins-info.c:51 #: app/flatpak-builtins-run.c:52 msgid "Arch to use" msgstr "Architektura, která se má použít" @@ -698,7 +835,7 @@ msgstr "" #: app/flatpak-builtins-build-init.c:55 msgid "Specify the build type (app, runtime, extension)" -msgstr "" +msgstr "Určit typ sestavení (aplikace, prostředí, rozšíření)" #: app/flatpak-builtins-build-init.c:55 msgid "TYPE" @@ -749,8 +886,9 @@ msgstr "PROSTŘEDÍ musí byť určeno" #, c-format msgid "'%s' is not a valid build type name, use app, runtime or extension" msgstr "" +"„%s“ není platným názvem typu sestavení, použijte app, runtime nebo extension" -#: app/flatpak-builtins-build-init.c:205 app/flatpak-builtins-override.c:71 +#: app/flatpak-builtins-build-init.c:205 app/flatpak-builtins-override.c:74 #, c-format msgid "'%s' is not a valid application name: %s" msgstr "„%s“ není platným názvem aplikace: %s" @@ -760,12 +898,14 @@ 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:41 app/flatpak-builtins-install.c:56 +#: app/flatpak-builtins-build-sign.c:41 app/flatpak-builtins-info-remote.c:48 +#: app/flatpak-builtins-install.c:57 msgid "Arch to install for" msgstr "Architektura, pro kterou se má instalovat" -#: app/flatpak-builtins-build-sign.c:42 app/flatpak-builtins-install.c:62 -#: app/flatpak-builtins-uninstall.c:48 app/flatpak-builtins-update.c:61 +#: app/flatpak-builtins-build-sign.c:42 app/flatpak-builtins-info-remote.c:50 +#: app/flatpak-builtins-install.c:63 app/flatpak-builtins-uninstall.c:48 +#: app/flatpak-builtins-update.c:61 msgid "Look for runtime with the specified name" msgstr "Hledat prostředí s určeným názvem" @@ -777,11 +917,48 @@ msgstr "UMÍSTĚNÍ [ID [VĚTEV]] - Podepsat aplikaci nebo prostředí" msgid "No gpg key ids specified" msgstr "Žádné id klíče gpg určeny" -#: app/flatpak-builtins-delete-remote.c:37 +#: app/flatpak-builtins-config.c:41 +msgid "List configuration keys and values" +msgstr "Vypsat konfigurační klíče a hodnoty" + +#: app/flatpak-builtins-config.c:42 +msgid "Get configuration for KEY" +msgstr "Získat konfiguraci pro KLÍČ" + +#: app/flatpak-builtins-config.c:43 +msgid "Set configuration for KEY to VALUE" +msgstr "Nastavit konfiguraci pro KLÍČ na HODNOTU" + +#: app/flatpak-builtins-config.c:44 +msgid "Unset configuration for KEY" +msgstr "Zrušit konfiguraci pro KLÍČ" + +#: app/flatpak-builtins-config.c:95 +#, c-format +msgid "Unknown configure key '%s'" +msgstr "Neznámý konfigurační klíč „%s“" + +#: app/flatpak-builtins-config.c:144 app/flatpak-builtins-config.c:185 +msgid "You must specify key" +msgstr "Musíte určit klíč" + +#: app/flatpak-builtins-config.c:166 +msgid "You must specify both key and value" +msgstr "Musíte určit klíč i hodnotu" + +#: app/flatpak-builtins-config.c:204 +msgid "[KEY [VALUE]] - Manage configuration" +msgstr "[KLÍČ [HODNOTA]] - Spravovat konfiguraci" + +#: app/flatpak-builtins-config.c:223 +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-delete-remote.c:38 msgid "Remove remote even if in use" msgstr "Odstranit vzdálený repozitář i pokud se používá" -#: app/flatpak-builtins-delete-remote.c:49 +#: app/flatpak-builtins-delete-remote.c:51 msgid "NAME - Delete a remote repository" msgstr "NÁZEV - Odstranit vzdálený repozitář" @@ -932,165 +1109,250 @@ msgstr "Nelze přepnout gid" msgid "Can't switch uid" msgstr "Nelze přepnout uid" -#: app/flatpak-builtins-info.c:49 app/flatpak-builtins-list.c:46 -#: app/flatpak-builtins-list-remotes.c:43 +#: app/flatpak-builtins-info.c:52 msgid "Show user installations" msgstr "Zobrazit uživatelské instalace" -#: app/flatpak-builtins-info.c:50 app/flatpak-builtins-list.c:47 -#: app/flatpak-builtins-list-remotes.c:44 +#: app/flatpak-builtins-info.c:53 msgid "Show system-wide installations" msgstr "Zobrazit systémové instalace" -#: app/flatpak-builtins-info.c:51 app/flatpak-builtins-list.c:48 -#: app/flatpak-builtins-list-remotes.c:45 +#: app/flatpak-builtins-info.c:54 msgid "Show specific system-wide installations" msgstr "Zobrazit specifické systémové instalace" -#: app/flatpak-builtins-info.c:52 +#: app/flatpak-builtins-info.c:55 app/flatpak-builtins-info-remote.c:53 msgid "Show ref" msgstr "Zobrazit referenci" -#: app/flatpak-builtins-info.c:53 +#: app/flatpak-builtins-info.c:56 app/flatpak-builtins-info-remote.c:54 msgid "Show commit" msgstr "Zobrazit commit" -#: app/flatpak-builtins-info.c:54 +#: app/flatpak-builtins-info.c:57 msgid "Show origin" msgstr "Zobrazit původ" -#: app/flatpak-builtins-info.c:55 +#: app/flatpak-builtins-info.c:58 msgid "Show size" msgstr "Zobrazit velikost" -#: app/flatpak-builtins-info.c:56 +#: app/flatpak-builtins-info.c:59 app/flatpak-builtins-info-remote.c:56 msgid "Show metadata" msgstr "Zobrazit metadata" -#: app/flatpak-builtins-info.c:57 +#: app/flatpak-builtins-info.c:60 +#, fuzzy +msgid "Show permissions" +msgstr "Zobrazit rozšíření" + +#: app/flatpak-builtins-info.c:61 +#, fuzzy +msgid "Query file access" +msgstr "" +"\n" +" Správa přístupu k souborům" + +#: app/flatpak-builtins-info.c:61 app/flatpak-builtins-install.c:68 +#: app/flatpak-builtins-update.c:64 +msgid "PATH" +msgstr "CESTA" + +#: app/flatpak-builtins-info.c:62 msgid "Show extensions" msgstr "Zobrazit rozšíření" -#: app/flatpak-builtins-info.c:97 +#: app/flatpak-builtins-info.c:118 msgid "NAME [BRANCH] - Get info about installed app and/or runtime" msgstr "" "NÁZEV [VĚTEV] - Získat informace o instalované aplikaci a/nebo prostředí" -#: app/flatpak-builtins-info.c:157 +#: app/flatpak-builtins-info.c:189 msgid "ref not present in origin" msgstr "" -#: app/flatpak-builtins-info.c:159 +#: app/flatpak-builtins-info.c:202 app/flatpak-builtins-info-remote.c:177 +msgid "Warning: Commit has no flatpak metadata\n" +msgstr "" + +#: app/flatpak-builtins-info.c:209 app/flatpak-builtins-info-remote.c:200 msgid "Ref:" msgstr "Ref:" -#: app/flatpak-builtins-info.c:160 app/flatpak-builtins-info.c:270 +#: app/flatpak-builtins-info.c:210 app/flatpak-builtins-info.c:364 +#: app/flatpak-builtins-info-remote.c:201 msgid "ID:" msgstr "ID:" -#: app/flatpak-builtins-info.c:161 +#: app/flatpak-builtins-info.c:211 app/flatpak-builtins-info-remote.c:202 msgid "Arch:" msgstr "Architektura:" -#: app/flatpak-builtins-info.c:162 +#: app/flatpak-builtins-info.c:212 app/flatpak-builtins-info-remote.c:203 msgid "Branch:" msgstr "Větev:" -#: app/flatpak-builtins-info.c:163 app/flatpak-builtins-info.c:271 +#: app/flatpak-builtins-info.c:213 app/flatpak-builtins-info.c:365 msgid "Origin:" msgstr "Původ:" -#: app/flatpak-builtins-info.c:166 +#: app/flatpak-builtins-info.c:215 app/flatpak-builtins-info-remote.c:205 +msgid "Collection ID:" +msgstr "ID kolekce:" + +#: app/flatpak-builtins-info.c:217 app/flatpak-builtins-info-remote.c:206 +msgid "Date:" +msgstr "Datum:" + +#: app/flatpak-builtins-info.c:219 app/flatpak-builtins-info-remote.c:207 +msgid "Subject:" +msgstr "Předmět:" + +#: app/flatpak-builtins-info.c:223 msgid "Active commit:" msgstr "Aktivní commit:" -#: app/flatpak-builtins-info.c:167 +#: app/flatpak-builtins-info.c:224 msgid "Latest commit:" msgstr "Poslední commit:" -#: app/flatpak-builtins-info.c:170 app/flatpak-builtins-info.c:272 +#: app/flatpak-builtins-info.c:227 app/flatpak-builtins-info.c:366 +#: app/flatpak-builtins-info-remote.c:208 msgid "Commit:" msgstr "Commit:" -#: app/flatpak-builtins-info.c:172 +#: app/flatpak-builtins-info.c:229 msgid "alt-id:" msgstr "alt-id:" -#: app/flatpak-builtins-info.c:173 +#: app/flatpak-builtins-info.c:230 app/flatpak-builtins-info-remote.c:209 +msgid "Parent:" +msgstr "Rodič:" + +#: app/flatpak-builtins-info.c:231 msgid "Location:" msgstr "Umístění:" -#: app/flatpak-builtins-info.c:174 app/flatpak-builtins-info.c:273 +#: app/flatpak-builtins-info.c:232 app/flatpak-builtins-info.c:367 +#: app/flatpak-builtins-info-remote.c:211 msgid "Installed size:" msgstr "Instalovaná velikost:" -#: app/flatpak-builtins-info.c:179 +#: app/flatpak-builtins-info.c:237 app/flatpak-builtins-info-remote.c:216 msgid "Runtime:" msgstr "Prostředí:" -#: app/flatpak-builtins-info.c:184 +#: app/flatpak-builtins-info.c:242 msgid "Installed subdirectories:" msgstr "Instalované podadresáře:" -#: app/flatpak-builtins-info.c:269 +#: app/flatpak-builtins-info.c:363 msgid "Extension:" msgstr "Rozšíření:" -#: app/flatpak-builtins-info.c:280 +#: app/flatpak-builtins-info.c:374 msgid "Subpaths:" msgstr "Podcesty:" -#: app/flatpak-builtins-install.c:57 -msgid "Don't pull, only install from local cache" -msgstr "Nedělat pull, pouze instalovat z místní cache" +#: app/flatpak-builtins-info-remote.c:49 +msgid "Commit to show info for" +msgstr "Commit, pro který zobrazit informace" -#: app/flatpak-builtins-install.c:58 app/flatpak-builtins-update.c:57 -msgid "Don't deploy, only download to local cache" -msgstr "Nedělat deploy, pouze stáhnout do místní cache" - -#: app/flatpak-builtins-install.c:59 -msgid "Don't install related refs" -msgstr "Neinstalovat související refy" - -#: app/flatpak-builtins-install.c:60 app/flatpak-builtins-update.c:59 -msgid "Don't verify/install runtime dependencies" -msgstr "Neověřovat/neinstalovat běhové závislosti" - -#: app/flatpak-builtins-install.c:61 app/flatpak-builtins-update.c:60 -msgid "Don't use static deltas" -msgstr "Nepoužívat statické delta soubory" - -#: app/flatpak-builtins-install.c:63 app/flatpak-builtins-uninstall.c:49 -#: app/flatpak-builtins-update.c:62 +#: app/flatpak-builtins-info-remote.c:51 app/flatpak-builtins-install.c:64 +#: app/flatpak-builtins-uninstall.c:49 app/flatpak-builtins-update.c:62 msgid "Look for app with the specified name" msgstr "Hledat aplikaci s určeným názvem" -#: app/flatpak-builtins-install.c:64 +#: app/flatpak-builtins-info-remote.c:52 +msgid "Display log" +msgstr "Zobrazit záznam" + +#: app/flatpak-builtins-info-remote.c:55 +msgid "Show parent" +msgstr "Zobrazit rodiče" + +#: app/flatpak-builtins-info-remote.c:122 +msgid "" +" REMOTE REF - Show information about an application or runtime in a remote" +msgstr "" +" VZDÁLENÉ REF - Zobrazit informace o aplikaci nebo prostředí ve vzdáleném " +"repozitáři" + +#: app/flatpak-builtins-info-remote.c:133 app/flatpak-builtins-install.c:499 +msgid "REMOTE and REF must be specified" +msgstr "VZDÁLENÉ a REF musí být určeny" + +#: app/flatpak-builtins-info-remote.c:210 +msgid "Download size:" +msgstr "Stahovaná velikost:" + +#: app/flatpak-builtins-info-remote.c:223 +msgid "History:\n" +msgstr "Historie:\n" + +#: app/flatpak-builtins-info-remote.c:244 +msgid " Subject:" +msgstr " Předmět:" + +#: app/flatpak-builtins-info-remote.c:245 +msgid " Date:" +msgstr " Datum:" + +#: app/flatpak-builtins-info-remote.c:246 +msgid " Commit:" +msgstr " Commit:" + +#: app/flatpak-builtins-info-remote.c:292 +#, c-format +msgid "Warning: Commit %s has no flatpak metadata\n" +msgstr "" + +#: app/flatpak-builtins-install.c:58 +msgid "Don't pull, only install from local cache" +msgstr "Nedělat pull, pouze instalovat z místní cache" + +#: app/flatpak-builtins-install.c:59 app/flatpak-builtins-update.c:57 +msgid "Don't deploy, only download to local cache" +msgstr "Nedělat deploy, pouze stáhnout do místní cache" + +#: app/flatpak-builtins-install.c:60 +msgid "Don't install related refs" +msgstr "Neinstalovat související refy" + +#: app/flatpak-builtins-install.c:61 app/flatpak-builtins-update.c:59 +msgid "Don't verify/install runtime dependencies" +msgstr "Neověřovat/neinstalovat běhové závislosti" + +#: app/flatpak-builtins-install.c:62 app/flatpak-builtins-update.c:60 +msgid "Don't use static deltas" +msgstr "Nepoužívat statické delta soubory" + +#: app/flatpak-builtins-install.c:65 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:65 +#: app/flatpak-builtins-install.c:66 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:66 +#: app/flatpak-builtins-install.c:67 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:67 +#: app/flatpak-builtins-install.c:68 msgid "Only install this subpath" msgstr "Instalovat pouze tuto podcestu" -#: app/flatpak-builtins-install.c:67 app/flatpak-builtins-update.c:64 -msgid "PATH" -msgstr "CESTA" - -#: app/flatpak-builtins-install.c:68 app/flatpak-builtins-update.c:65 +#: app/flatpak-builtins-install.c:69 app/flatpak-builtins-update.c:65 msgid "Automatically answer yes for all questions" msgstr "Automaticky odpovědět ano na všechny otázky" -#: app/flatpak-builtins-install.c:210 +#: app/flatpak-builtins-install.c:70 +msgid "Uninstall first if already installed" +msgstr "Nejprve odinstalovat, pokud je již nainstalováno" + +#: app/flatpak-builtins-install.c:212 #, c-format msgid "" "This application depends on runtimes from:\n" @@ -1101,149 +1363,147 @@ msgstr "" " %s\n" "Konfigurovat tohle jako nový vzdálený repozitář „%s“" -#: app/flatpak-builtins-install.c:214 app/flatpak-builtins-install.c:340 +#: app/flatpak-builtins-install.c:216 app/flatpak-builtins-install.c:342 #, c-format msgid "Configuring %s as new remote '%s'" msgstr "Nastavuji %s jako nový vzdálený repozitář „%s“" -#: app/flatpak-builtins-install.c:262 +#: app/flatpak-builtins-install.c:264 msgid "Bundle filename must be specified" msgstr "Název souboru balíku musí byt určen" -#: app/flatpak-builtins-install.c:272 +#: app/flatpak-builtins-install.c:274 msgid "Remote bundles are not supported" msgstr "Vzdálené balíky nejsou podporovány" -#: app/flatpak-builtins-install.c:336 +#: app/flatpak-builtins-install.c:338 #, c-format msgid "" "The remote '%s', at location %s contains additional applications.\n" -"Do you want to install other applications from here?" +"Should the remote be kept for future installations?" msgstr "" +"Vzdálený repozitář „%s“ umístěný v %s obsahuje dodatečné aplikace.\n" +"Má být vzdálený repozitář ponechán pro budoucí instalace?" -#: app/flatpak-builtins-install.c:396 +#: app/flatpak-builtins-install.c:398 msgid "Filename or uri must be specified" msgstr "Název vzdáleného repozitáře musí být určen" -#: app/flatpak-builtins-install.c:440 +#: app/flatpak-builtins-install.c:442 #, c-format msgid "Installing: %s\n" msgstr "Instaluji: %s\n" -#: app/flatpak-builtins-install.c:470 +#: app/flatpak-builtins-install.c:474 msgid "LOCATION/REMOTE [REF...] - Install applications or runtimes" msgstr "UMÍSTĚNÍ/VZDÁLENÉ [REF...] - Instalovat aplikaci nebo prostředí" -#: app/flatpak-builtins-install.c:491 -msgid "REMOTE and REF must be specified" -msgstr "VZDÁLENÉ a REF musí být určeny" - -#: app/flatpak-builtins-list.c:49 +#: app/flatpak-builtins-list.c:43 msgid "Show extra information" msgstr "Zobrazit dodatečné informace" -#: app/flatpak-builtins-list.c:50 +#: app/flatpak-builtins-list.c:44 msgid "List installed runtimes" msgstr "Vypsat seznam instalovaných prostředí" -#: app/flatpak-builtins-list.c:51 +#: app/flatpak-builtins-list.c:45 msgid "List installed applications" msgstr "Vypsat seznam instalovaných aplikací" -#: app/flatpak-builtins-list.c:52 +#: app/flatpak-builtins-list.c:46 msgid "Arch to show" msgstr "Architektura, která se má zobrazit" -#: app/flatpak-builtins-list.c:53 app/flatpak-builtins-ls-remote.c:49 +#: app/flatpak-builtins-list.c:47 app/flatpak-builtins-ls-remote.c:50 msgid "List all refs (including locale/debug)" msgstr "Zobrazit všechny refy (včetně locale/debug)" -#: app/flatpak-builtins-list.c:131 app/flatpak-builtins-ls-remote.c:129 +#: app/flatpak-builtins-list.c:125 app/flatpak-builtins-ls-remote.c:174 #: app/flatpak-builtins-repo.c:98 msgid "Ref" msgstr "Ref" -#: app/flatpak-builtins-list.c:134 app/flatpak-builtins-ls-remote.c:131 +#: app/flatpak-builtins-list.c:128 app/flatpak-builtins-ls-remote.c:176 msgid "Origin" msgstr "Původ" -#: app/flatpak-builtins-list.c:135 +#: app/flatpak-builtins-list.c:129 msgid "Active commit" msgstr "Aktivní commit" -#: app/flatpak-builtins-list.c:136 +#: app/flatpak-builtins-list.c:130 msgid "Latest commit" msgstr "Poslední commit" -#: app/flatpak-builtins-list.c:137 app/flatpak-builtins-ls-remote.c:133 +#: app/flatpak-builtins-list.c:131 app/flatpak-builtins-ls-remote.c:178 msgid "Installed size" msgstr "Instalovaná velikost" -#: app/flatpak-builtins-list.c:139 app/flatpak-builtins-list-remotes.c:112 +#: app/flatpak-builtins-list.c:133 app/flatpak-builtins-list-remotes.c:73 msgid "Options" msgstr "Možnosti" -#: app/flatpak-builtins-list.c:375 +#: app/flatpak-builtins-list.c:305 msgid " - List installed apps and/or runtimes" msgstr " - Vypsat instalované aplikace a/nebo prostředí" -#: app/flatpak-builtins-list-remotes.c:46 +#: app/flatpak-builtins-list-remotes.c:40 msgid "Show remote details" msgstr "Zobrazit detaily vzdáleného repozitáře" -#: app/flatpak-builtins-list-remotes.c:47 +#: app/flatpak-builtins-list-remotes.c:41 msgid "Show disabled remotes" msgstr "Zobrazit zakázané vzdálené repozitáře" -#: app/flatpak-builtins-list-remotes.c:59 +#: app/flatpak-builtins-list-remotes.c:53 msgid " - List remote repositories" msgstr " - Vypsat vzdálené repozitáře" -#: app/flatpak-builtins-list-remotes.c:105 +#: app/flatpak-builtins-list-remotes.c:66 msgid "Name" msgstr "Název" -#: app/flatpak-builtins-list-remotes.c:108 +#: app/flatpak-builtins-list-remotes.c:69 msgid "Title" msgstr "Jméno" -#: app/flatpak-builtins-list-remotes.c:110 +#: app/flatpak-builtins-list-remotes.c:71 msgid "Priority" msgstr "Priorita" -#: app/flatpak-builtins-ls-remote.c:44 +#: app/flatpak-builtins-ls-remote.c:45 msgid "Show arches and branches" msgstr "Zobrazit architektury a větve" -#: app/flatpak-builtins-ls-remote.c:45 +#: app/flatpak-builtins-ls-remote.c:46 msgid "Show only runtimes" msgstr "Zobrazit pouze prostředí" -#: app/flatpak-builtins-ls-remote.c:46 +#: app/flatpak-builtins-ls-remote.c:47 msgid "Show only apps" msgstr "Zobrazit pouze aplikace" -#: app/flatpak-builtins-ls-remote.c:47 +#: app/flatpak-builtins-ls-remote.c:48 msgid "Show only those where updates are available" msgstr "Zobrazit pouze ty, pro které jsou k dispozici aktualizace" -#: app/flatpak-builtins-ls-remote.c:48 +#: app/flatpak-builtins-ls-remote.c:49 msgid "Limit to this arch (* for all)" msgstr "Omezit na tuto architekturu (* pro všechny)" -#: app/flatpak-builtins-ls-remote.c:74 -msgid " REMOTE - Show available runtimes and applications" -msgstr " VZDÁLENÉ - Zobrazit dostupné prostředí a aplikace" +#: app/flatpak-builtins-ls-remote.c:96 +msgid " [REMOTE] - Show available runtimes and applications" +msgstr " [VZDÁLENÉ] - Zobrazit dostupná prostředí a aplikace" -#: app/flatpak-builtins-ls-remote.c:132 +#: app/flatpak-builtins-ls-remote.c:177 msgid "Commit" msgstr "Commit" -#: app/flatpak-builtins-ls-remote.c:134 +#: app/flatpak-builtins-ls-remote.c:179 msgid "Download size" msgstr "Stahovaná velikost" -#: app/flatpak-builtins-ls-remote.c:245 +#: app/flatpak-builtins-ls-remote.c:304 msgid "No ref information available in repository" msgstr "V repozitáři nejsou dostupné žádné ref informace" @@ -1251,27 +1511,61 @@ msgstr "V repozitáři nejsou dostupné žádné ref informace" msgid "Arch to make current for" msgstr "" -#: app/flatpak-builtins-make-current.c:57 +#: app/flatpak-builtins-make-current.c:58 msgid "APP BRANCH - Make branch of application current" msgstr "" -#: app/flatpak-builtins-make-current.c:64 app/flatpak-builtins-override.c:63 -#: app/flatpak-builtins-run.c:105 +#: app/flatpak-builtins-make-current.c:69 app/flatpak-builtins-run.c:105 msgid "APP must be specified" msgstr "APLIKACE musí být určena" -#: app/flatpak-builtins-make-current.c:79 +#: app/flatpak-builtins-make-current.c:84 msgid "BRANCH must be specified" msgstr "VĚTEV musí být určena" -#: app/flatpak-builtins-make-current.c:92 +#: app/flatpak-builtins-make-current.c:97 #, c-format msgid "App %s branch %s is not installed" msgstr "Aplikace %s větev %s není nainstalována" -#: app/flatpak-builtins-override.c:53 -msgid "APP - Override settings for application" -msgstr "APLIKACE - Přepsat nastavení pro aplikaci" +#: app/flatpak-builtins-override.c:54 +msgid "[APP] - Override settings [for application]" +msgstr "[APLIKACE] - Přepsat nastavení [pro aplikaci]" + +#: app/flatpak-builtins-repo.c:48 +#, c-format +msgid "Title: %s\n" +msgstr "Jméno: %s\n" + +#: app/flatpak-builtins-repo.c:51 +#, c-format +msgid "Collection ID: %s\n" +msgstr "ID kolekce: %s\n" + +#: app/flatpak-builtins-repo.c:54 +#, c-format +msgid "Default branch: %s\n" +msgstr "Výchozí větev: %s\n" + +#: app/flatpak-builtins-repo.c:57 +#, c-format +msgid "Redirect URL: %s\n" +msgstr "URL přesměrování: %s\n" + +#: app/flatpak-builtins-repo.c:60 +#, c-format +msgid "Redirect collection ID: %s\n" +msgstr "ID kolekce přesměrování: %s\n" + +#: app/flatpak-builtins-repo.c:68 +#, c-format +msgid "GPG key hash: %s\n" +msgstr "Hash klíče GPG: %s\n" + +#: app/flatpak-builtins-repo.c:77 +#, c-format +msgid "%zd branches\n" +msgstr "%zd větví\n" #: app/flatpak-builtins-repo.c:99 msgid "Installed" @@ -1293,7 +1587,7 @@ msgstr "Vypsat větve v repozitáři" msgid "Print metadata for a branch" msgstr "Vypsat metadata pro větev" -#: app/flatpak-builtins-repo.c:167 +#: app/flatpak-builtins-repo.c:168 msgid "LOCATION - Repository maintenance" msgstr "UMÍSTĚNÍ - Údržba repozitáře" @@ -1319,7 +1613,7 @@ msgstr "Importovat nový výchozí veřejný klíč GPG ze SOUBORU" #: app/flatpak-builtins-repo-update.c:60 msgid "GPG Key ID to sign the summary with" -msgstr "ID GPG klíče pro podepsání shrnutí" +msgstr "ID klíče GPG pro podepsání shrnutí" #: app/flatpak-builtins-repo-update.c:62 msgid "Generate delta files" @@ -1403,14 +1697,6 @@ msgstr "Prostředí, které se má použít" msgid "Runtime version to use" msgstr "Verze prostředí, které se má použít" -#: app/flatpak-builtins-run.c:58 -msgid "Log session bus calls" -msgstr "Zaznamenávat volání sběrnice sezení" - -#: app/flatpak-builtins-run.c:59 -msgid "Log system bus calls" -msgstr "Zaznamenávat volání systémové sběrnice" - #: app/flatpak-builtins-run.c:60 msgid "Log accessibility bus calls" msgstr "Zaznamenávat volání sběrnice zpřístupnění" @@ -1423,6 +1709,38 @@ msgstr "Povolit přesměrování souboru" msgid "APP [args...] - Run an app" msgstr "APLIKACE [argumenty...] - Spustit aplikaci" +#: app/flatpak-builtins-search.c:239 +msgid "TEXT - Search remote apps/runtimes for text" +msgstr "TEXT - Vyhledat text ve vzdálených aplikacích/prostředích" + +#: app/flatpak-builtins-search.c:249 +msgid "TEXT must be specified" +msgstr "TEXT musí být určen" + +#: app/flatpak-builtins-search.c:305 +msgid "Application ID" +msgstr "ID aplikace" + +#: app/flatpak-builtins-search.c:306 +msgid "Version" +msgstr "Verze" + +#: app/flatpak-builtins-search.c:308 +msgid "Branch" +msgstr "Větev" + +#: app/flatpak-builtins-search.c:310 +msgid "Remotes" +msgstr "Vzdálené repozitáře" + +#: app/flatpak-builtins-search.c:311 +msgid "Description" +msgstr "Popis" + +#: app/flatpak-builtins-search.c:320 +msgid "No matches found" +msgstr "Nenalezeny žádné shody" + #: app/flatpak-builtins-uninstall.c:44 msgid "Arch to uninstall" msgstr "Architektura k odinstalování" @@ -1439,19 +1757,24 @@ msgstr "Neodinstalovat související refy" msgid "Remove files even if running" msgstr "Odstranit soubory i za běhu" -#: app/flatpak-builtins-uninstall.c:69 +#: app/flatpak-builtins-uninstall.c:70 msgid "REF... - Uninstall an application" msgstr "REF... - Odinstalovat aplikaci" -#: app/flatpak-builtins-uninstall.c:76 +#: app/flatpak-builtins-uninstall.c:81 msgid "Must specify at least one REF" msgstr "Alespoň jeden REF musí být určen" -#: app/flatpak-builtins-uninstall.c:129 app/flatpak-transaction.c:340 +#: app/flatpak-builtins-uninstall.c:134 app/flatpak-transaction.c:355 #, c-format msgid "Warning: Problem looking for related refs: %s\n" msgstr "" +#: app/flatpak-builtins-uninstall.c:164 +#, c-format +msgid "Uninstalling: %s\n" +msgstr "Odstraňuji: %s\n" + #: app/flatpak-builtins-update.c:53 msgid "Arch to update for" msgstr "Architektura, pro kterou se má aktualizovat" @@ -1460,10 +1783,6 @@ msgstr "Architektura, pro kterou se má aktualizovat" msgid "Commit to deploy" msgstr "Commit pro deploy" -#: app/flatpak-builtins-update.c:54 -msgid "COMMIT" -msgstr "COMMIT" - #: app/flatpak-builtins-update.c:55 msgid "Remove old files even if running" msgstr "Odstranit staré soubory i za běhu" @@ -1484,46 +1803,94 @@ msgstr "Aktualizovat appstream pro vzdálený repozitář" msgid "Only update this subpath" msgstr "Aktualizovat pouze tuto podcestu" -#: app/flatpak-builtins-update.c:95 -#, c-format -msgid "Updating appstream for remote %s\n" -msgstr "Aktualizuji appstream pro vzdálený repozitář %s\n" - -#: app/flatpak-builtins-update.c:133 +#: app/flatpak-builtins-update.c:83 msgid "[REF...] - Update applications or runtimes" msgstr "[REF...] - Aktualizovat aplikace nebo prostředí" +#: app/flatpak-builtins-update.c:119 +msgid "Looking for updates...\n" +msgstr "Vyhledávají se aktualizace...\n" + +#: app/flatpak-builtins-utils.c:365 +#, c-format +msgid "Remote ‘%s’ found in multiple installations:\n" +msgstr "Vzdálený repozitář „%s“ nalezen ve více instalacích:\n" + +#: app/flatpak-builtins-utils.c:372 +msgid "Which do you want to use (0 to abort)?" +msgstr "Který si přejete použít (0 pro zrušení)?" + +#: app/flatpak-builtins-utils.c:374 +#, c-format +msgid "No remote chosen to resolve ‘%s’ which exists in multiple installations" +msgstr "" +"Nebyl vybrán žádný vzdálený repozitář pro vyřešení „%s“, který existuje ve " +"více instalacích" + +#: app/flatpak-builtins-utils.c:479 app/flatpak-builtins-utils.c:481 +#, c-format +msgid "Updating appstream data for user remote %s\n" +msgstr "Aktualizuji appstream data pro uživatelský vzdálený repozitář %s\n" + +#: app/flatpak-builtins-utils.c:486 app/flatpak-builtins-utils.c:488 +#, c-format +msgid "Updating appstream data for remote %s\n" +msgstr "Aktualizuji appstream data pro vzdálený repozitář %s\n" + +#: app/flatpak-builtins-utils.c:493 +#, c-format +msgid "Error updating: %s\n" +msgstr "Chyba během aktualizace: %s\n" + +#: app/flatpak-builtins-utils.c:526 +#, c-format +msgid "Remote \"%s\" not found" +msgstr "Vzdálený repozitář „%s“ nebyl nalezen" + #. translators: please keep the leading space -#: app/flatpak-main.c:61 +#: app/flatpak-main.c:62 msgid " Manage installed apps and runtimes" msgstr " Správa instalovaných aplikací a prostředí" -#: app/flatpak-main.c:62 +#: app/flatpak-main.c:63 msgid "Install an application or runtime" msgstr "Instalovat aplikaci nebo prostředí" -#: app/flatpak-main.c:63 +#: app/flatpak-main.c:64 msgid "Update an installed application or runtime" msgstr "Aktualizovat instalovanou aplikaci nebo prostředí" -#: app/flatpak-main.c:64 +#: app/flatpak-main.c:65 msgid "Uninstall an installed application or runtime" msgstr "Odinstalovat instalovanou aplikaci nebo prostředí" -#: app/flatpak-main.c:65 +#: app/flatpak-main.c:66 msgid "List installed apps and/or runtimes" msgstr "Vypsat instalované aplikace a/nebo prostředí" -#: app/flatpak-main.c:66 +#: app/flatpak-main.c:67 msgid "Show info for installed app or runtime" msgstr "Zobrazit informace pro nainstalovanou aplikaci či prostředí" -#: app/flatpak-main.c:67 +#: app/flatpak-main.c:68 msgid "Configure flatpak" msgstr "Nastavit flatpak" #. translators: please keep the leading newline and space -#: app/flatpak-main.c:69 +#: app/flatpak-main.c:71 +msgid "" +"\n" +" Finding applications and runtimes" +msgstr "" +"\n" +" Vyhledávání aplikací a prostředí" + +#: app/flatpak-main.c:72 +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:75 msgid "" "\n" " Running applications" @@ -1531,24 +1898,24 @@ msgstr "" "\n" " Spuštěné aplikace" -#: app/flatpak-main.c:70 +#: app/flatpak-main.c:76 msgid "Run an application" msgstr "Spustit aplikaci" -#: app/flatpak-main.c:71 +#: app/flatpak-main.c:77 msgid "Override permissions for an application" msgstr "Přepsat oprávnění pro aplikaci" -#: app/flatpak-main.c:72 +#: app/flatpak-main.c:78 msgid "Specify default version to run" msgstr "Určit výchozí verzi ke spuštění" -#: app/flatpak-main.c:73 +#: app/flatpak-main.c:79 msgid "Enter the namespace of a running application" msgstr "Vstoupit do jmenného prostoru běžící aplikace" #. translators: please keep the leading newline and space -#: app/flatpak-main.c:76 +#: app/flatpak-main.c:82 msgid "" "\n" " Manage file access" @@ -1556,24 +1923,24 @@ msgstr "" "\n" " Správa přístupu k souborům" -#: app/flatpak-main.c:77 +#: app/flatpak-main.c:83 msgid "Grant an application access to a specific file" msgstr "Udělit aplikaci přístup k určenému souboru" -#: app/flatpak-main.c:78 +#: app/flatpak-main.c:84 msgid "Revoke access to a specific file" msgstr "Zrušit přístup aplikace k určenému souboru" -#: app/flatpak-main.c:79 +#: app/flatpak-main.c:85 msgid "Show information about a specific file" msgstr "Zobrazit informace o určeném souboru" -#: app/flatpak-main.c:80 +#: app/flatpak-main.c:86 msgid "List exported files" msgstr "Zobrazit exportované soubory" #. translators: please keep the leading newline and space -#: app/flatpak-main.c:83 +#: app/flatpak-main.c:89 msgid "" "\n" " Manage remote repositories" @@ -1581,28 +1948,32 @@ msgstr "" "\n" " Správa vzdálených repozitářů" -#: app/flatpak-main.c:84 +#: app/flatpak-main.c:90 msgid "List all configured remotes" msgstr "Vypsat všechny nastavené vzdálené repozitáře" -#: app/flatpak-main.c:85 +#: app/flatpak-main.c:91 msgid "Add a new remote repository (by URL)" msgstr "Přidat nový vzdálený repozitář (pomocí URL)" -#: app/flatpak-main.c:86 +#: app/flatpak-main.c:92 msgid "Modify properties of a configured remote" msgstr "Měnit vlastnosti nastaveného vzdáleného repozitáře" -#: app/flatpak-main.c:87 +#: app/flatpak-main.c:93 msgid "Delete a configured remote" msgstr "Odstranit nastavený vzdálený repozitář" -#: app/flatpak-main.c:89 +#: app/flatpak-main.c:95 msgid "List contents of a configured remote" msgstr "Vypsat obsah nastaveného vzdáleného repozitáře" +#: app/flatpak-main.c:96 +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:92 +#: app/flatpak-main.c:99 msgid "" "\n" " Build applications" @@ -1610,504 +1981,282 @@ msgstr "" "\n" " Sestavení aplikací" -#: app/flatpak-main.c:93 +#: app/flatpak-main.c:100 msgid "Initialize a directory for building" msgstr "Inicializovat adresář pro sestavení" -#: app/flatpak-main.c:94 +#: app/flatpak-main.c:101 msgid "Run a build command inside the build dir" msgstr "Spustit příkaz k sestavení uvnitř adresáře sestavení" -#: app/flatpak-main.c:95 +#: app/flatpak-main.c:102 msgid "Finish a build dir for export" msgstr "Dokončit adresář sestavení pro export" -#: app/flatpak-main.c:96 +#: app/flatpak-main.c:103 msgid "Export a build dir to a repository" msgstr "Exportovat adresář sestavení do repozitáře" -#: app/flatpak-main.c:97 -msgid "Create a bundle file from a build directory" +#: app/flatpak-main.c:104 +#, fuzzy +msgid "Create a bundle file from a ref in a local repository" msgstr "Vytvořit soubor balíku z adresáře sestavení" -#: app/flatpak-main.c:98 +#: app/flatpak-main.c:105 msgid "Import a bundle file" msgstr "Importovat soubor balíku" -#: app/flatpak-main.c:99 +#: app/flatpak-main.c:106 msgid "Sign an application or runtime" msgstr "Podepsat aplikaci nebo prostředí" -#: app/flatpak-main.c:100 +#: app/flatpak-main.c:107 msgid "Update the summary file in a repository" msgstr "Aktualizovat soubor shrnutí v repozitáři" -#: app/flatpak-main.c:101 +#: app/flatpak-main.c:108 msgid "Create new commit based on existing ref" msgstr "Vytvořit nový commit založený na existujícím ref" -#: app/flatpak-main.c:102 +#: app/flatpak-main.c:109 msgid "Print information about a repo" msgstr "Vypsat informace o repozitáři" -#: app/flatpak-main.c:119 +#: app/flatpak-main.c:126 msgid "Print debug information during command processing, -vv for more detail" msgstr "" "Vypsat ladící informace během zpracovávání příkazu, -vv pro více detailů" -#: app/flatpak-main.c:120 +#: app/flatpak-main.c:127 msgid "Print OSTree debug information during command processing" msgstr "Vypsat ladící informace OSTree během zpracovávání příkazu" -#: app/flatpak-main.c:121 +#: app/flatpak-main.c:128 msgid "Show help options" msgstr "Zobrazit volby nápovědy" -#: app/flatpak-main.c:126 +#: app/flatpak-main.c:133 msgid "Print version information and exit" msgstr "Vypsat informace o verzi a skončit" -#: app/flatpak-main.c:127 +#: app/flatpak-main.c:134 msgid "Print default arch and exit" msgstr "Vypsat výchozí architekturu a skončit" -#: app/flatpak-main.c:128 +#: app/flatpak-main.c:135 msgid "Print supported arches and exit" msgstr "Vypsat podporované architektury a skončit" -#: app/flatpak-main.c:129 +#: app/flatpak-main.c:136 msgid "Print active gl drivers and exit" msgstr "Vypsat aktivní gl ovladače a skončit" -#: app/flatpak-main.c:134 +#: app/flatpak-main.c:141 msgid "Work on user installations" msgstr "Pracovat na uživatelských instalacích" -#: app/flatpak-main.c:135 +#: app/flatpak-main.c:142 msgid "Work on system-wide installations (default)" msgstr "Pracovat na systémových instalacích (výchozí)" -#: app/flatpak-main.c:136 -msgid "Work on a specific system-wide installation" +#: app/flatpak-main.c:143 +msgid "Work on specific system-wide installation(s)" msgstr "Pracovat na specifických systémových instalacích" -#: app/flatpak-main.c:136 +#: app/flatpak-main.c:143 msgid "NAME" msgstr "NÁZEV" -#: app/flatpak-main.c:162 +#: app/flatpak-main.c:169 msgid "Builtin Commands:" msgstr "Vestavěné příkazy:" -#: app/flatpak-main.c:388 +#: app/flatpak-main.c:370 +msgid "" +"The --installation option was used multiple times for a command that works " +"on one installation" +msgstr "" + +#: app/flatpak-main.c:489 #, c-format msgid "Unknown command '%s'" msgstr "Neznámý příkaz „%s“" -#: app/flatpak-main.c:396 +#: app/flatpak-main.c:497 msgid "No command specified" msgstr "Nebyl určen žádný příkaz" -#: app/flatpak-main.c:514 +#: app/flatpak-main.c:615 msgid "error:" msgstr "chyba:" -#: app/flatpak-transaction.c:302 +#: app/flatpak-transaction.c:313 +#, c-format +msgid "Found in remote %s\n" +msgstr "Nalezeno ve vzdáleném repozitáři %s\n" + +#: app/flatpak-transaction.c:317 #, c-format msgid "Found in remote %s, do you want to install it?" msgstr "Nalezeno ve vzdáleném repozitáři %s, přejete si provést instalaci?" -#: app/flatpak-transaction.c:307 +#: app/flatpak-transaction.c:322 msgid "Found in several remotes:\n" msgstr "Nalezeno v několika vzdálených repozitářích:\n" -#: app/flatpak-transaction.c:312 +#: app/flatpak-transaction.c:327 msgid "Which do you want to install (0 to abort)?" msgstr "Který si přejete instalovat (0 pro zrušení)?" -#: app/flatpak-transaction.c:402 +#: app/flatpak-transaction.c:417 #, c-format msgid "Required runtime for %s (%s) is not installed, searching...\n" msgstr "Požadované prostředí pro %s (%s) není nainstalováno, vyhledává se...\n" -#: app/flatpak-transaction.c:408 +#: app/flatpak-transaction.c:423 #, c-format msgid "The required runtime %s was not found in a configured remote.\n" msgstr "Požadované prostředí %s nebylo nalezeno v nastaveném repozitáři.\n" -#: app/flatpak-transaction.c:469 common/flatpak-dir.c:1127 -#: common/flatpak-dir.c:1433 common/flatpak-dir.c:1456 -#: common/flatpak-dir.c:1478 common/flatpak-dir.c:10136 -#: common/flatpak-utils.c:1272 common/flatpak-utils.c:1366 +#: app/flatpak-transaction.c:506 common/flatpak-dir.c:1160 +#: common/flatpak-dir.c:1479 common/flatpak-dir.c:1502 +#: common/flatpak-dir.c:1524 common/flatpak-dir.c:10655 +#: common/flatpak-utils.c:1312 common/flatpak-utils.c:1406 #, c-format msgid "%s not installed" msgstr "%s není nainstalováno" -#: app/flatpak-transaction.c:475 +#: app/flatpak-transaction.c:512 #, c-format msgid "Remote %s disabled, ignoring %s update" msgstr "Vzdálený repozitář %s je zakázán, ignoruji aktualizaci %s" -#: app/flatpak-transaction.c:485 +#: app/flatpak-transaction.c:525 #, c-format msgid "%s already installed, skipping\n" msgstr "%s je již nainstalováno, přeskakuji\n" -#: app/flatpak-transaction.c:529 +#: app/flatpak-transaction.c:531 +#, c-format +msgid "%s is already installed from other remote (%s)" +msgstr "%s je již nainstalováno z jiného vzdáleného repozitáře (%s)" + +#: app/flatpak-transaction.c:543 +#, c-format +msgid "Warning: Can't find dependencies: %s\n" +msgstr "Varování: Nelze nalézt závislosti: %s\n" + +#: app/flatpak-transaction.c:570 +#, c-format +msgid "Invalid require-flatpak argument %s\n" +msgstr "" + +#: app/flatpak-transaction.c:576 #, c-format msgid "%s needs a later flatpak version (%s)" msgstr "%s vyžaduje novější verzi flatpaku (%s)" -#: app/flatpak-transaction.c:704 +#: app/flatpak-transaction.c:688 +#, c-format +msgid "Error updating remote metadata for '%s': %s\n" +msgstr "Chyba během aktualizace vzdálených metadat pro „%s“: %s\n" + +#: app/flatpak-transaction.c:744 msgid "install" msgstr "instalace" -#: app/flatpak-transaction.c:705 +#: app/flatpak-transaction.c:746 +#, c-format +msgid "Installing for user: %s from %s\n" +msgstr "Instaluji pro uživatele: %s z %s\n" + +#: app/flatpak-transaction.c:748 #, c-format msgid "Installing: %s from %s\n" msgstr "Instaluji: %s z %s\n" -#: app/flatpak-transaction.c:721 +#: app/flatpak-transaction.c:765 msgid "update" msgstr "aktualizace" -#: app/flatpak-transaction.c:729 +#: app/flatpak-transaction.c:774 +#, c-format +msgid "Updating for user: %s from %s\n" +msgstr "Aktualizuji pro uživatele: %s z %s\n" + +#: app/flatpak-transaction.c:776 #, c-format msgid "Updating: %s from %s\n" msgstr "Aktualizuji: %s z %s\n" -#: app/flatpak-transaction.c:749 +#: app/flatpak-transaction.c:796 #, c-format msgid "Now at %s.\n" msgstr "Nyní na %s.\n" -#: app/flatpak-transaction.c:755 +#: app/flatpak-transaction.c:802 msgid "No updates.\n" msgstr "Žádné aktualizace.\n" -#: app/flatpak-transaction.c:773 +#: app/flatpak-transaction.c:820 msgid "install bundle" msgstr "instalace balíku" -#: app/flatpak-transaction.c:774 +#: app/flatpak-transaction.c:822 +#, c-format +msgid "Installing for user: %s from bundle %s\n" +msgstr "Instaluji pro uživatele: %s z balíku %s\n" + +#: app/flatpak-transaction.c:824 #, c-format msgid "Installing: %s from bundle %s\n" msgstr "Instaluji: %s z balíku %s\n" -#: app/flatpak-transaction.c:786 +#: app/flatpak-transaction.c:836 #, c-format msgid "Warning: Failed to %s %s: %s\n" msgstr "Varování: Selhalo %s %s: %s\n" -#: app/flatpak-transaction.c:791 +#: app/flatpak-transaction.c:841 #, c-format msgid "Error: Failed to %s %s: %s\n" msgstr "Chyba: Selhalo %s %s: %s\n" -#: app/flatpak-transaction.c:796 +#: app/flatpak-transaction.c:846 msgid "One or more operations failed" msgstr "Jedna nebo více operací selhalo" -#: common/flatpak-dir.c:1015 -#, c-format -msgid "No overrides found for %s" -msgstr "" - -#: common/flatpak-dir.c:1611 -#, c-format -msgid "While opening repository %s: " -msgstr "Během otevírání repozitáře %s: " - -#: common/flatpak-dir.c:1770 common/flatpak-dir.c:5109 -msgid "Can't create deploy directory" -msgstr "Nemohu vytvořit adresář sestavení" - -#: common/flatpak-dir.c:2450 -#, c-format -msgid "Invalid sha256 for extra data uri %s" -msgstr "Neplatný sha256 pro dodatečná data uri %s" - -#: common/flatpak-dir.c:2455 -#, 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:2462 -#, c-format -msgid "Unsupported extra data uri %s" -msgstr "Nepodporovaný uri dodatečných dat %s" - -#: common/flatpak-dir.c:2476 -#, 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:2479 -#, c-format -msgid "Wrong size for extra-data %s" -msgstr "Chybná velikost pro dodatečná data %s" - -#: common/flatpak-dir.c:2494 -#, c-format -msgid "While downloading %s: " -msgstr "Během stahování %s: " - -#: common/flatpak-dir.c:2501 -#, c-format -msgid "Wrong size for extra data %s" -msgstr "Chybná velikost pro dodatečná data %s" - -#: common/flatpak-dir.c:2512 -#, c-format -msgid "Invalid checksum for extra data %s" -msgstr "Neplatný kontrolní součet pro dodatečná data %s" - -#: common/flatpak-dir.c:2768 -#, c-format -msgid "%s commit %s already installed" -msgstr "%s commit %s je již nainstalováno" - -#: common/flatpak-dir.c:3097 common/flatpak-dir.c:3411 -#, 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:3296 -#, c-format -msgid "Can't find %s in remote %s" -msgstr "Nemohu nalézt %s ve vzdáleném repozitáři %s" - -#: common/flatpak-dir.c:3969 -msgid "Not enough memory" -msgstr "Nedostatek paměti" - -#: common/flatpak-dir.c:3988 -msgid "Failed to read from exported file" -msgstr "Selhalo čtení z exportovaného souboru" - -#: common/flatpak-dir.c:4179 -msgid "Error reading mimetype xml file" -msgstr "Chyba při čtení mimetype xml souboru" - -#: common/flatpak-dir.c:4184 -msgid "Invalid mimetype xml file" -msgstr "Neplatný mimetype xml soubor" - -#: common/flatpak-dir.c:4726 -msgid "While getting detached metadata: " -msgstr "" - -#: common/flatpak-dir.c:4744 -msgid "While creating extradir: " -msgstr "" - -#: common/flatpak-dir.c:4765 -msgid "Invalid sha256 for extra data" -msgstr "Neplatný sha256 pro dodatečná data" - -#: common/flatpak-dir.c:4794 -msgid "Wrong size for extra data" -msgstr "Chybná velikost pro dodatečná data" - -#: common/flatpak-dir.c:4798 -msgid "Invalid checksum for extra data" -msgstr "Neplatný kontrolní součet pro dodatečná data" - -#: common/flatpak-dir.c:4807 -#, c-format -msgid "While writing extra data file '%s': " -msgstr "Během zapisování souboru dodatečných dat „%s“: " - -#: common/flatpak-dir.c:4991 -#, c-format -msgid "apply_extra script failed, exit status %d" -msgstr "apply_extra skript selhal, návratová hodnota %d" - -#: common/flatpak-dir.c:5068 -#, c-format -msgid "While trying to resolve ref %s: " -msgstr "Během pokusu o vyřešení ref %s: " - -#: common/flatpak-dir.c:5083 -#, c-format -msgid "%s is not available" -msgstr "%s není dostupné" - -#: common/flatpak-dir.c:5098 common/flatpak-dir.c:5436 -#: common/flatpak-dir.c:6204 common/flatpak-dir.c:6217 -#: common/flatpak-dir.c:6293 -#, c-format -msgid "%s branch %s already installed" -msgstr "%s větev %s je již nainstalováno" - -#: common/flatpak-dir.c:5117 -#, c-format -msgid "Failed to read commit %s: " -msgstr "Nelze číst commit %s: " - -#: common/flatpak-dir.c:5137 -#, c-format -msgid "While trying to checkout %s into %s: " -msgstr "" - -#: common/flatpak-dir.c:5162 common/flatpak-dir.c:5193 -msgid "While trying to checkout metadata subpath: " -msgstr "" - -#: common/flatpak-dir.c:5203 -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:5214 -msgid "While trying to apply extra data: " -msgstr "Během pokusu o aplikaci dodatečných dat: " - -#: common/flatpak-dir.c:5241 -#, c-format -msgid "Invalid deployed ref %s: " -msgstr "" - -#: common/flatpak-dir.c:5248 -#, c-format -msgid "Invalid commit ref %s: " -msgstr "" - -#: common/flatpak-dir.c:5256 -#, c-format -msgid "Deployed ref %s kind does not match commit (%s)" -msgstr "" - -#: common/flatpak-dir.c:5264 -#, c-format -msgid "Deployed ref %s name does not match commit (%s)" -msgstr "" - -#: common/flatpak-dir.c:5272 -#, c-format -msgid "Deployed ref %s arch does not match commit (%s)" -msgstr "" - -#: common/flatpak-dir.c:5278 -#, c-format -msgid "Deployed ref %s branch does not match commit (%s)" -msgstr "" - -#: common/flatpak-dir.c:5284 -#, c-format -msgid "Deployed ref %s does not match commit (%s)" -msgstr "" - -#: common/flatpak-dir.c:5303 -msgid "Deployed metadata does not match commit" -msgstr "" - -#: common/flatpak-dir.c:6065 -#, c-format -msgid "This version of %s is already installed" -msgstr "Tato verze aplikace %s je již nainstalována" - -#: common/flatpak-dir.c:6072 -msgid "Can't change remote during bundle install" -msgstr "Nemohu změnit vzdálený repozitář během instalace balíčku" - -#: common/flatpak-dir.c:6615 -#, c-format -msgid "%s branch %s is not installed" -msgstr "%s větev %s není nainstalováno" - -#: common/flatpak-dir.c:6859 -#, c-format -msgid "%s branch %s not installed" -msgstr "%s větev %s nenainstalováno" - -#: common/flatpak-dir.c:7818 -#, c-format -msgid "Nothing matches %s" -msgstr "Nic nevyhovuje názvu %s" - -#: common/flatpak-dir.c:7900 -#, 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:7942 -#, 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:7987 -#, 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:8113 -#, c-format -msgid "%s %s not installed" -msgstr "%s %s nenainstalováno" - -#: common/flatpak-dir.c:8280 -#, c-format -msgid "Could not find installation %s" -msgstr "Nemohu nalézt instalaci %s" - -#: common/flatpak-dir.c:8809 -#, 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:8810 -#, c-format -msgid "App %s, branch %s is already installed" -msgstr "Aplikace %s, větev %s je již nainstalováno" - -#: common/flatpak-dir.c:9269 -msgid "Remote title not set" -msgstr "Jméno vzdáleného adresáře nenastaveno" - -#: common/flatpak-dir.c:9291 -msgid "Remote default-branch not set" -msgstr "Vzdálený default-branch nenastaven" - -#: common/flatpak-dir.c:9785 -msgid "No flatpak cache in remote summary" -msgstr "Žádná cache ve vzdáleném shrnutí" - -#: common/flatpak-dir.c:9795 -#, c-format -msgid "No entry for %s in remote summary flatpak cache " -msgstr "Žádný záznam pro %s v cache vzdáleného shrnutí " - -#: common/flatpak-run.c:258 +#: common/flatpak-context.c:175 #, c-format msgid "Unknown share type %s, valid types are: %s" msgstr "" -#: common/flatpak-run.c:293 +#: common/flatpak-context.c:210 #, c-format msgid "Unknown policy type %s, valid types are: %s" msgstr "" -#: common/flatpak-run.c:331 +#: common/flatpak-context.c:248 #, c-format msgid "Invalid dbus name %s\n" msgstr "Neplatný název dbus %s\n" -#: common/flatpak-run.c:344 +#: common/flatpak-context.c:261 #, c-format msgid "Unknown socket type %s, valid types are: %s" msgstr "" -#: common/flatpak-run.c:373 +#: common/flatpak-context.c:290 #, c-format msgid "Unknown device type %s, valid types are: %s" msgstr "" -#: common/flatpak-run.c:401 +#: common/flatpak-context.c:318 #, c-format msgid "Unknown feature type %s, valid types are: %s" msgstr "" -#: common/flatpak-run.c:774 +#: common/flatpak-context.c:691 #, c-format msgid "" "Unknown filesystem location %s, valid locations are: host, home, xdg-" @@ -2116,161 +2265,479 @@ msgstr "" "Neplatné umístění systému souborů %s, platná umístění jsou: host, home, xdg-" "*[/...], ~/dir, /dir" -#: common/flatpak-run.c:1040 +#: common/flatpak-context.c:963 #, c-format msgid "Invalid env format %s" msgstr "Neplatný formát env %s" -#: common/flatpak-run.c:1180 +#: common/flatpak-context.c:1103 msgid "Share with host" msgstr "Sdílet s hostitelem" -#: common/flatpak-run.c:1180 common/flatpak-run.c:1181 +#: common/flatpak-context.c:1103 common/flatpak-context.c:1104 msgid "SHARE" msgstr "SDÍLET" -#: common/flatpak-run.c:1181 +#: common/flatpak-context.c:1104 msgid "Unshare with host" msgstr "Zrušit sdílení s hostitelem" -#: common/flatpak-run.c:1182 +#: common/flatpak-context.c:1105 msgid "Expose socket to app" msgstr "Odhalit soket aplikaci" -#: common/flatpak-run.c:1182 common/flatpak-run.c:1183 +#: common/flatpak-context.c:1105 common/flatpak-context.c:1106 msgid "SOCKET" msgstr "SOKET" -#: common/flatpak-run.c:1183 +#: common/flatpak-context.c:1106 msgid "Don't expose socket to app" msgstr "Neodhalovat soket aplikaci" -#: common/flatpak-run.c:1184 +#: common/flatpak-context.c:1107 msgid "Expose device to app" msgstr "Odhalit zařízení aplikaci" -#: common/flatpak-run.c:1184 common/flatpak-run.c:1185 +#: common/flatpak-context.c:1107 common/flatpak-context.c:1108 msgid "DEVICE" msgstr "ZAŘÍZENÍ" -#: common/flatpak-run.c:1185 +#: common/flatpak-context.c:1108 msgid "Don't expose device to app" msgstr "Neodhalovat zařízení aplikaci" -#: common/flatpak-run.c:1186 +#: common/flatpak-context.c:1109 msgid "Allow feature" msgstr "Umožnit funkci" -#: common/flatpak-run.c:1186 common/flatpak-run.c:1187 +#: common/flatpak-context.c:1109 common/flatpak-context.c:1110 msgid "FEATURE" msgstr "FUNKCE" -#: common/flatpak-run.c:1187 +#: common/flatpak-context.c:1110 msgid "Don't allow feature" msgstr "Neumožnit funkci" -#: common/flatpak-run.c:1188 +#: common/flatpak-context.c:1111 msgid "Expose filesystem to app (:ro for read-only)" msgstr "Odhalit systém souborů aplikaci (:ro pro přístup pouze ke čtení)" -#: common/flatpak-run.c:1188 +#: common/flatpak-context.c:1111 msgid "FILESYSTEM[:ro]" msgstr "SYSTÉM_SOUBORŮ[:ro]" -#: common/flatpak-run.c:1189 +#: common/flatpak-context.c:1112 msgid "Don't expose filesystem to app" msgstr "Neodhalovat systém souborů aplikaci" -#: common/flatpak-run.c:1189 +#: common/flatpak-context.c:1112 msgid "FILESYSTEM" msgstr "SYSTÉM_SOUBORŮ" -#: common/flatpak-run.c:1190 +#: common/flatpak-context.c:1113 msgid "Set environment variable" msgstr "Nastavit proměnnou prostředí" -#: common/flatpak-run.c:1190 +#: common/flatpak-context.c:1113 msgid "VAR=VALUE" msgstr "PROMĚNNÁ=HODNOTA" -#: common/flatpak-run.c:1191 +#: common/flatpak-context.c:1114 msgid "Allow app to own name on the session bus" msgstr "Povolit aplikaci vlastnit název na sběrnici sezení" -#: common/flatpak-run.c:1191 common/flatpak-run.c:1192 -#: common/flatpak-run.c:1193 common/flatpak-run.c:1194 +#: common/flatpak-context.c:1114 common/flatpak-context.c:1115 +#: common/flatpak-context.c:1116 common/flatpak-context.c:1117 msgid "DBUS_NAME" msgstr "NÁZEV_DBUS" -#: common/flatpak-run.c:1192 +#: common/flatpak-context.c:1115 msgid "Allow app to talk to name on the session bus" msgstr "Povolit aplikaci komunikovat s názvem na sběrnici sezení" -#: common/flatpak-run.c:1193 +#: common/flatpak-context.c:1116 msgid "Allow app to own name on the system bus" msgstr "Povolit aplikaci vlastnit název na systémové sběrnici" -#: common/flatpak-run.c:1194 +#: common/flatpak-context.c:1117 msgid "Allow app to talk to name on the system bus" msgstr "Povolit aplikaci komunikovat s názvem na systémové sběrnici" -#: common/flatpak-run.c:1195 +#: common/flatpak-context.c:1118 msgid "Add generic policy option" msgstr "Přidat generickou volbu bezpečnostní politiky" -#: common/flatpak-run.c:1195 common/flatpak-run.c:1196 +#: common/flatpak-context.c:1118 common/flatpak-context.c:1119 msgid "SUBSYSTEM.KEY=VALUE" msgstr "SUBSYSTEM.KLÍČ=HODNOTA" -#: common/flatpak-run.c:1196 +#: common/flatpak-context.c:1119 msgid "Remove generic policy option" msgstr "Odebrat generickou volbu bezpečnostní politiky" -#: common/flatpak-run.c:1197 +#: common/flatpak-context.c:1120 msgid "Persist home directory" msgstr "Trvalý domovský adresář" -#: common/flatpak-run.c:1197 +#: common/flatpak-context.c:1120 msgid "FILENAME" msgstr "NÁZEV_SOUBORU" #. This is not needed/used anymore, so hidden, but we accept it for backwards compat -#: common/flatpak-run.c:1199 +#: common/flatpak-context.c:1122 msgid "Don't require a running session (no cgroups creation)" msgstr "Nevyžadovat běžící sezení (bez vytvoření cgroups)" -#: common/flatpak-run.c:3830 +#: common/flatpak-dir.c:1044 +#, c-format +msgid "No overrides found for %s" +msgstr "" + +#: common/flatpak-dir.c:1674 +#, c-format +msgid "While opening repository %s: " +msgstr "Během otevírání repozitáře %s: " + +#: common/flatpak-dir.c:1908 common/flatpak-dir.c:5460 +msgid "Can't create deploy directory" +msgstr "Nemohu vytvořit adresář sestavení" + +#: common/flatpak-dir.c:2122 common/flatpak-dir.c:2125 +#, c-format +msgid "Failed to find latest revision for ref %s from remote %s: %s\n" +msgstr "" + +#: common/flatpak-dir.c:2761 +#, c-format +msgid "Invalid sha256 for extra data uri %s" +msgstr "Neplatný sha256 pro dodatečná data uri %s" + +#: common/flatpak-dir.c:2766 +#, 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:2773 +#, c-format +msgid "Unsupported extra data uri %s" +msgstr "Nepodporovaný uri dodatečných dat %s" + +#: common/flatpak-dir.c:2787 +#, 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:2790 +#, c-format +msgid "Wrong size for extra-data %s" +msgstr "Chybná velikost pro dodatečná data %s" + +#: common/flatpak-dir.c:2805 +#, c-format +msgid "While downloading %s: " +msgstr "Během stahování %s: " + +#: common/flatpak-dir.c:2812 +#, c-format +msgid "Wrong size for extra data %s" +msgstr "Chybná velikost pro dodatečná data %s" + +#: common/flatpak-dir.c:2823 +#, c-format +msgid "Invalid checksum for extra data %s" +msgstr "Neplatný kontrolní součet pro dodatečná data %s" + +#: common/flatpak-dir.c:2882 +msgid "Remote OCI index has no registry uri" +msgstr "" + +#: common/flatpak-dir.c:3100 +#, c-format +msgid "%s commit %s already installed" +msgstr "%s commit %s je již nainstalováno" + +#: common/flatpak-dir.c:3442 common/flatpak-dir.c:3773 +#, 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:3658 +#, c-format +msgid "Can't find %s in remote %s" +msgstr "Nemohu nalézt %s ve vzdáleném repozitáři %s" + +#: common/flatpak-dir.c:4331 +msgid "Not enough memory" +msgstr "Nedostatek paměti" + +#: common/flatpak-dir.c:4350 +msgid "Failed to read from exported file" +msgstr "Selhalo čtení z exportovaného souboru" + +#: common/flatpak-dir.c:4541 +msgid "Error reading mimetype xml file" +msgstr "Chyba při čtení mimetype xml souboru" + +#: common/flatpak-dir.c:4546 +msgid "Invalid mimetype xml file" +msgstr "Neplatný mimetype xml soubor" + +#: common/flatpak-dir.c:5089 +msgid "While getting detached metadata: " +msgstr "" + +#: common/flatpak-dir.c:5107 +msgid "While creating extradir: " +msgstr "" + +#: common/flatpak-dir.c:5128 +msgid "Invalid sha256 for extra data" +msgstr "Neplatný sha256 pro dodatečná data" + +#: common/flatpak-dir.c:5157 +msgid "Wrong size for extra data" +msgstr "Chybná velikost pro dodatečná data" + +#: common/flatpak-dir.c:5161 +msgid "Invalid checksum for extra data" +msgstr "Neplatný kontrolní součet pro dodatečná data" + +#: common/flatpak-dir.c:5170 +#, c-format +msgid "While writing extra data file '%s': " +msgstr "Během zapisování souboru dodatečných dat „%s“: " + +#: common/flatpak-dir.c:5340 +#, c-format +msgid "apply_extra script failed, exit status %d" +msgstr "apply_extra skript selhal, návratová hodnota %d" + +#: common/flatpak-dir.c:5419 +#, c-format +msgid "While trying to resolve ref %s: " +msgstr "Během pokusu o vyřešení ref %s: " + +#: common/flatpak-dir.c:5434 +#, c-format +msgid "%s is not available" +msgstr "%s není dostupné" + +#: common/flatpak-dir.c:5449 common/flatpak-dir.c:5881 +#: common/flatpak-dir.c:6671 common/flatpak-dir.c:6681 +#: common/flatpak-dir.c:6713 +#, c-format +msgid "%s branch %s already installed" +msgstr "%s větev %s je již nainstalováno" + +#: common/flatpak-dir.c:5468 +#, c-format +msgid "Failed to read commit %s: " +msgstr "Nelze číst commit %s: " + +#: common/flatpak-dir.c:5488 +#, c-format +msgid "While trying to checkout %s into %s: " +msgstr "" + +#: common/flatpak-dir.c:5513 common/flatpak-dir.c:5544 +msgid "While trying to checkout metadata subpath: " +msgstr "" + +#: common/flatpak-dir.c:5554 +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:5565 +msgid "While trying to apply extra data: " +msgstr "Během pokusu o aplikaci dodatečných dat: " + +#: common/flatpak-dir.c:5592 +#, c-format +msgid "Invalid deployed ref %s: " +msgstr "" + +#: common/flatpak-dir.c:5599 +#, c-format +msgid "Invalid commit ref %s: " +msgstr "" + +#: common/flatpak-dir.c:5607 +#, c-format +msgid "Deployed ref %s kind does not match commit (%s)" +msgstr "" + +#: common/flatpak-dir.c:5615 +#, c-format +msgid "Deployed ref %s name does not match commit (%s)" +msgstr "" + +#: common/flatpak-dir.c:5623 +#, c-format +msgid "Deployed ref %s arch does not match commit (%s)" +msgstr "" + +#: common/flatpak-dir.c:5629 +#, c-format +msgid "Deployed ref %s branch does not match commit (%s)" +msgstr "" + +#: common/flatpak-dir.c:5635 +#, c-format +msgid "Deployed ref %s does not match commit (%s)" +msgstr "" + +#: common/flatpak-dir.c:5654 +msgid "Deployed metadata does not match commit" +msgstr "" + +#: common/flatpak-dir.c:6533 +#, c-format +msgid "This version of %s is already installed" +msgstr "Tato verze aplikace %s je již nainstalována" + +#: common/flatpak-dir.c:6540 +msgid "Can't change remote during bundle install" +msgstr "Nemohu změnit vzdálený repozitář během instalace balíčku" + +#: common/flatpak-dir.c:7059 +#, c-format +msgid "%s branch %s is not installed" +msgstr "%s větev %s není nainstalováno" + +#: common/flatpak-dir.c:7304 +#, c-format +msgid "%s branch %s not installed" +msgstr "%s větev %s nenainstalováno" + +#: common/flatpak-dir.c:7628 +#, c-format +msgid "Pruning repo failed: %s" +msgstr "" + +#: common/flatpak-dir.c:8155 +#, 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:8176 +#, c-format +msgid "Nothing matches %s" +msgstr "Nic nevyhovuje názvu %s" + +#: common/flatpak-dir.c:8258 +#, 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:8300 +#, 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:8345 +#, 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:8471 +#, c-format +msgid "%s %s not installed" +msgstr "%s %s nenainstalováno" + +#: common/flatpak-dir.c:8638 +#, c-format +msgid "Could not find installation %s" +msgstr "Nemohu nalézt instalaci %s" + +#: common/flatpak-dir.c:9236 +#, 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:9237 +#, c-format +msgid "App %s, branch %s is already installed" +msgstr "Aplikace %s, větev %s je již nainstalováno" + +#: common/flatpak-dir.c:9717 +msgid "Remote title not set" +msgstr "Jméno vzdáleného adresáře nenastaveno" + +#: common/flatpak-dir.c:9739 +msgid "Remote default-branch not set" +msgstr "Vzdálený default-branch nenastaven" + +#: common/flatpak-dir.c:10332 +msgid "No flatpak cache in remote summary" +msgstr "Žádná cache ve vzdáleném shrnutí" + +#: common/flatpak-dir.c:10342 +#, c-format +msgid "No entry for %s in remote summary flatpak cache " +msgstr "Žádný záznam pro %s v cache vzdáleného shrnutí " + +#: common/flatpak-run.c:1456 #, c-format msgid "Failed to open flatpak-info temp file: %s" msgstr "Selhalo otevření dočasného souboru flatpak-info: %s" -#: common/flatpak-run.c:3904 common/flatpak-run.c:3914 +#: common/flatpak-run.c:1530 common/flatpak-run.c:1540 #, c-format msgid "Failed to open temp file: %s" msgstr "Selhalo otevření dočasného souboru: %s" -#: common/flatpak-run.c:4253 +#: common/flatpak-run.c:1883 msgid "Unable to create sync pipe" msgstr "Selhalo vytvoření synchronizační roury" -#: common/flatpak-run.c:4280 +#: common/flatpak-run.c:1910 #, c-format msgid "Failed to open app info file: %s" msgstr "Selhalo otevření souboru s informacemi o aplikaci: %s" -#: common/flatpak-run.c:4310 +#: common/flatpak-run.c:1940 msgid "Failed to sync with dbus proxy" msgstr "Selhala synchronizace s dbus proxy" -#: common/flatpak-run.c:5069 +#: common/flatpak-run.c:2700 #, c-format msgid "ldconfig failed, exit status %d" msgstr "ldconfig selhal, návratová hodnota %d" -#: common/flatpak-utils.c:2900 +#: common/flatpak-utils.c:624 +#, c-format +msgid "Migrating %s to %s\n" +msgstr "Migruji %s do %s\n" + +#: common/flatpak-utils.c:630 +#, c-format +msgid "Error during migration: %s\n" +msgstr "Chyba během migrace: %s\n" + +#: common/flatpak-utils.c:2988 msgid "No extra data sources" msgstr "Žádné zdroje dodatečných dat" +#: common/flatpak-utils.c:6576 +#, c-format +msgid "Downloading metadata: %u/(estimating) %s" +msgstr "Stahuji metadata: %u/(odhadováno) %s" + +#: common/flatpak-utils.c:6600 +#, c-format +msgid "Downloading: %s/%s" +msgstr "Stahuji: %s/%s" + +#: common/flatpak-utils.c:6620 +#, c-format +msgid "Downloading extra data: %s/%s" +msgstr "Stahuji dodatečná data: %s/%s" + +#: common/flatpak-utils.c:6625 +#, c-format +msgid "Downloading files: %d/%d %s" +msgstr "Stahuji soubory: %d/%d %s" + #. SECURITY: #. - Normal users do not need authentication to install signed applications #. from signed repositories, as this cannot exploit a system. @@ -2307,7 +2774,7 @@ msgstr "Aktualizovat podepsanou aplikaci" #: system-helper/org.freedesktop.Flatpak.policy.in:59 #: system-helper/org.freedesktop.Flatpak.policy.in:77 -#: system-helper/org.freedesktop.Flatpak.policy.in:169 +#: system-helper/org.freedesktop.Flatpak.policy.in:180 msgid "Authentication is required to update software" msgstr "K aktualizaci softwaru je vyžadováno ověření" @@ -2368,16 +2835,36 @@ msgstr "Nastavit vzdálený repozitář" msgid "Authentication is required to configure software repositories" msgstr "K nastavení repozitářů softwaru je vyžadováno ověření" +#: system-helper/org.freedesktop.Flatpak.policy.in:161 +msgid "Configure" +msgstr "Nastavit" + +#: system-helper/org.freedesktop.Flatpak.policy.in:162 +msgid "Authentication is required to configure software installation" +msgstr "K nastavení instalace softwaru je vyžadováno ověření" + #. SECURITY: #. - Normal users do not require admin authentication to update #. appstream data as it will be signed, and the action is required #. to update the system when unattended. #. - Changing this to anything other than 'yes' will break unattended #. updates. -#: system-helper/org.freedesktop.Flatpak.policy.in:168 +#: system-helper/org.freedesktop.Flatpak.policy.in:179 msgid "Update appstream" msgstr "Aktualizovat appstream" +#~ msgid "No remote %s" +#~ msgstr "Žádný vzdálený repozitář %s" + +#~ msgid "Search only user installations" +#~ msgstr "Prohledat pouze uživatelské instalace" + +#~ msgid "Search only system-wide installations" +#~ msgstr "Prohledat pouze systémové instalace" + +#~ msgid "Search specific system-wide installations" +#~ msgstr "Prohledat specifické systémové instalace" + #~ msgid "Failed to create temporary file" #~ msgstr "Selhalo vytvoření dočasného souboru" @@ -2390,9 +2877,6 @@ msgstr "Aktualizovat appstream" #~ msgid "REMOTE must be specified" #~ msgstr "VZDÁLENÉ musí být určeno" -#~ msgid "Downloading %s" -#~ msgstr "Stahuji %s" - #~ msgid "Building %s" #~ msgstr "Sestavuji %s" @@ -2402,12 +2886,6 @@ msgstr "Aktualizovat appstream" #~ msgid "Cleanup %s" #~ msgstr "Čištění %s" -#~ msgid "Updating %s" -#~ msgstr "Aktualizuji %s" - -#~ msgid "Metadata:" -#~ msgstr "Metadata:" - #~ msgid "'%s' is not a valid runtime name: %s" #~ msgstr "„%s“ není platným názvem prostředí: %s" diff --git a/po/de.po b/po/de.po index c52b74ec..3ffc6256 100644 --- a/po/de.po +++ b/po/de.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: flatpak master\n" "Report-Msgid-Bugs-To: https://github.com/flatpak/flatpak/issues\n" -"POT-Creation-Date: 2017-10-09 12:40+0200\n" +"POT-Creation-Date: 2018-02-19 14:20+0100\n" "PO-Revision-Date: 2017-04-07 13:52+0200\n" "Last-Translator: Mario Blättermann \n" "Language-Team: German \n" @@ -45,10 +45,9 @@ msgstr "Ferne Quelle markieren als »Verwendet für Abhängigkeiten«" msgid "Set a new url" msgstr "Eine neue Adresse festlegen" -#: app/flatpak-builtins-add-remote.c:66 app/flatpak-builtins-build-bundle.c:57 -#: app/flatpak-builtins-build-bundle.c:58 -#: app/flatpak-builtins-list-remotes.c:109 -#: app/flatpak-builtins-repo-update.c:52 +#: app/flatpak-builtins-add-remote.c:66 app/flatpak-builtins-build-bundle.c:58 +#: app/flatpak-builtins-build-bundle.c:59 +#: app/flatpak-builtins-list-remotes.c:70 app/flatpak-builtins-repo-update.c:52 msgid "URL" msgstr "ADRESSE" @@ -114,9 +113,9 @@ msgstr "" msgid "Import GPG key from FILE (- for stdin)" msgstr "GPG-Schlüssel aus DATEI importieren (- für stdin)" -#: app/flatpak-builtins-add-remote.c:82 app/flatpak-builtins-build-bundle.c:59 -#: app/flatpak-builtins-build.c:50 app/flatpak-builtins-build-export.c:60 -#: app/flatpak-builtins-install.c:66 app/flatpak-builtins-repo-update.c:59 +#: app/flatpak-builtins-add-remote.c:82 app/flatpak-builtins-build-bundle.c:60 +#: app/flatpak-builtins-build.c:54 app/flatpak-builtins-build-export.c:60 +#: app/flatpak-builtins-install.c:67 app/flatpak-builtins-repo-update.c:59 msgid "FILE" msgstr "DATEI" @@ -128,129 +127,149 @@ msgstr "Entfernte Quelle deaktivieren" msgid "Add OCI registry" msgstr "OCI-Registrierung hinzufügen" -#: app/flatpak-builtins-add-remote.c:312 +#: app/flatpak-builtins-add-remote.c:218 app/flatpak-builtins-add-remote.c:225 +#, c-format +msgid "Can't load uri %s: %s\n" +msgstr "" + +#: app/flatpak-builtins-add-remote.c:233 +#, fuzzy, c-format +msgid "Can't load file %s: %s\n" +msgstr "Namensraum %s konnte nicht geöffnet werden: %s" + +#: app/flatpak-builtins-add-remote.c:241 +#, fuzzy +msgid "Invalid file format" +msgstr "Ungültiges Umgebungsformat: %s" + +#: app/flatpak-builtins-add-remote.c:249 +#, fuzzy, c-format +msgid "Invalid version %s, only 1 supported" +msgstr "Ungültiger URI-Typ %s, nur http/https werden unterstützt" + +#: app/flatpak-builtins-add-remote.c:293 +#, fuzzy +msgid "Invalid gpg key" +msgstr "Ungültige Prozesskennung %s" + +#: app/flatpak-builtins-add-remote.c:320 msgid "NAME LOCATION - Add a remote repository" msgstr "NAME ORT - Eine ferne Quelle hinzufügen" -#: app/flatpak-builtins-add-remote.c:321 -#: app/flatpak-builtins-delete-remote.c:58 app/flatpak-builtins-info.c:104 +#: app/flatpak-builtins-add-remote.c:333 +#: app/flatpak-builtins-delete-remote.c:61 app/flatpak-builtins-info.c:125 msgid "NAME must be specified" msgstr "NAME muss angegeben werden" -#: app/flatpak-builtins-add-remote.c:324 app/flatpak-builtins-build-sign.c:71 -#: app/flatpak-builtins-repo.c:174 app/flatpak-builtins-repo-update.c:429 +#: app/flatpak-builtins-add-remote.c:336 app/flatpak-builtins-build-sign.c:71 +#: app/flatpak-builtins-repo.c:175 app/flatpak-builtins-repo-update.c:429 msgid "LOCATION must be specified" msgstr "ORT muss angegeben werden" -#: app/flatpak-builtins-add-remote.c:327 -#: app/flatpak-builtins-build-bundle.c:479 +#: app/flatpak-builtins-add-remote.c:339 +#: app/flatpak-builtins-build-bundle.c:461 #: app/flatpak-builtins-build-export.c:676 #: app/flatpak-builtins-build-import-bundle.c:182 #: app/flatpak-builtins-build-init.c:181 app/flatpak-builtins-build-sign.c:74 -#: app/flatpak-builtins-delete-remote.c:63 +#: app/flatpak-builtins-delete-remote.c:66 #: app/flatpak-builtins-document-export.c:102 #: app/flatpak-builtins-document-info.c:75 #: app/flatpak-builtins-document-list.c:70 -#: app/flatpak-builtins-document-unexport.c:67 app/flatpak-builtins-info.c:111 -#: app/flatpak-builtins-install.c:265 app/flatpak-builtins-install.c:399 -#: app/flatpak-builtins-list.c:382 app/flatpak-builtins-list-remotes.c:66 -#: app/flatpak-builtins-ls-remote.c:84 app/flatpak-builtins-make-current.c:67 -#: app/flatpak-builtins-override.c:66 +#: app/flatpak-builtins-document-unexport.c:67 app/flatpak-builtins-info.c:132 +#: app/flatpak-builtins-install.c:267 app/flatpak-builtins-install.c:401 +#: app/flatpak-builtins-list.c:314 app/flatpak-builtins-list-remotes.c:61 +#: app/flatpak-builtins-ls-remote.c:107 app/flatpak-builtins-make-current.c:72 +#: app/flatpak-builtins-override.c:68 msgid "Too many arguments" msgstr "Zu viele Argumente" -#: app/flatpak-builtins-add-remote.c:332 +#: app/flatpak-builtins-add-remote.c:344 #: app/flatpak-builtins-build-export.c:692 #, fuzzy, c-format msgid "‘%s’ is not a valid collection ID: %s" msgstr "»%s« ist kein gültiger Anwendungsname: %s" -#: app/flatpak-builtins-add-remote.c:336 +#: app/flatpak-builtins-add-remote.c:348 msgid "GPG verification is required if collections are enabled" msgstr "" #. Do nothing -#: app/flatpak-builtins-add-remote.c:351 +#: app/flatpak-builtins-add-remote.c:363 #, c-format msgid "Remote %s already exists" msgstr "Entfernt gelegene Quelle %s existiert bereits" -#: app/flatpak-builtins-add-remote.c:359 +#: app/flatpak-builtins-add-remote.c:371 msgid "No url specified in flatpakrepo file" msgstr "In der flatpakrepo-Datei ist keine Adresse angegeben" -#: app/flatpak-builtins-add-remote.c:403 +#: app/flatpak-builtins-add-remote.c:415 #, fuzzy, c-format msgid "Warning: Could not update extra metadata for '%s': %s\n" msgstr "Zusätzliche Metadaten für %s konnten nicht aktualisiert werden" -#: app/flatpak-builtins-add-remote.c:451 +#: app/flatpak-builtins-add-remote.c:464 msgid "NAME - Modify a remote repository" msgstr "NAME - Entfernte Quelle verändern" -#: app/flatpak-builtins-add-remote.c:460 +#: app/flatpak-builtins-add-remote.c:474 msgid "Remote NAME must be specified" msgstr "Entfernter NAME muss angegeben werden" -#: app/flatpak-builtins-add-remote.c:465 -#, c-format -msgid "No remote %s" -msgstr "Keine entfernte Quelle %s" - -#: app/flatpak-builtins-add-remote.c:471 +#: app/flatpak-builtins-add-remote.c:485 #, c-format msgid "Updating extra metadata from remote summary for %s\n" msgstr "" -#: app/flatpak-builtins-add-remote.c:474 +#: app/flatpak-builtins-add-remote.c:488 #, c-format msgid "Error updating extra metadata for '%s': %s\n" msgstr "Fehler beim Aktualisieren der Metadaten für »%s«: %s\n" -#: app/flatpak-builtins-add-remote.c:475 +#: app/flatpak-builtins-add-remote.c:489 #, c-format msgid "Could not update extra metadata for %s" msgstr "Zusätzliche Metadaten für %s konnten nicht aktualisiert werden" -#: app/flatpak-builtins-build-bundle.c:55 +#: app/flatpak-builtins-build-bundle.c:56 msgid "Export runtime instead of app" msgstr "Laufzeit anstatt der Anwendung exportieren" -#: app/flatpak-builtins-build-bundle.c:56 +#: app/flatpak-builtins-build-bundle.c:57 msgid "Arch to bundle for" msgstr "Architektur für die gebündelt wird" -#: app/flatpak-builtins-build-bundle.c:56 +#: app/flatpak-builtins-build-bundle.c:57 #: app/flatpak-builtins-build-export.c:55 app/flatpak-builtins-build-init.c:49 -#: app/flatpak-builtins-build-sign.c:41 app/flatpak-builtins-info.c:48 -#: app/flatpak-builtins-install.c:56 app/flatpak-builtins-list.c:52 -#: app/flatpak-builtins-ls-remote.c:48 app/flatpak-builtins-make-current.c:38 -#: app/flatpak-builtins-run.c:52 app/flatpak-builtins-uninstall.c:44 -#: app/flatpak-builtins-update.c:53 +#: app/flatpak-builtins-build-sign.c:41 app/flatpak-builtins-info.c:51 +#: app/flatpak-builtins-info-remote.c:48 app/flatpak-builtins-install.c:57 +#: app/flatpak-builtins-list.c:46 app/flatpak-builtins-ls-remote.c:49 +#: app/flatpak-builtins-make-current.c:38 app/flatpak-builtins-run.c:52 +#: app/flatpak-builtins-uninstall.c:44 app/flatpak-builtins-update.c:53 msgid "ARCH" msgstr "ARCH" -#: app/flatpak-builtins-build-bundle.c:57 +#: app/flatpak-builtins-build-bundle.c:58 msgid "Url for repo" msgstr "Adresse für Quelle" -#: app/flatpak-builtins-build-bundle.c:58 +#: app/flatpak-builtins-build-bundle.c:59 msgid "Url for runtime flatpakrepo file" msgstr "Adresse der flatpakrepo-Datei der Laufzeit" -#: app/flatpak-builtins-build-bundle.c:59 +#: app/flatpak-builtins-build-bundle.c:60 msgid "Add GPG key from FILE (- for stdin)" msgstr "GPG-Schlüssel aus DATEI hinzufügen (- für stdin)" -#: app/flatpak-builtins-build-bundle.c:60 +#: app/flatpak-builtins-build-bundle.c:61 msgid "Export oci image instead of flatpak bundle" msgstr "In ein OCI-Abbild anstelle eines Flatpak-Bündels exportieren" -#: app/flatpak-builtins-build-bundle.c:61 +#: app/flatpak-builtins-build-bundle.c:62 msgid "GPG Key ID to sign the OCI image with" msgstr "GPG-Schlüsselkennung zum Unterschreiben des OCI-Abbilds" -#: app/flatpak-builtins-build-bundle.c:61 +#: app/flatpak-builtins-build-bundle.c:62 #: app/flatpak-builtins-build-commit-from.c:55 #: app/flatpak-builtins-build-export.c:61 #: app/flatpak-builtins-build-import-bundle.c:46 @@ -258,7 +277,7 @@ msgstr "GPG-Schlüsselkennung zum Unterschreiben des OCI-Abbilds" msgid "KEY-ID" msgstr "SCHLÜSSEL-Kennung" -#: app/flatpak-builtins-build-bundle.c:62 +#: app/flatpak-builtins-build-bundle.c:63 #: app/flatpak-builtins-build-commit-from.c:56 #: app/flatpak-builtins-build-export.c:64 #: app/flatpak-builtins-build-import-bundle.c:47 @@ -266,7 +285,7 @@ msgstr "SCHLÜSSEL-Kennung" msgid "GPG Homedir to use when looking for keyrings" msgstr "GPG-Basisordner für die Suche nach Schlüsselbünden" -#: app/flatpak-builtins-build-bundle.c:62 +#: app/flatpak-builtins-build-bundle.c:63 #: app/flatpak-builtins-build-commit-from.c:56 #: app/flatpak-builtins-build-export.c:64 #: app/flatpak-builtins-build-import-bundle.c:47 @@ -274,7 +293,16 @@ msgstr "GPG-Basisordner für die Suche nach Schlüsselbünden" msgid "HOMEDIR" msgstr "BASISORDNER" -#: app/flatpak-builtins-build-bundle.c:469 +#: app/flatpak-builtins-build-bundle.c:64 +msgid "OSTree commit to create a delta bundle from" +msgstr "" + +#: app/flatpak-builtins-build-bundle.c:64 app/flatpak-builtins-info-remote.c:49 +#: app/flatpak-builtins-update.c:54 +msgid "COMMIT" +msgstr "COMMIT" + +#: app/flatpak-builtins-build-bundle.c:451 msgid "" "LOCATION FILENAME NAME [BRANCH] - Create a single file bundle from a local " "repository" @@ -282,96 +310,108 @@ msgstr "" "ORT DATEINAME NAME [ZWEIG] - Ein einzelnes Dateibündel aus lokaler Quelle " "erstellen" -#: app/flatpak-builtins-build-bundle.c:476 +#: app/flatpak-builtins-build-bundle.c:458 msgid "LOCATION, FILENAME and NAME must be specified" msgstr "ORT, DATEINAME und NAME müssen angegeben werden" -#: app/flatpak-builtins-build-bundle.c:494 -#: app/flatpak-builtins-build-commit-from.c:103 -#: app/flatpak-builtins-build-commit-from.c:113 +#: app/flatpak-builtins-build-bundle.c:476 +#: app/flatpak-builtins-build-commit-from.c:253 +#: app/flatpak-builtins-build-commit-from.c:263 #: app/flatpak-builtins-build-import-bundle.c:191 #, c-format msgid "'%s' is not a valid repository" msgstr "»%s« ist keine gültige Quelle" -#: app/flatpak-builtins-build-bundle.c:506 app/flatpak-builtins-build-sign.c:86 +#: app/flatpak-builtins-build-bundle.c:488 app/flatpak-builtins-build-sign.c:86 #, c-format msgid "'%s' is not a valid name: %s" msgstr "»%s« ist kein gültiger Name: %s" -#: app/flatpak-builtins-build-bundle.c:509 +#: app/flatpak-builtins-build-bundle.c:491 #: app/flatpak-builtins-build-export.c:699 app/flatpak-builtins-build-sign.c:89 #, c-format msgid "'%s' is not a valid branch name: %s" msgstr "»%s« ist kein gültiger Zweig-Name: %s" -#: app/flatpak-builtins-build.c:46 +#: app/flatpak-builtins-build.c:49 msgid "Use Platform runtime rather than Sdk" msgstr "Plattform-Laufzeit eher verwenden als Sdk" -#: app/flatpak-builtins-build.c:47 +#: app/flatpak-builtins-build.c:50 +msgid "Make destination readonly" +msgstr "" + +#: app/flatpak-builtins-build.c:51 msgid "Add bind mount" msgstr "»Bind-Mount« hinzufügen" -#: app/flatpak-builtins-build.c:47 +#: app/flatpak-builtins-build.c:51 msgid "DEST=SRC" msgstr "ZIEL=QUELLE" -#: app/flatpak-builtins-build.c:48 +#: app/flatpak-builtins-build.c:52 msgid "Start build in this directory" msgstr "Erstellung in diesem Ordner starten" -#: app/flatpak-builtins-build.c:48 app/flatpak-builtins-build.c:49 +#: app/flatpak-builtins-build.c:52 app/flatpak-builtins-build.c:53 #: app/flatpak-builtins-build-init.c:58 msgid "DIR" msgstr "ORDNER" -#: app/flatpak-builtins-build.c:49 +#: app/flatpak-builtins-build.c:53 msgid "Where to look for custom sdk dir (defaults to 'usr')" msgstr "Legt fest, wo der eigene sdk-Ordner gesucht wird (Standard ist »usr«)" -#: app/flatpak-builtins-build.c:50 app/flatpak-builtins-build-export.c:60 +#: app/flatpak-builtins-build.c:54 app/flatpak-builtins-build-export.c:60 msgid "Use alternative file for the metadata" msgstr "Alternative Datei für diese Metadaten verwenden" -#: app/flatpak-builtins-build.c:51 +#: app/flatpak-builtins-build.c:55 msgid "Kill processes when the parent process dies" msgstr "" -#: app/flatpak-builtins-build.c:52 +#: app/flatpak-builtins-build.c:56 msgid "Export application homedir directory to build" msgstr "" -#: app/flatpak-builtins-build.c:139 +#: app/flatpak-builtins-build.c:57 app/flatpak-builtins-run.c:58 +msgid "Log session bus calls" +msgstr "Sitzungsbus-Aufrufe protokollieren" + +#: app/flatpak-builtins-build.c:58 app/flatpak-builtins-run.c:59 +msgid "Log system bus calls" +msgstr "Systembus-Aufrufe protokollieren" + +#: app/flatpak-builtins-build.c:126 msgid "DIRECTORY [COMMAND [args...]] - Build in directory" msgstr "ORDNER [BEFEHL [Argumente …]] - In Ordner Erstellen" -#: app/flatpak-builtins-build.c:162 app/flatpak-builtins-build-finish.c:533 +#: app/flatpak-builtins-build.c:149 app/flatpak-builtins-build-finish.c:533 msgid "DIRECTORY must be specified" msgstr "ORDNER muss angegeben werden" -#: app/flatpak-builtins-build.c:173 app/flatpak-builtins-build-export.c:721 +#: app/flatpak-builtins-build.c:160 app/flatpak-builtins-build-export.c:721 #, c-format msgid "Build directory %s not initialized, use flatpak build-init" msgstr "" "Erstellungsordner %s ist nicht initialisiert. Verwenden Sie flatpak build-" "init" -#: app/flatpak-builtins-build.c:192 +#: app/flatpak-builtins-build.c:179 msgid "metadata invalid, not application or runtime" msgstr "Metadaten sind ungültig. Es ist keine Anwendung oder Laufzeit" -#: app/flatpak-builtins-build.c:292 +#: app/flatpak-builtins-build.c:283 #, c-format msgid "No extension point matching %s in %s" msgstr "Kein Erweiterungspunkt entspricht %s in %s" -#: app/flatpak-builtins-build.c:432 +#: app/flatpak-builtins-build.c:433 #, c-format msgid "Missing '=' in bind mount option '%s'" msgstr "Fehlendes »=« in Bind-Mount-Option »%s«" -#: app/flatpak-builtins-build.c:460 common/flatpak-run.c:5406 +#: app/flatpak-builtins-build.c:462 common/flatpak-run.c:3038 msgid "Unable to start app" msgstr "Anwendung kann nicht gestartet werden" @@ -430,38 +470,43 @@ msgstr "Die Zusammenfassung nicht aktualisieren" msgid "GPG Key ID to sign the commit with" msgstr "GPG-Schlüsselkennung zum Unterschreiben des »Commit«" -#: app/flatpak-builtins-build-commit-from.c:78 +#: app/flatpak-builtins-build-commit-from.c:228 msgid "DST-REPO [DST-REF]... - Make a new commit based on existing commit(s)" msgstr "" "ZIEL-REPO [ZIEL-REF]... - Einen neuen Commit auf Basis eines/mehrerer " "vorhandener Commits ausführen" -#: app/flatpak-builtins-build-commit-from.c:85 +#: app/flatpak-builtins-build-commit-from.c:235 msgid "DST-REPO must be specified" msgstr "ZIEL-REPO muss angegeben werden" -#: app/flatpak-builtins-build-commit-from.c:93 +#: app/flatpak-builtins-build-commit-from.c:243 msgid "" "If --src-repo is not specified, exactly one destination ref must be specified" msgstr "" "Wenn --src-repo nicht angegeben ist, so muss genau eine Zielreferenz " "angegeben werden" -#: app/flatpak-builtins-build-commit-from.c:96 +#: app/flatpak-builtins-build-commit-from.c:246 msgid "" "If --src-ref is specified, exactly one destination ref must be specified" msgstr "" "Wenn --src-ref nicht angegeben ist, so muss genau eine Zielreferenz " "angegeben werden" -#: app/flatpak-builtins-build-commit-from.c:99 +#: app/flatpak-builtins-build-commit-from.c:249 msgid "Either --src-repo or --src-ref must be specified." msgstr "Es muss entweder --src-repo oder --src-ref angegeben werden." -#: app/flatpak-builtins-build-commit-from.c:251 +#: app/flatpak-builtins-build-commit-from.c:402 msgid "Can't commit from partial source commit." msgstr "" +#: app/flatpak-builtins-build-commit-from.c:407 +#, c-format +msgid "%s: no change\n" +msgstr "" + #: app/flatpak-builtins-build-export.c:55 msgid "Architecture to export for (must be host compatible)" msgstr "Zu exportierende Architektur (muss kompatibel mit dem Rechner sein)" @@ -499,6 +544,42 @@ msgstr "" msgid "ISO-8601-TIMESTAMP" msgstr "" +#: app/flatpak-builtins-build-export.c:341 +#, c-format +msgid "WARNING: Error running desktop-file-validate: %s\n" +msgstr "" + +#: app/flatpak-builtins-build-export.c:349 +#, c-format +msgid "WARNING: Error reading from desktop-file-validate: %s\n" +msgstr "" + +#: app/flatpak-builtins-build-export.c:355 +#, fuzzy, c-format +msgid "WARNING: Failed to validate desktop file %s: %s\n" +msgstr "Temporäre Datei konnte nicht geöffnet werden: %s" + +#: app/flatpak-builtins-build-export.c:370 +#, c-format +msgid "WARNING: Can't find Exec key in %s: %s\n" +msgstr "" + +#: app/flatpak-builtins-build-export.c:378 +#: app/flatpak-builtins-build-export.c:475 +#, c-format +msgid "WARNING: Binary not found for Exec line in %s: %s\n" +msgstr "" + +#: app/flatpak-builtins-build-export.c:385 +#, c-format +msgid "WARNING: Icon not matching app id in %s: %s\n" +msgstr "" + +#: app/flatpak-builtins-build-export.c:413 +#, c-format +msgid "WARNING: Icon referenced in desktop file but not exported: %s\n" +msgstr "" + #: app/flatpak-builtins-build-export.c:551 #, c-format msgid "Invalid uri type %s, only http/https supported" @@ -538,12 +619,41 @@ msgstr "ORT und ORDNER müssen angegeben werden" msgid "No name specified in the metadata" msgstr "In den Metadaten ist kein Name angegeben" +#: app/flatpak-builtins-build-export.c:976 +#, c-format +msgid "Commit: %s\n" +msgstr "" + +#: app/flatpak-builtins-build-export.c:977 +#, fuzzy, c-format +msgid "Metadata Total: %u\n" +msgstr "Details zur entfernten Quelle anzeigen" + +#: app/flatpak-builtins-build-export.c:978 +#, fuzzy, c-format +msgid "Metadata Written: %u\n" +msgstr "Details zur entfernten Quelle anzeigen" + +#: app/flatpak-builtins-build-export.c:979 +#, c-format +msgid "Content Total: %u\n" +msgstr "" + +#: app/flatpak-builtins-build-export.c:980 +#, c-format +msgid "Content Written: %u\n" +msgstr "" + +#: app/flatpak-builtins-build-export.c:981 +msgid "Content Bytes Written:" +msgstr "" + #: app/flatpak-builtins-build-finish.c:48 msgid "Command to set" msgstr "Festzulegender Befehl" #: app/flatpak-builtins-build-finish.c:48 app/flatpak-builtins-run.c:53 -#: app/flatpak-main.c:159 +#: app/flatpak-main.c:166 msgid "COMMAND" msgstr "BEFEHL" @@ -604,6 +714,29 @@ msgstr "Allgemeine Metadaten-Einstellungen festlegen" msgid "GROUP=KEY[=VALUE]" msgstr "GRUPPE=SCHLÜSSEL[=WERT]]" +#: app/flatpak-builtins-build-finish.c:139 +#, c-format +msgid "Not exporting %s, wrong prefix\n" +msgstr "" + +#: app/flatpak-builtins-build-finish.c:143 +#, fuzzy, c-format +msgid "Exporting %s\n" +msgstr "Zusammenfassung wird aktualisiert\n" + +#: app/flatpak-builtins-build-finish.c:384 +msgid "More than one executable found\n" +msgstr "" + +#: app/flatpak-builtins-build-finish.c:395 +#, c-format +msgid "Using %s as command\n" +msgstr "" + +#: app/flatpak-builtins-build-finish.c:400 +msgid "No executable found\n" +msgstr "" + #: app/flatpak-builtins-build-finish.c:433 #, c-format msgid "Too few elements in --extra-data argument %s" @@ -668,6 +801,12 @@ msgstr "" "Mehrere Abbilder in der Registrierungsdatenbank, geben Sie eine Referenz mit " "--ref an" +#: app/flatpak-builtins-build-import-bundle.c:123 +#: app/flatpak-builtins-build-import-bundle.c:151 +#, fuzzy, c-format +msgid "Importing %s (%s)\n" +msgstr "Aktualisieren: %s von %s\n" + #: app/flatpak-builtins-build-import-bundle.c:172 msgid "LOCATION FILENAME - Import a file bundle into a local repository" msgstr "ORT DATEINAME - Ein Dateibündel in eine lokale Quelle importieren" @@ -676,7 +815,7 @@ msgstr "ORT DATEINAME - Ein Dateibündel in eine lokale Quelle importieren" msgid "LOCATION and FILENAME must be specified" msgstr "ORT und DATEINAME müssen angegeben werden" -#: app/flatpak-builtins-build-init.c:49 app/flatpak-builtins-info.c:48 +#: app/flatpak-builtins-build-init.c:49 app/flatpak-builtins-info.c:51 #: app/flatpak-builtins-run.c:52 msgid "Arch to use" msgstr "Zu verwendende Architektur" @@ -768,7 +907,7 @@ msgstr "LAUFZEIT muss angegeben werden" msgid "'%s' is not a valid build type name, use app, runtime or extension" msgstr "" -#: app/flatpak-builtins-build-init.c:205 app/flatpak-builtins-override.c:71 +#: app/flatpak-builtins-build-init.c:205 app/flatpak-builtins-override.c:74 #, c-format msgid "'%s' is not a valid application name: %s" msgstr "»%s« ist kein gültiger Anwendungsname: %s" @@ -778,12 +917,14 @@ msgstr "»%s« ist kein gültiger Anwendungsname: %s" msgid "Build directory %s already initialized" msgstr "Erstellungsordner %s ist bereits initialisiert" -#: app/flatpak-builtins-build-sign.c:41 app/flatpak-builtins-install.c:56 +#: app/flatpak-builtins-build-sign.c:41 app/flatpak-builtins-info-remote.c:48 +#: app/flatpak-builtins-install.c:57 msgid "Arch to install for" msgstr "Architektur, für die installiert wird" -#: app/flatpak-builtins-build-sign.c:42 app/flatpak-builtins-install.c:62 -#: app/flatpak-builtins-uninstall.c:48 app/flatpak-builtins-update.c:61 +#: app/flatpak-builtins-build-sign.c:42 app/flatpak-builtins-info-remote.c:50 +#: app/flatpak-builtins-install.c:63 app/flatpak-builtins-uninstall.c:48 +#: app/flatpak-builtins-update.c:61 msgid "Look for runtime with the specified name" msgstr "Nach Laufzeit unter dem angegebenen Namen suchen" @@ -795,11 +936,49 @@ msgstr "QUELLE [NAME [ZWEIG]] - Eine Anwendung oder Laufzeit signieren" msgid "No gpg key ids specified" msgstr "Keine gpg-Schlüsselkennungen angegeben" -#: app/flatpak-builtins-delete-remote.c:37 +#: app/flatpak-builtins-config.c:41 +msgid "List configuration keys and values" +msgstr "" + +#: app/flatpak-builtins-config.c:42 +msgid "Get configuration for KEY" +msgstr "" + +#: app/flatpak-builtins-config.c:43 +msgid "Set configuration for KEY to VALUE" +msgstr "" + +#: app/flatpak-builtins-config.c:44 +msgid "Unset configuration for KEY" +msgstr "" + +#: app/flatpak-builtins-config.c:95 +#, fuzzy, c-format +msgid "Unknown configure key '%s'" +msgstr "Unbekannter Befehl »%s«" + +#: app/flatpak-builtins-config.c:144 app/flatpak-builtins-config.c:185 +#, fuzzy +msgid "You must specify key" +msgstr "ANWENDUNG muss angegeben werden" + +#: app/flatpak-builtins-config.c:166 +msgid "You must specify both key and value" +msgstr "" + +#: app/flatpak-builtins-config.c:204 +msgid "[KEY [VALUE]] - Manage configuration" +msgstr "" + +#: app/flatpak-builtins-config.c:223 +msgid "Must specify one of --list, --get, --set or --unset" +msgstr "" + +#: app/flatpak-builtins-delete-remote.c:38 msgid "Remove remote even if in use" msgstr "Entfernte Quelle entfernen, selbst wenn sie in Verwendung ist" -#: app/flatpak-builtins-delete-remote.c:49 +#: app/flatpak-builtins-delete-remote.c:51 msgid "NAME - Delete a remote repository" msgstr "NAME - Entfernte Quelle löschen" @@ -952,174 +1131,263 @@ msgstr "Gruppenkennung kann nicht gewechselt werden" msgid "Can't switch uid" msgstr "Benutzerkennung kann nicht gewechselt werden" -#: app/flatpak-builtins-info.c:49 app/flatpak-builtins-list.c:46 -#: app/flatpak-builtins-list-remotes.c:43 +#: app/flatpak-builtins-info.c:52 msgid "Show user installations" msgstr "Benutzerinstallationen anzeigen" -#: app/flatpak-builtins-info.c:50 app/flatpak-builtins-list.c:47 -#: app/flatpak-builtins-list-remotes.c:44 +#: app/flatpak-builtins-info.c:53 msgid "Show system-wide installations" msgstr "Systemweite Installationen anzeigen" -#: app/flatpak-builtins-info.c:51 app/flatpak-builtins-list.c:48 -#: app/flatpak-builtins-list-remotes.c:45 +#: app/flatpak-builtins-info.c:54 msgid "Show specific system-wide installations" msgstr "Spezifische systemweite Installationen anzeigen" -#: app/flatpak-builtins-info.c:52 +#: app/flatpak-builtins-info.c:55 app/flatpak-builtins-info-remote.c:53 msgid "Show ref" msgstr "Referenz anzeigen" -#: app/flatpak-builtins-info.c:53 +#: app/flatpak-builtins-info.c:56 app/flatpak-builtins-info-remote.c:54 msgid "Show commit" msgstr "Commit anzeigen" -#: app/flatpak-builtins-info.c:54 +#: app/flatpak-builtins-info.c:57 msgid "Show origin" msgstr "Ursprung anzeigen" -#: app/flatpak-builtins-info.c:55 +#: app/flatpak-builtins-info.c:58 #, fuzzy msgid "Show size" msgstr "Referenz anzeigen" -#: app/flatpak-builtins-info.c:56 +#: app/flatpak-builtins-info.c:59 app/flatpak-builtins-info-remote.c:56 #, fuzzy msgid "Show metadata" msgstr "Details zur entfernten Quelle anzeigen" -#: app/flatpak-builtins-info.c:57 +#: app/flatpak-builtins-info.c:60 +#, fuzzy +msgid "Show permissions" +msgstr "Hilfeoptionen anzeigen" + +#: app/flatpak-builtins-info.c:61 +#, fuzzy +msgid "Query file access" +msgstr "" +"\n" +" Dateizugriff verwalten" + +#: app/flatpak-builtins-info.c:61 app/flatpak-builtins-install.c:68 +#: app/flatpak-builtins-update.c:64 +msgid "PATH" +msgstr "PFAD" + +#: app/flatpak-builtins-info.c:62 #, fuzzy msgid "Show extensions" msgstr "Hilfeoptionen anzeigen" -#: app/flatpak-builtins-info.c:97 +#: app/flatpak-builtins-info.c:118 msgid "NAME [BRANCH] - Get info about installed app and/or runtime" msgstr "" "NAME [ZWEIG] - Informationen über installierte Anwendung und/oder Laufzeit " "erhalten" -#: app/flatpak-builtins-info.c:157 +#: app/flatpak-builtins-info.c:189 msgid "ref not present in origin" msgstr "" -#: app/flatpak-builtins-info.c:159 +#: app/flatpak-builtins-info.c:202 app/flatpak-builtins-info-remote.c:177 +msgid "Warning: Commit has no flatpak metadata\n" +msgstr "" + +#: app/flatpak-builtins-info.c:209 app/flatpak-builtins-info-remote.c:200 msgid "Ref:" msgstr "" -#: app/flatpak-builtins-info.c:160 app/flatpak-builtins-info.c:270 +#: app/flatpak-builtins-info.c:210 app/flatpak-builtins-info.c:364 +#: app/flatpak-builtins-info-remote.c:201 msgid "ID:" msgstr "" -#: app/flatpak-builtins-info.c:161 +#: app/flatpak-builtins-info.c:211 app/flatpak-builtins-info-remote.c:202 msgid "Arch:" msgstr "" -#: app/flatpak-builtins-info.c:162 +#: app/flatpak-builtins-info.c:212 app/flatpak-builtins-info-remote.c:203 #, fuzzy msgid "Branch:" msgstr "Zu verwendender Zweig" -#: app/flatpak-builtins-info.c:163 app/flatpak-builtins-info.c:271 +#: app/flatpak-builtins-info.c:213 app/flatpak-builtins-info.c:365 msgid "Origin:" msgstr "" -#: app/flatpak-builtins-info.c:166 +#: app/flatpak-builtins-info.c:215 app/flatpak-builtins-info-remote.c:205 +#, fuzzy +msgid "Collection ID:" +msgstr "Eine Anwendung ausführen" + +#: app/flatpak-builtins-info.c:217 app/flatpak-builtins-info-remote.c:206 +msgid "Date:" +msgstr "" + +#: app/flatpak-builtins-info.c:219 app/flatpak-builtins-info-remote.c:207 +msgid "Subject:" +msgstr "" + +#: app/flatpak-builtins-info.c:223 msgid "Active commit:" msgstr "" -#: app/flatpak-builtins-info.c:167 +#: app/flatpak-builtins-info.c:224 msgid "Latest commit:" msgstr "" -#: app/flatpak-builtins-info.c:170 app/flatpak-builtins-info.c:272 +#: app/flatpak-builtins-info.c:227 app/flatpak-builtins-info.c:366 +#: app/flatpak-builtins-info-remote.c:208 msgid "Commit:" msgstr "" -#: app/flatpak-builtins-info.c:172 +#: app/flatpak-builtins-info.c:229 msgid "alt-id:" msgstr "" -#: app/flatpak-builtins-info.c:173 +#: app/flatpak-builtins-info.c:230 app/flatpak-builtins-info-remote.c:209 +msgid "Parent:" +msgstr "" + +#: app/flatpak-builtins-info.c:231 msgid "Location:" msgstr "" -#: app/flatpak-builtins-info.c:174 app/flatpak-builtins-info.c:273 +#: app/flatpak-builtins-info.c:232 app/flatpak-builtins-info.c:367 +#: app/flatpak-builtins-info-remote.c:211 #, fuzzy msgid "Installed size:" msgstr "Signierte Laufzeitumgebung installieren" -#: app/flatpak-builtins-info.c:179 +#: app/flatpak-builtins-info.c:237 app/flatpak-builtins-info-remote.c:216 #, fuzzy msgid "Runtime:" msgstr "Zu verwendende Laufzeitumgebung" -#: app/flatpak-builtins-info.c:184 +#: app/flatpak-builtins-info.c:242 msgid "Installed subdirectories:" msgstr "" -#: app/flatpak-builtins-info.c:269 +#: app/flatpak-builtins-info.c:363 #, fuzzy msgid "Extension:" msgstr "Hilfeoptionen anzeigen" -#: app/flatpak-builtins-info.c:280 +#: app/flatpak-builtins-info.c:374 msgid "Subpaths:" msgstr "" -#: app/flatpak-builtins-install.c:57 -msgid "Don't pull, only install from local cache" -msgstr "Keinen »Pull« ausführen, Installation nur aus lokalem Zwischenspeicher" - -#: app/flatpak-builtins-install.c:58 app/flatpak-builtins-update.c:57 -msgid "Don't deploy, only download to local cache" -msgstr "Nicht bereitstellen, nur in lokalen Zwischenspeicher herunterladen" - -#: app/flatpak-builtins-install.c:59 -msgid "Don't install related refs" -msgstr "Zugehörige Referenzen nicht installieren" - -#: app/flatpak-builtins-install.c:60 app/flatpak-builtins-update.c:59 -msgid "Don't verify/install runtime dependencies" -msgstr "Laufzeitabhängigkeiten nicht prüfen/installieren" - -#: app/flatpak-builtins-install.c:61 app/flatpak-builtins-update.c:60 -msgid "Don't use static deltas" +#: app/flatpak-builtins-info-remote.c:49 +msgid "Commit to show info for" msgstr "" -#: app/flatpak-builtins-install.c:63 app/flatpak-builtins-uninstall.c:49 -#: app/flatpak-builtins-update.c:62 +#: app/flatpak-builtins-info-remote.c:51 app/flatpak-builtins-install.c:64 +#: app/flatpak-builtins-uninstall.c:49 app/flatpak-builtins-update.c:62 msgid "Look for app with the specified name" msgstr "Nach einer Anwendung mit dem angegebenen Namen suchen" -#: app/flatpak-builtins-install.c:64 +#: app/flatpak-builtins-info-remote.c:52 +msgid "Display log" +msgstr "" + +#: app/flatpak-builtins-info-remote.c:55 +#, fuzzy +msgid "Show parent" +msgstr "Referenz anzeigen" + +#: app/flatpak-builtins-info-remote.c:122 +#, fuzzy +msgid "" +" REMOTE REF - Show information about an application or runtime in a remote" +msgstr "Anwendung oder Laufzeit von einer entfernten Quelle installieren" + +#: app/flatpak-builtins-info-remote.c:133 app/flatpak-builtins-install.c:499 +msgid "REMOTE and REF must be specified" +msgstr "FERNE QUELLE und REFERENZ muss angegeben werden" + +#: app/flatpak-builtins-info-remote.c:210 +#, fuzzy +msgid "Download size:" +msgstr "Referenz anzeigen" + +#: app/flatpak-builtins-info-remote.c:223 +msgid "History:\n" +msgstr "" + +#: app/flatpak-builtins-info-remote.c:244 +msgid " Subject:" +msgstr "" + +#: app/flatpak-builtins-info-remote.c:245 +msgid " Date:" +msgstr "" + +#: app/flatpak-builtins-info-remote.c:246 +#, fuzzy +msgid " Commit:" +msgstr "Commit anzeigen" + +#: app/flatpak-builtins-info-remote.c:292 +#, c-format +msgid "Warning: Commit %s has no flatpak metadata\n" +msgstr "" + +#: app/flatpak-builtins-install.c:58 +msgid "Don't pull, only install from local cache" +msgstr "Keinen »Pull« ausführen, Installation nur aus lokalem Zwischenspeicher" + +#: app/flatpak-builtins-install.c:59 app/flatpak-builtins-update.c:57 +msgid "Don't deploy, only download to local cache" +msgstr "Nicht bereitstellen, nur in lokalen Zwischenspeicher herunterladen" + +#: app/flatpak-builtins-install.c:60 +msgid "Don't install related refs" +msgstr "Zugehörige Referenzen nicht installieren" + +#: app/flatpak-builtins-install.c:61 app/flatpak-builtins-update.c:59 +msgid "Don't verify/install runtime dependencies" +msgstr "Laufzeitabhängigkeiten nicht prüfen/installieren" + +#: app/flatpak-builtins-install.c:62 app/flatpak-builtins-update.c:60 +msgid "Don't use static deltas" +msgstr "" + +#: app/flatpak-builtins-install.c:65 msgid "Assume LOCATION is a .flatpak single-file bundle" msgstr "ORT als .flatpak Einzelbündel-Datei ansehen" -#: app/flatpak-builtins-install.c:65 +#: app/flatpak-builtins-install.c:66 msgid "Assume LOCATION is a .flatpakref application description" msgstr "ORT als .flatpakref-Anwendungsbeschreibung ansehen" -#: app/flatpak-builtins-install.c:66 +#: app/flatpak-builtins-install.c:67 msgid "Check bundle signatures with GPG key from FILE (- for stdin)" msgstr "" "Bündel-Signaturen anhand des GPG-Schlüssels aus DATEI prüfen (- für " "Standardeingabe)" -#: app/flatpak-builtins-install.c:67 +#: app/flatpak-builtins-install.c:68 msgid "Only install this subpath" msgstr "Nur diesen Unterpfad installieren" -#: app/flatpak-builtins-install.c:67 app/flatpak-builtins-update.c:64 -msgid "PATH" -msgstr "PFAD" - -#: app/flatpak-builtins-install.c:68 app/flatpak-builtins-update.c:65 +#: app/flatpak-builtins-install.c:69 app/flatpak-builtins-update.c:65 msgid "Automatically answer yes for all questions" msgstr "Automatisch alle Fragen mit ja beantworten" -#: app/flatpak-builtins-install.c:210 +#: app/flatpak-builtins-install.c:70 +#, fuzzy +msgid "Uninstall first if already installed" +msgstr "%s-Commit %s wurde bereits installiert" + +#: app/flatpak-builtins-install.c:212 #, c-format msgid "" "This application depends on runtimes from:\n" @@ -1127,152 +1395,149 @@ msgid "" "Configure this as new remote '%s'" msgstr "" -#: app/flatpak-builtins-install.c:214 app/flatpak-builtins-install.c:340 +#: app/flatpak-builtins-install.c:216 app/flatpak-builtins-install.c:342 #, c-format msgid "Configuring %s as new remote '%s'" msgstr "%s wird als neue ferne Quelle »%s« eingerichtet" -#: app/flatpak-builtins-install.c:262 +#: app/flatpak-builtins-install.c:264 msgid "Bundle filename must be specified" msgstr "Name der Bündel-Datei muss angegeben werden" -#: app/flatpak-builtins-install.c:272 +#: app/flatpak-builtins-install.c:274 #, fuzzy msgid "Remote bundles are not supported" msgstr "Entfernter Titel nicht festgelegt" -#: app/flatpak-builtins-install.c:336 +#: app/flatpak-builtins-install.c:338 #, c-format msgid "" "The remote '%s', at location %s contains additional applications.\n" -"Do you want to install other applications from here?" +"Should the remote be kept for future installations?" msgstr "" -#: app/flatpak-builtins-install.c:396 +#: app/flatpak-builtins-install.c:398 msgid "Filename or uri must be specified" msgstr "Dateiname oder URI muss angegeben werden" -#: app/flatpak-builtins-install.c:440 +#: app/flatpak-builtins-install.c:442 #, c-format msgid "Installing: %s\n" msgstr "Installieren: %s\n" -#: app/flatpak-builtins-install.c:470 +#: app/flatpak-builtins-install.c:474 msgid "LOCATION/REMOTE [REF...] - Install applications or runtimes" msgstr "ORT/GEGENSTELLE [REF…] - Anwendungen oder Laufzeiten installieren" -#: app/flatpak-builtins-install.c:491 -msgid "REMOTE and REF must be specified" -msgstr "FERNE QUELLE und REFERENZ muss angegeben werden" - -#: app/flatpak-builtins-list.c:49 +#: app/flatpak-builtins-list.c:43 msgid "Show extra information" msgstr "Zusätzliche Informationen anzeigen" -#: app/flatpak-builtins-list.c:50 +#: app/flatpak-builtins-list.c:44 msgid "List installed runtimes" msgstr "Installierte Laufzeitumgebungen auflisten" -#: app/flatpak-builtins-list.c:51 +#: app/flatpak-builtins-list.c:45 msgid "List installed applications" msgstr "Installierte Anwendungen auflisten" -#: app/flatpak-builtins-list.c:52 +#: app/flatpak-builtins-list.c:46 msgid "Arch to show" msgstr "Anzuzeigende Architektur" -#: app/flatpak-builtins-list.c:53 app/flatpak-builtins-ls-remote.c:49 +#: app/flatpak-builtins-list.c:47 app/flatpak-builtins-ls-remote.c:50 msgid "List all refs (including locale/debug)" msgstr "" -#: app/flatpak-builtins-list.c:131 app/flatpak-builtins-ls-remote.c:129 +#: app/flatpak-builtins-list.c:125 app/flatpak-builtins-ls-remote.c:174 #: app/flatpak-builtins-repo.c:98 msgid "Ref" msgstr "" -#: app/flatpak-builtins-list.c:134 app/flatpak-builtins-ls-remote.c:131 +#: app/flatpak-builtins-list.c:128 app/flatpak-builtins-ls-remote.c:176 msgid "Origin" msgstr "" -#: app/flatpak-builtins-list.c:135 +#: app/flatpak-builtins-list.c:129 msgid "Active commit" msgstr "" -#: app/flatpak-builtins-list.c:136 +#: app/flatpak-builtins-list.c:130 msgid "Latest commit" msgstr "" -#: app/flatpak-builtins-list.c:137 app/flatpak-builtins-ls-remote.c:133 +#: app/flatpak-builtins-list.c:131 app/flatpak-builtins-ls-remote.c:178 #, fuzzy msgid "Installed size" msgstr "Signierte Laufzeitumgebung installieren" -#: app/flatpak-builtins-list.c:139 app/flatpak-builtins-list-remotes.c:112 +#: app/flatpak-builtins-list.c:133 app/flatpak-builtins-list-remotes.c:73 msgid "Options" msgstr "" -#: app/flatpak-builtins-list.c:375 +#: app/flatpak-builtins-list.c:305 msgid " - List installed apps and/or runtimes" msgstr " - Installierte Anwendungen und/oder Laufzeiten auflisten" -#: app/flatpak-builtins-list-remotes.c:46 +#: app/flatpak-builtins-list-remotes.c:40 msgid "Show remote details" msgstr "Details zur entfernten Quelle anzeigen" -#: app/flatpak-builtins-list-remotes.c:47 +#: app/flatpak-builtins-list-remotes.c:41 msgid "Show disabled remotes" msgstr "Deaktivierte entfernte Quellen anzeigen" -#: app/flatpak-builtins-list-remotes.c:59 +#: app/flatpak-builtins-list-remotes.c:53 msgid " - List remote repositories" msgstr " - Entfernte Quellen auflisten" -#: app/flatpak-builtins-list-remotes.c:105 +#: app/flatpak-builtins-list-remotes.c:66 msgid "Name" msgstr "" -#: app/flatpak-builtins-list-remotes.c:108 +#: app/flatpak-builtins-list-remotes.c:69 msgid "Title" msgstr "" -#: app/flatpak-builtins-list-remotes.c:110 +#: app/flatpak-builtins-list-remotes.c:71 msgid "Priority" msgstr "" -#: app/flatpak-builtins-ls-remote.c:44 +#: app/flatpak-builtins-ls-remote.c:45 msgid "Show arches and branches" msgstr "Architekturen und Zweige zeigen" -#: app/flatpak-builtins-ls-remote.c:45 +#: app/flatpak-builtins-ls-remote.c:46 msgid "Show only runtimes" msgstr "Nur Laufzeitumgebungen anzeigen" -#: app/flatpak-builtins-ls-remote.c:46 +#: app/flatpak-builtins-ls-remote.c:47 msgid "Show only apps" msgstr "Nur Anwendungen anzeigen" -#: app/flatpak-builtins-ls-remote.c:47 +#: app/flatpak-builtins-ls-remote.c:48 msgid "Show only those where updates are available" msgstr "Nur Anwendungen anzeigen, die aktualisiert werden können" -#: app/flatpak-builtins-ls-remote.c:48 +#: app/flatpak-builtins-ls-remote.c:49 msgid "Limit to this arch (* for all)" msgstr "Auf diese Architektur begrenzen (* für alle)" -#: app/flatpak-builtins-ls-remote.c:74 -msgid " REMOTE - Show available runtimes and applications" +#: app/flatpak-builtins-ls-remote.c:96 +#, fuzzy +msgid " [REMOTE] - Show available runtimes and applications" msgstr "ENTFERNTE QUELLE - Verfügbare Laufzeiten und Anwendungen anzeigen" -#: app/flatpak-builtins-ls-remote.c:132 +#: app/flatpak-builtins-ls-remote.c:177 msgid "Commit" msgstr "" -#: app/flatpak-builtins-ls-remote.c:134 +#: app/flatpak-builtins-ls-remote.c:179 #, fuzzy msgid "Download size" msgstr "Referenz anzeigen" -#: app/flatpak-builtins-ls-remote.c:245 +#: app/flatpak-builtins-ls-remote.c:304 #, fuzzy msgid "No ref information available in repository" msgstr "DATEI - Informationen über die exportierte Datei erhalten" @@ -1281,28 +1546,63 @@ msgstr "DATEI - Informationen über die exportierte Datei erhalten" msgid "Arch to make current for" msgstr "Architektur als aktuell festlegen für" -#: app/flatpak-builtins-make-current.c:57 +#: app/flatpak-builtins-make-current.c:58 msgid "APP BRANCH - Make branch of application current" msgstr "ANWENDUNG ZWEIG - Zweig der Anwendung aktuell setzen" -#: app/flatpak-builtins-make-current.c:64 app/flatpak-builtins-override.c:63 -#: app/flatpak-builtins-run.c:105 +#: app/flatpak-builtins-make-current.c:69 app/flatpak-builtins-run.c:105 msgid "APP must be specified" msgstr "ANWENDUNG muss angegeben werden" -#: app/flatpak-builtins-make-current.c:79 +#: app/flatpak-builtins-make-current.c:84 msgid "BRANCH must be specified" msgstr "ZWEIG muss angegeben werden" -#: app/flatpak-builtins-make-current.c:92 +#: app/flatpak-builtins-make-current.c:97 #, c-format msgid "App %s branch %s is not installed" msgstr "Anwendung %s Zweig %s ist nicht installiert" -#: app/flatpak-builtins-override.c:53 -msgid "APP - Override settings for application" +#: app/flatpak-builtins-override.c:54 +#, fuzzy +msgid "[APP] - Override settings [for application]" msgstr "ANWENDUNG - Einstellungen für Anwendung ersetzen" +#: app/flatpak-builtins-repo.c:48 +#, c-format +msgid "Title: %s\n" +msgstr "" + +#: app/flatpak-builtins-repo.c:51 +#, c-format +msgid "Collection ID: %s\n" +msgstr "" + +#: app/flatpak-builtins-repo.c:54 +#, c-format +msgid "Default branch: %s\n" +msgstr "" + +#: app/flatpak-builtins-repo.c:57 +#, c-format +msgid "Redirect URL: %s\n" +msgstr "" + +#: app/flatpak-builtins-repo.c:60 +#, c-format +msgid "Redirect collection ID: %s\n" +msgstr "" + +#: app/flatpak-builtins-repo.c:68 +#, c-format +msgid "GPG key hash: %s\n" +msgstr "" + +#: app/flatpak-builtins-repo.c:77 +#, c-format +msgid "%zd branches\n" +msgstr "" + #: app/flatpak-builtins-repo.c:99 #, fuzzy msgid "Installed" @@ -1326,7 +1626,7 @@ msgstr "Vorgabezweig für diese Quelle" msgid "Print metadata for a branch" msgstr "" -#: app/flatpak-builtins-repo.c:167 +#: app/flatpak-builtins-repo.c:168 #, fuzzy msgid "LOCATION - Repository maintenance" msgstr "ORT - Metadaten der Quelle aktualisieren" @@ -1439,14 +1739,6 @@ msgstr "Zu verwendende Laufzeitumgebung" msgid "Runtime version to use" msgstr "Zu verwendende Laufzeit" -#: app/flatpak-builtins-run.c:58 -msgid "Log session bus calls" -msgstr "Sitzungsbus-Aufrufe protokollieren" - -#: app/flatpak-builtins-run.c:59 -msgid "Log system bus calls" -msgstr "Systembus-Aufrufe protokollieren" - #: app/flatpak-builtins-run.c:60 #, fuzzy msgid "Log accessibility bus calls" @@ -1460,6 +1752,44 @@ msgstr "" msgid "APP [args...] - Run an app" msgstr "ANWENDUNG [Argumente …] - Eine Anwendung ausführen" +#: app/flatpak-builtins-search.c:239 +msgid "TEXT - Search remote apps/runtimes for text" +msgstr "" + +#: app/flatpak-builtins-search.c:249 +#, fuzzy +msgid "TEXT must be specified" +msgstr "ENTFERNTE QUELLE muss angegeben werden" + +#: app/flatpak-builtins-search.c:305 +#, fuzzy +msgid "Application ID" +msgstr "Eine Anwendung ausführen" + +#: app/flatpak-builtins-search.c:306 +msgid "Version" +msgstr "" + +#: app/flatpak-builtins-search.c:308 +#, fuzzy +msgid "Branch" +msgstr "Zu verwendender Zweig" + +#: app/flatpak-builtins-search.c:310 +#, fuzzy +msgid "Remotes" +msgstr "Keine entfernte Quelle %s" + +#: app/flatpak-builtins-search.c:311 +#, fuzzy +msgid "Description" +msgstr "Vollständige Beschreibung" + +#: app/flatpak-builtins-search.c:320 +#, fuzzy +msgid "No matches found" +msgstr "Kein Treffer für %s" + #: app/flatpak-builtins-uninstall.c:44 msgid "Arch to uninstall" msgstr "Zu installierende Architektur" @@ -1476,19 +1806,24 @@ msgstr "Zugehörige Referenzen nicht deinstallieren" msgid "Remove files even if running" msgstr "Dateien entfernen, selbst wenn sie in Verwendung sind" -#: app/flatpak-builtins-uninstall.c:69 +#: app/flatpak-builtins-uninstall.c:70 msgid "REF... - Uninstall an application" msgstr "REF… - Eine Anwendung deinstallieren" -#: app/flatpak-builtins-uninstall.c:76 +#: app/flatpak-builtins-uninstall.c:81 msgid "Must specify at least one REF" msgstr "Es muss zumindest eine REFERENZ angegeben werden" -#: app/flatpak-builtins-uninstall.c:129 app/flatpak-transaction.c:340 +#: app/flatpak-builtins-uninstall.c:134 app/flatpak-transaction.c:355 #, c-format msgid "Warning: Problem looking for related refs: %s\n" msgstr "Warnung: Problem bei der Suche nach zugehörigen Referenzen: %s\n" +#: app/flatpak-builtins-uninstall.c:164 +#, fuzzy, c-format +msgid "Uninstalling: %s\n" +msgstr "Installieren: %s\n" + #: app/flatpak-builtins-update.c:53 msgid "Arch to update for" msgstr "Architektur für Aktualisierung" @@ -1497,10 +1832,6 @@ msgstr "Architektur für Aktualisierung" msgid "Commit to deploy" msgstr "Bereitzustellender Commit" -#: app/flatpak-builtins-update.c:54 -msgid "COMMIT" -msgstr "COMMIT" - #: app/flatpak-builtins-update.c:55 msgid "Remove old files even if running" msgstr "Alte Dateien entfernen, selbst wenn sie in Verwendung sind" @@ -1523,42 +1854,94 @@ msgstr "Appstream für entfernte Quelle aktualisieren" msgid "Only update this subpath" msgstr "Nur diesen Unterpfad aktualisieren" -#: app/flatpak-builtins-update.c:95 -#, c-format -msgid "Updating appstream for remote %s\n" -msgstr "Appstream für ferne Quelle %s wird aktualisiert\n" - -#: app/flatpak-builtins-update.c:133 +#: app/flatpak-builtins-update.c:83 msgid "[REF...] - Update applications or runtimes" msgstr "[REF…] - Anwendungen oder Laufzeitumgebungen aktualisieren" +#: app/flatpak-builtins-update.c:119 +#, fuzzy +msgid "Looking for updates...\n" +msgstr "Nach %s suchen\n" + +#: app/flatpak-builtins-utils.c:365 +#, c-format +msgid "Remote ‘%s’ found in multiple installations:\n" +msgstr "" + +#: app/flatpak-builtins-utils.c:372 +#, fuzzy +msgid "Which do you want to use (0 to abort)?" +msgstr "Was wollen Sie installieren (0 zum Abbrechen)?" + +#: app/flatpak-builtins-utils.c:374 +#, c-format +msgid "No remote chosen to resolve ‘%s’ which exists in multiple installations" +msgstr "" + +#: app/flatpak-builtins-utils.c:479 app/flatpak-builtins-utils.c:481 +#, fuzzy, c-format +msgid "Updating appstream data for user remote %s\n" +msgstr "Appstream für ferne Quelle %s wird aktualisiert\n" + +#: app/flatpak-builtins-utils.c:486 app/flatpak-builtins-utils.c:488 +#, fuzzy, c-format +msgid "Updating appstream data for remote %s\n" +msgstr "Appstream für ferne Quelle %s wird aktualisiert\n" + +#: app/flatpak-builtins-utils.c:493 +#, fuzzy, c-format +msgid "Error updating: %s\n" +msgstr "Zusammenfassung wird aktualisiert\n" + +#: app/flatpak-builtins-utils.c:526 +#, fuzzy, c-format +msgid "Remote \"%s\" not found" +msgstr "Daten wurden nicht gefunden" + #. translators: please keep the leading space -#: app/flatpak-main.c:61 +#: app/flatpak-main.c:62 msgid " Manage installed apps and runtimes" msgstr " Installierte Anwendungen und Laufzeitumgebungen verwalten" -#: app/flatpak-main.c:62 +#: app/flatpak-main.c:63 msgid "Install an application or runtime" msgstr "Eine Anwendung oder Laufzeitumgebung installieren" -#: app/flatpak-main.c:63 +#: app/flatpak-main.c:64 msgid "Update an installed application or runtime" msgstr "Eine installierte Anwendung oder Laufzeitumgebung aktualisieren" -#: app/flatpak-main.c:64 +#: app/flatpak-main.c:65 msgid "Uninstall an installed application or runtime" msgstr "Eine installierte Anwendung oder Laufzeitumgebung deinstallieren" -#: app/flatpak-main.c:65 +#: app/flatpak-main.c:66 msgid "List installed apps and/or runtimes" msgstr "Installierte Anwendungen und/oder Laufzeitumgebungen auflisten" -#: app/flatpak-main.c:66 +#: app/flatpak-main.c:67 msgid "Show info for installed app or runtime" msgstr "Informationen zu installierter Anwendung oder Laufzeit anzeigen" +#: app/flatpak-main.c:68 +#, fuzzy +msgid "Configure flatpak" +msgstr "Ferne Quelle einrichten" + #. translators: please keep the leading newline and space -#: app/flatpak-main.c:69 +#: app/flatpak-main.c:71 +#, fuzzy +msgid "" +"\n" +" Finding applications and runtimes" +msgstr "Eine Anwendung oder Laufzeitumgebung signieren" + +#: app/flatpak-main.c:72 +msgid "Search for remote apps/runtimes" +msgstr "" + +#. translators: please keep the leading newline and space +#: app/flatpak-main.c:75 msgid "" "\n" " Running applications" @@ -1566,24 +1949,24 @@ msgstr "" "\n" " Anwendungen ausführen" -#: app/flatpak-main.c:70 +#: app/flatpak-main.c:76 msgid "Run an application" msgstr "Eine Anwendung ausführen" -#: app/flatpak-main.c:71 +#: app/flatpak-main.c:77 msgid "Override permissions for an application" msgstr "Berechtigungen für eine Anwendung ersetzen" -#: app/flatpak-main.c:72 +#: app/flatpak-main.c:78 msgid "Specify default version to run" msgstr "Die als Standard auszuführende Version angeben" -#: app/flatpak-main.c:73 +#: app/flatpak-main.c:79 msgid "Enter the namespace of a running application" msgstr "In den Namensraum einer laufenden Anwendung wechseln" #. translators: please keep the leading newline and space -#: app/flatpak-main.c:76 +#: app/flatpak-main.c:82 msgid "" "\n" " Manage file access" @@ -1591,24 +1974,24 @@ msgstr "" "\n" " Dateizugriff verwalten" -#: app/flatpak-main.c:77 +#: app/flatpak-main.c:83 msgid "Grant an application access to a specific file" msgstr "Einer Anwendung den Zugriff auf eine bestimmte Datei gewähren" -#: app/flatpak-main.c:78 +#: app/flatpak-main.c:84 msgid "Revoke access to a specific file" msgstr "Den Zugriff auf eine bestimmte Datei widerrufen" -#: app/flatpak-main.c:79 +#: app/flatpak-main.c:85 msgid "Show information about a specific file" msgstr "Informationen zu einer bestimmten Datei anzeigen" -#: app/flatpak-main.c:80 +#: app/flatpak-main.c:86 msgid "List exported files" msgstr "Exportierte Dateien auflisten" #. translators: please keep the leading newline and space -#: app/flatpak-main.c:83 +#: app/flatpak-main.c:89 msgid "" "\n" " Manage remote repositories" @@ -1616,28 +1999,33 @@ msgstr "" "\n" " Entfernte Quellen verwalten" -#: app/flatpak-main.c:84 +#: app/flatpak-main.c:90 msgid "List all configured remotes" msgstr "Alle konfigurierten entfernten Quellen auflisten" -#: app/flatpak-main.c:85 +#: app/flatpak-main.c:91 msgid "Add a new remote repository (by URL)" msgstr "Eine neue entfernte Quelle hinzufügen (mittels Adresse)" -#: app/flatpak-main.c:86 +#: app/flatpak-main.c:92 msgid "Modify properties of a configured remote" msgstr "Eigenschaften einer konfigurierten entfernten Quelle verändern" -#: app/flatpak-main.c:87 +#: app/flatpak-main.c:93 msgid "Delete a configured remote" msgstr "Eine konfigurierte entfernte Quelle löschen" -#: app/flatpak-main.c:89 +#: app/flatpak-main.c:95 msgid "List contents of a configured remote" msgstr "Inhalt einer konfigurierten entfernten Quelle auflisten" +#: app/flatpak-main.c:96 +#, fuzzy +msgid "Show information about a remote app or runtime" +msgstr "Informationen zu installierter Anwendung oder Laufzeit anzeigen" + #. translators: please keep the leading newline and space -#: app/flatpak-main.c:92 +#: app/flatpak-main.c:99 msgid "" "\n" " Build applications" @@ -1645,512 +2033,289 @@ msgstr "" "\n" " Anwendungen erstellen" -#: app/flatpak-main.c:93 +#: app/flatpak-main.c:100 msgid "Initialize a directory for building" msgstr "Einen Ordner für die Erstellung initialisieren" -#: app/flatpak-main.c:94 +#: app/flatpak-main.c:101 msgid "Run a build command inside the build dir" msgstr "Einen Erstellungsbefehl innerhalb des Erstellungsordners ausführen" -#: app/flatpak-main.c:95 +#: app/flatpak-main.c:102 msgid "Finish a build dir for export" msgstr "Einen Erstellungsordner für den Export finalisieren" -#: app/flatpak-main.c:96 +#: app/flatpak-main.c:103 msgid "Export a build dir to a repository" msgstr "Erstellungsordner in eine Quelle exportieren" -#: app/flatpak-main.c:97 -msgid "Create a bundle file from a build directory" +#: app/flatpak-main.c:104 +#, fuzzy +msgid "Create a bundle file from a ref in a local repository" msgstr "Eine Bündel-Datei aus einem Erstellungsordner erzeugen" -#: app/flatpak-main.c:98 +#: app/flatpak-main.c:105 msgid "Import a bundle file" msgstr "Eine Bündel-Datei importieren" -#: app/flatpak-main.c:99 +#: app/flatpak-main.c:106 msgid "Sign an application or runtime" msgstr "Eine Anwendung oder Laufzeitumgebung signieren" -#: app/flatpak-main.c:100 +#: app/flatpak-main.c:107 msgid "Update the summary file in a repository" msgstr "Zusammenfassungsdatei in einer Quelle aktualisieren" -#: app/flatpak-main.c:101 +#: app/flatpak-main.c:108 msgid "Create new commit based on existing ref" msgstr "Neuen Commit basierend auf existierendem Ref erstellen" -#: app/flatpak-main.c:102 +#: app/flatpak-main.c:109 #, fuzzy msgid "Print information about a repo" msgstr "DATEI - Informationen über die exportierte Datei erhalten" -#: app/flatpak-main.c:119 +#: app/flatpak-main.c:126 #, fuzzy msgid "Print debug information during command processing, -vv for more detail" msgstr "Fehlerdiagnoseinformationen während der Befehlsverarbeitung ausgeben" -#: app/flatpak-main.c:120 +#: app/flatpak-main.c:127 msgid "Print OSTree debug information during command processing" msgstr "" "OSTree-Fehlerdiagnoseinformationen während der Befehlsverarbeitung ausgeben" -#: app/flatpak-main.c:121 +#: app/flatpak-main.c:128 msgid "Show help options" msgstr "Hilfeoptionen anzeigen" -#: app/flatpak-main.c:126 +#: app/flatpak-main.c:133 msgid "Print version information and exit" msgstr "Versionsinformationen ausgeben und beenden" -#: app/flatpak-main.c:127 +#: app/flatpak-main.c:134 msgid "Print default arch and exit" msgstr "Standard-Architektur ausgeben und beenden" -#: app/flatpak-main.c:128 +#: app/flatpak-main.c:135 msgid "Print supported arches and exit" msgstr "Unterstützte Architekturen ausgeben und beenden" -#: app/flatpak-main.c:129 +#: app/flatpak-main.c:136 msgid "Print active gl drivers and exit" msgstr "Aktiven GL-Treiber ausgeben und beenden" -#: app/flatpak-main.c:134 +#: app/flatpak-main.c:141 msgid "Work on user installations" msgstr "Benutzerinstallationen bearbeiten" -#: app/flatpak-main.c:135 +#: app/flatpak-main.c:142 msgid "Work on system-wide installations (default)" msgstr "Systemweite Installationen bearbeiten (Standard)" -#: app/flatpak-main.c:136 -msgid "Work on a specific system-wide installation" +#: app/flatpak-main.c:143 +#, fuzzy +msgid "Work on specific system-wide installation(s)" msgstr "Auf einer spezifischen systemweiten Installation arbeiten" -#: app/flatpak-main.c:136 +#: app/flatpak-main.c:143 #, fuzzy msgid "NAME" msgstr "DATEINAME" -#: app/flatpak-main.c:162 +#: app/flatpak-main.c:169 msgid "Builtin Commands:" msgstr "Eingebaute Befehle:" -#: app/flatpak-main.c:388 +#: app/flatpak-main.c:370 +msgid "" +"The --installation option was used multiple times for a command that works " +"on one installation" +msgstr "" + +#: app/flatpak-main.c:489 #, c-format msgid "Unknown command '%s'" msgstr "Unbekannter Befehl »%s«" -#: app/flatpak-main.c:396 +#: app/flatpak-main.c:497 msgid "No command specified" msgstr "Kein Befehl angegeben" -#: app/flatpak-main.c:514 +#: app/flatpak-main.c:615 msgid "error:" msgstr "Fehler:" -#: app/flatpak-transaction.c:302 +#: app/flatpak-transaction.c:313 +#, fuzzy, c-format +msgid "Found in remote %s\n" +msgstr "In verschiedenen fernen Quellen gefunden:\n" + +#: app/flatpak-transaction.c:317 #, c-format msgid "Found in remote %s, do you want to install it?" msgstr "" -#: app/flatpak-transaction.c:307 +#: app/flatpak-transaction.c:322 msgid "Found in several remotes:\n" msgstr "In verschiedenen fernen Quellen gefunden:\n" -#: app/flatpak-transaction.c:312 +#: app/flatpak-transaction.c:327 msgid "Which do you want to install (0 to abort)?" msgstr "Was wollen Sie installieren (0 zum Abbrechen)?" -#: app/flatpak-transaction.c:402 +#: app/flatpak-transaction.c:417 #, c-format msgid "Required runtime for %s (%s) is not installed, searching...\n" msgstr "" "Erforderliche Laufzeit für %s (%s) ist nicht installiert. Suche läuft …\n" -#: app/flatpak-transaction.c:408 +#: app/flatpak-transaction.c:423 #, c-format msgid "The required runtime %s was not found in a configured remote.\n" msgstr "" "Die erforderliche Laufzeit %s wurde in keiner konfigurierten entfernten " "Quelle gefunden.\n" -#: app/flatpak-transaction.c:469 common/flatpak-dir.c:1127 -#: common/flatpak-dir.c:1433 common/flatpak-dir.c:1456 -#: common/flatpak-dir.c:1478 common/flatpak-dir.c:10136 -#: common/flatpak-utils.c:1272 common/flatpak-utils.c:1366 +#: app/flatpak-transaction.c:506 common/flatpak-dir.c:1160 +#: common/flatpak-dir.c:1479 common/flatpak-dir.c:1502 +#: common/flatpak-dir.c:1524 common/flatpak-dir.c:10655 +#: common/flatpak-utils.c:1312 common/flatpak-utils.c:1406 #, c-format msgid "%s not installed" msgstr "%s ist nicht installiert" -#: app/flatpak-transaction.c:475 +#: app/flatpak-transaction.c:512 #, c-format msgid "Remote %s disabled, ignoring %s update" msgstr "Entfernte Quelle %s ist deaktiviert. Aktualisierung %s wird ignoriert" -#: app/flatpak-transaction.c:485 +#: app/flatpak-transaction.c:525 #, fuzzy, c-format msgid "%s already installed, skipping\n" msgstr "%s ist bereits installiert" -#: app/flatpak-transaction.c:529 +#: app/flatpak-transaction.c:531 +#, fuzzy, c-format +msgid "%s is already installed from other remote (%s)" +msgstr "%s-Commit %s wurde bereits installiert" + +#: app/flatpak-transaction.c:543 +#, c-format +msgid "Warning: Can't find dependencies: %s\n" +msgstr "" + +#: app/flatpak-transaction.c:570 +#, c-format +msgid "Invalid require-flatpak argument %s\n" +msgstr "" + +#: app/flatpak-transaction.c:576 #, c-format msgid "%s needs a later flatpak version (%s)" msgstr "%s verlangt eine neuere Version von flatpak (%s)" -#: app/flatpak-transaction.c:704 +#: app/flatpak-transaction.c:688 +#, fuzzy, c-format +msgid "Error updating remote metadata for '%s': %s\n" +msgstr "Fehler beim Aktualisieren der Metadaten für »%s«: %s\n" + +#: app/flatpak-transaction.c:744 msgid "install" msgstr "installieren" -#: app/flatpak-transaction.c:705 +#: app/flatpak-transaction.c:746 +#, fuzzy, c-format +msgid "Installing for user: %s from %s\n" +msgstr "Installieren: %s von %s\n" + +#: app/flatpak-transaction.c:748 #, c-format msgid "Installing: %s from %s\n" msgstr "Installieren: %s von %s\n" -#: app/flatpak-transaction.c:721 +#: app/flatpak-transaction.c:765 msgid "update" msgstr "update" -#: app/flatpak-transaction.c:729 +#: app/flatpak-transaction.c:774 +#, fuzzy, c-format +msgid "Updating for user: %s from %s\n" +msgstr "Aktualisieren: %s von %s\n" + +#: app/flatpak-transaction.c:776 #, c-format msgid "Updating: %s from %s\n" msgstr "Aktualisieren: %s von %s\n" -#: app/flatpak-transaction.c:749 +#: app/flatpak-transaction.c:796 #, c-format msgid "Now at %s.\n" msgstr "Jetzt bei %s.\n" -#: app/flatpak-transaction.c:755 +#: app/flatpak-transaction.c:802 msgid "No updates.\n" msgstr "Keine Aktualisierungen.\n" -#: app/flatpak-transaction.c:773 +#: app/flatpak-transaction.c:820 msgid "install bundle" msgstr "Bündel installieren" -#: app/flatpak-transaction.c:774 +#: app/flatpak-transaction.c:822 +#, fuzzy, c-format +msgid "Installing for user: %s from bundle %s\n" +msgstr "Installieren: %s von Bündel %s\n" + +#: app/flatpak-transaction.c:824 #, c-format msgid "Installing: %s from bundle %s\n" msgstr "Installieren: %s von Bündel %s\n" -#: app/flatpak-transaction.c:786 +#: app/flatpak-transaction.c:836 #, c-format msgid "Warning: Failed to %s %s: %s\n" msgstr "Warnung: %s %s fehlgeschlagen: %s\n" -#: app/flatpak-transaction.c:791 +#: app/flatpak-transaction.c:841 #, c-format msgid "Error: Failed to %s %s: %s\n" msgstr "Fehler: %s %s ist fehlgeschlagen: %s\n" -#: app/flatpak-transaction.c:796 +#: app/flatpak-transaction.c:846 msgid "One or more operations failed" msgstr "Ein oder mehrere Vorgänge sind fehlgeschlagen" -#: common/flatpak-dir.c:1015 -#, c-format -msgid "No overrides found for %s" -msgstr "Keine Ersetzungen für %s gefunden" - -#: common/flatpak-dir.c:1611 -#, c-format -msgid "While opening repository %s: " -msgstr "Während des Öffnens der Quelle %s: " - -#: common/flatpak-dir.c:1770 common/flatpak-dir.c:5109 -msgid "Can't create deploy directory" -msgstr "Bereitstellungsordner konnte nicht erstellt werden" - -#: common/flatpak-dir.c:2450 -#, c-format -msgid "Invalid sha256 for extra data uri %s" -msgstr "Ungültiges sha256 für die Adresse %s der Extradaten" - -#: common/flatpak-dir.c:2455 -#, c-format -msgid "Empty name for extra data uri %s" -msgstr "Leerer Name für die Adresse %s der Extradaten" - -#: common/flatpak-dir.c:2462 -#, c-format -msgid "Unsupported extra data uri %s" -msgstr "Nicht unterstützte Adresse %s der Extradaten" - -#: common/flatpak-dir.c:2476 -#, fuzzy, c-format -msgid "Failed to load local extra-data %s: %s" -msgstr "Commit %s konnte nicht gelesen werden: " - -#: common/flatpak-dir.c:2479 -#, fuzzy, c-format -msgid "Wrong size for extra-data %s" -msgstr "Falsche Größe für Extradaten %s" - -#: common/flatpak-dir.c:2494 -#, c-format -msgid "While downloading %s: " -msgstr "Während des Herunterladens von %s: " - -#: common/flatpak-dir.c:2501 -#, c-format -msgid "Wrong size for extra data %s" -msgstr "Falsche Größe für Extradaten %s" - -#: common/flatpak-dir.c:2512 -#, c-format -msgid "Invalid checksum for extra data %s" -msgstr "Ungültige Prüfsumme für Extradaten %s" - -#: common/flatpak-dir.c:2768 -#, c-format -msgid "%s commit %s already installed" -msgstr "%s-Commit %s wurde bereits installiert" - -#: common/flatpak-dir.c:3097 common/flatpak-dir.c:3411 -#, c-format -msgid "While pulling %s from remote %s: " -msgstr "Während des Holens von %s von der entfernten Quelle %s: " - -#: common/flatpak-dir.c:3296 -#, c-format -msgid "Can't find %s in remote %s" -msgstr "%s konnte nicht in entfernter Quelle %s gefunden werden" - -#: common/flatpak-dir.c:3969 -msgid "Not enough memory" -msgstr "Nicht genug Speicher" - -#: common/flatpak-dir.c:3988 -msgid "Failed to read from exported file" -msgstr "Lesen aus der exportierten Datei fehlgeschlagen" - -#: common/flatpak-dir.c:4179 -msgid "Error reading mimetype xml file" -msgstr "" - -#: common/flatpak-dir.c:4184 -msgid "Invalid mimetype xml file" -msgstr "" - -#: common/flatpak-dir.c:4726 -msgid "While getting detached metadata: " -msgstr "Während des Versuchs, abgekoppelte Metadaten zu holen: " - -#: common/flatpak-dir.c:4744 -msgid "While creating extradir: " -msgstr "Beim Anlegen von extradir: " - -#: common/flatpak-dir.c:4765 -msgid "Invalid sha256 for extra data" -msgstr "Ungültige sha256 für zusätzliche Daten" - -#: common/flatpak-dir.c:4794 -msgid "Wrong size for extra data" -msgstr "Falsche Größe für zusätzliche Daten" - -#: common/flatpak-dir.c:4798 -msgid "Invalid checksum for extra data" -msgstr "Ungültige Prüfsumme für zusätzliche Daten" - -#: common/flatpak-dir.c:4807 -#, c-format -msgid "While writing extra data file '%s': " -msgstr "Fehler beim Schreiben der zusätzlichen Datendatei: »%s«: " - -#: common/flatpak-dir.c:4991 -#, fuzzy, c-format -msgid "apply_extra script failed, exit status %d" -msgstr "Skript apply_extra ist fehlgeschlagen" - -#: common/flatpak-dir.c:5068 -#, c-format -msgid "While trying to resolve ref %s: " -msgstr "Während des Auflösens der Referenz %s: " - -#: common/flatpak-dir.c:5083 -#, c-format -msgid "%s is not available" -msgstr "%s ist nicht verfügbar" - -#: common/flatpak-dir.c:5098 common/flatpak-dir.c:5436 -#: common/flatpak-dir.c:6204 common/flatpak-dir.c:6217 -#: common/flatpak-dir.c:6293 -#, c-format -msgid "%s branch %s already installed" -msgstr "%s Zweig %s wurde bereits installiert" - -#: common/flatpak-dir.c:5117 -#, c-format -msgid "Failed to read commit %s: " -msgstr "Commit %s konnte nicht gelesen werden: " - -#: common/flatpak-dir.c:5137 -#, c-format -msgid "While trying to checkout %s into %s: " -msgstr "Während des Versuchs, eine Arbeitskopie von %s nach %s zu erstellen: " - -#: common/flatpak-dir.c:5162 common/flatpak-dir.c:5193 -msgid "While trying to checkout metadata subpath: " -msgstr "" -"Während des Versuchs, eine Arbeitskopie des Metadaten-Unterordners zu " -"erstellen: " - -#: common/flatpak-dir.c:5203 -msgid "While trying to remove existing extra dir: " -msgstr "Während des Versuchs, den bestehenden Extraordner zu entfernen: " - -#: common/flatpak-dir.c:5214 -msgid "While trying to apply extra data: " -msgstr "Während des Versuchs, zusätzliche Daten anzuwenden: " - -#: common/flatpak-dir.c:5241 -#, fuzzy, c-format -msgid "Invalid deployed ref %s: " -msgstr "Ungültige Prozesskennung %s" - -#: common/flatpak-dir.c:5248 -#, fuzzy, c-format -msgid "Invalid commit ref %s: " -msgstr "Ungültige Prozesskennung %s" - -#: common/flatpak-dir.c:5256 -#, c-format -msgid "Deployed ref %s kind does not match commit (%s)" -msgstr "" - -#: common/flatpak-dir.c:5264 -#, c-format -msgid "Deployed ref %s name does not match commit (%s)" -msgstr "" - -#: common/flatpak-dir.c:5272 -#, c-format -msgid "Deployed ref %s arch does not match commit (%s)" -msgstr "" - -#: common/flatpak-dir.c:5278 -#, c-format -msgid "Deployed ref %s branch does not match commit (%s)" -msgstr "" - -#: common/flatpak-dir.c:5284 -#, c-format -msgid "Deployed ref %s does not match commit (%s)" -msgstr "" - -#: common/flatpak-dir.c:5303 -msgid "Deployed metadata does not match commit" -msgstr "" - -#: common/flatpak-dir.c:6065 -#, c-format -msgid "This version of %s is already installed" -msgstr "Diese Version von %s ist bereits installiert" - -#: common/flatpak-dir.c:6072 -msgid "Can't change remote during bundle install" -msgstr "" - -#: common/flatpak-dir.c:6615 -#, c-format -msgid "%s branch %s is not installed" -msgstr "%s Zweig %s ist nicht installiert" - -#: common/flatpak-dir.c:6859 -#, c-format -msgid "%s branch %s not installed" -msgstr "%s Zweig %s ist nicht installiert" - -#: common/flatpak-dir.c:7818 -#, c-format -msgid "Nothing matches %s" -msgstr "Kein Treffer für %s" - -#: common/flatpak-dir.c:7900 -#, fuzzy, c-format -msgid "Can't find ref %s%s%s%s%s" -msgstr "%s%s%s%s%s kann nicht in ferner Quelle %s gefunden werden" - -#: common/flatpak-dir.c:7942 -#, fuzzy, c-format -msgid "Error searching remote %s: %s" -msgstr "Fehler: %s %s ist fehlgeschlagen: %s\n" - -#: common/flatpak-dir.c:7987 -#, fuzzy, c-format -msgid "Error searching local repository: %s" -msgstr "Referenz in lokaler Quelle behalten" - -#: common/flatpak-dir.c:8113 -#, c-format -msgid "%s %s not installed" -msgstr "%s %s ist nicht installiert" - -#: common/flatpak-dir.c:8280 -#, c-format -msgid "Could not find installation %s" -msgstr "Installation %s konnte nicht gefunden werden" - -#: common/flatpak-dir.c:8809 -#, c-format -msgid "Runtime %s, branch %s is already installed" -msgstr "Laufzeitumgebung %s, Zweig %s ist bereits installiert" - -#: common/flatpak-dir.c:8810 -#, c-format -msgid "App %s, branch %s is already installed" -msgstr "Anwendung %s, Zweig %s ist bereits installiert" - -#: common/flatpak-dir.c:9269 -msgid "Remote title not set" -msgstr "Entfernter Titel nicht gesetzt" - -#: common/flatpak-dir.c:9291 -msgid "Remote default-branch not set" -msgstr "Vorgabe-Zweig für ferne Quelle nicht definiert" - -#: common/flatpak-dir.c:9785 -msgid "No flatpak cache in remote summary" -msgstr "" - -#: common/flatpak-dir.c:9795 -#, c-format -msgid "No entry for %s in remote summary flatpak cache " -msgstr "" - -#: common/flatpak-run.c:258 +#: common/flatpak-context.c:175 #, c-format msgid "Unknown share type %s, valid types are: %s" msgstr "Unbekannter Freigabetyp %s, zulässige Typen sind: %s" -#: common/flatpak-run.c:293 +#: common/flatpak-context.c:210 #, c-format msgid "Unknown policy type %s, valid types are: %s" msgstr "Unbekannter Regeltyp %s, zulässige Typen sind: %s" -#: common/flatpak-run.c:331 +#: common/flatpak-context.c:248 #, c-format msgid "Invalid dbus name %s\n" msgstr "Ungültiger Dbus-Name %s\n" -#: common/flatpak-run.c:344 +#: common/flatpak-context.c:261 #, c-format msgid "Unknown socket type %s, valid types are: %s" msgstr "Unbekannter Socket-Typ %s, zulässige Typen sind: %s" -#: common/flatpak-run.c:373 +#: common/flatpak-context.c:290 #, c-format msgid "Unknown device type %s, valid types are: %s" msgstr "Unbekannter Gerätetyp %s, zulässige Typen sind: %s" -#: common/flatpak-run.c:401 +#: common/flatpak-context.c:318 #, c-format msgid "Unknown feature type %s, valid types are: %s" msgstr "Unbekannter Funktionstyp %s, zulässige Typen sind: %s" -#: common/flatpak-run.c:774 +#: common/flatpak-context.c:691 #, fuzzy, c-format msgid "" "Unknown filesystem location %s, valid locations are: host, home, xdg-" @@ -2159,166 +2324,487 @@ msgstr "" "Unbekannter Dateisystem-Ort %s, zulässige Typen sind: host, home, xdg-" "*[/...], ~/Ordner, /Ordner" -#: common/flatpak-run.c:1040 +#: common/flatpak-context.c:963 #, c-format msgid "Invalid env format %s" msgstr "Ungültiges Umgebungsformat: %s" -#: common/flatpak-run.c:1180 +#: common/flatpak-context.c:1103 msgid "Share with host" msgstr "Mit Rechner teilen" -#: common/flatpak-run.c:1180 common/flatpak-run.c:1181 +#: common/flatpak-context.c:1103 common/flatpak-context.c:1104 msgid "SHARE" msgstr "FREIGABE" -#: common/flatpak-run.c:1181 +#: common/flatpak-context.c:1104 msgid "Unshare with host" msgstr "Freigabe für Rechner aufheben" -#: common/flatpak-run.c:1182 +#: common/flatpak-context.c:1105 msgid "Expose socket to app" msgstr "Socket für die Anwendung sichtbar machen" -#: common/flatpak-run.c:1182 common/flatpak-run.c:1183 +#: common/flatpak-context.c:1105 common/flatpak-context.c:1106 msgid "SOCKET" msgstr "SOCKET" -#: common/flatpak-run.c:1183 +#: common/flatpak-context.c:1106 msgid "Don't expose socket to app" msgstr "Socket vor der Anwendung verbergen" -#: common/flatpak-run.c:1184 +#: common/flatpak-context.c:1107 msgid "Expose device to app" msgstr "Gerät für die Anwendung sichtbar machen" -#: common/flatpak-run.c:1184 common/flatpak-run.c:1185 +#: common/flatpak-context.c:1107 common/flatpak-context.c:1108 msgid "DEVICE" msgstr "GERÄT" -#: common/flatpak-run.c:1185 +#: common/flatpak-context.c:1108 msgid "Don't expose device to app" msgstr "Gerät vor der Anwendung verbergen" -#: common/flatpak-run.c:1186 +#: common/flatpak-context.c:1109 msgid "Allow feature" msgstr "Funktion erlauben" -#: common/flatpak-run.c:1186 common/flatpak-run.c:1187 +#: common/flatpak-context.c:1109 common/flatpak-context.c:1110 msgid "FEATURE" msgstr "FUNKTION" -#: common/flatpak-run.c:1187 +#: common/flatpak-context.c:1110 msgid "Don't allow feature" msgstr "Funktion nicht erlauben" -#: common/flatpak-run.c:1188 +#: common/flatpak-context.c:1111 msgid "Expose filesystem to app (:ro for read-only)" msgstr "" "Das Dateisystem für die Anwendung sichtbar machen (:ro für schreibgeschützt)" -#: common/flatpak-run.c:1188 +#: common/flatpak-context.c:1111 msgid "FILESYSTEM[:ro]" msgstr "DATEISYSTEM[:ro]" -#: common/flatpak-run.c:1189 +#: common/flatpak-context.c:1112 msgid "Don't expose filesystem to app" msgstr "Das Dateisystem vor der Anwendung verbergen" -#: common/flatpak-run.c:1189 +#: common/flatpak-context.c:1112 msgid "FILESYSTEM" msgstr "DATEISYSTEM" -#: common/flatpak-run.c:1190 +#: common/flatpak-context.c:1113 msgid "Set environment variable" msgstr "Umgebungsvariable festlegen" -#: common/flatpak-run.c:1190 +#: common/flatpak-context.c:1113 msgid "VAR=VALUE" msgstr "VAR=WERT" -#: common/flatpak-run.c:1191 +#: common/flatpak-context.c:1114 msgid "Allow app to own name on the session bus" msgstr "" "Der Anwendung erlauben, einen Namen auf dem Sitzungsbus zu beanspruchen" -#: common/flatpak-run.c:1191 common/flatpak-run.c:1192 -#: common/flatpak-run.c:1193 common/flatpak-run.c:1194 +#: common/flatpak-context.c:1114 common/flatpak-context.c:1115 +#: common/flatpak-context.c:1116 common/flatpak-context.c:1117 msgid "DBUS_NAME" msgstr "DBUS_NAME" -#: common/flatpak-run.c:1192 +#: common/flatpak-context.c:1115 msgid "Allow app to talk to name on the session bus" msgstr "Der Anwendung erlauben, mit Namen auf dem Sitzungsbus zu kommunizieren" -#: common/flatpak-run.c:1193 +#: common/flatpak-context.c:1116 msgid "Allow app to own name on the system bus" msgstr "" "Der Anwendung erlauben, einen Namen auf dem Sitzungsbus zu beanspruchen" -#: common/flatpak-run.c:1194 +#: common/flatpak-context.c:1117 msgid "Allow app to talk to name on the system bus" msgstr "Der Anwendung erlauben, mit Namen auf dem Systembus zu kommunizieren" -#: common/flatpak-run.c:1195 +#: common/flatpak-context.c:1118 msgid "Add generic policy option" msgstr "Allgemeine Richtlinien-Einstellungen hinzufügen" -#: common/flatpak-run.c:1195 common/flatpak-run.c:1196 +#: common/flatpak-context.c:1118 common/flatpak-context.c:1119 msgid "SUBSYSTEM.KEY=VALUE" msgstr "SUBSYSTEM.SCHLÜSSEL=WERT" -#: common/flatpak-run.c:1196 +#: common/flatpak-context.c:1119 msgid "Remove generic policy option" msgstr "Allgemeine Richtlinien-Einstellungen entfernen" -#: common/flatpak-run.c:1197 +#: common/flatpak-context.c:1120 msgid "Persist home directory" msgstr "Basisordner beständig machen" -#: common/flatpak-run.c:1197 +#: common/flatpak-context.c:1120 msgid "FILENAME" msgstr "DATEINAME" #. This is not needed/used anymore, so hidden, but we accept it for backwards compat -#: common/flatpak-run.c:1199 +#: common/flatpak-context.c:1122 msgid "Don't require a running session (no cgroups creation)" msgstr "" "Laufende Sitzung als nicht erforderlich festlegen (keine Erstellung von " "cgroups)" -#: common/flatpak-run.c:3830 +#: common/flatpak-dir.c:1044 +#, c-format +msgid "No overrides found for %s" +msgstr "Keine Ersetzungen für %s gefunden" + +#: common/flatpak-dir.c:1674 +#, c-format +msgid "While opening repository %s: " +msgstr "Während des Öffnens der Quelle %s: " + +#: common/flatpak-dir.c:1908 common/flatpak-dir.c:5460 +msgid "Can't create deploy directory" +msgstr "Bereitstellungsordner konnte nicht erstellt werden" + +#: common/flatpak-dir.c:2122 common/flatpak-dir.c:2125 +#, c-format +msgid "Failed to find latest revision for ref %s from remote %s: %s\n" +msgstr "" + +#: common/flatpak-dir.c:2761 +#, c-format +msgid "Invalid sha256 for extra data uri %s" +msgstr "Ungültiges sha256 für die Adresse %s der Extradaten" + +#: common/flatpak-dir.c:2766 +#, c-format +msgid "Empty name for extra data uri %s" +msgstr "Leerer Name für die Adresse %s der Extradaten" + +#: common/flatpak-dir.c:2773 +#, c-format +msgid "Unsupported extra data uri %s" +msgstr "Nicht unterstützte Adresse %s der Extradaten" + +#: common/flatpak-dir.c:2787 +#, fuzzy, c-format +msgid "Failed to load local extra-data %s: %s" +msgstr "Commit %s konnte nicht gelesen werden: " + +#: common/flatpak-dir.c:2790 +#, fuzzy, c-format +msgid "Wrong size for extra-data %s" +msgstr "Falsche Größe für Extradaten %s" + +#: common/flatpak-dir.c:2805 +#, c-format +msgid "While downloading %s: " +msgstr "Während des Herunterladens von %s: " + +#: common/flatpak-dir.c:2812 +#, c-format +msgid "Wrong size for extra data %s" +msgstr "Falsche Größe für Extradaten %s" + +#: common/flatpak-dir.c:2823 +#, c-format +msgid "Invalid checksum for extra data %s" +msgstr "Ungültige Prüfsumme für Extradaten %s" + +#: common/flatpak-dir.c:2882 +#, fuzzy +msgid "Remote OCI index has no registry uri" +msgstr "NAME [ORT] - eine ferne Quelle hinzufügen" + +#: common/flatpak-dir.c:3100 +#, c-format +msgid "%s commit %s already installed" +msgstr "%s-Commit %s wurde bereits installiert" + +#: common/flatpak-dir.c:3442 common/flatpak-dir.c:3773 +#, c-format +msgid "While pulling %s from remote %s: " +msgstr "Während des Holens von %s von der entfernten Quelle %s: " + +#: common/flatpak-dir.c:3658 +#, c-format +msgid "Can't find %s in remote %s" +msgstr "%s konnte nicht in entfernter Quelle %s gefunden werden" + +#: common/flatpak-dir.c:4331 +msgid "Not enough memory" +msgstr "Nicht genug Speicher" + +#: common/flatpak-dir.c:4350 +msgid "Failed to read from exported file" +msgstr "Lesen aus der exportierten Datei fehlgeschlagen" + +#: common/flatpak-dir.c:4541 +msgid "Error reading mimetype xml file" +msgstr "" + +#: common/flatpak-dir.c:4546 +msgid "Invalid mimetype xml file" +msgstr "" + +#: common/flatpak-dir.c:5089 +msgid "While getting detached metadata: " +msgstr "Während des Versuchs, abgekoppelte Metadaten zu holen: " + +#: common/flatpak-dir.c:5107 +msgid "While creating extradir: " +msgstr "Beim Anlegen von extradir: " + +#: common/flatpak-dir.c:5128 +msgid "Invalid sha256 for extra data" +msgstr "Ungültige sha256 für zusätzliche Daten" + +#: common/flatpak-dir.c:5157 +msgid "Wrong size for extra data" +msgstr "Falsche Größe für zusätzliche Daten" + +#: common/flatpak-dir.c:5161 +msgid "Invalid checksum for extra data" +msgstr "Ungültige Prüfsumme für zusätzliche Daten" + +#: common/flatpak-dir.c:5170 +#, c-format +msgid "While writing extra data file '%s': " +msgstr "Fehler beim Schreiben der zusätzlichen Datendatei: »%s«: " + +#: common/flatpak-dir.c:5340 +#, fuzzy, c-format +msgid "apply_extra script failed, exit status %d" +msgstr "Skript apply_extra ist fehlgeschlagen" + +#: common/flatpak-dir.c:5419 +#, c-format +msgid "While trying to resolve ref %s: " +msgstr "Während des Auflösens der Referenz %s: " + +#: common/flatpak-dir.c:5434 +#, c-format +msgid "%s is not available" +msgstr "%s ist nicht verfügbar" + +#: common/flatpak-dir.c:5449 common/flatpak-dir.c:5881 +#: common/flatpak-dir.c:6671 common/flatpak-dir.c:6681 +#: common/flatpak-dir.c:6713 +#, c-format +msgid "%s branch %s already installed" +msgstr "%s Zweig %s wurde bereits installiert" + +#: common/flatpak-dir.c:5468 +#, c-format +msgid "Failed to read commit %s: " +msgstr "Commit %s konnte nicht gelesen werden: " + +#: common/flatpak-dir.c:5488 +#, c-format +msgid "While trying to checkout %s into %s: " +msgstr "Während des Versuchs, eine Arbeitskopie von %s nach %s zu erstellen: " + +#: common/flatpak-dir.c:5513 common/flatpak-dir.c:5544 +msgid "While trying to checkout metadata subpath: " +msgstr "" +"Während des Versuchs, eine Arbeitskopie des Metadaten-Unterordners zu " +"erstellen: " + +#: common/flatpak-dir.c:5554 +msgid "While trying to remove existing extra dir: " +msgstr "Während des Versuchs, den bestehenden Extraordner zu entfernen: " + +#: common/flatpak-dir.c:5565 +msgid "While trying to apply extra data: " +msgstr "Während des Versuchs, zusätzliche Daten anzuwenden: " + +#: common/flatpak-dir.c:5592 +#, fuzzy, c-format +msgid "Invalid deployed ref %s: " +msgstr "Ungültige Prozesskennung %s" + +#: common/flatpak-dir.c:5599 +#, fuzzy, c-format +msgid "Invalid commit ref %s: " +msgstr "Ungültige Prozesskennung %s" + +#: common/flatpak-dir.c:5607 +#, c-format +msgid "Deployed ref %s kind does not match commit (%s)" +msgstr "" + +#: common/flatpak-dir.c:5615 +#, c-format +msgid "Deployed ref %s name does not match commit (%s)" +msgstr "" + +#: common/flatpak-dir.c:5623 +#, c-format +msgid "Deployed ref %s arch does not match commit (%s)" +msgstr "" + +#: common/flatpak-dir.c:5629 +#, c-format +msgid "Deployed ref %s branch does not match commit (%s)" +msgstr "" + +#: common/flatpak-dir.c:5635 +#, c-format +msgid "Deployed ref %s does not match commit (%s)" +msgstr "" + +#: common/flatpak-dir.c:5654 +msgid "Deployed metadata does not match commit" +msgstr "" + +#: common/flatpak-dir.c:6533 +#, c-format +msgid "This version of %s is already installed" +msgstr "Diese Version von %s ist bereits installiert" + +#: common/flatpak-dir.c:6540 +msgid "Can't change remote during bundle install" +msgstr "" + +#: common/flatpak-dir.c:7059 +#, c-format +msgid "%s branch %s is not installed" +msgstr "%s Zweig %s ist nicht installiert" + +#: common/flatpak-dir.c:7304 +#, c-format +msgid "%s branch %s not installed" +msgstr "%s Zweig %s ist nicht installiert" + +#: common/flatpak-dir.c:7628 +#, fuzzy, c-format +msgid "Pruning repo failed: %s" +msgstr "Zugehörige werden installiert: %s\n" + +#: common/flatpak-dir.c:8155 +#, c-format +msgid "Multiple branches available for %s, you must specify one of: " +msgstr "" + +#: common/flatpak-dir.c:8176 +#, c-format +msgid "Nothing matches %s" +msgstr "Kein Treffer für %s" + +#: common/flatpak-dir.c:8258 +#, fuzzy, c-format +msgid "Can't find ref %s%s%s%s%s" +msgstr "%s%s%s%s%s kann nicht in ferner Quelle %s gefunden werden" + +#: common/flatpak-dir.c:8300 +#, fuzzy, c-format +msgid "Error searching remote %s: %s" +msgstr "Fehler: %s %s ist fehlgeschlagen: %s\n" + +#: common/flatpak-dir.c:8345 +#, fuzzy, c-format +msgid "Error searching local repository: %s" +msgstr "Referenz in lokaler Quelle behalten" + +#: common/flatpak-dir.c:8471 +#, c-format +msgid "%s %s not installed" +msgstr "%s %s ist nicht installiert" + +#: common/flatpak-dir.c:8638 +#, c-format +msgid "Could not find installation %s" +msgstr "Installation %s konnte nicht gefunden werden" + +#: common/flatpak-dir.c:9236 +#, c-format +msgid "Runtime %s, branch %s is already installed" +msgstr "Laufzeitumgebung %s, Zweig %s ist bereits installiert" + +#: common/flatpak-dir.c:9237 +#, c-format +msgid "App %s, branch %s is already installed" +msgstr "Anwendung %s, Zweig %s ist bereits installiert" + +#: common/flatpak-dir.c:9717 +msgid "Remote title not set" +msgstr "Entfernter Titel nicht gesetzt" + +#: common/flatpak-dir.c:9739 +msgid "Remote default-branch not set" +msgstr "Vorgabe-Zweig für ferne Quelle nicht definiert" + +#: common/flatpak-dir.c:10332 +msgid "No flatpak cache in remote summary" +msgstr "" + +#: common/flatpak-dir.c:10342 +#, c-format +msgid "No entry for %s in remote summary flatpak cache " +msgstr "" + +#: common/flatpak-run.c:1456 #, c-format msgid "Failed to open flatpak-info temp file: %s" msgstr "Öffnen der temporären flatpak-Informationsdatei fehlgeschlagen: %s" -#: common/flatpak-run.c:3904 common/flatpak-run.c:3914 +#: common/flatpak-run.c:1530 common/flatpak-run.c:1540 #, c-format msgid "Failed to open temp file: %s" msgstr "Temporäre Datei konnte nicht geöffnet werden: %s" -#: common/flatpak-run.c:4253 +#: common/flatpak-run.c:1883 msgid "Unable to create sync pipe" msgstr "»Sync-Pipe« konnte nicht erstellt werden" -#: common/flatpak-run.c:4280 +#: common/flatpak-run.c:1910 #, c-format msgid "Failed to open app info file: %s" msgstr "Öffnen der Informationsdatei der Anwendung fehlgeschlagen: %s" -#: common/flatpak-run.c:4310 +#: common/flatpak-run.c:1940 msgid "Failed to sync with dbus proxy" msgstr "Abgleich mit Dbus-Proxy ist fehlgeschlagen" -#: common/flatpak-run.c:5069 +#: common/flatpak-run.c:2700 #, fuzzy, c-format msgid "ldconfig failed, exit status %d" msgstr "Skript apply_extra ist fehlgeschlagen" -#: common/flatpak-utils.c:2900 +#: common/flatpak-utils.c:624 +#, fuzzy, c-format +msgid "Migrating %s to %s\n" +msgstr "Aktualisieren: %s von %s\n" + +#: common/flatpak-utils.c:630 +#, fuzzy, c-format +msgid "Error during migration: %s\n" +msgstr "Fehler: %s %s ist fehlgeschlagen: %s\n" + +#: common/flatpak-utils.c:2988 msgid "No extra data sources" msgstr "Keine zusätzlichen Datenquellen" +#: common/flatpak-utils.c:6576 +#, c-format +msgid "Downloading metadata: %u/(estimating) %s" +msgstr "" + +#: common/flatpak-utils.c:6600 +#, fuzzy, c-format +msgid "Downloading: %s/%s" +msgstr "Referenz anzeigen" + +#: common/flatpak-utils.c:6620 +#, fuzzy, c-format +msgid "Downloading extra data: %s/%s" +msgstr "Referenz anzeigen" + +#: common/flatpak-utils.c:6625 +#, fuzzy, c-format +msgid "Downloading files: %d/%d %s" +msgstr "Referenz anzeigen" + #. SECURITY: #. - Normal users do not need authentication to install signed applications #. from signed repositories, as this cannot exploit a system. @@ -2355,7 +2841,7 @@ msgstr "Signierte Anwendung aktualisieren" #: system-helper/org.freedesktop.Flatpak.policy.in:59 #: system-helper/org.freedesktop.Flatpak.policy.in:77 -#: system-helper/org.freedesktop.Flatpak.policy.in:169 +#: system-helper/org.freedesktop.Flatpak.policy.in:180 msgid "Authentication is required to update software" msgstr "Legitimierung wird benötigt, um Software zu aktualisieren" @@ -2420,16 +2906,41 @@ msgstr "Ferne Quelle einrichten" msgid "Authentication is required to configure software repositories" msgstr "Legitimierung wird benötigt, um die Softwarequellen zu konfigurieren" +#: system-helper/org.freedesktop.Flatpak.policy.in:161 +#, fuzzy +msgid "Configure" +msgstr "Ferne Quelle einrichten" + +#: system-helper/org.freedesktop.Flatpak.policy.in:162 +#, fuzzy +msgid "Authentication is required to configure software installation" +msgstr "Legitimierung wird benötigt, um die Softwarequellen zu konfigurieren" + #. SECURITY: #. - Normal users do not require admin authentication to update #. appstream data as it will be signed, and the action is required #. to update the system when unattended. #. - Changing this to anything other than 'yes' will break unattended #. updates. -#: system-helper/org.freedesktop.Flatpak.policy.in:168 +#: system-helper/org.freedesktop.Flatpak.policy.in:179 msgid "Update appstream" msgstr "Appstream aktualisieren" +#~ msgid "No remote %s" +#~ msgstr "Keine entfernte Quelle %s" + +#, fuzzy +#~ msgid "Search only user installations" +#~ msgstr "Benutzerinstallationen anzeigen" + +#, fuzzy +#~ msgid "Search only system-wide installations" +#~ msgstr "Systemweite Installationen anzeigen" + +#, fuzzy +#~ msgid "Search specific system-wide installations" +#~ msgstr "Spezifische systemweite Installationen anzeigen" + #~ msgid "Failed to create temporary file" #~ msgstr "Temporäre Datei konnte nicht erstellt werden" @@ -2439,13 +2950,6 @@ msgstr "Appstream aktualisieren" #~ msgid "Failed to write to temporary file" #~ msgstr "In temporäre Datei konnte nicht geschrieben werden" -#~ msgid "REMOTE must be specified" -#~ msgstr "ENTFERNTE QUELLE muss angegeben werden" - -#, fuzzy -#~ msgid "Downloading %s" -#~ msgstr "Referenz anzeigen" - #, fuzzy #~ msgid "Installing %s" #~ msgstr "Installieren: %s\n" @@ -2454,18 +2958,6 @@ msgstr "Appstream aktualisieren" #~ msgid "Post-Install %s" #~ msgstr "Installieren: %s\n" -#, fuzzy -#~ msgid "Updating %s" -#~ msgstr "Zusammenfassung wird aktualisiert\n" - -#, fuzzy -#~ msgid "Metadata:" -#~ msgstr "Details zur entfernten Quelle anzeigen" - -#, fuzzy -#~ msgid "Assume LOCATION is an oci registry" -#~ msgstr "NAME [ORT] - eine ferne Quelle hinzufügen" - #, fuzzy #~ msgid "OCI repo Filename or uri must be specified" #~ msgstr "Name der Bündel-Datei muss angegeben werden" @@ -2476,9 +2968,6 @@ msgstr "Appstream aktualisieren" #~ msgid "'%s' is not a valid sdk name: %s" #~ msgstr "»%s« ist kein gültiger sdk-Name: %s" -#~ msgid "Data not found" -#~ msgstr "Daten wurden nicht gefunden" - #~ msgid "Data not found for ref %s" #~ msgstr "Daten für Referenz %s nicht gefunden" @@ -2489,13 +2978,6 @@ msgstr "Appstream aktualisieren" #~ msgid "Load options from file or uri" #~ msgstr "Einstellungen aus Datei laden" -#~ msgid "Install an application or runtime from a remote" -#~ msgstr "Anwendung oder Laufzeit von einer entfernten Quelle installieren" - -#, fuzzy -#~ msgid "Invalid ref format" -#~ msgstr "Ungültiges Umgebungsformat: %s" - #, fuzzy #~ msgid "Invalid ref, no digest" #~ msgstr "Ungültiges Umgebungsformat: %s" @@ -2536,9 +3018,6 @@ msgstr "Appstream aktualisieren" #~ msgid "yes" #~ msgstr "ja" -#~ msgid "Installing related: %s\n" -#~ msgstr "Zugehörige werden installiert: %s\n" - #~ msgid "REPOSITORY and NAME must be specified" #~ msgstr "QUELLE und NAME müssen angegeben werden" @@ -2563,8 +3042,5 @@ msgstr "Appstream aktualisieren" #~ "Warnung: Appstream-Builder nicht gefunden, eine Aktualisierung des " #~ "Appstream-Zweiges ist nicht möglich\n" -#~ msgid "Looking for %s\n" -#~ msgstr "Nach %s suchen\n" - #~ msgid "Generating from-parent delta for %s (%s)\n" #~ msgstr "»Von-Vorläufer«-Delta wird erstellt für %s (%s)\n" diff --git a/po/es.po b/po/es.po index 8999ff4d..11f2a22c 100644 --- a/po/es.po +++ b/po/es.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: flatpak master\n" "Report-Msgid-Bugs-To: https://github.com/flatpak/flatpak/issues\n" -"POT-Creation-Date: 2017-10-09 12:40+0200\n" +"POT-Creation-Date: 2018-02-19 14:20+0100\n" "PO-Revision-Date: 2017-09-12 17:20+0200\n" "Last-Translator: Aitor González Fernández \n" "Language-Team: Spanish \n" @@ -44,10 +44,9 @@ msgstr "Establecer el remoto como usado por las dependencias" msgid "Set a new url" msgstr "Establecer una nueva url" -#: app/flatpak-builtins-add-remote.c:66 app/flatpak-builtins-build-bundle.c:57 -#: app/flatpak-builtins-build-bundle.c:58 -#: app/flatpak-builtins-list-remotes.c:109 -#: app/flatpak-builtins-repo-update.c:52 +#: app/flatpak-builtins-add-remote.c:66 app/flatpak-builtins-build-bundle.c:58 +#: app/flatpak-builtins-build-bundle.c:59 +#: app/flatpak-builtins-list-remotes.c:70 app/flatpak-builtins-repo-update.c:52 msgid "URL" msgstr "URL" @@ -109,9 +108,9 @@ msgstr "ID-COLECCIÓN" msgid "Import GPG key from FILE (- for stdin)" msgstr "Importar la clave GPG desde un ARCHIVO (- para stdin)" -#: app/flatpak-builtins-add-remote.c:82 app/flatpak-builtins-build-bundle.c:59 -#: app/flatpak-builtins-build.c:50 app/flatpak-builtins-build-export.c:60 -#: app/flatpak-builtins-install.c:66 app/flatpak-builtins-repo-update.c:59 +#: app/flatpak-builtins-add-remote.c:82 app/flatpak-builtins-build-bundle.c:60 +#: app/flatpak-builtins-build.c:54 app/flatpak-builtins-build-export.c:60 +#: app/flatpak-builtins-install.c:67 app/flatpak-builtins-repo-update.c:59 msgid "FILE" msgstr "ARCHIVO" @@ -123,132 +122,152 @@ msgstr "Desactivar el repositorio remoto" msgid "Add OCI registry" msgstr "Añadir registro OCI" -#: app/flatpak-builtins-add-remote.c:312 +#: app/flatpak-builtins-add-remote.c:218 app/flatpak-builtins-add-remote.c:225 +#, c-format +msgid "Can't load uri %s: %s\n" +msgstr "" + +#: app/flatpak-builtins-add-remote.c:233 +#, fuzzy, c-format +msgid "Can't load file %s: %s\n" +msgstr "No se puede abrir el espacio de nombres %s: %s" + +#: app/flatpak-builtins-add-remote.c:241 +#, fuzzy +msgid "Invalid file format" +msgstr "Formato de entorno inválido %s" + +#: app/flatpak-builtins-add-remote.c:249 +#, fuzzy, c-format +msgid "Invalid version %s, only 1 supported" +msgstr "Tipo de enlace %s inválido, solo se soportan http/https" + +#: app/flatpak-builtins-add-remote.c:293 +#, fuzzy +msgid "Invalid gpg key" +msgstr "PID %s inválido" + +#: app/flatpak-builtins-add-remote.c:320 msgid "NAME LOCATION - Add a remote repository" msgstr "NOMBRE LOCALIZACIÓN - Añadir un repositorio remoto" -#: app/flatpak-builtins-add-remote.c:321 -#: app/flatpak-builtins-delete-remote.c:58 app/flatpak-builtins-info.c:104 +#: app/flatpak-builtins-add-remote.c:333 +#: app/flatpak-builtins-delete-remote.c:61 app/flatpak-builtins-info.c:125 msgid "NAME must be specified" msgstr "Se debe especificar el NOMBRE" -#: app/flatpak-builtins-add-remote.c:324 app/flatpak-builtins-build-sign.c:71 -#: app/flatpak-builtins-repo.c:174 app/flatpak-builtins-repo-update.c:429 +#: app/flatpak-builtins-add-remote.c:336 app/flatpak-builtins-build-sign.c:71 +#: app/flatpak-builtins-repo.c:175 app/flatpak-builtins-repo-update.c:429 msgid "LOCATION must be specified" msgstr "Se debe especificar la LOCALIZACIÓN" -#: app/flatpak-builtins-add-remote.c:327 -#: app/flatpak-builtins-build-bundle.c:479 +#: app/flatpak-builtins-add-remote.c:339 +#: app/flatpak-builtins-build-bundle.c:461 #: app/flatpak-builtins-build-export.c:676 #: app/flatpak-builtins-build-import-bundle.c:182 #: app/flatpak-builtins-build-init.c:181 app/flatpak-builtins-build-sign.c:74 -#: app/flatpak-builtins-delete-remote.c:63 +#: app/flatpak-builtins-delete-remote.c:66 #: app/flatpak-builtins-document-export.c:102 #: app/flatpak-builtins-document-info.c:75 #: app/flatpak-builtins-document-list.c:70 -#: app/flatpak-builtins-document-unexport.c:67 app/flatpak-builtins-info.c:111 -#: app/flatpak-builtins-install.c:265 app/flatpak-builtins-install.c:399 -#: app/flatpak-builtins-list.c:382 app/flatpak-builtins-list-remotes.c:66 -#: app/flatpak-builtins-ls-remote.c:84 app/flatpak-builtins-make-current.c:67 -#: app/flatpak-builtins-override.c:66 +#: app/flatpak-builtins-document-unexport.c:67 app/flatpak-builtins-info.c:132 +#: app/flatpak-builtins-install.c:267 app/flatpak-builtins-install.c:401 +#: app/flatpak-builtins-list.c:314 app/flatpak-builtins-list-remotes.c:61 +#: app/flatpak-builtins-ls-remote.c:107 app/flatpak-builtins-make-current.c:72 +#: app/flatpak-builtins-override.c:68 msgid "Too many arguments" msgstr "Demasiados argumentos" -#: app/flatpak-builtins-add-remote.c:332 +#: app/flatpak-builtins-add-remote.c:344 #: app/flatpak-builtins-build-export.c:692 #, c-format msgid "‘%s’ is not a valid collection ID: %s" msgstr "'%s' no es una colección válida de ID's: %s" -#: app/flatpak-builtins-add-remote.c:336 +#: app/flatpak-builtins-add-remote.c:348 msgid "GPG verification is required if collections are enabled" msgstr "" "La verificación GPG es obligatoria si las colecciones están habilitadas" #. Do nothing -#: app/flatpak-builtins-add-remote.c:351 +#: app/flatpak-builtins-add-remote.c:363 #, c-format msgid "Remote %s already exists" msgstr "El repositorio remoto %s ya existe" -#: app/flatpak-builtins-add-remote.c:359 +#: app/flatpak-builtins-add-remote.c:371 msgid "No url specified in flatpakrepo file" msgstr "No se ha especificado una url en el archivo flatpakrepo" -#: app/flatpak-builtins-add-remote.c:403 +#: app/flatpak-builtins-add-remote.c:415 #, c-format msgid "Warning: Could not update extra metadata for '%s': %s\n" msgstr "" "Aviso: No se pueden actualizar los metadatos adicionales para '%s': %s\n" -#: app/flatpak-builtins-add-remote.c:451 +#: app/flatpak-builtins-add-remote.c:464 msgid "NAME - Modify a remote repository" msgstr "NOMBRE - Modificar un repositorio remoto" -#: app/flatpak-builtins-add-remote.c:460 +#: app/flatpak-builtins-add-remote.c:474 msgid "Remote NAME must be specified" msgstr "Se debe especificar el NOMBRE del repositorio remoto" -#: app/flatpak-builtins-add-remote.c:465 -#, c-format -msgid "No remote %s" -msgstr "Sin remoto %s" - -#: app/flatpak-builtins-add-remote.c:471 +#: app/flatpak-builtins-add-remote.c:485 #, c-format msgid "Updating extra metadata from remote summary for %s\n" msgstr "" "Actualizando los metadatos adicionales desde el resumen remoto para %s\n" -#: app/flatpak-builtins-add-remote.c:474 +#: app/flatpak-builtins-add-remote.c:488 #, c-format msgid "Error updating extra metadata for '%s': %s\n" msgstr "Error al actualizar los metados adicionales para '%s': %s\n" -#: app/flatpak-builtins-add-remote.c:475 +#: app/flatpak-builtins-add-remote.c:489 #, c-format msgid "Could not update extra metadata for %s" msgstr "No se han podido actualizar los metadatos adicionales para %s" -#: app/flatpak-builtins-build-bundle.c:55 +#: app/flatpak-builtins-build-bundle.c:56 msgid "Export runtime instead of app" msgstr "Exportar el runtime en lugar de la aplicación" -#: app/flatpak-builtins-build-bundle.c:56 +#: app/flatpak-builtins-build-bundle.c:57 msgid "Arch to bundle for" msgstr "Arquitectura para empaquetar" -#: app/flatpak-builtins-build-bundle.c:56 +#: app/flatpak-builtins-build-bundle.c:57 #: app/flatpak-builtins-build-export.c:55 app/flatpak-builtins-build-init.c:49 -#: app/flatpak-builtins-build-sign.c:41 app/flatpak-builtins-info.c:48 -#: app/flatpak-builtins-install.c:56 app/flatpak-builtins-list.c:52 -#: app/flatpak-builtins-ls-remote.c:48 app/flatpak-builtins-make-current.c:38 -#: app/flatpak-builtins-run.c:52 app/flatpak-builtins-uninstall.c:44 -#: app/flatpak-builtins-update.c:53 +#: app/flatpak-builtins-build-sign.c:41 app/flatpak-builtins-info.c:51 +#: app/flatpak-builtins-info-remote.c:48 app/flatpak-builtins-install.c:57 +#: app/flatpak-builtins-list.c:46 app/flatpak-builtins-ls-remote.c:49 +#: app/flatpak-builtins-make-current.c:38 app/flatpak-builtins-run.c:52 +#: app/flatpak-builtins-uninstall.c:44 app/flatpak-builtins-update.c:53 msgid "ARCH" msgstr "ARQUITECTURA" -#: app/flatpak-builtins-build-bundle.c:57 +#: app/flatpak-builtins-build-bundle.c:58 msgid "Url for repo" msgstr "Url del repositorio" -#: app/flatpak-builtins-build-bundle.c:58 +#: app/flatpak-builtins-build-bundle.c:59 msgid "Url for runtime flatpakrepo file" msgstr "Url del archivo flatpakrepo del runtime" -#: app/flatpak-builtins-build-bundle.c:59 +#: app/flatpak-builtins-build-bundle.c:60 msgid "Add GPG key from FILE (- for stdin)" msgstr "Añadir clave GPG desde ARCHIVO (- para stdin)" -#: app/flatpak-builtins-build-bundle.c:60 +#: app/flatpak-builtins-build-bundle.c:61 msgid "Export oci image instead of flatpak bundle" msgstr "Exportar imagen oci en lugar de un paquete flatpak" -#: app/flatpak-builtins-build-bundle.c:61 +#: app/flatpak-builtins-build-bundle.c:62 msgid "GPG Key ID to sign the OCI image with" msgstr "ID de la clave GPG para firmar la imagen OCI con" -#: app/flatpak-builtins-build-bundle.c:61 +#: app/flatpak-builtins-build-bundle.c:62 #: app/flatpak-builtins-build-commit-from.c:55 #: app/flatpak-builtins-build-export.c:61 #: app/flatpak-builtins-build-import-bundle.c:46 @@ -257,7 +276,7 @@ msgid "KEY-ID" msgstr "ID-CLAVE" # "Llaveros" is the literal translate of keyrings, but in spanish don't mean exactly the same in software slang. A more correct translation would be "repositorios de claves" that means "key repositories". -#: app/flatpak-builtins-build-bundle.c:62 +#: app/flatpak-builtins-build-bundle.c:63 #: app/flatpak-builtins-build-commit-from.c:56 #: app/flatpak-builtins-build-export.c:64 #: app/flatpak-builtins-build-import-bundle.c:47 @@ -267,7 +286,7 @@ msgstr "" "Directorio de origen de los archivos GPG para usar cuando se busquen " "repositorios de claves" -#: app/flatpak-builtins-build-bundle.c:62 +#: app/flatpak-builtins-build-bundle.c:63 #: app/flatpak-builtins-build-commit-from.c:56 #: app/flatpak-builtins-build-export.c:64 #: app/flatpak-builtins-build-import-bundle.c:47 @@ -275,7 +294,16 @@ msgstr "" msgid "HOMEDIR" msgstr "DIRECTORIO_DE_INICIO" -#: app/flatpak-builtins-build-bundle.c:469 +#: app/flatpak-builtins-build-bundle.c:64 +msgid "OSTree commit to create a delta bundle from" +msgstr "" + +#: app/flatpak-builtins-build-bundle.c:64 app/flatpak-builtins-info-remote.c:49 +#: app/flatpak-builtins-update.c:54 +msgid "COMMIT" +msgstr "COMMIT" + +#: app/flatpak-builtins-build-bundle.c:451 msgid "" "LOCATION FILENAME NAME [BRANCH] - Create a single file bundle from a local " "repository" @@ -283,96 +311,108 @@ msgstr "" "LOCALIZACIÓN NOMBRE_ARCHIVO NOMBRE [RAMA] - Crear un paquete único desde un " "repositorio local" -#: app/flatpak-builtins-build-bundle.c:476 +#: app/flatpak-builtins-build-bundle.c:458 msgid "LOCATION, FILENAME and NAME must be specified" msgstr "Se deben especificar LOCALIZACIÓN, NOMBRE_ARCHIVO y NOMBRE" -#: app/flatpak-builtins-build-bundle.c:494 -#: app/flatpak-builtins-build-commit-from.c:103 -#: app/flatpak-builtins-build-commit-from.c:113 +#: app/flatpak-builtins-build-bundle.c:476 +#: app/flatpak-builtins-build-commit-from.c:253 +#: app/flatpak-builtins-build-commit-from.c:263 #: app/flatpak-builtins-build-import-bundle.c:191 #, c-format msgid "'%s' is not a valid repository" msgstr "'%s' no es un repositorio válido" -#: app/flatpak-builtins-build-bundle.c:506 app/flatpak-builtins-build-sign.c:86 +#: app/flatpak-builtins-build-bundle.c:488 app/flatpak-builtins-build-sign.c:86 #, c-format msgid "'%s' is not a valid name: %s" msgstr "'%s' no es un nombre válido: %s" -#: app/flatpak-builtins-build-bundle.c:509 +#: app/flatpak-builtins-build-bundle.c:491 #: app/flatpak-builtins-build-export.c:699 app/flatpak-builtins-build-sign.c:89 #, c-format msgid "'%s' is not a valid branch name: %s" msgstr "'%s' no es un nombre válido para una rama: %s" -#: app/flatpak-builtins-build.c:46 +#: app/flatpak-builtins-build.c:49 msgid "Use Platform runtime rather than Sdk" msgstr "Usar el runtime de la plataforma en en lugar del Sdk" -#: app/flatpak-builtins-build.c:47 +#: app/flatpak-builtins-build.c:50 +msgid "Make destination readonly" +msgstr "" + +#: app/flatpak-builtins-build.c:51 msgid "Add bind mount" msgstr "Añadir punto de montaje" -#: app/flatpak-builtins-build.c:47 +#: app/flatpak-builtins-build.c:51 msgid "DEST=SRC" msgstr "DEST=ORIG" -#: app/flatpak-builtins-build.c:48 +#: app/flatpak-builtins-build.c:52 msgid "Start build in this directory" msgstr "Iniciar la compilación en este directorio" -#: app/flatpak-builtins-build.c:48 app/flatpak-builtins-build.c:49 +#: app/flatpak-builtins-build.c:52 app/flatpak-builtins-build.c:53 #: app/flatpak-builtins-build-init.c:58 msgid "DIR" msgstr "DIR" -#: app/flatpak-builtins-build.c:49 +#: app/flatpak-builtins-build.c:53 msgid "Where to look for custom sdk dir (defaults to 'usr')" msgstr "Donde buscar el directorio personalizado de SDK (Por defecto 'usr)" -#: app/flatpak-builtins-build.c:50 app/flatpak-builtins-build-export.c:60 +#: app/flatpak-builtins-build.c:54 app/flatpak-builtins-build-export.c:60 msgid "Use alternative file for the metadata" msgstr "Usar un archivo alternativo para los metadatos" -#: app/flatpak-builtins-build.c:51 +#: app/flatpak-builtins-build.c:55 msgid "Kill processes when the parent process dies" msgstr "Matar el proceso cuando el proceso padre muere" -#: app/flatpak-builtins-build.c:52 +#: app/flatpak-builtins-build.c:56 msgid "Export application homedir directory to build" msgstr "" -#: app/flatpak-builtins-build.c:139 +#: app/flatpak-builtins-build.c:57 app/flatpak-builtins-run.c:58 +msgid "Log session bus calls" +msgstr "Llamadas al bus de registro de sesión" + +#: app/flatpak-builtins-build.c:58 app/flatpak-builtins-run.c:59 +msgid "Log system bus calls" +msgstr "Llamadas al bus de registro de sistema" + +#: app/flatpak-builtins-build.c:126 msgid "DIRECTORY [COMMAND [args...]] - Build in directory" msgstr "DIRECTORIO [COMANDO [argumentos...]] - Compilar en directorio" -#: app/flatpak-builtins-build.c:162 app/flatpak-builtins-build-finish.c:533 +#: app/flatpak-builtins-build.c:149 app/flatpak-builtins-build-finish.c:533 msgid "DIRECTORY must be specified" msgstr "Se debe especificar el DIRECTORIO" -#: app/flatpak-builtins-build.c:173 app/flatpak-builtins-build-export.c:721 +#: app/flatpak-builtins-build.c:160 app/flatpak-builtins-build-export.c:721 #, c-format msgid "Build directory %s not initialized, use flatpak build-init" msgstr "" "El directorio de compilación %s no está inicializado, usa el comando flatpak " "build-init" -#: app/flatpak-builtins-build.c:192 +#: app/flatpak-builtins-build.c:179 msgid "metadata invalid, not application or runtime" msgstr "metadatos inválidos, sin aplicación o runtime" -#: app/flatpak-builtins-build.c:292 +#: app/flatpak-builtins-build.c:283 #, c-format msgid "No extension point matching %s in %s" msgstr "No hay un punto de extensión que coincida con %s en %s" -#: app/flatpak-builtins-build.c:432 +#: app/flatpak-builtins-build.c:433 #, c-format msgid "Missing '=' in bind mount option '%s'" msgstr "Falta un '=' en las opciones de punto de montaje '%s'" -#: app/flatpak-builtins-build.c:460 common/flatpak-run.c:5406 +#: app/flatpak-builtins-build.c:462 common/flatpak-run.c:3038 msgid "Unable to start app" msgstr "No se pudo iniciar la aplicación" @@ -431,38 +471,43 @@ msgstr "No actualizar el resumen" msgid "GPG Key ID to sign the commit with" msgstr "ID de la clave GPG con la que firmar el commit" -#: app/flatpak-builtins-build-commit-from.c:78 +#: app/flatpak-builtins-build-commit-from.c:228 msgid "DST-REPO [DST-REF]... - Make a new commit based on existing commit(s)" msgstr "" "REPO-DEST [REF-DEST]... - Realiza un nuevo commit basado en en los commit(s) " "existentes" -#: app/flatpak-builtins-build-commit-from.c:85 +#: app/flatpak-builtins-build-commit-from.c:235 msgid "DST-REPO must be specified" msgstr "Se debe especificar REPO-DEST" -#: app/flatpak-builtins-build-commit-from.c:93 +#: app/flatpak-builtins-build-commit-from.c:243 msgid "" "If --src-repo is not specified, exactly one destination ref must be specified" msgstr "" "Si no se especifica --src-repo, se debe especificar exactamente una " "referencia de destino" -#: app/flatpak-builtins-build-commit-from.c:96 +#: app/flatpak-builtins-build-commit-from.c:246 msgid "" "If --src-ref is specified, exactly one destination ref must be specified" msgstr "" "Si se especifica --src-ref, se debe especificar exactamente una referencia " "de destino" -#: app/flatpak-builtins-build-commit-from.c:99 +#: app/flatpak-builtins-build-commit-from.c:249 msgid "Either --src-repo or --src-ref must be specified." msgstr "Se debe especificar --src-repo o -src-ref." -#: app/flatpak-builtins-build-commit-from.c:251 +#: app/flatpak-builtins-build-commit-from.c:402 msgid "Can't commit from partial source commit." msgstr "No se puede hacer un commit a partir de otro commit parcial." +#: app/flatpak-builtins-build-commit-from.c:407 +#, c-format +msgid "%s: no change\n" +msgstr "" + #: app/flatpak-builtins-build-export.c:55 msgid "Architecture to export for (must be host compatible)" msgstr "Arquitectura en la que exportar (debe ser compatible con el anfitrión)" @@ -500,6 +545,42 @@ msgstr "Sobrescribir la marca de tiempo del commit" msgid "ISO-8601-TIMESTAMP" msgstr "ISO-8601-TIMESTAMP" +#: app/flatpak-builtins-build-export.c:341 +#, c-format +msgid "WARNING: Error running desktop-file-validate: %s\n" +msgstr "" + +#: app/flatpak-builtins-build-export.c:349 +#, c-format +msgid "WARNING: Error reading from desktop-file-validate: %s\n" +msgstr "" + +#: app/flatpak-builtins-build-export.c:355 +#, fuzzy, c-format +msgid "WARNING: Failed to validate desktop file %s: %s\n" +msgstr "Fallo al abrir un archivo temporal: %s" + +#: app/flatpak-builtins-build-export.c:370 +#, c-format +msgid "WARNING: Can't find Exec key in %s: %s\n" +msgstr "" + +#: app/flatpak-builtins-build-export.c:378 +#: app/flatpak-builtins-build-export.c:475 +#, c-format +msgid "WARNING: Binary not found for Exec line in %s: %s\n" +msgstr "" + +#: app/flatpak-builtins-build-export.c:385 +#, c-format +msgid "WARNING: Icon not matching app id in %s: %s\n" +msgstr "" + +#: app/flatpak-builtins-build-export.c:413 +#, c-format +msgid "WARNING: Icon referenced in desktop file but not exported: %s\n" +msgstr "" + #: app/flatpak-builtins-build-export.c:551 #, c-format msgid "Invalid uri type %s, only http/https supported" @@ -541,12 +622,41 @@ msgstr "Se debe especificar LOCALIZACION y DIRECTORIO" msgid "No name specified in the metadata" msgstr "No se ha especificado un nombre en los metadatos" +#: app/flatpak-builtins-build-export.c:976 +#, fuzzy, c-format +msgid "Commit: %s\n" +msgstr "Commit:" + +#: app/flatpak-builtins-build-export.c:977 +#, fuzzy, c-format +msgid "Metadata Total: %u\n" +msgstr "Metadatos:" + +#: app/flatpak-builtins-build-export.c:978 +#, fuzzy, c-format +msgid "Metadata Written: %u\n" +msgstr "Metadatos:" + +#: app/flatpak-builtins-build-export.c:979 +#, c-format +msgid "Content Total: %u\n" +msgstr "" + +#: app/flatpak-builtins-build-export.c:980 +#, c-format +msgid "Content Written: %u\n" +msgstr "" + +#: app/flatpak-builtins-build-export.c:981 +msgid "Content Bytes Written:" +msgstr "" + #: app/flatpak-builtins-build-finish.c:48 msgid "Command to set" msgstr "Comando a establecer" #: app/flatpak-builtins-build-finish.c:48 app/flatpak-builtins-run.c:53 -#: app/flatpak-main.c:159 +#: app/flatpak-main.c:166 msgid "COMMAND" msgstr "COMANDO" @@ -607,6 +717,29 @@ msgstr "Establecer la opción de metadatos genéricos" msgid "GROUP=KEY[=VALUE]" msgstr "GRUPO=CLAVE[=VALOR]" +#: app/flatpak-builtins-build-finish.c:139 +#, c-format +msgid "Not exporting %s, wrong prefix\n" +msgstr "" + +#: app/flatpak-builtins-build-finish.c:143 +#, fuzzy, c-format +msgid "Exporting %s\n" +msgstr "Actualizando %s" + +#: app/flatpak-builtins-build-finish.c:384 +msgid "More than one executable found\n" +msgstr "" + +#: app/flatpak-builtins-build-finish.c:395 +#, c-format +msgid "Using %s as command\n" +msgstr "" + +#: app/flatpak-builtins-build-finish.c:400 +msgid "No executable found\n" +msgstr "" + #: app/flatpak-builtins-build-finish.c:433 #, c-format msgid "Too few elements in --extra-data argument %s" @@ -669,6 +802,14 @@ msgstr "La referencia '%s' no se encuentra en el registro" msgid "Multiple images in registry, specify a ref with --ref" msgstr "Hay múltiples imágenes en el registro, especifica una con --ref" +#: app/flatpak-builtins-build-import-bundle.c:123 +#: app/flatpak-builtins-build-import-bundle.c:151 +#, fuzzy, c-format +msgid "Importing %s (%s)\n" +msgstr "" +"Actualizando: %s desde\n" +" %s\n" + #: app/flatpak-builtins-build-import-bundle.c:172 msgid "LOCATION FILENAME - Import a file bundle into a local repository" msgstr "LOCALIZACIÓN NOMBRE_ARCHIVO - Importa un paquete al repositorio local" @@ -677,7 +818,7 @@ msgstr "LOCALIZACIÓN NOMBRE_ARCHIVO - Importa un paquete al repositorio local" msgid "LOCATION and FILENAME must be specified" msgstr "Se debe especificar LOCALIZACIÓN y NOMBRE_ARCHIVO" -#: app/flatpak-builtins-build-init.c:49 app/flatpak-builtins-info.c:48 +#: app/flatpak-builtins-build-init.c:49 app/flatpak-builtins-info.c:51 #: app/flatpak-builtins-run.c:52 msgid "Arch to use" msgstr "Arquitectura a usar" @@ -769,7 +910,7 @@ msgid "'%s' is not a valid build type name, use app, runtime or extension" msgstr "" "'%s' no es un tipo de compilación válido, usa aplicación, runtime o extensión" -#: app/flatpak-builtins-build-init.c:205 app/flatpak-builtins-override.c:71 +#: app/flatpak-builtins-build-init.c:205 app/flatpak-builtins-override.c:74 #, c-format msgid "'%s' is not a valid application name: %s" msgstr "'%s' no es un nombre de aplicación valido: %s" @@ -779,12 +920,14 @@ msgstr "'%s' no es un nombre de aplicación valido: %s" msgid "Build directory %s already initialized" msgstr "El directorio de compilación %s ya está inicializado" -#: app/flatpak-builtins-build-sign.c:41 app/flatpak-builtins-install.c:56 +#: app/flatpak-builtins-build-sign.c:41 app/flatpak-builtins-info-remote.c:48 +#: app/flatpak-builtins-install.c:57 msgid "Arch to install for" msgstr "Arquitectura en la que instalar" -#: app/flatpak-builtins-build-sign.c:42 app/flatpak-builtins-install.c:62 -#: app/flatpak-builtins-uninstall.c:48 app/flatpak-builtins-update.c:61 +#: app/flatpak-builtins-build-sign.c:42 app/flatpak-builtins-info-remote.c:50 +#: app/flatpak-builtins-install.c:63 app/flatpak-builtins-uninstall.c:48 +#: app/flatpak-builtins-update.c:61 msgid "Look for runtime with the specified name" msgstr "Buscar un runtime con el nombre especifico" @@ -796,11 +939,49 @@ msgstr "LOCALIZACIÓN [ID [RAMA]] - Firma una aplicación o runtime" msgid "No gpg key ids specified" msgstr "No se han especificado los ids de las claves GPG" -#: app/flatpak-builtins-delete-remote.c:37 +#: app/flatpak-builtins-config.c:41 +msgid "List configuration keys and values" +msgstr "" + +#: app/flatpak-builtins-config.c:42 +msgid "Get configuration for KEY" +msgstr "" + +#: app/flatpak-builtins-config.c:43 +msgid "Set configuration for KEY to VALUE" +msgstr "" + +#: app/flatpak-builtins-config.c:44 +msgid "Unset configuration for KEY" +msgstr "" + +#: app/flatpak-builtins-config.c:95 +#, fuzzy, c-format +msgid "Unknown configure key '%s'" +msgstr "Comando desconocido '%s'" + +#: app/flatpak-builtins-config.c:144 app/flatpak-builtins-config.c:185 +#, fuzzy +msgid "You must specify key" +msgstr "Se debe especificar APLICACIÓN" + +#: app/flatpak-builtins-config.c:166 +msgid "You must specify both key and value" +msgstr "" + +#: app/flatpak-builtins-config.c:204 +msgid "[KEY [VALUE]] - Manage configuration" +msgstr "" + +#: app/flatpak-builtins-config.c:223 +msgid "Must specify one of --list, --get, --set or --unset" +msgstr "" + +#: app/flatpak-builtins-delete-remote.c:38 msgid "Remove remote even if in use" msgstr "Borrar remoto incluso si está en uso" -#: app/flatpak-builtins-delete-remote.c:49 +#: app/flatpak-builtins-delete-remote.c:51 msgid "NAME - Delete a remote repository" msgstr "NOMBRE - Borra un repositorio remoto" @@ -956,169 +1137,257 @@ msgstr "No se puede cambiar el GID" msgid "Can't switch uid" msgstr "No se puede cambiar el UID" -#: app/flatpak-builtins-info.c:49 app/flatpak-builtins-list.c:46 -#: app/flatpak-builtins-list-remotes.c:43 +#: app/flatpak-builtins-info.c:52 msgid "Show user installations" msgstr "Mostrar instalaciones del usuario" -#: app/flatpak-builtins-info.c:50 app/flatpak-builtins-list.c:47 -#: app/flatpak-builtins-list-remotes.c:44 +#: app/flatpak-builtins-info.c:53 msgid "Show system-wide installations" msgstr "Mostrar instalaciones del sistema" -#: app/flatpak-builtins-info.c:51 app/flatpak-builtins-list.c:48 -#: app/flatpak-builtins-list-remotes.c:45 +#: app/flatpak-builtins-info.c:54 msgid "Show specific system-wide installations" msgstr "Mostrar instalaciones especificas del sistema" -#: app/flatpak-builtins-info.c:52 +#: app/flatpak-builtins-info.c:55 app/flatpak-builtins-info-remote.c:53 msgid "Show ref" msgstr "Mostrar referencia" -#: app/flatpak-builtins-info.c:53 +#: app/flatpak-builtins-info.c:56 app/flatpak-builtins-info-remote.c:54 msgid "Show commit" msgstr "Mostrar commit" -#: app/flatpak-builtins-info.c:54 +#: app/flatpak-builtins-info.c:57 msgid "Show origin" msgstr "Mostrar origen" -#: app/flatpak-builtins-info.c:55 +#: app/flatpak-builtins-info.c:58 msgid "Show size" msgstr "Mostrar tamaño" -#: app/flatpak-builtins-info.c:56 +#: app/flatpak-builtins-info.c:59 app/flatpak-builtins-info-remote.c:56 msgid "Show metadata" msgstr "Mostrar metadatos" -#: app/flatpak-builtins-info.c:57 +#: app/flatpak-builtins-info.c:60 +#, fuzzy +msgid "Show permissions" +msgstr "Mostrar extensiones" + +#: app/flatpak-builtins-info.c:61 +#, fuzzy +msgid "Query file access" +msgstr "" +"\n" +" Administrar el acceso a archivos" + +#: app/flatpak-builtins-info.c:61 app/flatpak-builtins-install.c:68 +#: app/flatpak-builtins-update.c:64 +msgid "PATH" +msgstr "RUTA" + +#: app/flatpak-builtins-info.c:62 msgid "Show extensions" msgstr "Mostrar extensiones" -#: app/flatpak-builtins-info.c:97 +#: app/flatpak-builtins-info.c:118 msgid "NAME [BRANCH] - Get info about installed app and/or runtime" msgstr "" "NOMBRE [RAMA] - Obtiene información a cerca de una aplicación y/o runtime " "instalado" -#: app/flatpak-builtins-info.c:157 +#: app/flatpak-builtins-info.c:189 msgid "ref not present in origin" msgstr "referencia no presente en el origen" -#: app/flatpak-builtins-info.c:159 +#: app/flatpak-builtins-info.c:202 app/flatpak-builtins-info-remote.c:177 +msgid "Warning: Commit has no flatpak metadata\n" +msgstr "" + +#: app/flatpak-builtins-info.c:209 app/flatpak-builtins-info-remote.c:200 msgid "Ref:" msgstr "Referencia:" -#: app/flatpak-builtins-info.c:160 app/flatpak-builtins-info.c:270 +#: app/flatpak-builtins-info.c:210 app/flatpak-builtins-info.c:364 +#: app/flatpak-builtins-info-remote.c:201 msgid "ID:" msgstr "ID:" -#: app/flatpak-builtins-info.c:161 +#: app/flatpak-builtins-info.c:211 app/flatpak-builtins-info-remote.c:202 msgid "Arch:" msgstr "Arquitectura:" -#: app/flatpak-builtins-info.c:162 +#: app/flatpak-builtins-info.c:212 app/flatpak-builtins-info-remote.c:203 msgid "Branch:" msgstr "Rama:" -#: app/flatpak-builtins-info.c:163 app/flatpak-builtins-info.c:271 +#: app/flatpak-builtins-info.c:213 app/flatpak-builtins-info.c:365 msgid "Origin:" msgstr "Origen:" -#: app/flatpak-builtins-info.c:166 +#: app/flatpak-builtins-info.c:215 app/flatpak-builtins-info-remote.c:205 +#, fuzzy +msgid "Collection ID:" +msgstr "ID de colección" + +#: app/flatpak-builtins-info.c:217 app/flatpak-builtins-info-remote.c:206 +msgid "Date:" +msgstr "" + +#: app/flatpak-builtins-info.c:219 app/flatpak-builtins-info-remote.c:207 +msgid "Subject:" +msgstr "" + +#: app/flatpak-builtins-info.c:223 msgid "Active commit:" msgstr "Commit activo:" -#: app/flatpak-builtins-info.c:167 +#: app/flatpak-builtins-info.c:224 msgid "Latest commit:" msgstr "Ultimo commit:" -#: app/flatpak-builtins-info.c:170 app/flatpak-builtins-info.c:272 +#: app/flatpak-builtins-info.c:227 app/flatpak-builtins-info.c:366 +#: app/flatpak-builtins-info-remote.c:208 msgid "Commit:" msgstr "Commit:" -#: app/flatpak-builtins-info.c:172 +#: app/flatpak-builtins-info.c:229 msgid "alt-id:" msgstr "id-alternativo:" -#: app/flatpak-builtins-info.c:173 +#: app/flatpak-builtins-info.c:230 app/flatpak-builtins-info-remote.c:209 +msgid "Parent:" +msgstr "" + +#: app/flatpak-builtins-info.c:231 msgid "Location:" msgstr "Localización:" -#: app/flatpak-builtins-info.c:174 app/flatpak-builtins-info.c:273 +#: app/flatpak-builtins-info.c:232 app/flatpak-builtins-info.c:367 +#: app/flatpak-builtins-info-remote.c:211 msgid "Installed size:" msgstr "Tamaño de la instalación:" -#: app/flatpak-builtins-info.c:179 +#: app/flatpak-builtins-info.c:237 app/flatpak-builtins-info-remote.c:216 msgid "Runtime:" msgstr "Runtime:" -#: app/flatpak-builtins-info.c:184 +#: app/flatpak-builtins-info.c:242 msgid "Installed subdirectories:" msgstr "Subdirectorios de la instalación:" -#: app/flatpak-builtins-info.c:269 +#: app/flatpak-builtins-info.c:363 msgid "Extension:" msgstr "Extensión:" -#: app/flatpak-builtins-info.c:280 +#: app/flatpak-builtins-info.c:374 msgid "Subpaths:" msgstr "Subdirectorios:" -#: app/flatpak-builtins-install.c:57 -msgid "Don't pull, only install from local cache" -msgstr "No hacer pull, solo instalar del caché local" +#: app/flatpak-builtins-info-remote.c:49 +msgid "Commit to show info for" +msgstr "" -#: app/flatpak-builtins-install.c:58 app/flatpak-builtins-update.c:57 -msgid "Don't deploy, only download to local cache" -msgstr "No desplegar, solo descargar al caché local" - -#: app/flatpak-builtins-install.c:59 -msgid "Don't install related refs" -msgstr "No instalar referencias relacionadas" - -#: app/flatpak-builtins-install.c:60 app/flatpak-builtins-update.c:59 -msgid "Don't verify/install runtime dependencies" -msgstr "No verificar/instalar las dependencias de runtime" - -#: app/flatpak-builtins-install.c:61 app/flatpak-builtins-update.c:60 -msgid "Don't use static deltas" -msgstr "No usar deltas estáticos" - -#: app/flatpak-builtins-install.c:63 app/flatpak-builtins-uninstall.c:49 -#: app/flatpak-builtins-update.c:62 +#: app/flatpak-builtins-info-remote.c:51 app/flatpak-builtins-install.c:64 +#: app/flatpak-builtins-uninstall.c:49 app/flatpak-builtins-update.c:62 msgid "Look for app with the specified name" msgstr "Buscar una aplicación con el nombre especifico" -#: app/flatpak-builtins-install.c:64 +#: app/flatpak-builtins-info-remote.c:52 +msgid "Display log" +msgstr "" + +#: app/flatpak-builtins-info-remote.c:55 +#, fuzzy +msgid "Show parent" +msgstr "Mostrar referencia" + +#: app/flatpak-builtins-info-remote.c:122 +msgid "" +" REMOTE REF - Show information about an application or runtime in a remote" +msgstr "" + +#: app/flatpak-builtins-info-remote.c:133 app/flatpak-builtins-install.c:499 +msgid "REMOTE and REF must be specified" +msgstr "Se debe especificar REMOTO y REFERENCIA" + +#: app/flatpak-builtins-info-remote.c:210 +#, fuzzy +msgid "Download size:" +msgstr "Tamaño de la descarga" + +#: app/flatpak-builtins-info-remote.c:223 +msgid "History:\n" +msgstr "" + +#: app/flatpak-builtins-info-remote.c:244 +msgid " Subject:" +msgstr "" + +#: app/flatpak-builtins-info-remote.c:245 +msgid " Date:" +msgstr "" + +#: app/flatpak-builtins-info-remote.c:246 +#, fuzzy +msgid " Commit:" +msgstr "Commit:" + +#: app/flatpak-builtins-info-remote.c:292 +#, c-format +msgid "Warning: Commit %s has no flatpak metadata\n" +msgstr "" + +#: app/flatpak-builtins-install.c:58 +msgid "Don't pull, only install from local cache" +msgstr "No hacer pull, solo instalar del caché local" + +#: app/flatpak-builtins-install.c:59 app/flatpak-builtins-update.c:57 +msgid "Don't deploy, only download to local cache" +msgstr "No desplegar, solo descargar al caché local" + +#: app/flatpak-builtins-install.c:60 +msgid "Don't install related refs" +msgstr "No instalar referencias relacionadas" + +#: app/flatpak-builtins-install.c:61 app/flatpak-builtins-update.c:59 +msgid "Don't verify/install runtime dependencies" +msgstr "No verificar/instalar las dependencias de runtime" + +#: app/flatpak-builtins-install.c:62 app/flatpak-builtins-update.c:60 +msgid "Don't use static deltas" +msgstr "No usar deltas estáticos" + +#: app/flatpak-builtins-install.c:65 msgid "Assume LOCATION is a .flatpak single-file bundle" msgstr "Asumir que LOCALIZACIÓN es un paquete .flatpak de un solo archivo." -#: app/flatpak-builtins-install.c:65 +#: app/flatpak-builtins-install.c:66 msgid "Assume LOCATION is a .flatpakref application description" msgstr "" "Asumir que LOCALIZACIÓN es un paquete de descripción de aplicación ." "flatpakref" -#: app/flatpak-builtins-install.c:66 +#: app/flatpak-builtins-install.c:67 msgid "Check bundle signatures with GPG key from FILE (- for stdin)" msgstr "" "Comprobar las firmas del paquete con las claves GPG del ARCHIVO (- para " "stdin)" -#: app/flatpak-builtins-install.c:67 +#: app/flatpak-builtins-install.c:68 msgid "Only install this subpath" msgstr "Solo instalar este subdirectorio" -#: app/flatpak-builtins-install.c:67 app/flatpak-builtins-update.c:64 -msgid "PATH" -msgstr "RUTA" - -#: app/flatpak-builtins-install.c:68 app/flatpak-builtins-update.c:65 +#: app/flatpak-builtins-install.c:69 app/flatpak-builtins-update.c:65 msgid "Automatically answer yes for all questions" msgstr "Responder si automáticamente a todas las preguntas" -#: app/flatpak-builtins-install.c:210 +#: app/flatpak-builtins-install.c:70 +#, fuzzy +msgid "Uninstall first if already installed" +msgstr "%s commit %s ya está instalado" + +#: app/flatpak-builtins-install.c:212 #, c-format msgid "" "This application depends on runtimes from:\n" @@ -1129,154 +1398,151 @@ msgstr "" " %s\n" "Configura esto como un nuevo repositorio remoto '%s'" -#: app/flatpak-builtins-install.c:214 app/flatpak-builtins-install.c:340 +#: app/flatpak-builtins-install.c:216 app/flatpak-builtins-install.c:342 #, c-format msgid "Configuring %s as new remote '%s'" msgstr "Configurando %s como un nuevo repositorio remoto '%s'" -#: app/flatpak-builtins-install.c:262 +#: app/flatpak-builtins-install.c:264 msgid "Bundle filename must be specified" msgstr "Se debe especificar el nombre de archivo del paquete" -#: app/flatpak-builtins-install.c:272 +#: app/flatpak-builtins-install.c:274 msgid "Remote bundles are not supported" msgstr "Los paquetes remotos no están soportados" -#: app/flatpak-builtins-install.c:336 -#, c-format +#: app/flatpak-builtins-install.c:338 +#, fuzzy, c-format msgid "" "The remote '%s', at location %s contains additional applications.\n" -"Do you want to install other applications from here?" +"Should the remote be kept for future installations?" msgstr "" "El repositorio remoto '%s', en la localización %s contiene aplicaciones " "adicionales.\n" "¿Quieres instalar otras aplicaciones desde aquí?" -#: app/flatpak-builtins-install.c:396 +#: app/flatpak-builtins-install.c:398 msgid "Filename or uri must be specified" msgstr "Se debe especificar el nombre de archivo o el uri" -#: app/flatpak-builtins-install.c:440 +#: app/flatpak-builtins-install.c:442 #, c-format msgid "Installing: %s\n" msgstr "Instalando: %s\n" -#: app/flatpak-builtins-install.c:470 +#: app/flatpak-builtins-install.c:474 msgid "LOCATION/REMOTE [REF...] - Install applications or runtimes" msgstr "" "LOCALIZACION/REMOTO [REFERENCIA ...] - Instala aplicaciones o tiempos de " "ejecución" -#: app/flatpak-builtins-install.c:491 -msgid "REMOTE and REF must be specified" -msgstr "Se debe especificar REMOTO y REFERENCIA" - -#: app/flatpak-builtins-list.c:49 +#: app/flatpak-builtins-list.c:43 msgid "Show extra information" msgstr "Mostrar información adicional" -#: app/flatpak-builtins-list.c:50 +#: app/flatpak-builtins-list.c:44 msgid "List installed runtimes" msgstr "Mostrar lista con los tiempos de ejecución instalados" -#: app/flatpak-builtins-list.c:51 +#: app/flatpak-builtins-list.c:45 msgid "List installed applications" msgstr "Mostrar lista con las aplicaciones instaladas" -#: app/flatpak-builtins-list.c:52 +#: app/flatpak-builtins-list.c:46 msgid "Arch to show" msgstr "Arquitectura a mostrar" -#: app/flatpak-builtins-list.c:53 app/flatpak-builtins-ls-remote.c:49 +#: app/flatpak-builtins-list.c:47 app/flatpak-builtins-ls-remote.c:50 msgid "List all refs (including locale/debug)" msgstr "Mostrar todas las referencias (incluyendo locales/depuración)" -#: app/flatpak-builtins-list.c:131 app/flatpak-builtins-ls-remote.c:129 +#: app/flatpak-builtins-list.c:125 app/flatpak-builtins-ls-remote.c:174 #: app/flatpak-builtins-repo.c:98 msgid "Ref" msgstr "Referencia" -#: app/flatpak-builtins-list.c:134 app/flatpak-builtins-ls-remote.c:131 +#: app/flatpak-builtins-list.c:128 app/flatpak-builtins-ls-remote.c:176 msgid "Origin" msgstr "Origen" -#: app/flatpak-builtins-list.c:135 +#: app/flatpak-builtins-list.c:129 msgid "Active commit" msgstr "Commit activo" -#: app/flatpak-builtins-list.c:136 +#: app/flatpak-builtins-list.c:130 msgid "Latest commit" msgstr "Último commit" -#: app/flatpak-builtins-list.c:137 app/flatpak-builtins-ls-remote.c:133 +#: app/flatpak-builtins-list.c:131 app/flatpak-builtins-ls-remote.c:178 msgid "Installed size" msgstr "Tamaño de la instalación" -#: app/flatpak-builtins-list.c:139 app/flatpak-builtins-list-remotes.c:112 +#: app/flatpak-builtins-list.c:133 app/flatpak-builtins-list-remotes.c:73 msgid "Options" msgstr "Opciones" -#: app/flatpak-builtins-list.c:375 +#: app/flatpak-builtins-list.c:305 msgid " - List installed apps and/or runtimes" msgstr " - Mostrar lista de aplicaciones y/o tiempos de ejecución instalados" -#: app/flatpak-builtins-list-remotes.c:46 +#: app/flatpak-builtins-list-remotes.c:40 msgid "Show remote details" msgstr "Mostrar detalles del repositorio remoto" -#: app/flatpak-builtins-list-remotes.c:47 +#: app/flatpak-builtins-list-remotes.c:41 msgid "Show disabled remotes" msgstr "Mostrar repositorios remotos desactivados" -#: app/flatpak-builtins-list-remotes.c:59 +#: app/flatpak-builtins-list-remotes.c:53 msgid " - List remote repositories" msgstr " - Mostrar lista de repositorios remotos" -#: app/flatpak-builtins-list-remotes.c:105 +#: app/flatpak-builtins-list-remotes.c:66 msgid "Name" msgstr "Nombre" -#: app/flatpak-builtins-list-remotes.c:108 +#: app/flatpak-builtins-list-remotes.c:69 msgid "Title" msgstr "Título" -#: app/flatpak-builtins-list-remotes.c:110 +#: app/flatpak-builtins-list-remotes.c:71 msgid "Priority" msgstr "Prioridad" -#: app/flatpak-builtins-ls-remote.c:44 +#: app/flatpak-builtins-ls-remote.c:45 msgid "Show arches and branches" msgstr "Mostrar arquitecturas y ramas" -#: app/flatpak-builtins-ls-remote.c:45 +#: app/flatpak-builtins-ls-remote.c:46 msgid "Show only runtimes" msgstr "Mostrar solo tiempos de ejecución" -#: app/flatpak-builtins-ls-remote.c:46 +#: app/flatpak-builtins-ls-remote.c:47 msgid "Show only apps" msgstr "Mostrar solo aplicaciones" -#: app/flatpak-builtins-ls-remote.c:47 +#: app/flatpak-builtins-ls-remote.c:48 msgid "Show only those where updates are available" msgstr "Mostrar solo elementos si hay actualizaciones disponibles" -#: app/flatpak-builtins-ls-remote.c:48 +#: app/flatpak-builtins-ls-remote.c:49 msgid "Limit to this arch (* for all)" msgstr "Limitar a esta arquitectura (* para mostrar todas)" -#: app/flatpak-builtins-ls-remote.c:74 -msgid " REMOTE - Show available runtimes and applications" +#: app/flatpak-builtins-ls-remote.c:96 +#, fuzzy +msgid " [REMOTE] - Show available runtimes and applications" msgstr "REMOTO - Mostrar tiempos de ejecución y aplicaciones disponibles" -#: app/flatpak-builtins-ls-remote.c:132 +#: app/flatpak-builtins-ls-remote.c:177 msgid "Commit" msgstr "Commit" -#: app/flatpak-builtins-ls-remote.c:134 +#: app/flatpak-builtins-ls-remote.c:179 msgid "Download size" msgstr "Tamaño de la descarga" -#: app/flatpak-builtins-ls-remote.c:245 +#: app/flatpak-builtins-ls-remote.c:304 msgid "No ref information available in repository" msgstr "Información de referencia no disponible en el repositorio" @@ -1284,28 +1550,63 @@ msgstr "Información de referencia no disponible en el repositorio" msgid "Arch to make current for" msgstr "Arquitectura para construir el actual" -#: app/flatpak-builtins-make-current.c:57 +#: app/flatpak-builtins-make-current.c:58 msgid "APP BRANCH - Make branch of application current" msgstr "APLICACIÓN RAMA - Establece la rama de la aplicación a usar" -#: app/flatpak-builtins-make-current.c:64 app/flatpak-builtins-override.c:63 -#: app/flatpak-builtins-run.c:105 +#: app/flatpak-builtins-make-current.c:69 app/flatpak-builtins-run.c:105 msgid "APP must be specified" msgstr "Se debe especificar APLICACIÓN" -#: app/flatpak-builtins-make-current.c:79 +#: app/flatpak-builtins-make-current.c:84 msgid "BRANCH must be specified" msgstr "Se debe especificar RAMA" -#: app/flatpak-builtins-make-current.c:92 +#: app/flatpak-builtins-make-current.c:97 #, c-format msgid "App %s branch %s is not installed" msgstr "La aplicación %s rama %s no está instalada" -#: app/flatpak-builtins-override.c:53 -msgid "APP - Override settings for application" +#: app/flatpak-builtins-override.c:54 +#, fuzzy +msgid "[APP] - Override settings [for application]" msgstr "APLICACIÓN - Sobrescribe la configuración de la aplicación" +#: app/flatpak-builtins-repo.c:48 +#, fuzzy, c-format +msgid "Title: %s\n" +msgstr "Título" + +#: app/flatpak-builtins-repo.c:51 +#, fuzzy, c-format +msgid "Collection ID: %s\n" +msgstr "ID de colección" + +#: app/flatpak-builtins-repo.c:54 +#, c-format +msgid "Default branch: %s\n" +msgstr "" + +#: app/flatpak-builtins-repo.c:57 +#, c-format +msgid "Redirect URL: %s\n" +msgstr "" + +#: app/flatpak-builtins-repo.c:60 +#, fuzzy, c-format +msgid "Redirect collection ID: %s\n" +msgstr "ID de colección" + +#: app/flatpak-builtins-repo.c:68 +#, c-format +msgid "GPG key hash: %s\n" +msgstr "" + +#: app/flatpak-builtins-repo.c:77 +#, c-format +msgid "%zd branches\n" +msgstr "" + #: app/flatpak-builtins-repo.c:99 msgid "Installed" msgstr "Instalada" @@ -1326,7 +1627,7 @@ msgstr "Mostrar una lista de las ramas en el repositorio" msgid "Print metadata for a branch" msgstr "Imprime los metadatos de una rama" -#: app/flatpak-builtins-repo.c:167 +#: app/flatpak-builtins-repo.c:168 msgid "LOCATION - Repository maintenance" msgstr "LOCALIZACIÓN - Mantenimiento del repositorio" @@ -1442,14 +1743,6 @@ msgstr "Tiempo de ejecución a usar" msgid "Runtime version to use" msgstr "Versión de tiempo de ejecución a usar" -#: app/flatpak-builtins-run.c:58 -msgid "Log session bus calls" -msgstr "Llamadas al bus de registro de sesión" - -#: app/flatpak-builtins-run.c:59 -msgid "Log system bus calls" -msgstr "Llamadas al bus de registro de sistema" - #: app/flatpak-builtins-run.c:60 msgid "Log accessibility bus calls" msgstr "Llamadas al bus de registro de accesibilidad" @@ -1462,6 +1755,44 @@ msgstr "Habilitar el reenvío de archivos" msgid "APP [args...] - Run an app" msgstr "APLICACION [argumentos...] - Ejecuta una aplicación" +#: app/flatpak-builtins-search.c:239 +msgid "TEXT - Search remote apps/runtimes for text" +msgstr "" + +#: app/flatpak-builtins-search.c:249 +#, fuzzy +msgid "TEXT must be specified" +msgstr "Se debe especificar REMOTO" + +#: app/flatpak-builtins-search.c:305 +#, fuzzy +msgid "Application ID" +msgstr "ID de colección" + +#: app/flatpak-builtins-search.c:306 +msgid "Version" +msgstr "" + +#: app/flatpak-builtins-search.c:308 +#, fuzzy +msgid "Branch" +msgstr "Rama:" + +#: app/flatpak-builtins-search.c:310 +#, fuzzy +msgid "Remotes" +msgstr "Sin remoto %s" + +#: app/flatpak-builtins-search.c:311 +#, fuzzy +msgid "Description" +msgstr "Descripción completa" + +#: app/flatpak-builtins-search.c:320 +#, fuzzy +msgid "No matches found" +msgstr "Ninguna coincidencia %s" + #: app/flatpak-builtins-uninstall.c:44 msgid "Arch to uninstall" msgstr "Arquitectura a desinstalar" @@ -1478,19 +1809,24 @@ msgstr "No desinstalar referencias relacionadas" msgid "Remove files even if running" msgstr "Borrar archivos aún si se encuentra en ejecución" -#: app/flatpak-builtins-uninstall.c:69 +#: app/flatpak-builtins-uninstall.c:70 msgid "REF... - Uninstall an application" msgstr "REFERENCIA ... - Desinstala una aplicación" -#: app/flatpak-builtins-uninstall.c:76 +#: app/flatpak-builtins-uninstall.c:81 msgid "Must specify at least one REF" msgstr "Se debe especificar al menos una REFERENCIA" -#: app/flatpak-builtins-uninstall.c:129 app/flatpak-transaction.c:340 +#: app/flatpak-builtins-uninstall.c:134 app/flatpak-transaction.c:355 #, c-format msgid "Warning: Problem looking for related refs: %s\n" msgstr "Aviso: Problema al buscar referencias relacionadas: %s\n" +#: app/flatpak-builtins-uninstall.c:164 +#, fuzzy, c-format +msgid "Uninstalling: %s\n" +msgstr "Instalando: %s\n" + #: app/flatpak-builtins-update.c:53 msgid "Arch to update for" msgstr "Arquitectura a actualizar" @@ -1499,10 +1835,6 @@ msgstr "Arquitectura a actualizar" msgid "Commit to deploy" msgstr "Commit a desplegar" -#: app/flatpak-builtins-update.c:54 -msgid "COMMIT" -msgstr "COMMIT" - #: app/flatpak-builtins-update.c:55 msgid "Remove old files even if running" msgstr "Borrar archivos antiguos aún si se encuentra en ejecución" @@ -1523,43 +1855,95 @@ msgstr "Actualizar appstream para un repositorio remoto" msgid "Only update this subpath" msgstr "Solo actualizar este subdirectorio" -#: app/flatpak-builtins-update.c:95 -#, c-format -msgid "Updating appstream for remote %s\n" -msgstr "Actualizando appstream para el repositorio remoto %s\n" - -#: app/flatpak-builtins-update.c:133 +#: app/flatpak-builtins-update.c:83 msgid "[REF...] - Update applications or runtimes" msgstr "[REFERENCIA ...] - Actualiza aplicaciones y tiempos de ejecución" +#: app/flatpak-builtins-update.c:119 +#, fuzzy +msgid "Looking for updates...\n" +msgstr "Sin actualizaciones.\n" + +#: app/flatpak-builtins-utils.c:365 +#, c-format +msgid "Remote ‘%s’ found in multiple installations:\n" +msgstr "" + +#: app/flatpak-builtins-utils.c:372 +#, fuzzy +msgid "Which do you want to use (0 to abort)?" +msgstr "¿Cual quieres instalar (0 para abortar)?" + +#: app/flatpak-builtins-utils.c:374 +#, c-format +msgid "No remote chosen to resolve ‘%s’ which exists in multiple installations" +msgstr "" + +#: app/flatpak-builtins-utils.c:479 app/flatpak-builtins-utils.c:481 +#, fuzzy, c-format +msgid "Updating appstream data for user remote %s\n" +msgstr "Actualizando appstream para el repositorio remoto %s\n" + +#: app/flatpak-builtins-utils.c:486 app/flatpak-builtins-utils.c:488 +#, fuzzy, c-format +msgid "Updating appstream data for remote %s\n" +msgstr "Actualizando appstream para el repositorio remoto %s\n" + +#: app/flatpak-builtins-utils.c:493 +#, fuzzy, c-format +msgid "Error updating: %s\n" +msgstr "Actualizando %s" + +#: app/flatpak-builtins-utils.c:526 +#, c-format +msgid "Remote \"%s\" not found" +msgstr "" + #. translators: please keep the leading space -#: app/flatpak-main.c:61 +#: app/flatpak-main.c:62 msgid " Manage installed apps and runtimes" msgstr " Administra las aplicaciones y tiempos de ejecución instalados" -#: app/flatpak-main.c:62 +#: app/flatpak-main.c:63 msgid "Install an application or runtime" msgstr "Instalar una aplicación o tiempo de ejecución" -#: app/flatpak-main.c:63 +#: app/flatpak-main.c:64 msgid "Update an installed application or runtime" msgstr "Actualizar una aplicación o tiempo de ejecución" -#: app/flatpak-main.c:64 +#: app/flatpak-main.c:65 msgid "Uninstall an installed application or runtime" msgstr "Desinstalar una aplicación o tiempo de ejecución instalado" -#: app/flatpak-main.c:65 +#: app/flatpak-main.c:66 msgid "List installed apps and/or runtimes" msgstr "Mostrar lista de aplicaciones y/o tiempos de ejecución instalados" -#: app/flatpak-main.c:66 +#: app/flatpak-main.c:67 msgid "Show info for installed app or runtime" msgstr "" "Mostrar información de las aplicaciones o tiempos de ejecución instalados" +#: app/flatpak-main.c:68 +#, fuzzy +msgid "Configure flatpak" +msgstr "Configurar Repositorio Remoto" + #. translators: please keep the leading newline and space -#: app/flatpak-main.c:69 +#: app/flatpak-main.c:71 +#, fuzzy +msgid "" +"\n" +" Finding applications and runtimes" +msgstr "Firmar una aplicación o runtime" + +#: app/flatpak-main.c:72 +msgid "Search for remote apps/runtimes" +msgstr "" + +#. translators: please keep the leading newline and space +#: app/flatpak-main.c:75 msgid "" "\n" " Running applications" @@ -1567,24 +1951,24 @@ msgstr "" "\n" " Aplicaciones en ejecución" -#: app/flatpak-main.c:70 +#: app/flatpak-main.c:76 msgid "Run an application" msgstr "Ejecutar una aplicación" -#: app/flatpak-main.c:71 +#: app/flatpak-main.c:77 msgid "Override permissions for an application" msgstr "Sobrescribir permisos para una aplicación" -#: app/flatpak-main.c:72 +#: app/flatpak-main.c:78 msgid "Specify default version to run" msgstr "Especificar la versión por defecto a ejecutar" -#: app/flatpak-main.c:73 +#: app/flatpak-main.c:79 msgid "Enter the namespace of a running application" msgstr "Introduce el espacio de nombres de una aplicación en ejecución" #. translators: please keep the leading newline and space -#: app/flatpak-main.c:76 +#: app/flatpak-main.c:82 msgid "" "\n" " Manage file access" @@ -1592,24 +1976,24 @@ msgstr "" "\n" " Administrar el acceso a archivos" -#: app/flatpak-main.c:77 +#: app/flatpak-main.c:83 msgid "Grant an application access to a specific file" msgstr "Conceder a una aplicación acceso a un archivo específico" -#: app/flatpak-main.c:78 +#: app/flatpak-main.c:84 msgid "Revoke access to a specific file" msgstr "Revocar acceso a un archivo específico" -#: app/flatpak-main.c:79 +#: app/flatpak-main.c:85 msgid "Show information about a specific file" msgstr "Mostrar información sobre un archivo específico" -#: app/flatpak-main.c:80 +#: app/flatpak-main.c:86 msgid "List exported files" msgstr "Mostrar una lista de los archivos exportados" #. translators: please keep the leading newline and space -#: app/flatpak-main.c:83 +#: app/flatpak-main.c:89 msgid "" "\n" " Manage remote repositories" @@ -1617,29 +2001,35 @@ msgstr "" "\n" " Administrar repositorios remotos" -#: app/flatpak-main.c:84 +#: app/flatpak-main.c:90 msgid "List all configured remotes" msgstr "Obtener lista de todos los repositorios remotos configurados" -#: app/flatpak-main.c:85 +#: app/flatpak-main.c:91 msgid "Add a new remote repository (by URL)" msgstr "Añadir un nuevo repositorio (por URL)" -#: app/flatpak-main.c:86 +#: app/flatpak-main.c:92 msgid "Modify properties of a configured remote" msgstr "Modificar las propiedades de un repositorio remoto configurado" -#: app/flatpak-main.c:87 +#: app/flatpak-main.c:93 msgid "Delete a configured remote" msgstr "Borrar un repositorio remoto configurado" -#: app/flatpak-main.c:89 +#: app/flatpak-main.c:95 msgid "List contents of a configured remote" msgstr "" "Obtener una lista de los contenidos de un repositorio remoto configurado" +#: app/flatpak-main.c:96 +#, fuzzy +msgid "Show information about a remote app or runtime" +msgstr "" +"Mostrar información de las aplicaciones o tiempos de ejecución instalados" + #. translators: please keep the leading newline and space -#: app/flatpak-main.c:92 +#: app/flatpak-main.c:99 msgid "" "\n" " Build applications" @@ -1647,518 +2037,296 @@ msgstr "" "\n" "Compilar aplicaciones" -#: app/flatpak-main.c:93 +#: app/flatpak-main.c:100 msgid "Initialize a directory for building" msgstr "Inicializar un directorio para compilar" -#: app/flatpak-main.c:94 +#: app/flatpak-main.c:101 msgid "Run a build command inside the build dir" msgstr "" "Ejecutar un comando de compilación dentro del directorio de compilación" -#: app/flatpak-main.c:95 +#: app/flatpak-main.c:102 msgid "Finish a build dir for export" msgstr "Finalizar un directorio de compilación para exportar" -#: app/flatpak-main.c:96 +#: app/flatpak-main.c:103 msgid "Export a build dir to a repository" msgstr "Exportar un directorio de compilación a un repositorio" -#: app/flatpak-main.c:97 -msgid "Create a bundle file from a build directory" +#: app/flatpak-main.c:104 +#, fuzzy +msgid "Create a bundle file from a ref in a local repository" msgstr "Crear un paquete desde un directorio de compilación" -#: app/flatpak-main.c:98 +#: app/flatpak-main.c:105 msgid "Import a bundle file" msgstr "Importar un archivo de paquete" -#: app/flatpak-main.c:99 +#: app/flatpak-main.c:106 msgid "Sign an application or runtime" msgstr "Firmar una aplicación o runtime" -#: app/flatpak-main.c:100 +#: app/flatpak-main.c:107 msgid "Update the summary file in a repository" msgstr "Actualizar el archivo de resumen en un repositorio" -#: app/flatpak-main.c:101 +#: app/flatpak-main.c:108 msgid "Create new commit based on existing ref" msgstr "Crear un nuevo commit basado un en una referencia existente" -#: app/flatpak-main.c:102 +#: app/flatpak-main.c:109 msgid "Print information about a repo" msgstr "Imprimir información acerca de un repositorio" -#: app/flatpak-main.c:119 +#: app/flatpak-main.c:126 #, fuzzy msgid "Print debug information during command processing, -vv for more detail" msgstr "Imprimir información de depuración durante el procesado del comando" -#: app/flatpak-main.c:120 +#: app/flatpak-main.c:127 msgid "Print OSTree debug information during command processing" msgstr "" "Imprimir información de depuración de OSTree durante el procesado del comando" -#: app/flatpak-main.c:121 +#: app/flatpak-main.c:128 msgid "Show help options" msgstr "Mostrar las opciones de ayuda" -#: app/flatpak-main.c:126 +#: app/flatpak-main.c:133 msgid "Print version information and exit" msgstr "Imprimir la información de la versión y salir" -#: app/flatpak-main.c:127 +#: app/flatpak-main.c:134 msgid "Print default arch and exit" msgstr "Imprimir la arquitectura por defecto y salir" -#: app/flatpak-main.c:128 +#: app/flatpak-main.c:135 msgid "Print supported arches and exit" msgstr "Imprimir las arquitecturas soportadas y salir" -#: app/flatpak-main.c:129 +#: app/flatpak-main.c:136 msgid "Print active gl drivers and exit" msgstr "Imprimir los drivers gl activos y salir" -#: app/flatpak-main.c:134 +#: app/flatpak-main.c:141 msgid "Work on user installations" msgstr "" "Trabajar con instalaciones de\n" " usuario" -#: app/flatpak-main.c:135 +#: app/flatpak-main.c:142 msgid "Work on system-wide installations (default)" msgstr "Trabajar con ins" -#: app/flatpak-main.c:136 -msgid "Work on a specific system-wide installation" +#: app/flatpak-main.c:143 +#, fuzzy +msgid "Work on specific system-wide installation(s)" msgstr "Trabajar con instalaciones especificas del sistema" -#: app/flatpak-main.c:136 +#: app/flatpak-main.c:143 msgid "NAME" msgstr "NOMBRE" -#: app/flatpak-main.c:162 +#: app/flatpak-main.c:169 msgid "Builtin Commands:" msgstr "Comandos Incorporados:" -#: app/flatpak-main.c:388 +#: app/flatpak-main.c:370 +msgid "" +"The --installation option was used multiple times for a command that works " +"on one installation" +msgstr "" + +#: app/flatpak-main.c:489 #, c-format msgid "Unknown command '%s'" msgstr "Comando desconocido '%s'" -#: app/flatpak-main.c:396 +#: app/flatpak-main.c:497 msgid "No command specified" msgstr "Comando no especificado" -#: app/flatpak-main.c:514 +#: app/flatpak-main.c:615 msgid "error:" msgstr "error:" -#: app/flatpak-transaction.c:302 +#: app/flatpak-transaction.c:313 +#, fuzzy, c-format +msgid "Found in remote %s\n" +msgstr "Encontrado en varios repositorios remotos:\n" + +#: app/flatpak-transaction.c:317 #, c-format msgid "Found in remote %s, do you want to install it?" msgstr "%s encontrado en repositorio remoto, quieres instalarlo?" -#: app/flatpak-transaction.c:307 +#: app/flatpak-transaction.c:322 msgid "Found in several remotes:\n" msgstr "Encontrado en varios repositorios remotos:\n" -#: app/flatpak-transaction.c:312 +#: app/flatpak-transaction.c:327 msgid "Which do you want to install (0 to abort)?" msgstr "¿Cual quieres instalar (0 para abortar)?" -#: app/flatpak-transaction.c:402 +#: app/flatpak-transaction.c:417 #, c-format msgid "Required runtime for %s (%s) is not installed, searching...\n" msgstr "" "Se requiere un tiempo de ejecución para %s (%s) que no está instalado, " "buscando...\n" -#: app/flatpak-transaction.c:408 +#: app/flatpak-transaction.c:423 #, c-format msgid "The required runtime %s was not found in a configured remote.\n" msgstr "" "El tiempo de ejecución %s requerido no se ha podido encontrar en un " "repositorio remoto de entre los configurados.\n" -#: app/flatpak-transaction.c:469 common/flatpak-dir.c:1127 -#: common/flatpak-dir.c:1433 common/flatpak-dir.c:1456 -#: common/flatpak-dir.c:1478 common/flatpak-dir.c:10136 -#: common/flatpak-utils.c:1272 common/flatpak-utils.c:1366 +#: app/flatpak-transaction.c:506 common/flatpak-dir.c:1160 +#: common/flatpak-dir.c:1479 common/flatpak-dir.c:1502 +#: common/flatpak-dir.c:1524 common/flatpak-dir.c:10655 +#: common/flatpak-utils.c:1312 common/flatpak-utils.c:1406 #, c-format msgid "%s not installed" msgstr "%s no está instalado" -#: app/flatpak-transaction.c:475 +#: app/flatpak-transaction.c:512 #, c-format msgid "Remote %s disabled, ignoring %s update" msgstr "" "El repositorio remoto %s está deshabilitado, ignorando la actualización %s" -#: app/flatpak-transaction.c:485 +#: app/flatpak-transaction.c:525 #, c-format msgid "%s already installed, skipping\n" msgstr "%s ya está instalado, ignorando\n" -#: app/flatpak-transaction.c:529 +#: app/flatpak-transaction.c:531 +#, fuzzy, c-format +msgid "%s is already installed from other remote (%s)" +msgstr "%s commit %s ya está instalado" + +#: app/flatpak-transaction.c:543 +#, c-format +msgid "Warning: Can't find dependencies: %s\n" +msgstr "" + +#: app/flatpak-transaction.c:570 +#, c-format +msgid "Invalid require-flatpak argument %s\n" +msgstr "" + +#: app/flatpak-transaction.c:576 #, c-format msgid "%s needs a later flatpak version (%s)" msgstr "%s necesita una versión de flatpak superior (%s)" -#: app/flatpak-transaction.c:704 +#: app/flatpak-transaction.c:688 +#, fuzzy, c-format +msgid "Error updating remote metadata for '%s': %s\n" +msgstr "Error al actualizar los metados adicionales para '%s': %s\n" + +#: app/flatpak-transaction.c:744 msgid "install" msgstr "instalar" -#: app/flatpak-transaction.c:705 +#: app/flatpak-transaction.c:746 +#, fuzzy, c-format +msgid "Installing for user: %s from %s\n" +msgstr "Instalando: %s desde %s\n" + +#: app/flatpak-transaction.c:748 #, c-format msgid "Installing: %s from %s\n" msgstr "Instalando: %s desde %s\n" -#: app/flatpak-transaction.c:721 +#: app/flatpak-transaction.c:765 msgid "update" msgstr "actualizar" -#: app/flatpak-transaction.c:729 +#: app/flatpak-transaction.c:774 +#, fuzzy, c-format +msgid "Updating for user: %s from %s\n" +msgstr "" +"Actualizando: %s desde\n" +" %s\n" + +#: app/flatpak-transaction.c:776 #, c-format msgid "Updating: %s from %s\n" msgstr "" "Actualizando: %s desde\n" " %s\n" -#: app/flatpak-transaction.c:749 +#: app/flatpak-transaction.c:796 #, c-format msgid "Now at %s.\n" msgstr "Ahora a las %s.\n" -#: app/flatpak-transaction.c:755 +#: app/flatpak-transaction.c:802 msgid "No updates.\n" msgstr "Sin actualizaciones.\n" -#: app/flatpak-transaction.c:773 +#: app/flatpak-transaction.c:820 msgid "install bundle" msgstr "instalar paquete" -#: app/flatpak-transaction.c:774 +#: app/flatpak-transaction.c:822 +#, fuzzy, c-format +msgid "Installing for user: %s from bundle %s\n" +msgstr "Instalando: %s desde el paquete %s\n" + +#: app/flatpak-transaction.c:824 #, c-format msgid "Installing: %s from bundle %s\n" msgstr "Instalando: %s desde el paquete %s\n" -#: app/flatpak-transaction.c:786 +#: app/flatpak-transaction.c:836 #, c-format msgid "Warning: Failed to %s %s: %s\n" msgstr "Aviso: Fallo al %s %s: %s\n" -#: app/flatpak-transaction.c:791 +#: app/flatpak-transaction.c:841 #, c-format msgid "Error: Failed to %s %s: %s\n" msgstr "Error: Fallo al %s %s: %s\n" -#: app/flatpak-transaction.c:796 +#: app/flatpak-transaction.c:846 msgid "One or more operations failed" msgstr "Han fallado una o más operaciones" -#: common/flatpak-dir.c:1015 -#, c-format -msgid "No overrides found for %s" -msgstr "No se han encontrado anulaciones para %s" - -#: common/flatpak-dir.c:1611 -#, c-format -msgid "While opening repository %s: " -msgstr "Mientras se abría el repositorio %s: " - -#: common/flatpak-dir.c:1770 common/flatpak-dir.c:5109 -msgid "Can't create deploy directory" -msgstr "No se puede crear el directorio de despliegue" - -#: common/flatpak-dir.c:2450 -#, c-format -msgid "Invalid sha256 for extra data uri %s" -msgstr "" -"Suma de verificación sha256 inválida para los datos adicionales de la uri %s" - -#: common/flatpak-dir.c:2455 -#, c-format -msgid "Empty name for extra data uri %s" -msgstr "Nombre vacío para los datos adicionales de la uri %s" - -#: common/flatpak-dir.c:2462 -#, c-format -msgid "Unsupported extra data uri %s" -msgstr "Uri de datos adicionales no soportada %s" - -#: common/flatpak-dir.c:2476 -#, c-format -msgid "Failed to load local extra-data %s: %s" -msgstr "Fallo al cargar los datos adicionales locales %s: %s" - -#: common/flatpak-dir.c:2479 -#, c-format -msgid "Wrong size for extra-data %s" -msgstr "Tamaño incorrecto en los datos adicionales %s" - -#: common/flatpak-dir.c:2494 -#, c-format -msgid "While downloading %s: " -msgstr "Mientras se descargan %s: " - -#: common/flatpak-dir.c:2501 -#, c-format -msgid "Wrong size for extra data %s" -msgstr "Tamaño incorrecto en los datos adicionales %s" - -#: common/flatpak-dir.c:2512 -#, c-format -msgid "Invalid checksum for extra data %s" -msgstr "Suma de verificación inválida en los datos adicionales %s" - -#: common/flatpak-dir.c:2768 -#, c-format -msgid "%s commit %s already installed" -msgstr "%s commit %s ya está instalado" - -#: common/flatpak-dir.c:3097 common/flatpak-dir.c:3411 -#, c-format -msgid "While pulling %s from remote %s: " -msgstr "Mientras se está cargando %s desde el repositorio remoto %s: " - -#: common/flatpak-dir.c:3296 -#, c-format -msgid "Can't find %s in remote %s" -msgstr "No se puede encontrar %s en el repositorio remoto %s" - -#: common/flatpak-dir.c:3969 -msgid "Not enough memory" -msgstr "No hay suficiente memoria" - -#: common/flatpak-dir.c:3988 -msgid "Failed to read from exported file" -msgstr "Fallo al leer desde un archivo exportado" - -#: common/flatpak-dir.c:4179 -msgid "Error reading mimetype xml file" -msgstr "Error al leer un archivo de tipo mime XML" - -#: common/flatpak-dir.c:4184 -msgid "Invalid mimetype xml file" -msgstr "Archivo de tipo mime XML inválido" - -#: common/flatpak-dir.c:4726 -msgid "While getting detached metadata: " -msgstr "Al obtener metadatos individuales: " - -#: common/flatpak-dir.c:4744 -msgid "While creating extradir: " -msgstr "Al crear directorios adicionales:" - -#: common/flatpak-dir.c:4765 -msgid "Invalid sha256 for extra data" -msgstr "Suma de verificación sha256 inválida para los datos adicionales" - -#: common/flatpak-dir.c:4794 -msgid "Wrong size for extra data" -msgstr "Tamaño incorrecto para los datos adicionales" - -#: common/flatpak-dir.c:4798 -msgid "Invalid checksum for extra data" -msgstr "Firma de verificación incorrecta para los datos adicionales" - -#: common/flatpak-dir.c:4807 -#, c-format -msgid "While writing extra data file '%s': " -msgstr "Al escribir el archivo de datos adicionales '%s': " - -#: common/flatpak-dir.c:4991 -#, c-format -msgid "apply_extra script failed, exit status %d" -msgstr "Ha fallado el script apply_extra, código de error %d" - -#: common/flatpak-dir.c:5068 -#, c-format -msgid "While trying to resolve ref %s: " -msgstr "Mientras se intentan resolver las referencias %s: " - -#: common/flatpak-dir.c:5083 -#, c-format -msgid "%s is not available" -msgstr "%s no está disponible" - -#: common/flatpak-dir.c:5098 common/flatpak-dir.c:5436 -#: common/flatpak-dir.c:6204 common/flatpak-dir.c:6217 -#: common/flatpak-dir.c:6293 -#, c-format -msgid "%s branch %s already installed" -msgstr "%s rama %s ya se encuentra instalada" - -#: common/flatpak-dir.c:5117 -#, c-format -msgid "Failed to read commit %s: " -msgstr "Error al leer el commit %s: " - -#: common/flatpak-dir.c:5137 -#, c-format -msgid "While trying to checkout %s into %s: " -msgstr "Al intentar revisar %s en %s: " - -#: common/flatpak-dir.c:5162 common/flatpak-dir.c:5193 -msgid "While trying to checkout metadata subpath: " -msgstr "Al intentar revisar el subdirectorio de metadatos: " - -#: common/flatpak-dir.c:5203 -msgid "While trying to remove existing extra dir: " -msgstr "Al intentar eliminar el directorio extra existente:" - -#: common/flatpak-dir.c:5214 -msgid "While trying to apply extra data: " -msgstr "Al intentar aplicar datos adicionales: " - -#: common/flatpak-dir.c:5241 -#, fuzzy, c-format -msgid "Invalid deployed ref %s: " -msgstr "PID %s inválido" - -#: common/flatpak-dir.c:5248 -#, fuzzy, c-format -msgid "Invalid commit ref %s: " -msgstr "PID %s inválido" - -#: common/flatpak-dir.c:5256 -#, fuzzy, c-format -msgid "Deployed ref %s kind does not match commit (%s)" -msgstr "La referencias desplegadas %s no coinciden con el commit (%s)" - -#: common/flatpak-dir.c:5264 -#, fuzzy, c-format -msgid "Deployed ref %s name does not match commit (%s)" -msgstr "La referencias desplegadas %s no coinciden con el commit (%s)" - -#: common/flatpak-dir.c:5272 -#, fuzzy, c-format -msgid "Deployed ref %s arch does not match commit (%s)" -msgstr "La referencias desplegadas %s no coinciden con el commit (%s)" - -#: common/flatpak-dir.c:5278 -#, fuzzy, c-format -msgid "Deployed ref %s branch does not match commit (%s)" -msgstr "La referencias desplegadas %s no coinciden con el commit (%s)" - -#: common/flatpak-dir.c:5284 -#, c-format -msgid "Deployed ref %s does not match commit (%s)" -msgstr "La referencias desplegadas %s no coinciden con el commit (%s)" - -#: common/flatpak-dir.c:5303 -msgid "Deployed metadata does not match commit" -msgstr "Los metadatos no coinciden con el commit" - -#: common/flatpak-dir.c:6065 -#, c-format -msgid "This version of %s is already installed" -msgstr "Esta versión de %s ya está instalada" - -#: common/flatpak-dir.c:6072 -msgid "Can't change remote during bundle install" -msgstr "" -"No se puede cambiar el repositorio remoto durante la instalación de un " -"paquete" - -#: common/flatpak-dir.c:6615 -#, c-format -msgid "%s branch %s is not installed" -msgstr "%s rama %s no está instalada" - -#: common/flatpak-dir.c:6859 -#, c-format -msgid "%s branch %s not installed" -msgstr "%s rama %s no instalada" - -#: common/flatpak-dir.c:7818 -#, c-format -msgid "Nothing matches %s" -msgstr "Ninguna coincidencia %s" - -#: common/flatpak-dir.c:7900 -#, fuzzy, c-format -msgid "Can't find ref %s%s%s%s%s" -msgstr "No se ha encontrado %s%s%s%s%s en el repositorio remoto %s" - -#: common/flatpak-dir.c:7942 -#, fuzzy, c-format -msgid "Error searching remote %s: %s" -msgstr "Error: Fallo al %s %s: %s\n" - -#: common/flatpak-dir.c:7987 -#, fuzzy, c-format -msgid "Error searching local repository: %s" -msgstr "Mantener referencia en el repositorio local" - -#: common/flatpak-dir.c:8113 -#, c-format -msgid "%s %s not installed" -msgstr "%s %s no instalado" - -#: common/flatpak-dir.c:8280 -#, c-format -msgid "Could not find installation %s" -msgstr "No se pudo encontrar la instalación %s" - -#: common/flatpak-dir.c:8809 -#, c-format -msgid "Runtime %s, branch %s is already installed" -msgstr "El tiempo de ejecución %s, rama %s ya se encuentra instalado" - -#: common/flatpak-dir.c:8810 -#, c-format -msgid "App %s, branch %s is already installed" -msgstr "La aplicación %s, rama %s ya se encuentra instalada" - -#: common/flatpak-dir.c:9269 -msgid "Remote title not set" -msgstr "Titulo de repositorio remoto no establecido" - -#: common/flatpak-dir.c:9291 -msgid "Remote default-branch not set" -msgstr "Rama por defecto del repositorio remoto no establecida" - -#: common/flatpak-dir.c:9785 -msgid "No flatpak cache in remote summary" -msgstr "No hay un caché de flatpak en el repositorio remoto" - -#: common/flatpak-dir.c:9795 -#, c-format -msgid "No entry for %s in remote summary flatpak cache " -msgstr "Ninguna entrada para %s en el caché de flatpak del repositorio remoto " - -#: common/flatpak-run.c:258 +#: common/flatpak-context.c:175 #, c-format msgid "Unknown share type %s, valid types are: %s" msgstr "Tipo de recurso compartido %s inválido, los tipos válidos son: %s" -#: common/flatpak-run.c:293 +#: common/flatpak-context.c:210 #, c-format msgid "Unknown policy type %s, valid types are: %s" msgstr "Tipo de póliza %s inválida, los tipos válidos son: %s" -#: common/flatpak-run.c:331 +#: common/flatpak-context.c:248 #, c-format msgid "Invalid dbus name %s\n" msgstr "Nombre dbus inválido: %s\n" -#: common/flatpak-run.c:344 +#: common/flatpak-context.c:261 #, c-format msgid "Unknown socket type %s, valid types are: %s" msgstr "Tipo de socket desconocido %s, los tipos válidos son: %s" -#: common/flatpak-run.c:373 +#: common/flatpak-context.c:290 #, c-format msgid "Unknown device type %s, valid types are: %s" msgstr "Tipo de dispositivo desconocido %s, los tipos válidos son: %s" -#: common/flatpak-run.c:401 +#: common/flatpak-context.c:318 #, c-format msgid "Unknown feature type %s, valid types are: %s" msgstr "Tipo de característica desconocido %s, los tipos válidos son: %s" -#: common/flatpak-run.c:774 +#: common/flatpak-context.c:691 #, c-format msgid "" "Unknown filesystem location %s, valid locations are: host, home, xdg-" @@ -2167,162 +2335,485 @@ msgstr "" "Ruta desconocida en el sistema de archivos %s, algunas rutas válidas son: " "host, home, xdg-*[/...], ~/dir, /dir" -#: common/flatpak-run.c:1040 +#: common/flatpak-context.c:963 #, c-format msgid "Invalid env format %s" msgstr "Formato de entorno inválido %s" -#: common/flatpak-run.c:1180 +#: common/flatpak-context.c:1103 msgid "Share with host" msgstr "Compartir con el huesped" -#: common/flatpak-run.c:1180 common/flatpak-run.c:1181 +#: common/flatpak-context.c:1103 common/flatpak-context.c:1104 msgid "SHARE" msgstr "COMPARTIR" -#: common/flatpak-run.c:1181 +#: common/flatpak-context.c:1104 msgid "Unshare with host" msgstr "Dejar de compartir con el huesped" -#: common/flatpak-run.c:1182 +#: common/flatpak-context.c:1105 msgid "Expose socket to app" msgstr "Exponer socket a la aplicación" -#: common/flatpak-run.c:1182 common/flatpak-run.c:1183 +#: common/flatpak-context.c:1105 common/flatpak-context.c:1106 msgid "SOCKET" msgstr "SOCKET" -#: common/flatpak-run.c:1183 +#: common/flatpak-context.c:1106 msgid "Don't expose socket to app" msgstr "No exponer socket a la aplicación" -#: common/flatpak-run.c:1184 +#: common/flatpak-context.c:1107 msgid "Expose device to app" msgstr "Exponer dispositivo a la aplicación" -#: common/flatpak-run.c:1184 common/flatpak-run.c:1185 +#: common/flatpak-context.c:1107 common/flatpak-context.c:1108 msgid "DEVICE" msgstr "DISPOSITIVO" -#: common/flatpak-run.c:1185 +#: common/flatpak-context.c:1108 msgid "Don't expose device to app" msgstr "No exponer dispositivo a la aplicación" -#: common/flatpak-run.c:1186 +#: common/flatpak-context.c:1109 msgid "Allow feature" msgstr "Permitir característica" -#: common/flatpak-run.c:1186 common/flatpak-run.c:1187 +#: common/flatpak-context.c:1109 common/flatpak-context.c:1110 msgid "FEATURE" msgstr "CARACTERÍSTICA" -#: common/flatpak-run.c:1187 +#: common/flatpak-context.c:1110 msgid "Don't allow feature" msgstr "No permitir característica" -#: common/flatpak-run.c:1188 +#: common/flatpak-context.c:1111 msgid "Expose filesystem to app (:ro for read-only)" msgstr "" "Exponer los archivos del sistema a la aplicación (:ro solo en modo lectura)" -#: common/flatpak-run.c:1188 +#: common/flatpak-context.c:1111 msgid "FILESYSTEM[:ro]" msgstr "SISTEMA_ARCHIVOS[:ro]" -#: common/flatpak-run.c:1189 +#: common/flatpak-context.c:1112 msgid "Don't expose filesystem to app" msgstr "No exponer los archivos del sistema a la aplicación" -#: common/flatpak-run.c:1189 +#: common/flatpak-context.c:1112 msgid "FILESYSTEM" msgstr "SISTEMA_ARCHIVOS" -#: common/flatpak-run.c:1190 +#: common/flatpak-context.c:1113 msgid "Set environment variable" msgstr "Establecer variable de entorno" -#: common/flatpak-run.c:1190 +#: common/flatpak-context.c:1113 msgid "VAR=VALUE" msgstr "VARIABLE=VALOR" -#: common/flatpak-run.c:1191 +#: common/flatpak-context.c:1114 msgid "Allow app to own name on the session bus" msgstr "Permitir que la aplicación tenga nombre propio en el bus de sesión" -#: common/flatpak-run.c:1191 common/flatpak-run.c:1192 -#: common/flatpak-run.c:1193 common/flatpak-run.c:1194 +#: common/flatpak-context.c:1114 common/flatpak-context.c:1115 +#: common/flatpak-context.c:1116 common/flatpak-context.c:1117 msgid "DBUS_NAME" msgstr "NOMBRE_DBUS" -#: common/flatpak-run.c:1192 +#: common/flatpak-context.c:1115 msgid "Allow app to talk to name on the session bus" msgstr "Permitir a la aplicación hablar con un nombre en el bus de sesión" -#: common/flatpak-run.c:1193 +#: common/flatpak-context.c:1116 msgid "Allow app to own name on the system bus" msgstr "Permitir que la aplicación tenga nombre propio en el bus de sistema" -#: common/flatpak-run.c:1194 +#: common/flatpak-context.c:1117 msgid "Allow app to talk to name on the system bus" msgstr "Permitir a la aplicación hablar con un nombre en el bus de sistema" -#: common/flatpak-run.c:1195 +#: common/flatpak-context.c:1118 msgid "Add generic policy option" msgstr "Añadir opción de póliza genérica" -#: common/flatpak-run.c:1195 common/flatpak-run.c:1196 +#: common/flatpak-context.c:1118 common/flatpak-context.c:1119 msgid "SUBSYSTEM.KEY=VALUE" msgstr "SUBSISTEMA.CLAVE=VALOR" -#: common/flatpak-run.c:1196 +#: common/flatpak-context.c:1119 msgid "Remove generic policy option" msgstr "Eliminar opción de póliza genérica" -#: common/flatpak-run.c:1197 +#: common/flatpak-context.c:1120 msgid "Persist home directory" msgstr "Directorio de inicio con persistencia" -#: common/flatpak-run.c:1197 +#: common/flatpak-context.c:1120 msgid "FILENAME" msgstr "NOMBRE_ARCHIVO" #. This is not needed/used anymore, so hidden, but we accept it for backwards compat -#: common/flatpak-run.c:1199 +#: common/flatpak-context.c:1122 msgid "Don't require a running session (no cgroups creation)" msgstr "No requerir una sesión en ejecución (no se crearán cgroups)" -#: common/flatpak-run.c:3830 +#: common/flatpak-dir.c:1044 +#, c-format +msgid "No overrides found for %s" +msgstr "No se han encontrado anulaciones para %s" + +#: common/flatpak-dir.c:1674 +#, c-format +msgid "While opening repository %s: " +msgstr "Mientras se abría el repositorio %s: " + +#: common/flatpak-dir.c:1908 common/flatpak-dir.c:5460 +msgid "Can't create deploy directory" +msgstr "No se puede crear el directorio de despliegue" + +#: common/flatpak-dir.c:2122 common/flatpak-dir.c:2125 +#, c-format +msgid "Failed to find latest revision for ref %s from remote %s: %s\n" +msgstr "" + +#: common/flatpak-dir.c:2761 +#, c-format +msgid "Invalid sha256 for extra data uri %s" +msgstr "" +"Suma de verificación sha256 inválida para los datos adicionales de la uri %s" + +#: common/flatpak-dir.c:2766 +#, c-format +msgid "Empty name for extra data uri %s" +msgstr "Nombre vacío para los datos adicionales de la uri %s" + +#: common/flatpak-dir.c:2773 +#, c-format +msgid "Unsupported extra data uri %s" +msgstr "Uri de datos adicionales no soportada %s" + +#: common/flatpak-dir.c:2787 +#, c-format +msgid "Failed to load local extra-data %s: %s" +msgstr "Fallo al cargar los datos adicionales locales %s: %s" + +#: common/flatpak-dir.c:2790 +#, c-format +msgid "Wrong size for extra-data %s" +msgstr "Tamaño incorrecto en los datos adicionales %s" + +#: common/flatpak-dir.c:2805 +#, c-format +msgid "While downloading %s: " +msgstr "Mientras se descargan %s: " + +#: common/flatpak-dir.c:2812 +#, c-format +msgid "Wrong size for extra data %s" +msgstr "Tamaño incorrecto en los datos adicionales %s" + +#: common/flatpak-dir.c:2823 +#, c-format +msgid "Invalid checksum for extra data %s" +msgstr "Suma de verificación inválida en los datos adicionales %s" + +#: common/flatpak-dir.c:2882 +msgid "Remote OCI index has no registry uri" +msgstr "" + +#: common/flatpak-dir.c:3100 +#, c-format +msgid "%s commit %s already installed" +msgstr "%s commit %s ya está instalado" + +#: common/flatpak-dir.c:3442 common/flatpak-dir.c:3773 +#, c-format +msgid "While pulling %s from remote %s: " +msgstr "Mientras se está cargando %s desde el repositorio remoto %s: " + +#: common/flatpak-dir.c:3658 +#, c-format +msgid "Can't find %s in remote %s" +msgstr "No se puede encontrar %s en el repositorio remoto %s" + +#: common/flatpak-dir.c:4331 +msgid "Not enough memory" +msgstr "No hay suficiente memoria" + +#: common/flatpak-dir.c:4350 +msgid "Failed to read from exported file" +msgstr "Fallo al leer desde un archivo exportado" + +#: common/flatpak-dir.c:4541 +msgid "Error reading mimetype xml file" +msgstr "Error al leer un archivo de tipo mime XML" + +#: common/flatpak-dir.c:4546 +msgid "Invalid mimetype xml file" +msgstr "Archivo de tipo mime XML inválido" + +#: common/flatpak-dir.c:5089 +msgid "While getting detached metadata: " +msgstr "Al obtener metadatos individuales: " + +#: common/flatpak-dir.c:5107 +msgid "While creating extradir: " +msgstr "Al crear directorios adicionales:" + +#: common/flatpak-dir.c:5128 +msgid "Invalid sha256 for extra data" +msgstr "Suma de verificación sha256 inválida para los datos adicionales" + +#: common/flatpak-dir.c:5157 +msgid "Wrong size for extra data" +msgstr "Tamaño incorrecto para los datos adicionales" + +#: common/flatpak-dir.c:5161 +msgid "Invalid checksum for extra data" +msgstr "Firma de verificación incorrecta para los datos adicionales" + +#: common/flatpak-dir.c:5170 +#, c-format +msgid "While writing extra data file '%s': " +msgstr "Al escribir el archivo de datos adicionales '%s': " + +#: common/flatpak-dir.c:5340 +#, c-format +msgid "apply_extra script failed, exit status %d" +msgstr "Ha fallado el script apply_extra, código de error %d" + +#: common/flatpak-dir.c:5419 +#, c-format +msgid "While trying to resolve ref %s: " +msgstr "Mientras se intentan resolver las referencias %s: " + +#: common/flatpak-dir.c:5434 +#, c-format +msgid "%s is not available" +msgstr "%s no está disponible" + +#: common/flatpak-dir.c:5449 common/flatpak-dir.c:5881 +#: common/flatpak-dir.c:6671 common/flatpak-dir.c:6681 +#: common/flatpak-dir.c:6713 +#, c-format +msgid "%s branch %s already installed" +msgstr "%s rama %s ya se encuentra instalada" + +#: common/flatpak-dir.c:5468 +#, c-format +msgid "Failed to read commit %s: " +msgstr "Error al leer el commit %s: " + +#: common/flatpak-dir.c:5488 +#, c-format +msgid "While trying to checkout %s into %s: " +msgstr "Al intentar revisar %s en %s: " + +#: common/flatpak-dir.c:5513 common/flatpak-dir.c:5544 +msgid "While trying to checkout metadata subpath: " +msgstr "Al intentar revisar el subdirectorio de metadatos: " + +#: common/flatpak-dir.c:5554 +msgid "While trying to remove existing extra dir: " +msgstr "Al intentar eliminar el directorio extra existente:" + +#: common/flatpak-dir.c:5565 +msgid "While trying to apply extra data: " +msgstr "Al intentar aplicar datos adicionales: " + +#: common/flatpak-dir.c:5592 +#, fuzzy, c-format +msgid "Invalid deployed ref %s: " +msgstr "PID %s inválido" + +#: common/flatpak-dir.c:5599 +#, fuzzy, c-format +msgid "Invalid commit ref %s: " +msgstr "PID %s inválido" + +#: common/flatpak-dir.c:5607 +#, fuzzy, c-format +msgid "Deployed ref %s kind does not match commit (%s)" +msgstr "La referencias desplegadas %s no coinciden con el commit (%s)" + +#: common/flatpak-dir.c:5615 +#, fuzzy, c-format +msgid "Deployed ref %s name does not match commit (%s)" +msgstr "La referencias desplegadas %s no coinciden con el commit (%s)" + +#: common/flatpak-dir.c:5623 +#, fuzzy, c-format +msgid "Deployed ref %s arch does not match commit (%s)" +msgstr "La referencias desplegadas %s no coinciden con el commit (%s)" + +#: common/flatpak-dir.c:5629 +#, fuzzy, c-format +msgid "Deployed ref %s branch does not match commit (%s)" +msgstr "La referencias desplegadas %s no coinciden con el commit (%s)" + +#: common/flatpak-dir.c:5635 +#, c-format +msgid "Deployed ref %s does not match commit (%s)" +msgstr "La referencias desplegadas %s no coinciden con el commit (%s)" + +#: common/flatpak-dir.c:5654 +msgid "Deployed metadata does not match commit" +msgstr "Los metadatos no coinciden con el commit" + +#: common/flatpak-dir.c:6533 +#, c-format +msgid "This version of %s is already installed" +msgstr "Esta versión de %s ya está instalada" + +#: common/flatpak-dir.c:6540 +msgid "Can't change remote during bundle install" +msgstr "" +"No se puede cambiar el repositorio remoto durante la instalación de un " +"paquete" + +#: common/flatpak-dir.c:7059 +#, c-format +msgid "%s branch %s is not installed" +msgstr "%s rama %s no está instalada" + +#: common/flatpak-dir.c:7304 +#, c-format +msgid "%s branch %s not installed" +msgstr "%s rama %s no instalada" + +#: common/flatpak-dir.c:7628 +#, c-format +msgid "Pruning repo failed: %s" +msgstr "" + +#: common/flatpak-dir.c:8155 +#, c-format +msgid "Multiple branches available for %s, you must specify one of: " +msgstr "" + +#: common/flatpak-dir.c:8176 +#, c-format +msgid "Nothing matches %s" +msgstr "Ninguna coincidencia %s" + +#: common/flatpak-dir.c:8258 +#, fuzzy, c-format +msgid "Can't find ref %s%s%s%s%s" +msgstr "No se ha encontrado %s%s%s%s%s en el repositorio remoto %s" + +#: common/flatpak-dir.c:8300 +#, fuzzy, c-format +msgid "Error searching remote %s: %s" +msgstr "Error: Fallo al %s %s: %s\n" + +#: common/flatpak-dir.c:8345 +#, fuzzy, c-format +msgid "Error searching local repository: %s" +msgstr "Mantener referencia en el repositorio local" + +#: common/flatpak-dir.c:8471 +#, c-format +msgid "%s %s not installed" +msgstr "%s %s no instalado" + +#: common/flatpak-dir.c:8638 +#, c-format +msgid "Could not find installation %s" +msgstr "No se pudo encontrar la instalación %s" + +#: common/flatpak-dir.c:9236 +#, c-format +msgid "Runtime %s, branch %s is already installed" +msgstr "El tiempo de ejecución %s, rama %s ya se encuentra instalado" + +#: common/flatpak-dir.c:9237 +#, c-format +msgid "App %s, branch %s is already installed" +msgstr "La aplicación %s, rama %s ya se encuentra instalada" + +#: common/flatpak-dir.c:9717 +msgid "Remote title not set" +msgstr "Titulo de repositorio remoto no establecido" + +#: common/flatpak-dir.c:9739 +msgid "Remote default-branch not set" +msgstr "Rama por defecto del repositorio remoto no establecida" + +#: common/flatpak-dir.c:10332 +msgid "No flatpak cache in remote summary" +msgstr "No hay un caché de flatpak en el repositorio remoto" + +#: common/flatpak-dir.c:10342 +#, c-format +msgid "No entry for %s in remote summary flatpak cache " +msgstr "Ninguna entrada para %s en el caché de flatpak del repositorio remoto " + +#: common/flatpak-run.c:1456 #, c-format msgid "Failed to open flatpak-info temp file: %s" msgstr "Fallo al abrir un archivo temporal de flatpak-info: %s" -#: common/flatpak-run.c:3904 common/flatpak-run.c:3914 +#: common/flatpak-run.c:1530 common/flatpak-run.c:1540 #, c-format msgid "Failed to open temp file: %s" msgstr "Fallo al abrir un archivo temporal: %s" -#: common/flatpak-run.c:4253 +#: common/flatpak-run.c:1883 msgid "Unable to create sync pipe" msgstr "Ha sido imposible crear una tubería sincronizada" -#: common/flatpak-run.c:4280 +#: common/flatpak-run.c:1910 #, c-format msgid "Failed to open app info file: %s" msgstr "Fallo al abrir el archivo de información de una aplicación: %s" -#: common/flatpak-run.c:4310 +#: common/flatpak-run.c:1940 msgid "Failed to sync with dbus proxy" msgstr "Fallo al sincronizar con el proxy de dbus" -#: common/flatpak-run.c:5069 +#: common/flatpak-run.c:2700 #, fuzzy, c-format msgid "ldconfig failed, exit status %d" msgstr "Ha fallado el script apply_extra, código de error %d" -#: common/flatpak-utils.c:2900 +#: common/flatpak-utils.c:624 +#, fuzzy, c-format +msgid "Migrating %s to %s\n" +msgstr "" +"Actualizando: %s desde\n" +" %s\n" + +#: common/flatpak-utils.c:630 +#, fuzzy, c-format +msgid "Error during migration: %s\n" +msgstr "Error: Fallo al %s %s: %s\n" + +#: common/flatpak-utils.c:2988 msgid "No extra data sources" msgstr "Sin orígenes de datos adicionales" +#: common/flatpak-utils.c:6576 +#, c-format +msgid "Downloading metadata: %u/(estimating) %s" +msgstr "" + +#: common/flatpak-utils.c:6600 +#, fuzzy, c-format +msgid "Downloading: %s/%s" +msgstr "Descargando %s" + +#: common/flatpak-utils.c:6620 +#, fuzzy, c-format +msgid "Downloading extra data: %s/%s" +msgstr "Descargando %s" + +#: common/flatpak-utils.c:6625 +#, fuzzy, c-format +msgid "Downloading files: %d/%d %s" +msgstr "Descargando %s" + #. SECURITY: #. - Normal users do not need authentication to install signed applications #. from signed repositories, as this cannot exploit a system. @@ -2359,7 +2850,7 @@ msgstr "Actualizar aplicación firmada" #: system-helper/org.freedesktop.Flatpak.policy.in:59 #: system-helper/org.freedesktop.Flatpak.policy.in:77 -#: system-helper/org.freedesktop.Flatpak.policy.in:169 +#: system-helper/org.freedesktop.Flatpak.policy.in:180 msgid "Authentication is required to update software" msgstr "La autentificación es obligatoria para actualizar un programa" @@ -2425,16 +2916,42 @@ msgid "Authentication is required to configure software repositories" msgstr "" "La autentificación es obligatoria para configurar repositorio de software" +#: system-helper/org.freedesktop.Flatpak.policy.in:161 +#, fuzzy +msgid "Configure" +msgstr "Configurar Repositorio Remoto" + +#: system-helper/org.freedesktop.Flatpak.policy.in:162 +#, fuzzy +msgid "Authentication is required to configure software installation" +msgstr "" +"La autentificación es obligatoria para configurar repositorio de software" + #. SECURITY: #. - Normal users do not require admin authentication to update #. appstream data as it will be signed, and the action is required #. to update the system when unattended. #. - Changing this to anything other than 'yes' will break unattended #. updates. -#: system-helper/org.freedesktop.Flatpak.policy.in:168 +#: system-helper/org.freedesktop.Flatpak.policy.in:179 msgid "Update appstream" msgstr "Actualizar appstream" +#~ msgid "No remote %s" +#~ msgstr "Sin remoto %s" + +#, fuzzy +#~ msgid "Search only user installations" +#~ msgstr "Mostrar instalaciones del usuario" + +#, fuzzy +#~ msgid "Search only system-wide installations" +#~ msgstr "Mostrar instalaciones del sistema" + +#, fuzzy +#~ msgid "Search specific system-wide installations" +#~ msgstr "Mostrar instalaciones especificas del sistema" + #~ msgid "Failed to create temporary file" #~ msgstr "Fallo al crear un archivo temporal" @@ -2444,20 +2961,8 @@ msgstr "Actualizar appstream" #~ msgid "Failed to write to temporary file" #~ msgstr "Fallo al escribir un archivo temporal" -#~ msgid "REMOTE must be specified" -#~ msgstr "Se debe especificar REMOTO" - -#~ msgid "Downloading %s" -#~ msgstr "Descargando %s" - #~ msgid "Installing %s" #~ msgstr "Instalando %s" #~ msgid "Post-Install %s" #~ msgstr "Post instalación %s" - -#~ msgid "Updating %s" -#~ msgstr "Actualizando %s" - -#~ msgid "Metadata:" -#~ msgstr "Metadatos:" diff --git a/po/gl.po b/po/gl.po index 7a22a50d..921bad0c 100644 --- a/po/gl.po +++ b/po/gl.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: flatpak master\n" "Report-Msgid-Bugs-To: https://github.com/flatpak/flatpak/issues\n" -"POT-Creation-Date: 2017-10-09 12:40+0200\n" +"POT-Creation-Date: 2018-02-19 14:20+0100\n" "PO-Revision-Date: 2017-09-26 17:32+0200\n" "Last-Translator: Fran Dieguez \n" "Language-Team: Galician \n" @@ -44,10 +44,9 @@ msgstr "Estabelecer o remoto como usado polas dependencias" msgid "Set a new url" msgstr "Estabelecer unha nova url" -#: app/flatpak-builtins-add-remote.c:66 app/flatpak-builtins-build-bundle.c:57 -#: app/flatpak-builtins-build-bundle.c:58 -#: app/flatpak-builtins-list-remotes.c:109 -#: app/flatpak-builtins-repo-update.c:52 +#: app/flatpak-builtins-add-remote.c:66 app/flatpak-builtins-build-bundle.c:58 +#: app/flatpak-builtins-build-bundle.c:59 +#: app/flatpak-builtins-list-remotes.c:70 app/flatpak-builtins-repo-update.c:52 msgid "URL" msgstr "URL" @@ -110,9 +109,9 @@ msgstr "ID-COLECTIÓN" msgid "Import GPG key from FILE (- for stdin)" msgstr "Importar a chave GPG desde o FICHEIRO (- para stdin)" -#: app/flatpak-builtins-add-remote.c:82 app/flatpak-builtins-build-bundle.c:59 -#: app/flatpak-builtins-build.c:50 app/flatpak-builtins-build-export.c:60 -#: app/flatpak-builtins-install.c:66 app/flatpak-builtins-repo-update.c:59 +#: app/flatpak-builtins-add-remote.c:82 app/flatpak-builtins-build-bundle.c:60 +#: app/flatpak-builtins-build.c:54 app/flatpak-builtins-build-export.c:60 +#: app/flatpak-builtins-install.c:67 app/flatpak-builtins-repo-update.c:59 msgid "FILE" msgstr "FICHEIRO" @@ -124,131 +123,151 @@ msgstr "Desactivar o repositorio remoto" msgid "Add OCI registry" msgstr "Engadir rexistro OCI" -#: app/flatpak-builtins-add-remote.c:312 +#: app/flatpak-builtins-add-remote.c:218 app/flatpak-builtins-add-remote.c:225 +#, c-format +msgid "Can't load uri %s: %s\n" +msgstr "" + +#: app/flatpak-builtins-add-remote.c:233 +#, fuzzy, c-format +msgid "Can't load file %s: %s\n" +msgstr "Non é posíbel abrir o espazo de nomes %s: %s" + +#: app/flatpak-builtins-add-remote.c:241 +#, fuzzy +msgid "Invalid file format" +msgstr "Formato de env %s non válido" + +#: app/flatpak-builtins-add-remote.c:249 +#, fuzzy, c-format +msgid "Invalid version %s, only 1 supported" +msgstr "Tipo de uri non válido %s, só se admite http/https" + +#: app/flatpak-builtins-add-remote.c:293 +#, fuzzy +msgid "Invalid gpg key" +msgstr "PID %s non válido" + +#: app/flatpak-builtins-add-remote.c:320 msgid "NAME LOCATION - Add a remote repository" msgstr "NOME LOCALIZACION - Engade un novo repositorio remoto" -#: app/flatpak-builtins-add-remote.c:321 -#: app/flatpak-builtins-delete-remote.c:58 app/flatpak-builtins-info.c:104 +#: app/flatpak-builtins-add-remote.c:333 +#: app/flatpak-builtins-delete-remote.c:61 app/flatpak-builtins-info.c:125 msgid "NAME must be specified" msgstr "Debe especificar o NOME" -#: app/flatpak-builtins-add-remote.c:324 app/flatpak-builtins-build-sign.c:71 -#: app/flatpak-builtins-repo.c:174 app/flatpak-builtins-repo-update.c:429 +#: app/flatpak-builtins-add-remote.c:336 app/flatpak-builtins-build-sign.c:71 +#: app/flatpak-builtins-repo.c:175 app/flatpak-builtins-repo-update.c:429 msgid "LOCATION must be specified" msgstr "Debe especificar a LOCALIZACION" -#: app/flatpak-builtins-add-remote.c:327 -#: app/flatpak-builtins-build-bundle.c:479 +#: app/flatpak-builtins-add-remote.c:339 +#: app/flatpak-builtins-build-bundle.c:461 #: app/flatpak-builtins-build-export.c:676 #: app/flatpak-builtins-build-import-bundle.c:182 #: app/flatpak-builtins-build-init.c:181 app/flatpak-builtins-build-sign.c:74 -#: app/flatpak-builtins-delete-remote.c:63 +#: app/flatpak-builtins-delete-remote.c:66 #: app/flatpak-builtins-document-export.c:102 #: app/flatpak-builtins-document-info.c:75 #: app/flatpak-builtins-document-list.c:70 -#: app/flatpak-builtins-document-unexport.c:67 app/flatpak-builtins-info.c:111 -#: app/flatpak-builtins-install.c:265 app/flatpak-builtins-install.c:399 -#: app/flatpak-builtins-list.c:382 app/flatpak-builtins-list-remotes.c:66 -#: app/flatpak-builtins-ls-remote.c:84 app/flatpak-builtins-make-current.c:67 -#: app/flatpak-builtins-override.c:66 +#: app/flatpak-builtins-document-unexport.c:67 app/flatpak-builtins-info.c:132 +#: app/flatpak-builtins-install.c:267 app/flatpak-builtins-install.c:401 +#: app/flatpak-builtins-list.c:314 app/flatpak-builtins-list-remotes.c:61 +#: app/flatpak-builtins-ls-remote.c:107 app/flatpak-builtins-make-current.c:72 +#: app/flatpak-builtins-override.c:68 msgid "Too many arguments" msgstr "Demasiados argumento" -#: app/flatpak-builtins-add-remote.c:332 +#: app/flatpak-builtins-add-remote.c:344 #: app/flatpak-builtins-build-export.c:692 #, c-format msgid "‘%s’ is not a valid collection ID: %s" msgstr "«%s» non é un ID de colección válido: %s" -#: app/flatpak-builtins-add-remote.c:336 +#: app/flatpak-builtins-add-remote.c:348 msgid "GPG verification is required if collections are enabled" msgstr "A comprobación GPG é obrigatoria se as coleccións están activadas" #. Do nothing -#: app/flatpak-builtins-add-remote.c:351 +#: app/flatpak-builtins-add-remote.c:363 #, c-format msgid "Remote %s already exists" msgstr "O repositorio remoto %s xa existe" -#: app/flatpak-builtins-add-remote.c:359 +#: app/flatpak-builtins-add-remote.c:371 msgid "No url specified in flatpakrepo file" msgstr "Non se especificou unha url no ficheiro flatpakrepo" -#: app/flatpak-builtins-add-remote.c:403 +#: app/flatpak-builtins-add-remote.c:415 #, c-format msgid "Warning: Could not update extra metadata for '%s': %s\n" msgstr "" "Aviso: Non se puideron actualizar os metadatos adicionais para «%s»: %s\n" -#: app/flatpak-builtins-add-remote.c:451 +#: app/flatpak-builtins-add-remote.c:464 msgid "NAME - Modify a remote repository" msgstr "NOME - Modificar un repositorio remoto" -#: app/flatpak-builtins-add-remote.c:460 +#: app/flatpak-builtins-add-remote.c:474 msgid "Remote NAME must be specified" msgstr "Debe especifciar o NOME do repositorio remoto" -#: app/flatpak-builtins-add-remote.c:465 -#, c-format -msgid "No remote %s" -msgstr "Sen remoto %s" - -#: app/flatpak-builtins-add-remote.c:471 +#: app/flatpak-builtins-add-remote.c:485 #, c-format msgid "Updating extra metadata from remote summary for %s\n" msgstr "Actualizando os metadatos adicionais desde o resumo remoto para %s\n" -#: app/flatpak-builtins-add-remote.c:474 +#: app/flatpak-builtins-add-remote.c:488 #, c-format msgid "Error updating extra metadata for '%s': %s\n" msgstr "" "Produciuse un erro ao actualizar os metadatos adicionais para «%s»: %s\n" -#: app/flatpak-builtins-add-remote.c:475 +#: app/flatpak-builtins-add-remote.c:489 #, c-format msgid "Could not update extra metadata for %s" msgstr "Non se puido actualizar os metadatos adicionais para %s" -#: app/flatpak-builtins-build-bundle.c:55 +#: app/flatpak-builtins-build-bundle.c:56 msgid "Export runtime instead of app" msgstr "Exportar o runtime no lugar do aplicativo" -#: app/flatpak-builtins-build-bundle.c:56 +#: app/flatpak-builtins-build-bundle.c:57 msgid "Arch to bundle for" msgstr "Arquitectura para empaquetar" -#: app/flatpak-builtins-build-bundle.c:56 +#: app/flatpak-builtins-build-bundle.c:57 #: app/flatpak-builtins-build-export.c:55 app/flatpak-builtins-build-init.c:49 -#: app/flatpak-builtins-build-sign.c:41 app/flatpak-builtins-info.c:48 -#: app/flatpak-builtins-install.c:56 app/flatpak-builtins-list.c:52 -#: app/flatpak-builtins-ls-remote.c:48 app/flatpak-builtins-make-current.c:38 -#: app/flatpak-builtins-run.c:52 app/flatpak-builtins-uninstall.c:44 -#: app/flatpak-builtins-update.c:53 +#: app/flatpak-builtins-build-sign.c:41 app/flatpak-builtins-info.c:51 +#: app/flatpak-builtins-info-remote.c:48 app/flatpak-builtins-install.c:57 +#: app/flatpak-builtins-list.c:46 app/flatpak-builtins-ls-remote.c:49 +#: app/flatpak-builtins-make-current.c:38 app/flatpak-builtins-run.c:52 +#: app/flatpak-builtins-uninstall.c:44 app/flatpak-builtins-update.c:53 msgid "ARCH" msgstr "ARQUITECTURA" -#: app/flatpak-builtins-build-bundle.c:57 +#: app/flatpak-builtins-build-bundle.c:58 msgid "Url for repo" msgstr "Url para o repo" -#: app/flatpak-builtins-build-bundle.c:58 +#: app/flatpak-builtins-build-bundle.c:59 msgid "Url for runtime flatpakrepo file" msgstr "Url para o ficheiro flatpakrepo do runtime" -#: app/flatpak-builtins-build-bundle.c:59 +#: app/flatpak-builtins-build-bundle.c:60 msgid "Add GPG key from FILE (- for stdin)" msgstr "Engadir chave GPG desde FICHEIRO (- para stdin)" -#: app/flatpak-builtins-build-bundle.c:60 +#: app/flatpak-builtins-build-bundle.c:61 msgid "Export oci image instead of flatpak bundle" msgstr "Exportar imaxe oci no lugar dun paquete flatpak" -#: app/flatpak-builtins-build-bundle.c:61 +#: app/flatpak-builtins-build-bundle.c:62 msgid "GPG Key ID to sign the OCI image with" msgstr "ID de chave GPG coa que asinar a imaxe OCI" -#: app/flatpak-builtins-build-bundle.c:61 +#: app/flatpak-builtins-build-bundle.c:62 #: app/flatpak-builtins-build-commit-from.c:55 #: app/flatpak-builtins-build-export.c:61 #: app/flatpak-builtins-build-import-bundle.c:46 @@ -256,7 +275,7 @@ msgstr "ID de chave GPG coa que asinar a imaxe OCI" msgid "KEY-ID" msgstr "ID-CHAVE" -#: app/flatpak-builtins-build-bundle.c:62 +#: app/flatpak-builtins-build-bundle.c:63 #: app/flatpak-builtins-build-commit-from.c:56 #: app/flatpak-builtins-build-export.c:64 #: app/flatpak-builtins-build-import-bundle.c:47 @@ -265,7 +284,7 @@ msgid "GPG Homedir to use when looking for keyrings" msgstr "" "Directorio de orixe dos ficheiros GPG para usar ao buscar por aneis de chaves" -#: app/flatpak-builtins-build-bundle.c:62 +#: app/flatpak-builtins-build-bundle.c:63 #: app/flatpak-builtins-build-commit-from.c:56 #: app/flatpak-builtins-build-export.c:64 #: app/flatpak-builtins-build-import-bundle.c:47 @@ -273,7 +292,16 @@ msgstr "" msgid "HOMEDIR" msgstr "DIRECTORIO_DE_INICIO" -#: app/flatpak-builtins-build-bundle.c:469 +#: app/flatpak-builtins-build-bundle.c:64 +msgid "OSTree commit to create a delta bundle from" +msgstr "" + +#: app/flatpak-builtins-build-bundle.c:64 app/flatpak-builtins-info-remote.c:49 +#: app/flatpak-builtins-update.c:54 +msgid "COMMIT" +msgstr "REMISIÓN" + +#: app/flatpak-builtins-build-bundle.c:451 msgid "" "LOCATION FILENAME NAME [BRANCH] - Create a single file bundle from a local " "repository" @@ -281,94 +309,106 @@ msgstr "" "LOCALIZACION NOMEFICHEIRO NOME [RAME] - Crear un paquete de ficheiro único " "desde un repositorio local" -#: app/flatpak-builtins-build-bundle.c:476 +#: app/flatpak-builtins-build-bundle.c:458 msgid "LOCATION, FILENAME and NAME must be specified" msgstr "Debe especificar a LOCALIZACION, NOMEFICHEIRO e o NOME" -#: app/flatpak-builtins-build-bundle.c:494 -#: app/flatpak-builtins-build-commit-from.c:103 -#: app/flatpak-builtins-build-commit-from.c:113 +#: app/flatpak-builtins-build-bundle.c:476 +#: app/flatpak-builtins-build-commit-from.c:253 +#: app/flatpak-builtins-build-commit-from.c:263 #: app/flatpak-builtins-build-import-bundle.c:191 #, c-format msgid "'%s' is not a valid repository" msgstr "«%s» non é un repositorio válido" -#: app/flatpak-builtins-build-bundle.c:506 app/flatpak-builtins-build-sign.c:86 +#: app/flatpak-builtins-build-bundle.c:488 app/flatpak-builtins-build-sign.c:86 #, c-format msgid "'%s' is not a valid name: %s" msgstr "«%s» non é un nome válido: %s" -#: app/flatpak-builtins-build-bundle.c:509 +#: app/flatpak-builtins-build-bundle.c:491 #: app/flatpak-builtins-build-export.c:699 app/flatpak-builtins-build-sign.c:89 #, c-format msgid "'%s' is not a valid branch name: %s" msgstr "«%s» non é un nome válido para unha rama: %s" -#: app/flatpak-builtins-build.c:46 +#: app/flatpak-builtins-build.c:49 msgid "Use Platform runtime rather than Sdk" msgstr "Usar o «runtime» de plataforma no lugar de Sdk" -#: app/flatpak-builtins-build.c:47 +#: app/flatpak-builtins-build.c:50 +msgid "Make destination readonly" +msgstr "" + +#: app/flatpak-builtins-build.c:51 msgid "Add bind mount" msgstr "Engadir punto de montaxe" -#: app/flatpak-builtins-build.c:47 +#: app/flatpak-builtins-build.c:51 msgid "DEST=SRC" msgstr "DEST=ORIX" -#: app/flatpak-builtins-build.c:48 +#: app/flatpak-builtins-build.c:52 msgid "Start build in this directory" msgstr "Iniciar a compilación neste cartafol" -#: app/flatpak-builtins-build.c:48 app/flatpak-builtins-build.c:49 +#: app/flatpak-builtins-build.c:52 app/flatpak-builtins-build.c:53 #: app/flatpak-builtins-build-init.c:58 msgid "DIR" msgstr "DIR" -#: app/flatpak-builtins-build.c:49 +#: app/flatpak-builtins-build.c:53 msgid "Where to look for custom sdk dir (defaults to 'usr')" msgstr "Onde buscar o directorio personalizado de SDK (por omisión «usr»)" -#: app/flatpak-builtins-build.c:50 app/flatpak-builtins-build-export.c:60 +#: app/flatpak-builtins-build.c:54 app/flatpak-builtins-build-export.c:60 msgid "Use alternative file for the metadata" msgstr "Usar o ficheiro alternativo para os metadatos" -#: app/flatpak-builtins-build.c:51 +#: app/flatpak-builtins-build.c:55 msgid "Kill processes when the parent process dies" msgstr "Matar os procesos cando o proceso pai morre" -#: app/flatpak-builtins-build.c:52 +#: app/flatpak-builtins-build.c:56 msgid "Export application homedir directory to build" msgstr "Exportar cartafol homedir do aplicativo para construír" -#: app/flatpak-builtins-build.c:139 +#: app/flatpak-builtins-build.c:57 app/flatpak-builtins-run.c:58 +msgid "Log session bus calls" +msgstr "Rexistrar chamadas ao bus de sesión" + +#: app/flatpak-builtins-build.c:58 app/flatpak-builtins-run.c:59 +msgid "Log system bus calls" +msgstr "Rexistrar chamadas ao bus de sistema" + +#: app/flatpak-builtins-build.c:126 msgid "DIRECTORY [COMMAND [args...]] - Build in directory" msgstr "DIRECTORIO [ORDE [argumentos...]] - Construír no directorio" -#: app/flatpak-builtins-build.c:162 app/flatpak-builtins-build-finish.c:533 +#: app/flatpak-builtins-build.c:149 app/flatpak-builtins-build-finish.c:533 msgid "DIRECTORY must be specified" msgstr "Debe especificar o DIRECTORIO" -#: app/flatpak-builtins-build.c:173 app/flatpak-builtins-build-export.c:721 +#: app/flatpak-builtins-build.c:160 app/flatpak-builtins-build-export.c:721 #, c-format msgid "Build directory %s not initialized, use flatpak build-init" msgstr "Directorio de construción %s non iniciado, usar flatpak build-init" -#: app/flatpak-builtins-build.c:192 +#: app/flatpak-builtins-build.c:179 msgid "metadata invalid, not application or runtime" msgstr "metadatos non válidos, sen aplicativo ou runtime" -#: app/flatpak-builtins-build.c:292 +#: app/flatpak-builtins-build.c:283 #, c-format msgid "No extension point matching %s in %s" msgstr "Non hai ningún punto de extensión que coincida con %s en %s" -#: app/flatpak-builtins-build.c:432 +#: app/flatpak-builtins-build.c:433 #, c-format msgid "Missing '=' in bind mount option '%s'" msgstr "Falta o «=» na opción «%s» de punto de montaxe" -#: app/flatpak-builtins-build.c:460 common/flatpak-run.c:5406 +#: app/flatpak-builtins-build.c:462 common/flatpak-run.c:3038 msgid "Unable to start app" msgstr "Non foi posíbel iniciar o aplicativo" @@ -427,38 +467,43 @@ msgstr "Non actualizar o resumo" msgid "GPG Key ID to sign the commit with" msgstr "ID da chave GPG coa que asinar a remisión" -#: app/flatpak-builtins-build-commit-from.c:78 +#: app/flatpak-builtins-build-commit-from.c:228 msgid "DST-REPO [DST-REF]... - Make a new commit based on existing commit(s)" msgstr "" "REPO-DST [REF-DST]... - Facer unha nova remisión baseada na(s) remisión(s) " "existente(s)" -#: app/flatpak-builtins-build-commit-from.c:85 +#: app/flatpak-builtins-build-commit-from.c:235 msgid "DST-REPO must be specified" msgstr "Debe especificar o DST-REPO" -#: app/flatpak-builtins-build-commit-from.c:93 +#: app/flatpak-builtins-build-commit-from.c:243 msgid "" "If --src-repo is not specified, exactly one destination ref must be specified" msgstr "" "Se --src-repo non se especifica, debe especificar exactamente unha " "referencia de destino" -#: app/flatpak-builtins-build-commit-from.c:96 +#: app/flatpak-builtins-build-commit-from.c:246 msgid "" "If --src-ref is specified, exactly one destination ref must be specified" msgstr "" "Se --src-ref non está especificado, debe especificar exactamente unha " "referencia de destino" -#: app/flatpak-builtins-build-commit-from.c:99 +#: app/flatpak-builtins-build-commit-from.c:249 msgid "Either --src-repo or --src-ref must be specified." msgstr "Debe especificar --src-repo ou --src-ref." -#: app/flatpak-builtins-build-commit-from.c:251 +#: app/flatpak-builtins-build-commit-from.c:402 msgid "Can't commit from partial source commit." msgstr "Non é posíbel remitir a partir dotra remisión parcial." +#: app/flatpak-builtins-build-commit-from.c:407 +#, c-format +msgid "%s: no change\n" +msgstr "" + #: app/flatpak-builtins-build-export.c:55 msgid "Architecture to export for (must be host compatible)" msgstr "Arquitectura á que exportar (debe ser compatíbel co anfitrión)" @@ -496,6 +541,42 @@ msgstr "Sobrescribir a marca de tempo da remisión" msgid "ISO-8601-TIMESTAMP" msgstr "ISO-8601-TIMESTAMP" +#: app/flatpak-builtins-build-export.c:341 +#, c-format +msgid "WARNING: Error running desktop-file-validate: %s\n" +msgstr "" + +#: app/flatpak-builtins-build-export.c:349 +#, c-format +msgid "WARNING: Error reading from desktop-file-validate: %s\n" +msgstr "" + +#: app/flatpak-builtins-build-export.c:355 +#, fuzzy, c-format +msgid "WARNING: Failed to validate desktop file %s: %s\n" +msgstr "Produciuse un fallo ao abrir o ficheiro temporal: %s" + +#: app/flatpak-builtins-build-export.c:370 +#, c-format +msgid "WARNING: Can't find Exec key in %s: %s\n" +msgstr "" + +#: app/flatpak-builtins-build-export.c:378 +#: app/flatpak-builtins-build-export.c:475 +#, c-format +msgid "WARNING: Binary not found for Exec line in %s: %s\n" +msgstr "" + +#: app/flatpak-builtins-build-export.c:385 +#, c-format +msgid "WARNING: Icon not matching app id in %s: %s\n" +msgstr "" + +#: app/flatpak-builtins-build-export.c:413 +#, c-format +msgid "WARNING: Icon referenced in desktop file but not exported: %s\n" +msgstr "" + #: app/flatpak-builtins-build-export.c:551 #, c-format msgid "Invalid uri type %s, only http/https supported" @@ -537,12 +618,41 @@ msgstr "Debe especificar a LOCALIZACION OU DIRECTORIO" msgid "No name specified in the metadata" msgstr "Non se especificou un nome nos metadatos" +#: app/flatpak-builtins-build-export.c:976 +#, fuzzy, c-format +msgid "Commit: %s\n" +msgstr "Remisión:" + +#: app/flatpak-builtins-build-export.c:977 +#, c-format +msgid "Metadata Total: %u\n" +msgstr "" + +#: app/flatpak-builtins-build-export.c:978 +#, c-format +msgid "Metadata Written: %u\n" +msgstr "" + +#: app/flatpak-builtins-build-export.c:979 +#, c-format +msgid "Content Total: %u\n" +msgstr "" + +#: app/flatpak-builtins-build-export.c:980 +#, c-format +msgid "Content Written: %u\n" +msgstr "" + +#: app/flatpak-builtins-build-export.c:981 +msgid "Content Bytes Written:" +msgstr "" + #: app/flatpak-builtins-build-finish.c:48 msgid "Command to set" msgstr "Orde a estabelecer" #: app/flatpak-builtins-build-finish.c:48 app/flatpak-builtins-run.c:53 -#: app/flatpak-main.c:159 +#: app/flatpak-main.c:166 msgid "COMMAND" msgstr "ORDE" @@ -603,6 +713,29 @@ msgstr "Estabelecer opción de metadatos xenérica" msgid "GROUP=KEY[=VALUE]" msgstr "GRUPO=CHAVE[=VALOR]" +#: app/flatpak-builtins-build-finish.c:139 +#, c-format +msgid "Not exporting %s, wrong prefix\n" +msgstr "" + +#: app/flatpak-builtins-build-finish.c:143 +#, c-format +msgid "Exporting %s\n" +msgstr "" + +#: app/flatpak-builtins-build-finish.c:384 +msgid "More than one executable found\n" +msgstr "" + +#: app/flatpak-builtins-build-finish.c:395 +#, c-format +msgid "Using %s as command\n" +msgstr "" + +#: app/flatpak-builtins-build-finish.c:400 +msgid "No executable found\n" +msgstr "" + #: app/flatpak-builtins-build-finish.c:433 #, c-format msgid "Too few elements in --extra-data argument %s" @@ -665,6 +798,12 @@ msgstr "Referencia «%s» non atopada no rexistro" msgid "Multiple images in registry, specify a ref with --ref" msgstr "Imaxes múltiples no rexistro, especifique unha referencia con --ref" +#: app/flatpak-builtins-build-import-bundle.c:123 +#: app/flatpak-builtins-build-import-bundle.c:151 +#, fuzzy, c-format +msgid "Importing %s (%s)\n" +msgstr "Actualizando: %s desde %s\n" + #: app/flatpak-builtins-build-import-bundle.c:172 msgid "LOCATION FILENAME - Import a file bundle into a local repository" msgstr "" @@ -675,7 +814,7 @@ msgstr "" msgid "LOCATION and FILENAME must be specified" msgstr "Debe especificar a LOCALIZACION e o NOMEFICHEIRO" -#: app/flatpak-builtins-build-init.c:49 app/flatpak-builtins-info.c:48 +#: app/flatpak-builtins-build-init.c:49 app/flatpak-builtins-info.c:51 #: app/flatpak-builtins-run.c:52 msgid "Arch to use" msgstr "Arquitectura a usar" @@ -768,7 +907,7 @@ msgstr "" "«%s» non é un nome de tipo de construción válido, use app, runtime ou " "extensión" -#: app/flatpak-builtins-build-init.c:205 app/flatpak-builtins-override.c:71 +#: app/flatpak-builtins-build-init.c:205 app/flatpak-builtins-override.c:74 #, c-format msgid "'%s' is not a valid application name: %s" msgstr "«%s» non é un nome de aplicativo válido: %s" @@ -778,12 +917,14 @@ msgstr "«%s» non é un nome de aplicativo válido: %s" msgid "Build directory %s already initialized" msgstr "Directorio de construción %s xa inicializado" -#: app/flatpak-builtins-build-sign.c:41 app/flatpak-builtins-install.c:56 +#: app/flatpak-builtins-build-sign.c:41 app/flatpak-builtins-info-remote.c:48 +#: app/flatpak-builtins-install.c:57 msgid "Arch to install for" msgstr "Arquitectura para a que instalar" -#: app/flatpak-builtins-build-sign.c:42 app/flatpak-builtins-install.c:62 -#: app/flatpak-builtins-uninstall.c:48 app/flatpak-builtins-update.c:61 +#: app/flatpak-builtins-build-sign.c:42 app/flatpak-builtins-info-remote.c:50 +#: app/flatpak-builtins-install.c:63 app/flatpak-builtins-uninstall.c:48 +#: app/flatpak-builtins-update.c:61 msgid "Look for runtime with the specified name" msgstr "Buscar un aplicativo cun nome específico" @@ -795,11 +936,49 @@ msgstr "LOCALIZACION [ID [RAMA]] - Asina un aplicativo ou runtime" msgid "No gpg key ids specified" msgstr "Non se especificou ningún id de chave de gpg" -#: app/flatpak-builtins-delete-remote.c:37 +#: app/flatpak-builtins-config.c:41 +msgid "List configuration keys and values" +msgstr "" + +#: app/flatpak-builtins-config.c:42 +msgid "Get configuration for KEY" +msgstr "" + +#: app/flatpak-builtins-config.c:43 +msgid "Set configuration for KEY to VALUE" +msgstr "" + +#: app/flatpak-builtins-config.c:44 +msgid "Unset configuration for KEY" +msgstr "" + +#: app/flatpak-builtins-config.c:95 +#, fuzzy, c-format +msgid "Unknown configure key '%s'" +msgstr "Orde descoñecida «%s»" + +#: app/flatpak-builtins-config.c:144 app/flatpak-builtins-config.c:185 +#, fuzzy +msgid "You must specify key" +msgstr "Debe especificar o APP" + +#: app/flatpak-builtins-config.c:166 +msgid "You must specify both key and value" +msgstr "" + +#: app/flatpak-builtins-config.c:204 +msgid "[KEY [VALUE]] - Manage configuration" +msgstr "" + +#: app/flatpak-builtins-config.c:223 +msgid "Must specify one of --list, --get, --set or --unset" +msgstr "" + +#: app/flatpak-builtins-delete-remote.c:38 msgid "Remove remote even if in use" msgstr "Eliminar remoto incluso se está en uso" -#: app/flatpak-builtins-delete-remote.c:49 +#: app/flatpak-builtins-delete-remote.c:51 msgid "NAME - Delete a remote repository" msgstr "NOME - Eliminar un repositorio remoto" @@ -953,165 +1132,253 @@ msgstr "Non é posíbel trocar o GID" msgid "Can't switch uid" msgstr "Non é posíbel trocar o UID" -#: app/flatpak-builtins-info.c:49 app/flatpak-builtins-list.c:46 -#: app/flatpak-builtins-list-remotes.c:43 +#: app/flatpak-builtins-info.c:52 msgid "Show user installations" msgstr "Mostrar instalacións do usuario" -#: app/flatpak-builtins-info.c:50 app/flatpak-builtins-list.c:47 -#: app/flatpak-builtins-list-remotes.c:44 +#: app/flatpak-builtins-info.c:53 msgid "Show system-wide installations" msgstr "Mostrar instalacións do sistema" -#: app/flatpak-builtins-info.c:51 app/flatpak-builtins-list.c:48 -#: app/flatpak-builtins-list-remotes.c:45 +#: app/flatpak-builtins-info.c:54 msgid "Show specific system-wide installations" msgstr "Mostrar instalacións específicas do sistema" -#: app/flatpak-builtins-info.c:52 +#: app/flatpak-builtins-info.c:55 app/flatpak-builtins-info-remote.c:53 msgid "Show ref" msgstr "Mostrar referencia" -#: app/flatpak-builtins-info.c:53 +#: app/flatpak-builtins-info.c:56 app/flatpak-builtins-info-remote.c:54 msgid "Show commit" msgstr "Mostrar remisión" -#: app/flatpak-builtins-info.c:54 +#: app/flatpak-builtins-info.c:57 msgid "Show origin" msgstr "Mostrar orixe" -#: app/flatpak-builtins-info.c:55 +#: app/flatpak-builtins-info.c:58 msgid "Show size" msgstr "Mostrar tamaño" -#: app/flatpak-builtins-info.c:56 +#: app/flatpak-builtins-info.c:59 app/flatpak-builtins-info-remote.c:56 msgid "Show metadata" msgstr "Mostrar metadatos" -#: app/flatpak-builtins-info.c:57 +#: app/flatpak-builtins-info.c:60 +#, fuzzy +msgid "Show permissions" +msgstr "Mostrar extensións" + +#: app/flatpak-builtins-info.c:61 +#, fuzzy +msgid "Query file access" +msgstr "" +"\n" +" Xestionar o acceso ao ficheiro" + +#: app/flatpak-builtins-info.c:61 app/flatpak-builtins-install.c:68 +#: app/flatpak-builtins-update.c:64 +msgid "PATH" +msgstr "RUTA" + +#: app/flatpak-builtins-info.c:62 msgid "Show extensions" msgstr "Mostrar extensións" -#: app/flatpak-builtins-info.c:97 +#: app/flatpak-builtins-info.c:118 msgid "NAME [BRANCH] - Get info about installed app and/or runtime" msgstr "" "NOME [RAMA] - Obtén información sobre o aplicativo e/ou runtime instalado" -#: app/flatpak-builtins-info.c:157 +#: app/flatpak-builtins-info.c:189 msgid "ref not present in origin" msgstr "referencia non presente no orixe" -#: app/flatpak-builtins-info.c:159 +#: app/flatpak-builtins-info.c:202 app/flatpak-builtins-info-remote.c:177 +msgid "Warning: Commit has no flatpak metadata\n" +msgstr "" + +#: app/flatpak-builtins-info.c:209 app/flatpak-builtins-info-remote.c:200 msgid "Ref:" msgstr "Referencia:" -#: app/flatpak-builtins-info.c:160 app/flatpak-builtins-info.c:270 +#: app/flatpak-builtins-info.c:210 app/flatpak-builtins-info.c:364 +#: app/flatpak-builtins-info-remote.c:201 msgid "ID:" msgstr "ID:" -#: app/flatpak-builtins-info.c:161 +#: app/flatpak-builtins-info.c:211 app/flatpak-builtins-info-remote.c:202 msgid "Arch:" msgstr "Arquitectura:" -#: app/flatpak-builtins-info.c:162 +#: app/flatpak-builtins-info.c:212 app/flatpak-builtins-info-remote.c:203 msgid "Branch:" msgstr "Rama:" -#: app/flatpak-builtins-info.c:163 app/flatpak-builtins-info.c:271 +#: app/flatpak-builtins-info.c:213 app/flatpak-builtins-info.c:365 msgid "Origin:" msgstr "Orixe:" -#: app/flatpak-builtins-info.c:166 +#: app/flatpak-builtins-info.c:215 app/flatpak-builtins-info-remote.c:205 +#, fuzzy +msgid "Collection ID:" +msgstr "ID de colección" + +#: app/flatpak-builtins-info.c:217 app/flatpak-builtins-info-remote.c:206 +msgid "Date:" +msgstr "" + +#: app/flatpak-builtins-info.c:219 app/flatpak-builtins-info-remote.c:207 +msgid "Subject:" +msgstr "" + +#: app/flatpak-builtins-info.c:223 msgid "Active commit:" msgstr "Remisión activa:" -#: app/flatpak-builtins-info.c:167 +#: app/flatpak-builtins-info.c:224 msgid "Latest commit:" msgstr "Última remisión:" -#: app/flatpak-builtins-info.c:170 app/flatpak-builtins-info.c:272 +#: app/flatpak-builtins-info.c:227 app/flatpak-builtins-info.c:366 +#: app/flatpak-builtins-info-remote.c:208 msgid "Commit:" msgstr "Remisión:" -#: app/flatpak-builtins-info.c:172 +#: app/flatpak-builtins-info.c:229 msgid "alt-id:" msgstr "alt-id:" -#: app/flatpak-builtins-info.c:173 +#: app/flatpak-builtins-info.c:230 app/flatpak-builtins-info-remote.c:209 +msgid "Parent:" +msgstr "" + +#: app/flatpak-builtins-info.c:231 msgid "Location:" msgstr "Localización:" -#: app/flatpak-builtins-info.c:174 app/flatpak-builtins-info.c:273 +#: app/flatpak-builtins-info.c:232 app/flatpak-builtins-info.c:367 +#: app/flatpak-builtins-info-remote.c:211 msgid "Installed size:" msgstr "Tamaño da instalación:" -#: app/flatpak-builtins-info.c:179 +#: app/flatpak-builtins-info.c:237 app/flatpak-builtins-info-remote.c:216 msgid "Runtime:" msgstr "Runtime:" -#: app/flatpak-builtins-info.c:184 +#: app/flatpak-builtins-info.c:242 msgid "Installed subdirectories:" msgstr "Subdirectorios da instalación:" -#: app/flatpak-builtins-info.c:269 +#: app/flatpak-builtins-info.c:363 msgid "Extension:" msgstr "Extensión:" -#: app/flatpak-builtins-info.c:280 +#: app/flatpak-builtins-info.c:374 msgid "Subpaths:" msgstr "Subdirectorios:" -#: app/flatpak-builtins-install.c:57 -msgid "Don't pull, only install from local cache" -msgstr "Non facer «pull», só instar desde a caché local" +#: app/flatpak-builtins-info-remote.c:49 +msgid "Commit to show info for" +msgstr "" -#: app/flatpak-builtins-install.c:58 app/flatpak-builtins-update.c:57 -msgid "Don't deploy, only download to local cache" -msgstr "No despregar, só descargar á caché local" - -#: app/flatpak-builtins-install.c:59 -msgid "Don't install related refs" -msgstr "Non instalar referencias relacionadas" - -#: app/flatpak-builtins-install.c:60 app/flatpak-builtins-update.c:59 -msgid "Don't verify/install runtime dependencies" -msgstr "Non verificar/instalar as dependencias de runtime" - -#: app/flatpak-builtins-install.c:61 app/flatpak-builtins-update.c:60 -msgid "Don't use static deltas" -msgstr "Non usar deltas estáticos" - -#: app/flatpak-builtins-install.c:63 app/flatpak-builtins-uninstall.c:49 -#: app/flatpak-builtins-update.c:62 +#: app/flatpak-builtins-info-remote.c:51 app/flatpak-builtins-install.c:64 +#: app/flatpak-builtins-uninstall.c:49 app/flatpak-builtins-update.c:62 msgid "Look for app with the specified name" msgstr "Buscar un aplicativo dun nome específico" -#: app/flatpak-builtins-install.c:64 +#: app/flatpak-builtins-info-remote.c:52 +msgid "Display log" +msgstr "" + +#: app/flatpak-builtins-info-remote.c:55 +#, fuzzy +msgid "Show parent" +msgstr "Mostrar referencia" + +#: app/flatpak-builtins-info-remote.c:122 +msgid "" +" REMOTE REF - Show information about an application or runtime in a remote" +msgstr "" + +#: app/flatpak-builtins-info-remote.c:133 app/flatpak-builtins-install.c:499 +msgid "REMOTE and REF must be specified" +msgstr "Debe especificar REMOTO e REF" + +#: app/flatpak-builtins-info-remote.c:210 +#, fuzzy +msgid "Download size:" +msgstr "Tamaño de descarga" + +#: app/flatpak-builtins-info-remote.c:223 +msgid "History:\n" +msgstr "" + +#: app/flatpak-builtins-info-remote.c:244 +msgid " Subject:" +msgstr "" + +#: app/flatpak-builtins-info-remote.c:245 +msgid " Date:" +msgstr "" + +#: app/flatpak-builtins-info-remote.c:246 +#, fuzzy +msgid " Commit:" +msgstr "Remisión:" + +#: app/flatpak-builtins-info-remote.c:292 +#, c-format +msgid "Warning: Commit %s has no flatpak metadata\n" +msgstr "" + +#: app/flatpak-builtins-install.c:58 +msgid "Don't pull, only install from local cache" +msgstr "Non facer «pull», só instar desde a caché local" + +#: app/flatpak-builtins-install.c:59 app/flatpak-builtins-update.c:57 +msgid "Don't deploy, only download to local cache" +msgstr "No despregar, só descargar á caché local" + +#: app/flatpak-builtins-install.c:60 +msgid "Don't install related refs" +msgstr "Non instalar referencias relacionadas" + +#: app/flatpak-builtins-install.c:61 app/flatpak-builtins-update.c:59 +msgid "Don't verify/install runtime dependencies" +msgstr "Non verificar/instalar as dependencias de runtime" + +#: app/flatpak-builtins-install.c:62 app/flatpak-builtins-update.c:60 +msgid "Don't use static deltas" +msgstr "Non usar deltas estáticos" + +#: app/flatpak-builtins-install.c:65 msgid "Assume LOCATION is a .flatpak single-file bundle" msgstr "Asume que LOCALIZACION é un paquete .flatpak dun só ficheiro." -#: app/flatpak-builtins-install.c:65 +#: app/flatpak-builtins-install.c:66 msgid "Assume LOCATION is a .flatpakref application description" msgstr "Asume que LOCALIZACION é uha descrición de aplicativo .flatpakref" -#: app/flatpak-builtins-install.c:66 +#: app/flatpak-builtins-install.c:67 msgid "Check bundle signatures with GPG key from FILE (- for stdin)" msgstr "" "Comproba as sinaturas do paquete coa chave GPG dese o FICHEIRO (- para stdin)" -#: app/flatpak-builtins-install.c:67 +#: app/flatpak-builtins-install.c:68 msgid "Only install this subpath" msgstr "Só instalar esta subruta" -#: app/flatpak-builtins-install.c:67 app/flatpak-builtins-update.c:64 -msgid "PATH" -msgstr "RUTA" - -#: app/flatpak-builtins-install.c:68 app/flatpak-builtins-update.c:65 +#: app/flatpak-builtins-install.c:69 app/flatpak-builtins-update.c:65 msgid "Automatically answer yes for all questions" msgstr "Responder si automaticamente para todas as preguntas" -#: app/flatpak-builtins-install.c:210 +#: app/flatpak-builtins-install.c:70 +#, fuzzy +msgid "Uninstall first if already installed" +msgstr "%s remisión %s xa instalado" + +#: app/flatpak-builtins-install.c:212 #, c-format msgid "" "This application depends on runtimes from:\n" @@ -1122,151 +1389,148 @@ msgstr "" " %s\n" "Configure esta como o novo remoto «%s»" -#: app/flatpak-builtins-install.c:214 app/flatpak-builtins-install.c:340 +#: app/flatpak-builtins-install.c:216 app/flatpak-builtins-install.c:342 #, c-format msgid "Configuring %s as new remote '%s'" msgstr "Configurar %s como un novo remoto «%s»" -#: app/flatpak-builtins-install.c:262 +#: app/flatpak-builtins-install.c:264 msgid "Bundle filename must be specified" msgstr "Debe especificar o nome de ficheiro do paquete" -#: app/flatpak-builtins-install.c:272 +#: app/flatpak-builtins-install.c:274 msgid "Remote bundles are not supported" msgstr "Non se admiten os paquetes remotos" -#: app/flatpak-builtins-install.c:336 -#, c-format +#: app/flatpak-builtins-install.c:338 +#, fuzzy, c-format msgid "" "The remote '%s', at location %s contains additional applications.\n" -"Do you want to install other applications from here?" +"Should the remote be kept for future installations?" msgstr "" "O remoto «%s», na localización %s contén aplicativos adicinais.\n" "Desexa instalar outros aplicativos desde aquí?" -#: app/flatpak-builtins-install.c:396 +#: app/flatpak-builtins-install.c:398 msgid "Filename or uri must be specified" msgstr "Debe especificar o nome de ficheiro ou uri" -#: app/flatpak-builtins-install.c:440 +#: app/flatpak-builtins-install.c:442 #, c-format msgid "Installing: %s\n" msgstr "Instalando: %s\n" -#: app/flatpak-builtins-install.c:470 +#: app/flatpak-builtins-install.c:474 msgid "LOCATION/REMOTE [REF...] - Install applications or runtimes" msgstr "LOCALIZACION/REMOTO [REF...] - Instalar aplicativos ou runtimes" -#: app/flatpak-builtins-install.c:491 -msgid "REMOTE and REF must be specified" -msgstr "Debe especificar REMOTO e REF" - -#: app/flatpak-builtins-list.c:49 +#: app/flatpak-builtins-list.c:43 msgid "Show extra information" msgstr "Mostrar información adicional" -#: app/flatpak-builtins-list.c:50 +#: app/flatpak-builtins-list.c:44 msgid "List installed runtimes" msgstr "Mostrar os runtime instalados" -#: app/flatpak-builtins-list.c:51 +#: app/flatpak-builtins-list.c:45 msgid "List installed applications" msgstr "Mostrar os aplicativos instalados" -#: app/flatpak-builtins-list.c:52 +#: app/flatpak-builtins-list.c:46 msgid "Arch to show" msgstr "Arquitectura a mostrar" -#: app/flatpak-builtins-list.c:53 app/flatpak-builtins-ls-remote.c:49 +#: app/flatpak-builtins-list.c:47 app/flatpak-builtins-ls-remote.c:50 msgid "List all refs (including locale/debug)" msgstr "Mostrar todas as referencias (incluíndo as locais/depuración)" -#: app/flatpak-builtins-list.c:131 app/flatpak-builtins-ls-remote.c:129 +#: app/flatpak-builtins-list.c:125 app/flatpak-builtins-ls-remote.c:174 #: app/flatpak-builtins-repo.c:98 msgid "Ref" msgstr "Referencia" -#: app/flatpak-builtins-list.c:134 app/flatpak-builtins-ls-remote.c:131 +#: app/flatpak-builtins-list.c:128 app/flatpak-builtins-ls-remote.c:176 msgid "Origin" msgstr "Orixe" -#: app/flatpak-builtins-list.c:135 +#: app/flatpak-builtins-list.c:129 msgid "Active commit" msgstr "Remisión activa" -#: app/flatpak-builtins-list.c:136 +#: app/flatpak-builtins-list.c:130 msgid "Latest commit" msgstr "Última remisión" -#: app/flatpak-builtins-list.c:137 app/flatpak-builtins-ls-remote.c:133 +#: app/flatpak-builtins-list.c:131 app/flatpak-builtins-ls-remote.c:178 msgid "Installed size" msgstr "Tamaño instalado" -#: app/flatpak-builtins-list.c:139 app/flatpak-builtins-list-remotes.c:112 +#: app/flatpak-builtins-list.c:133 app/flatpak-builtins-list-remotes.c:73 msgid "Options" msgstr "Opcións" -#: app/flatpak-builtins-list.c:375 +#: app/flatpak-builtins-list.c:305 msgid " - List installed apps and/or runtimes" msgstr " - Lista os aplicativos instalados e/ou runtimes" -#: app/flatpak-builtins-list-remotes.c:46 +#: app/flatpak-builtins-list-remotes.c:40 msgid "Show remote details" msgstr "Mostrar información do remoto" -#: app/flatpak-builtins-list-remotes.c:47 +#: app/flatpak-builtins-list-remotes.c:41 msgid "Show disabled remotes" msgstr "Mostrar remotos desactivados" -#: app/flatpak-builtins-list-remotes.c:59 +#: app/flatpak-builtins-list-remotes.c:53 msgid " - List remote repositories" msgstr " - Lista os repositorios remotos" -#: app/flatpak-builtins-list-remotes.c:105 +#: app/flatpak-builtins-list-remotes.c:66 msgid "Name" msgstr "Nome" -#: app/flatpak-builtins-list-remotes.c:108 +#: app/flatpak-builtins-list-remotes.c:69 msgid "Title" msgstr "Título" -#: app/flatpak-builtins-list-remotes.c:110 +#: app/flatpak-builtins-list-remotes.c:71 msgid "Priority" msgstr "Prioridade" -#: app/flatpak-builtins-ls-remote.c:44 +#: app/flatpak-builtins-ls-remote.c:45 msgid "Show arches and branches" msgstr "Mostrar arquitecturas e ramas" -#: app/flatpak-builtins-ls-remote.c:45 +#: app/flatpak-builtins-ls-remote.c:46 msgid "Show only runtimes" msgstr "Mostrar só os runtimes" -#: app/flatpak-builtins-ls-remote.c:46 +#: app/flatpak-builtins-ls-remote.c:47 msgid "Show only apps" msgstr "Mostrar só os aplicativos" -#: app/flatpak-builtins-ls-remote.c:47 +#: app/flatpak-builtins-ls-remote.c:48 msgid "Show only those where updates are available" msgstr "Mostrar só aqueles para os que haxa actualizacións" -#: app/flatpak-builtins-ls-remote.c:48 +#: app/flatpak-builtins-ls-remote.c:49 msgid "Limit to this arch (* for all)" msgstr "Limitar a esta arquitectura (* para todas)" -#: app/flatpak-builtins-ls-remote.c:74 -msgid " REMOTE - Show available runtimes and applications" +#: app/flatpak-builtins-ls-remote.c:96 +#, fuzzy +msgid " [REMOTE] - Show available runtimes and applications" msgstr " REMOTO - Mostrar os runtimes e aplicativos dispoñíbeis" -#: app/flatpak-builtins-ls-remote.c:132 +#: app/flatpak-builtins-ls-remote.c:177 msgid "Commit" msgstr "Remisión" -#: app/flatpak-builtins-ls-remote.c:134 +#: app/flatpak-builtins-ls-remote.c:179 msgid "Download size" msgstr "Tamaño de descarga" -#: app/flatpak-builtins-ls-remote.c:245 +#: app/flatpak-builtins-ls-remote.c:304 msgid "No ref information available in repository" msgstr "Non hai información dispoñíbel para a referencia no repositorio" @@ -1274,28 +1538,63 @@ msgstr "Non hai información dispoñíbel para a referencia no repositorio" msgid "Arch to make current for" msgstr "Arquitectura que facer a actual" -#: app/flatpak-builtins-make-current.c:57 +#: app/flatpak-builtins-make-current.c:58 msgid "APP BRANCH - Make branch of application current" msgstr "APP RAMA - Facer actual a rama do aplicativo" -#: app/flatpak-builtins-make-current.c:64 app/flatpak-builtins-override.c:63 -#: app/flatpak-builtins-run.c:105 +#: app/flatpak-builtins-make-current.c:69 app/flatpak-builtins-run.c:105 msgid "APP must be specified" msgstr "Debe especificar o APP" -#: app/flatpak-builtins-make-current.c:79 +#: app/flatpak-builtins-make-current.c:84 msgid "BRANCH must be specified" msgstr "Debe especificar a RAMA" -#: app/flatpak-builtins-make-current.c:92 +#: app/flatpak-builtins-make-current.c:97 #, c-format msgid "App %s branch %s is not installed" msgstr "O aplicativo %s rama %s non está instalado" -#: app/flatpak-builtins-override.c:53 -msgid "APP - Override settings for application" +#: app/flatpak-builtins-override.c:54 +#, fuzzy +msgid "[APP] - Override settings [for application]" msgstr "APP - Sobrescribir as configuracións do aplicativo" +#: app/flatpak-builtins-repo.c:48 +#, fuzzy, c-format +msgid "Title: %s\n" +msgstr "Título" + +#: app/flatpak-builtins-repo.c:51 +#, fuzzy, c-format +msgid "Collection ID: %s\n" +msgstr "ID de colección" + +#: app/flatpak-builtins-repo.c:54 +#, c-format +msgid "Default branch: %s\n" +msgstr "" + +#: app/flatpak-builtins-repo.c:57 +#, c-format +msgid "Redirect URL: %s\n" +msgstr "" + +#: app/flatpak-builtins-repo.c:60 +#, fuzzy, c-format +msgid "Redirect collection ID: %s\n" +msgstr "ID de colección" + +#: app/flatpak-builtins-repo.c:68 +#, c-format +msgid "GPG key hash: %s\n" +msgstr "" + +#: app/flatpak-builtins-repo.c:77 +#, c-format +msgid "%zd branches\n" +msgstr "" + #: app/flatpak-builtins-repo.c:99 msgid "Installed" msgstr "Instalado" @@ -1316,7 +1615,7 @@ msgstr "Mostra as ramas no repositorio" msgid "Print metadata for a branch" msgstr "Imprime os metadatos para unha rama" -#: app/flatpak-builtins-repo.c:167 +#: app/flatpak-builtins-repo.c:168 msgid "LOCATION - Repository maintenance" msgstr "LOCALIZACION - Mantemento do repositorio" @@ -1430,14 +1729,6 @@ msgstr "Runtime a usar" msgid "Runtime version to use" msgstr "Versión do runtime a usar" -#: app/flatpak-builtins-run.c:58 -msgid "Log session bus calls" -msgstr "Rexistrar chamadas ao bus de sesión" - -#: app/flatpak-builtins-run.c:59 -msgid "Log system bus calls" -msgstr "Rexistrar chamadas ao bus de sistema" - #: app/flatpak-builtins-run.c:60 msgid "Log accessibility bus calls" msgstr "Rexistrar chamadas ao bus de accesibilidade" @@ -1450,6 +1741,44 @@ msgstr "Activar redirección de ficheiro" msgid "APP [args...] - Run an app" msgstr "APP [argumentos...] - Executa un aplicativo" +#: app/flatpak-builtins-search.c:239 +msgid "TEXT - Search remote apps/runtimes for text" +msgstr "" + +#: app/flatpak-builtins-search.c:249 +#, fuzzy +msgid "TEXT must be specified" +msgstr "Debe especificar o NOME" + +#: app/flatpak-builtins-search.c:305 +#, fuzzy +msgid "Application ID" +msgstr "ID de colección" + +#: app/flatpak-builtins-search.c:306 +msgid "Version" +msgstr "" + +#: app/flatpak-builtins-search.c:308 +#, fuzzy +msgid "Branch" +msgstr "Rama:" + +#: app/flatpak-builtins-search.c:310 +#, fuzzy +msgid "Remotes" +msgstr "Sen remoto %s" + +#: app/flatpak-builtins-search.c:311 +#, fuzzy +msgid "Description" +msgstr "Descrición completa" + +#: app/flatpak-builtins-search.c:320 +#, fuzzy +msgid "No matches found" +msgstr "Nada coincide con %s" + #: app/flatpak-builtins-uninstall.c:44 msgid "Arch to uninstall" msgstr "Arquitectura a desinstalar" @@ -1466,19 +1795,24 @@ msgstr "Non desinstalar as referencias relacionadas" msgid "Remove files even if running" msgstr "Eliminar os ficheiros incluso se está en execución" -#: app/flatpak-builtins-uninstall.c:69 +#: app/flatpak-builtins-uninstall.c:70 msgid "REF... - Uninstall an application" msgstr "REF... - Desinstalar un aplicativo" -#: app/flatpak-builtins-uninstall.c:76 +#: app/flatpak-builtins-uninstall.c:81 msgid "Must specify at least one REF" msgstr "Debe especificar cando menos unha vez a REF" -#: app/flatpak-builtins-uninstall.c:129 app/flatpak-transaction.c:340 +#: app/flatpak-builtins-uninstall.c:134 app/flatpak-transaction.c:355 #, c-format msgid "Warning: Problem looking for related refs: %s\n" msgstr "Aviso: Problema ao buscar por referencias relacionadas: %s\n" +#: app/flatpak-builtins-uninstall.c:164 +#, fuzzy, c-format +msgid "Uninstalling: %s\n" +msgstr "Instalando: %s\n" + #: app/flatpak-builtins-update.c:53 msgid "Arch to update for" msgstr "Arquitectura para a que actualizar" @@ -1487,10 +1821,6 @@ msgstr "Arquitectura para a que actualizar" msgid "Commit to deploy" msgstr "Remisión a despregar" -#: app/flatpak-builtins-update.c:54 -msgid "COMMIT" -msgstr "REMISIÓN" - #: app/flatpak-builtins-update.c:55 msgid "Remove old files even if running" msgstr "Eliminar os ficheiros antigos incluso se está en execución" @@ -1511,42 +1841,95 @@ msgstr "Actualizar appstream desde o remoto" msgid "Only update this subpath" msgstr "Só actualizar esta subruta" -#: app/flatpak-builtins-update.c:95 -#, c-format -msgid "Updating appstream for remote %s\n" -msgstr "Actualizando appstream para o remoto %s\n" - -#: app/flatpak-builtins-update.c:133 +#: app/flatpak-builtins-update.c:83 msgid "[REF...] - Update applications or runtimes" msgstr "[REF...] - Actualizar aplicativos ou runtimes" +#: app/flatpak-builtins-update.c:119 +#, fuzzy +msgid "Looking for updates...\n" +msgstr "Non hai actualizacións.\n" + +#: app/flatpak-builtins-utils.c:365 +#, c-format +msgid "Remote ‘%s’ found in multiple installations:\n" +msgstr "" + +#: app/flatpak-builtins-utils.c:372 +#, fuzzy +msgid "Which do you want to use (0 to abort)?" +msgstr "Cal desexa instalar (0 para abortar)?" + +#: app/flatpak-builtins-utils.c:374 +#, c-format +msgid "No remote chosen to resolve ‘%s’ which exists in multiple installations" +msgstr "" + +#: app/flatpak-builtins-utils.c:479 app/flatpak-builtins-utils.c:481 +#, fuzzy, c-format +msgid "Updating appstream data for user remote %s\n" +msgstr "Actualizando appstream para o remoto %s\n" + +#: app/flatpak-builtins-utils.c:486 app/flatpak-builtins-utils.c:488 +#, fuzzy, c-format +msgid "Updating appstream data for remote %s\n" +msgstr "Actualizando appstream para o remoto %s\n" + +#: app/flatpak-builtins-utils.c:493 +#, fuzzy, c-format +msgid "Error updating: %s\n" +msgstr "" +"Produciuse un erro ao actualizar os metadatos adicionais para «%s»: %s\n" + +#: app/flatpak-builtins-utils.c:526 +#, c-format +msgid "Remote \"%s\" not found" +msgstr "" + #. translators: please keep the leading space -#: app/flatpak-main.c:61 +#: app/flatpak-main.c:62 msgid " Manage installed apps and runtimes" msgstr " Xestionar os aplicativos ou runtimes instalados" -#: app/flatpak-main.c:62 +#: app/flatpak-main.c:63 msgid "Install an application or runtime" msgstr "Instalar un aplicativo ou runtime" -#: app/flatpak-main.c:63 +#: app/flatpak-main.c:64 msgid "Update an installed application or runtime" msgstr "Actualizar un aplicativo ou runtime instalado" -#: app/flatpak-main.c:64 +#: app/flatpak-main.c:65 msgid "Uninstall an installed application or runtime" msgstr "Desinstalar un aplicativo ou runtime instalado" -#: app/flatpak-main.c:65 +#: app/flatpak-main.c:66 msgid "List installed apps and/or runtimes" msgstr "Mostrar os aplicativos e/ou runtimes instalados" -#: app/flatpak-main.c:66 +#: app/flatpak-main.c:67 msgid "Show info for installed app or runtime" msgstr "Mostrar información para os aplicativos ou runtime instalados" +#: app/flatpak-main.c:68 +#, fuzzy +msgid "Configure flatpak" +msgstr "Configurar remoto" + #. translators: please keep the leading newline and space -#: app/flatpak-main.c:69 +#: app/flatpak-main.c:71 +#, fuzzy +msgid "" +"\n" +" Finding applications and runtimes" +msgstr "Asinar un aplicativo ou runtime" + +#: app/flatpak-main.c:72 +msgid "Search for remote apps/runtimes" +msgstr "" + +#. translators: please keep the leading newline and space +#: app/flatpak-main.c:75 msgid "" "\n" " Running applications" @@ -1554,24 +1937,24 @@ msgstr "" "\n" " Aplicativos en execución" -#: app/flatpak-main.c:70 +#: app/flatpak-main.c:76 msgid "Run an application" msgstr "Executa un aplicativo" -#: app/flatpak-main.c:71 +#: app/flatpak-main.c:77 msgid "Override permissions for an application" msgstr "Sobrescribir permisos para un aplicativo" -#: app/flatpak-main.c:72 +#: app/flatpak-main.c:78 msgid "Specify default version to run" msgstr "Especifica a versión por omisión a executar" -#: app/flatpak-main.c:73 +#: app/flatpak-main.c:79 msgid "Enter the namespace of a running application" msgstr "Entrar no espazo de nomes dun aplicativo en execución" #. translators: please keep the leading newline and space -#: app/flatpak-main.c:76 +#: app/flatpak-main.c:82 msgid "" "\n" " Manage file access" @@ -1579,24 +1962,24 @@ msgstr "" "\n" " Xestionar o acceso ao ficheiro" -#: app/flatpak-main.c:77 +#: app/flatpak-main.c:83 msgid "Grant an application access to a specific file" msgstr "Darlle a un aplicativo acceso a un ficheiro específico" -#: app/flatpak-main.c:78 +#: app/flatpak-main.c:84 msgid "Revoke access to a specific file" msgstr "Revogar acceso a un ficheiro específico" -#: app/flatpak-main.c:79 +#: app/flatpak-main.c:85 msgid "Show information about a specific file" msgstr "Mostrar información sobre un ficheiro específico" -#: app/flatpak-main.c:80 +#: app/flatpak-main.c:86 msgid "List exported files" msgstr "Mostrar os ficheiros exportados" #. translators: please keep the leading newline and space -#: app/flatpak-main.c:83 +#: app/flatpak-main.c:89 msgid "" "\n" " Manage remote repositories" @@ -1604,28 +1987,33 @@ msgstr "" "\n" " Xestionar os repositorios remotos" -#: app/flatpak-main.c:84 +#: app/flatpak-main.c:90 msgid "List all configured remotes" msgstr "Mostrar todos os remotos configurados" -#: app/flatpak-main.c:85 +#: app/flatpak-main.c:91 msgid "Add a new remote repository (by URL)" msgstr "Engadir un repositorio remoto novo (por URL)" -#: app/flatpak-main.c:86 +#: app/flatpak-main.c:92 msgid "Modify properties of a configured remote" msgstr "Modificar as propiedades dun remoto configurado" -#: app/flatpak-main.c:87 +#: app/flatpak-main.c:93 msgid "Delete a configured remote" msgstr "Eliminar un remoto configurado" -#: app/flatpak-main.c:89 +#: app/flatpak-main.c:95 msgid "List contents of a configured remote" msgstr "Mostrar os contidos dun remoto configurado" +#: app/flatpak-main.c:96 +#, fuzzy +msgid "Show information about a remote app or runtime" +msgstr "Mostrar información para os aplicativos ou runtime instalados" + #. translators: please keep the leading newline and space -#: app/flatpak-main.c:92 +#: app/flatpak-main.c:99 msgid "" "\n" " Build applications" @@ -1633,506 +2021,285 @@ msgstr "" "\n" " Construír aplicativos" -#: app/flatpak-main.c:93 +#: app/flatpak-main.c:100 msgid "Initialize a directory for building" msgstr "Inicializar un directorio para a construción" -#: app/flatpak-main.c:94 +#: app/flatpak-main.c:101 msgid "Run a build command inside the build dir" msgstr "Executar unha orde de construción dentro do directorio de construción" -#: app/flatpak-main.c:95 +#: app/flatpak-main.c:102 msgid "Finish a build dir for export" msgstr "Rematar un directorio de construción para exportar" -#: app/flatpak-main.c:96 +#: app/flatpak-main.c:103 msgid "Export a build dir to a repository" msgstr "Exportar un directorio de construción a un repositorio" -#: app/flatpak-main.c:97 -msgid "Create a bundle file from a build directory" +#: app/flatpak-main.c:104 +#, fuzzy +msgid "Create a bundle file from a ref in a local repository" msgstr "Crear un ficheiro empaquetado desde un directorio de construción" -#: app/flatpak-main.c:98 +#: app/flatpak-main.c:105 msgid "Import a bundle file" msgstr "Importar un ficheiro empaquetado" -#: app/flatpak-main.c:99 +#: app/flatpak-main.c:106 msgid "Sign an application or runtime" msgstr "Asinar un aplicativo ou runtime" -#: app/flatpak-main.c:100 +#: app/flatpak-main.c:107 msgid "Update the summary file in a repository" msgstr "Actualizaar o ficheiro de resumo no repositorio" -#: app/flatpak-main.c:101 +#: app/flatpak-main.c:108 msgid "Create new commit based on existing ref" msgstr "Crear nova remisión baseada na referencia existente" -#: app/flatpak-main.c:102 +#: app/flatpak-main.c:109 msgid "Print information about a repo" msgstr "Imprimir información sobre un repositorio" -#: app/flatpak-main.c:119 +#: app/flatpak-main.c:126 #, fuzzy msgid "Print debug information during command processing, -vv for more detail" msgstr "Imprimir información de depuración durante o procesado da orde" -#: app/flatpak-main.c:120 +#: app/flatpak-main.c:127 msgid "Print OSTree debug information during command processing" msgstr "" "Imprimir a información de depuración de OSTree durante o procesado da orde" -#: app/flatpak-main.c:121 +#: app/flatpak-main.c:128 msgid "Show help options" msgstr "Mostrar as opcións de axuda" -#: app/flatpak-main.c:126 +#: app/flatpak-main.c:133 msgid "Print version information and exit" msgstr "Imprimir información da versión e saír" -#: app/flatpak-main.c:127 +#: app/flatpak-main.c:134 msgid "Print default arch and exit" msgstr "Imprimir arquitectura por omisión e saír" -#: app/flatpak-main.c:128 +#: app/flatpak-main.c:135 msgid "Print supported arches and exit" msgstr "Imprimir as arquitecturas compatíbeis e saír" -#: app/flatpak-main.c:129 +#: app/flatpak-main.c:136 msgid "Print active gl drivers and exit" msgstr "Imprimir os controladores gl activos e saír" -#: app/flatpak-main.c:134 +#: app/flatpak-main.c:141 msgid "Work on user installations" msgstr "Traballar nas instalacións de usuario" -#: app/flatpak-main.c:135 +#: app/flatpak-main.c:142 msgid "Work on system-wide installations (default)" msgstr "Traballar nas instalacións a nivel de sistema (por omisión)" -#: app/flatpak-main.c:136 -msgid "Work on a specific system-wide installation" +#: app/flatpak-main.c:143 +#, fuzzy +msgid "Work on specific system-wide installation(s)" msgstr "Traballar nunha instalación a nivel de sistema específica" -#: app/flatpak-main.c:136 +#: app/flatpak-main.c:143 msgid "NAME" msgstr "NOME" -#: app/flatpak-main.c:162 +#: app/flatpak-main.c:169 msgid "Builtin Commands:" msgstr "Ordes incrustadas:" -#: app/flatpak-main.c:388 +#: app/flatpak-main.c:370 +msgid "" +"The --installation option was used multiple times for a command that works " +"on one installation" +msgstr "" + +#: app/flatpak-main.c:489 #, c-format msgid "Unknown command '%s'" msgstr "Orde descoñecida «%s»" -#: app/flatpak-main.c:396 +#: app/flatpak-main.c:497 msgid "No command specified" msgstr "Non se especificou ningunha orde" -#: app/flatpak-main.c:514 +#: app/flatpak-main.c:615 msgid "error:" msgstr "erro:" -#: app/flatpak-transaction.c:302 +#: app/flatpak-transaction.c:313 +#, fuzzy, c-format +msgid "Found in remote %s\n" +msgstr "Atopado en varios remotos:\n" + +#: app/flatpak-transaction.c:317 #, c-format msgid "Found in remote %s, do you want to install it?" msgstr "Atopado no remoto %s, desexa instalalo?" -#: app/flatpak-transaction.c:307 +#: app/flatpak-transaction.c:322 msgid "Found in several remotes:\n" msgstr "Atopado en varios remotos:\n" -#: app/flatpak-transaction.c:312 +#: app/flatpak-transaction.c:327 msgid "Which do you want to install (0 to abort)?" msgstr "Cal desexa instalar (0 para abortar)?" -#: app/flatpak-transaction.c:402 +#: app/flatpak-transaction.c:417 #, c-format msgid "Required runtime for %s (%s) is not installed, searching...\n" msgstr "O runtime requirido para %s (%s) non instalado, buscando…\n" -#: app/flatpak-transaction.c:408 +#: app/flatpak-transaction.c:423 #, c-format msgid "The required runtime %s was not found in a configured remote.\n" msgstr "O runtime %s requirido non se atopou nun remoto configurado.\n" -#: app/flatpak-transaction.c:469 common/flatpak-dir.c:1127 -#: common/flatpak-dir.c:1433 common/flatpak-dir.c:1456 -#: common/flatpak-dir.c:1478 common/flatpak-dir.c:10136 -#: common/flatpak-utils.c:1272 common/flatpak-utils.c:1366 +#: app/flatpak-transaction.c:506 common/flatpak-dir.c:1160 +#: common/flatpak-dir.c:1479 common/flatpak-dir.c:1502 +#: common/flatpak-dir.c:1524 common/flatpak-dir.c:10655 +#: common/flatpak-utils.c:1312 common/flatpak-utils.c:1406 #, c-format msgid "%s not installed" msgstr "%s non instalado" -#: app/flatpak-transaction.c:475 +#: app/flatpak-transaction.c:512 #, c-format msgid "Remote %s disabled, ignoring %s update" msgstr "Remoto %s descactivado, ignorando a actualización %s" -#: app/flatpak-transaction.c:485 +#: app/flatpak-transaction.c:525 #, c-format msgid "%s already installed, skipping\n" msgstr "%s xa está instalado, omitindo\n" -#: app/flatpak-transaction.c:529 +#: app/flatpak-transaction.c:531 +#, fuzzy, c-format +msgid "%s is already installed from other remote (%s)" +msgstr "%s remisión %s xa instalado" + +#: app/flatpak-transaction.c:543 +#, c-format +msgid "Warning: Can't find dependencies: %s\n" +msgstr "" + +#: app/flatpak-transaction.c:570 +#, c-format +msgid "Invalid require-flatpak argument %s\n" +msgstr "" + +#: app/flatpak-transaction.c:576 #, c-format msgid "%s needs a later flatpak version (%s)" msgstr "%s precisa unha versión de flatpak posterior (%s)" -#: app/flatpak-transaction.c:704 +#: app/flatpak-transaction.c:688 +#, fuzzy, c-format +msgid "Error updating remote metadata for '%s': %s\n" +msgstr "" +"Produciuse un erro ao actualizar os metadatos adicionais para «%s»: %s\n" + +#: app/flatpak-transaction.c:744 msgid "install" msgstr "instalar" -#: app/flatpak-transaction.c:705 +#: app/flatpak-transaction.c:746 +#, fuzzy, c-format +msgid "Installing for user: %s from %s\n" +msgstr "Instalando: %s desde %s\n" + +#: app/flatpak-transaction.c:748 #, c-format msgid "Installing: %s from %s\n" msgstr "Instalando: %s desde %s\n" -#: app/flatpak-transaction.c:721 +#: app/flatpak-transaction.c:765 msgid "update" msgstr "actualizar" -#: app/flatpak-transaction.c:729 +#: app/flatpak-transaction.c:774 +#, fuzzy, c-format +msgid "Updating for user: %s from %s\n" +msgstr "Actualizando: %s desde %s\n" + +#: app/flatpak-transaction.c:776 #, c-format msgid "Updating: %s from %s\n" msgstr "Actualizando: %s desde %s\n" -#: app/flatpak-transaction.c:749 +#: app/flatpak-transaction.c:796 #, c-format msgid "Now at %s.\n" msgstr "Agora en %s.\n" -#: app/flatpak-transaction.c:755 +#: app/flatpak-transaction.c:802 msgid "No updates.\n" msgstr "Non hai actualizacións.\n" -#: app/flatpak-transaction.c:773 +#: app/flatpak-transaction.c:820 msgid "install bundle" msgstr "instalar paquete" -#: app/flatpak-transaction.c:774 +#: app/flatpak-transaction.c:822 +#, fuzzy, c-format +msgid "Installing for user: %s from bundle %s\n" +msgstr "Instalando: %s desde o paquete %s\n" + +#: app/flatpak-transaction.c:824 #, c-format msgid "Installing: %s from bundle %s\n" msgstr "Instalando: %s desde o paquete %s\n" -#: app/flatpak-transaction.c:786 +#: app/flatpak-transaction.c:836 #, c-format msgid "Warning: Failed to %s %s: %s\n" msgstr "Aviso: fallou o %s %s: %s\n" -#: app/flatpak-transaction.c:791 +#: app/flatpak-transaction.c:841 #, c-format msgid "Error: Failed to %s %s: %s\n" msgstr "Erro: fallou o %s %s: %s\n" -#: app/flatpak-transaction.c:796 +#: app/flatpak-transaction.c:846 msgid "One or more operations failed" msgstr "Fallaron unha ou máis operacións" -#: common/flatpak-dir.c:1015 -#, c-format -msgid "No overrides found for %s" -msgstr "Non se atopou ningunha sobrescritura para %s" - -#: common/flatpak-dir.c:1611 -#, c-format -msgid "While opening repository %s: " -msgstr "Ao abrir o repositorio %s: " - -#: common/flatpak-dir.c:1770 common/flatpak-dir.c:5109 -msgid "Can't create deploy directory" -msgstr "Non é posíbel crear o directorio de despregue" - -#: common/flatpak-dir.c:2450 -#, c-format -msgid "Invalid sha256 for extra data uri %s" -msgstr "SHA256 non válido para o uri de datos adicionais %s" - -#: common/flatpak-dir.c:2455 -#, c-format -msgid "Empty name for extra data uri %s" -msgstr "Nome baleiro para o uri de datos adicinais %s" - -#: common/flatpak-dir.c:2462 -#, c-format -msgid "Unsupported extra data uri %s" -msgstr "URI de datos adicinais %s non admitido" - -#: common/flatpak-dir.c:2476 -#, c-format -msgid "Failed to load local extra-data %s: %s" -msgstr "Produciuse un fallo ao cargar os datos adicinais locais %s: %s" - -#: common/flatpak-dir.c:2479 -#, c-format -msgid "Wrong size for extra-data %s" -msgstr "Tamaño dos datos adicinais incorrecto %s" - -#: common/flatpak-dir.c:2494 -#, c-format -msgid "While downloading %s: " -msgstr "Ao descargar %s: " - -#: common/flatpak-dir.c:2501 -#, c-format -msgid "Wrong size for extra data %s" -msgstr "Tamaño dos datos adicinais %s incorrecto" - -#: common/flatpak-dir.c:2512 -#, c-format -msgid "Invalid checksum for extra data %s" -msgstr "Suma de verificación non válida para os datos adicinais %s" - -#: common/flatpak-dir.c:2768 -#, c-format -msgid "%s commit %s already installed" -msgstr "%s remisión %s xa instalado" - -#: common/flatpak-dir.c:3097 common/flatpak-dir.c:3411 -#, c-format -msgid "While pulling %s from remote %s: " -msgstr "Ao obter %s desde o remoto %s: " - -#: common/flatpak-dir.c:3296 -#, c-format -msgid "Can't find %s in remote %s" -msgstr "Non é posíbel atopar %s no remoto %s" - -#: common/flatpak-dir.c:3969 -msgid "Not enough memory" -msgstr "Non hai momoria dabondo" - -#: common/flatpak-dir.c:3988 -msgid "Failed to read from exported file" -msgstr "Produciuse un fallo ao ler o ficheiro exportado" - -#: common/flatpak-dir.c:4179 -msgid "Error reading mimetype xml file" -msgstr "Produciuse un erro ao ler o ficheiro xml de mimetype" - -#: common/flatpak-dir.c:4184 -msgid "Invalid mimetype xml file" -msgstr "Ficheiro xml de mimetype non válido" - -#: common/flatpak-dir.c:4726 -msgid "While getting detached metadata: " -msgstr "Mentres se obtiñan os metadatos desanexados: " - -#: common/flatpak-dir.c:4744 -msgid "While creating extradir: " -msgstr "Ao crear o directorio adicional: " - -#: common/flatpak-dir.c:4765 -msgid "Invalid sha256 for extra data" -msgstr "SHA256 non válido para os datos adicionais" - -#: common/flatpak-dir.c:4794 -msgid "Wrong size for extra data" -msgstr "Tamaño dos datos adicinais incorrecto" - -#: common/flatpak-dir.c:4798 -msgid "Invalid checksum for extra data" -msgstr "Suma de verificación non válida para os datos adicinais" - -#: common/flatpak-dir.c:4807 -#, c-format -msgid "While writing extra data file '%s': " -msgstr "Ao escribir o ficheiro de datos adicionais «%s»: " - -#: common/flatpak-dir.c:4991 -#, c-format -msgid "apply_extra script failed, exit status %d" -msgstr "apply_extra script failed, estado de saída %d" - -#: common/flatpak-dir.c:5068 -#, c-format -msgid "While trying to resolve ref %s: " -msgstr "Ao tentar resolver a referencia %s: " - -#: common/flatpak-dir.c:5083 -#, c-format -msgid "%s is not available" -msgstr "%s non está dispoñíbel" - -#: common/flatpak-dir.c:5098 common/flatpak-dir.c:5436 -#: common/flatpak-dir.c:6204 common/flatpak-dir.c:6217 -#: common/flatpak-dir.c:6293 -#, c-format -msgid "%s branch %s already installed" -msgstr "%s rama %s xa instalado" - -#: common/flatpak-dir.c:5117 -#, c-format -msgid "Failed to read commit %s: " -msgstr "Produciuse un fallo ao ler a remisión %s: " - -#: common/flatpak-dir.c:5137 -#, c-format -msgid "While trying to checkout %s into %s: " -msgstr "Ao tentar obter %s en %s: " - -#: common/flatpak-dir.c:5162 common/flatpak-dir.c:5193 -msgid "While trying to checkout metadata subpath: " -msgstr "Ao tentar obter a subruta de metadatos: " - -#: common/flatpak-dir.c:5203 -msgid "While trying to remove existing extra dir: " -msgstr "Ao tentar eliminar o directorio adicinal existente: " - -#: common/flatpak-dir.c:5214 -msgid "While trying to apply extra data: " -msgstr "Ao tentar aplicar os datos adicionais: " - -#: common/flatpak-dir.c:5241 -#, c-format -msgid "Invalid deployed ref %s: " -msgstr "Referencia %s despregada non válida: " - -#: common/flatpak-dir.c:5248 -#, c-format -msgid "Invalid commit ref %s: " -msgstr "Referencia de remisión %s non válida: " - -#: common/flatpak-dir.c:5256 -#, c-format -msgid "Deployed ref %s kind does not match commit (%s)" -msgstr "O tipo %s da referencia despregada non coincide coa remisión (%s)" - -#: common/flatpak-dir.c:5264 -#, c-format -msgid "Deployed ref %s name does not match commit (%s)" -msgstr "O nome %s da referencia despregada non coincide coa remisión (%s)" - -#: common/flatpak-dir.c:5272 -#, c-format -msgid "Deployed ref %s arch does not match commit (%s)" -msgstr "" -"A arquitectura %s da referencia despregada non coincide coa remisión (%s)" - -#: common/flatpak-dir.c:5278 -#, c-format -msgid "Deployed ref %s branch does not match commit (%s)" -msgstr "A rama %s da referencia despregada non coincide coa remisión (%s)" - -#: common/flatpak-dir.c:5284 -#, c-format -msgid "Deployed ref %s does not match commit (%s)" -msgstr "A referencia %s despregada non coincide coa remisión (%s)" - -#: common/flatpak-dir.c:5303 -msgid "Deployed metadata does not match commit" -msgstr "Os metadatos despregados non coinciden coa remisión" - -#: common/flatpak-dir.c:6065 -#, c-format -msgid "This version of %s is already installed" -msgstr "Esta versión de %s xa está instalada" - -#: common/flatpak-dir.c:6072 -msgid "Can't change remote during bundle install" -msgstr "Non é posíbel cambiar o remoto durante a instalación dun paquete" - -#: common/flatpak-dir.c:6615 -#, c-format -msgid "%s branch %s is not installed" -msgstr "%s rama %s non está instalado" - -#: common/flatpak-dir.c:6859 -#, c-format -msgid "%s branch %s not installed" -msgstr "%s rama %s non instalado" - -#: common/flatpak-dir.c:7818 -#, c-format -msgid "Nothing matches %s" -msgstr "Nada coincide con %s" - -#: common/flatpak-dir.c:7900 -#, c-format -msgid "Can't find ref %s%s%s%s%s" -msgstr "Non se puido atopar a referencia %s%s%s%s%s" - -#: common/flatpak-dir.c:7942 -#, c-format -msgid "Error searching remote %s: %s" -msgstr "Produciuse un erro ao buscar o remoto %s: %s" - -#: common/flatpak-dir.c:7987 -#, c-format -msgid "Error searching local repository: %s" -msgstr "Produciuse un erro ao buscar no repositorio local: %s" - -#: common/flatpak-dir.c:8113 -#, c-format -msgid "%s %s not installed" -msgstr "%s %s non está instalado" - -#: common/flatpak-dir.c:8280 -#, c-format -msgid "Could not find installation %s" -msgstr "Non foi posíbel atopar a instalación %s" - -#: common/flatpak-dir.c:8809 -#, c-format -msgid "Runtime %s, branch %s is already installed" -msgstr "Runtime %s, rama %s xa está instalado" - -#: common/flatpak-dir.c:8810 -#, c-format -msgid "App %s, branch %s is already installed" -msgstr "Aplicativo %s, rama %s xa está instalado" - -#: common/flatpak-dir.c:9269 -msgid "Remote title not set" -msgstr "Título do repositorio remoto non está estabelecido" - -#: common/flatpak-dir.c:9291 -msgid "Remote default-branch not set" -msgstr "Rama por omisión do repositorio remoto non estabelecida" - -#: common/flatpak-dir.c:9785 -msgid "No flatpak cache in remote summary" -msgstr "Non hai caché de flatpak na descrición do remoto" - -#: common/flatpak-dir.c:9795 -#, c-format -msgid "No entry for %s in remote summary flatpak cache " -msgstr "Non hai ningunha entrada para %s na caché de flatpak do resumo remoto " - -#: common/flatpak-run.c:258 +#: common/flatpak-context.c:175 #, c-format msgid "Unknown share type %s, valid types are: %s" msgstr "Tipo de compartido %s descoñecido, os tipos validos son: %s" -#: common/flatpak-run.c:293 +#: common/flatpak-context.c:210 #, c-format msgid "Unknown policy type %s, valid types are: %s" msgstr "Tipo de normativa %s descoñecida, os tipos válidos son: %s" -#: common/flatpak-run.c:331 +#: common/flatpak-context.c:248 #, c-format msgid "Invalid dbus name %s\n" msgstr "Nome de dbus %s non válido\n" -#: common/flatpak-run.c:344 +#: common/flatpak-context.c:261 #, c-format msgid "Unknown socket type %s, valid types are: %s" msgstr "Tipo de socket %s descoñecido, os tipos validos son: %s" -#: common/flatpak-run.c:373 +#: common/flatpak-context.c:290 #, c-format msgid "Unknown device type %s, valid types are: %s" msgstr "Tipo de dispositivo %s descoñecido, os tipos válidos son: %s" -#: common/flatpak-run.c:401 +#: common/flatpak-context.c:318 #, c-format msgid "Unknown feature type %s, valid types are: %s" msgstr "Tipo de característica %s descoñecida, os tipos validos son: %s" -#: common/flatpak-run.c:774 +#: common/flatpak-context.c:691 #, c-format msgid "" "Unknown filesystem location %s, valid locations are: host, home, xdg-" @@ -2141,162 +2308,481 @@ msgstr "" "Localización de sistema de ficheiros %s descoñecido, as localizacións " "válidas son: hos, home, xdg-*[/...], ~/dir, /dir" -#: common/flatpak-run.c:1040 +#: common/flatpak-context.c:963 #, c-format msgid "Invalid env format %s" msgstr "Formato de env %s non válido" -#: common/flatpak-run.c:1180 +#: common/flatpak-context.c:1103 msgid "Share with host" msgstr "Compartir co anfitrión" -#: common/flatpak-run.c:1180 common/flatpak-run.c:1181 +#: common/flatpak-context.c:1103 common/flatpak-context.c:1104 msgid "SHARE" msgstr "COMPARTIR" -#: common/flatpak-run.c:1181 +#: common/flatpak-context.c:1104 msgid "Unshare with host" msgstr "Deixar de compartir co anfitrión" -#: common/flatpak-run.c:1182 +#: common/flatpak-context.c:1105 msgid "Expose socket to app" msgstr "Expoñer o socket ao aplicativo" -#: common/flatpak-run.c:1182 common/flatpak-run.c:1183 +#: common/flatpak-context.c:1105 common/flatpak-context.c:1106 msgid "SOCKET" msgstr "SOCKET" -#: common/flatpak-run.c:1183 +#: common/flatpak-context.c:1106 msgid "Don't expose socket to app" msgstr "Non expoñer o socket ao aplicativo" -#: common/flatpak-run.c:1184 +#: common/flatpak-context.c:1107 msgid "Expose device to app" msgstr "Expoñer o dispositivo ao aplicativo" -#: common/flatpak-run.c:1184 common/flatpak-run.c:1185 +#: common/flatpak-context.c:1107 common/flatpak-context.c:1108 msgid "DEVICE" msgstr "DISPOSITIVO" -#: common/flatpak-run.c:1185 +#: common/flatpak-context.c:1108 msgid "Don't expose device to app" msgstr "Non expoñer o dispositivo ao aplicativo" -#: common/flatpak-run.c:1186 +#: common/flatpak-context.c:1109 msgid "Allow feature" msgstr "Permitir característica" -#: common/flatpak-run.c:1186 common/flatpak-run.c:1187 +#: common/flatpak-context.c:1109 common/flatpak-context.c:1110 msgid "FEATURE" msgstr "CARACTERÍSTICA" -#: common/flatpak-run.c:1187 +#: common/flatpak-context.c:1110 msgid "Don't allow feature" msgstr "No permitir característica" -#: common/flatpak-run.c:1188 +#: common/flatpak-context.c:1111 msgid "Expose filesystem to app (:ro for read-only)" msgstr "Expoñer o sistema de ficheiros ao aplicativo (:ro para só lectura)" -#: common/flatpak-run.c:1188 +#: common/flatpak-context.c:1111 msgid "FILESYSTEM[:ro]" msgstr "SISTEMA_FICHEIROS[:ro]" -#: common/flatpak-run.c:1189 +#: common/flatpak-context.c:1112 msgid "Don't expose filesystem to app" msgstr "Non expoñer o sistema de ficheiros ao aplicativo" -#: common/flatpak-run.c:1189 +#: common/flatpak-context.c:1112 msgid "FILESYSTEM" msgstr "SISTEMA_FICHEIROS" -#: common/flatpak-run.c:1190 +#: common/flatpak-context.c:1113 msgid "Set environment variable" msgstr "Estabelecer variábel de ambiente" -#: common/flatpak-run.c:1190 +#: common/flatpak-context.c:1113 msgid "VAR=VALUE" msgstr "VAR=VALOR" -#: common/flatpak-run.c:1191 +#: common/flatpak-context.c:1114 msgid "Allow app to own name on the session bus" msgstr "Permitir que o aplicativo teña un nome propio no bus de sesión" -#: common/flatpak-run.c:1191 common/flatpak-run.c:1192 -#: common/flatpak-run.c:1193 common/flatpak-run.c:1194 +#: common/flatpak-context.c:1114 common/flatpak-context.c:1115 +#: common/flatpak-context.c:1116 common/flatpak-context.c:1117 msgid "DBUS_NAME" msgstr "NOME_DBUS" -#: common/flatpak-run.c:1192 +#: common/flatpak-context.c:1115 msgid "Allow app to talk to name on the session bus" msgstr "Permitir ao aplicativo falar cun nome no bus de sesión" -#: common/flatpak-run.c:1193 +#: common/flatpak-context.c:1116 msgid "Allow app to own name on the system bus" msgstr "Permitir ao aplicativo posuír un nome propio no bus do sistema" -#: common/flatpak-run.c:1194 +#: common/flatpak-context.c:1117 msgid "Allow app to talk to name on the system bus" msgstr "Permitir ao aplicativo falar cun nome no bus de sistema" -#: common/flatpak-run.c:1195 +#: common/flatpak-context.c:1118 msgid "Add generic policy option" msgstr "Engadir unha opción de normativa xenérica" -#: common/flatpak-run.c:1195 common/flatpak-run.c:1196 +#: common/flatpak-context.c:1118 common/flatpak-context.c:1119 msgid "SUBSYSTEM.KEY=VALUE" msgstr "SUBSISTEMA.CHAVE=VALOR" -#: common/flatpak-run.c:1196 +#: common/flatpak-context.c:1119 msgid "Remove generic policy option" msgstr "Eliminar opción de normativa xenérica" -#: common/flatpak-run.c:1197 +#: common/flatpak-context.c:1120 msgid "Persist home directory" msgstr "Persistir o directorio persoal" -#: common/flatpak-run.c:1197 +#: common/flatpak-context.c:1120 msgid "FILENAME" msgstr "NOME_FICHEIRO" #. This is not needed/used anymore, so hidden, but we accept it for backwards compat -#: common/flatpak-run.c:1199 +#: common/flatpak-context.c:1122 msgid "Don't require a running session (no cgroups creation)" msgstr "Non requirir unha sesión en execución (sen creación de cgroups)" -#: common/flatpak-run.c:3830 +#: common/flatpak-dir.c:1044 +#, c-format +msgid "No overrides found for %s" +msgstr "Non se atopou ningunha sobrescritura para %s" + +#: common/flatpak-dir.c:1674 +#, c-format +msgid "While opening repository %s: " +msgstr "Ao abrir o repositorio %s: " + +#: common/flatpak-dir.c:1908 common/flatpak-dir.c:5460 +msgid "Can't create deploy directory" +msgstr "Non é posíbel crear o directorio de despregue" + +#: common/flatpak-dir.c:2122 common/flatpak-dir.c:2125 +#, c-format +msgid "Failed to find latest revision for ref %s from remote %s: %s\n" +msgstr "" + +#: common/flatpak-dir.c:2761 +#, c-format +msgid "Invalid sha256 for extra data uri %s" +msgstr "SHA256 non válido para o uri de datos adicionais %s" + +#: common/flatpak-dir.c:2766 +#, c-format +msgid "Empty name for extra data uri %s" +msgstr "Nome baleiro para o uri de datos adicinais %s" + +#: common/flatpak-dir.c:2773 +#, c-format +msgid "Unsupported extra data uri %s" +msgstr "URI de datos adicinais %s non admitido" + +#: common/flatpak-dir.c:2787 +#, c-format +msgid "Failed to load local extra-data %s: %s" +msgstr "Produciuse un fallo ao cargar os datos adicinais locais %s: %s" + +#: common/flatpak-dir.c:2790 +#, c-format +msgid "Wrong size for extra-data %s" +msgstr "Tamaño dos datos adicinais incorrecto %s" + +#: common/flatpak-dir.c:2805 +#, c-format +msgid "While downloading %s: " +msgstr "Ao descargar %s: " + +#: common/flatpak-dir.c:2812 +#, c-format +msgid "Wrong size for extra data %s" +msgstr "Tamaño dos datos adicinais %s incorrecto" + +#: common/flatpak-dir.c:2823 +#, c-format +msgid "Invalid checksum for extra data %s" +msgstr "Suma de verificación non válida para os datos adicinais %s" + +#: common/flatpak-dir.c:2882 +msgid "Remote OCI index has no registry uri" +msgstr "" + +#: common/flatpak-dir.c:3100 +#, c-format +msgid "%s commit %s already installed" +msgstr "%s remisión %s xa instalado" + +#: common/flatpak-dir.c:3442 common/flatpak-dir.c:3773 +#, c-format +msgid "While pulling %s from remote %s: " +msgstr "Ao obter %s desde o remoto %s: " + +#: common/flatpak-dir.c:3658 +#, c-format +msgid "Can't find %s in remote %s" +msgstr "Non é posíbel atopar %s no remoto %s" + +#: common/flatpak-dir.c:4331 +msgid "Not enough memory" +msgstr "Non hai momoria dabondo" + +#: common/flatpak-dir.c:4350 +msgid "Failed to read from exported file" +msgstr "Produciuse un fallo ao ler o ficheiro exportado" + +#: common/flatpak-dir.c:4541 +msgid "Error reading mimetype xml file" +msgstr "Produciuse un erro ao ler o ficheiro xml de mimetype" + +#: common/flatpak-dir.c:4546 +msgid "Invalid mimetype xml file" +msgstr "Ficheiro xml de mimetype non válido" + +#: common/flatpak-dir.c:5089 +msgid "While getting detached metadata: " +msgstr "Mentres se obtiñan os metadatos desanexados: " + +#: common/flatpak-dir.c:5107 +msgid "While creating extradir: " +msgstr "Ao crear o directorio adicional: " + +#: common/flatpak-dir.c:5128 +msgid "Invalid sha256 for extra data" +msgstr "SHA256 non válido para os datos adicionais" + +#: common/flatpak-dir.c:5157 +msgid "Wrong size for extra data" +msgstr "Tamaño dos datos adicinais incorrecto" + +#: common/flatpak-dir.c:5161 +msgid "Invalid checksum for extra data" +msgstr "Suma de verificación non válida para os datos adicinais" + +#: common/flatpak-dir.c:5170 +#, c-format +msgid "While writing extra data file '%s': " +msgstr "Ao escribir o ficheiro de datos adicionais «%s»: " + +#: common/flatpak-dir.c:5340 +#, c-format +msgid "apply_extra script failed, exit status %d" +msgstr "apply_extra script failed, estado de saída %d" + +#: common/flatpak-dir.c:5419 +#, c-format +msgid "While trying to resolve ref %s: " +msgstr "Ao tentar resolver a referencia %s: " + +#: common/flatpak-dir.c:5434 +#, c-format +msgid "%s is not available" +msgstr "%s non está dispoñíbel" + +#: common/flatpak-dir.c:5449 common/flatpak-dir.c:5881 +#: common/flatpak-dir.c:6671 common/flatpak-dir.c:6681 +#: common/flatpak-dir.c:6713 +#, c-format +msgid "%s branch %s already installed" +msgstr "%s rama %s xa instalado" + +#: common/flatpak-dir.c:5468 +#, c-format +msgid "Failed to read commit %s: " +msgstr "Produciuse un fallo ao ler a remisión %s: " + +#: common/flatpak-dir.c:5488 +#, c-format +msgid "While trying to checkout %s into %s: " +msgstr "Ao tentar obter %s en %s: " + +#: common/flatpak-dir.c:5513 common/flatpak-dir.c:5544 +msgid "While trying to checkout metadata subpath: " +msgstr "Ao tentar obter a subruta de metadatos: " + +#: common/flatpak-dir.c:5554 +msgid "While trying to remove existing extra dir: " +msgstr "Ao tentar eliminar o directorio adicinal existente: " + +#: common/flatpak-dir.c:5565 +msgid "While trying to apply extra data: " +msgstr "Ao tentar aplicar os datos adicionais: " + +#: common/flatpak-dir.c:5592 +#, c-format +msgid "Invalid deployed ref %s: " +msgstr "Referencia %s despregada non válida: " + +#: common/flatpak-dir.c:5599 +#, c-format +msgid "Invalid commit ref %s: " +msgstr "Referencia de remisión %s non válida: " + +#: common/flatpak-dir.c:5607 +#, c-format +msgid "Deployed ref %s kind does not match commit (%s)" +msgstr "O tipo %s da referencia despregada non coincide coa remisión (%s)" + +#: common/flatpak-dir.c:5615 +#, c-format +msgid "Deployed ref %s name does not match commit (%s)" +msgstr "O nome %s da referencia despregada non coincide coa remisión (%s)" + +#: common/flatpak-dir.c:5623 +#, c-format +msgid "Deployed ref %s arch does not match commit (%s)" +msgstr "" +"A arquitectura %s da referencia despregada non coincide coa remisión (%s)" + +#: common/flatpak-dir.c:5629 +#, c-format +msgid "Deployed ref %s branch does not match commit (%s)" +msgstr "A rama %s da referencia despregada non coincide coa remisión (%s)" + +#: common/flatpak-dir.c:5635 +#, c-format +msgid "Deployed ref %s does not match commit (%s)" +msgstr "A referencia %s despregada non coincide coa remisión (%s)" + +#: common/flatpak-dir.c:5654 +msgid "Deployed metadata does not match commit" +msgstr "Os metadatos despregados non coinciden coa remisión" + +#: common/flatpak-dir.c:6533 +#, c-format +msgid "This version of %s is already installed" +msgstr "Esta versión de %s xa está instalada" + +#: common/flatpak-dir.c:6540 +msgid "Can't change remote during bundle install" +msgstr "Non é posíbel cambiar o remoto durante a instalación dun paquete" + +#: common/flatpak-dir.c:7059 +#, c-format +msgid "%s branch %s is not installed" +msgstr "%s rama %s non está instalado" + +#: common/flatpak-dir.c:7304 +#, c-format +msgid "%s branch %s not installed" +msgstr "%s rama %s non instalado" + +#: common/flatpak-dir.c:7628 +#, c-format +msgid "Pruning repo failed: %s" +msgstr "" + +#: common/flatpak-dir.c:8155 +#, c-format +msgid "Multiple branches available for %s, you must specify one of: " +msgstr "" + +#: common/flatpak-dir.c:8176 +#, c-format +msgid "Nothing matches %s" +msgstr "Nada coincide con %s" + +#: common/flatpak-dir.c:8258 +#, c-format +msgid "Can't find ref %s%s%s%s%s" +msgstr "Non se puido atopar a referencia %s%s%s%s%s" + +#: common/flatpak-dir.c:8300 +#, c-format +msgid "Error searching remote %s: %s" +msgstr "Produciuse un erro ao buscar o remoto %s: %s" + +#: common/flatpak-dir.c:8345 +#, c-format +msgid "Error searching local repository: %s" +msgstr "Produciuse un erro ao buscar no repositorio local: %s" + +#: common/flatpak-dir.c:8471 +#, c-format +msgid "%s %s not installed" +msgstr "%s %s non está instalado" + +#: common/flatpak-dir.c:8638 +#, c-format +msgid "Could not find installation %s" +msgstr "Non foi posíbel atopar a instalación %s" + +#: common/flatpak-dir.c:9236 +#, c-format +msgid "Runtime %s, branch %s is already installed" +msgstr "Runtime %s, rama %s xa está instalado" + +#: common/flatpak-dir.c:9237 +#, c-format +msgid "App %s, branch %s is already installed" +msgstr "Aplicativo %s, rama %s xa está instalado" + +#: common/flatpak-dir.c:9717 +msgid "Remote title not set" +msgstr "Título do repositorio remoto non está estabelecido" + +#: common/flatpak-dir.c:9739 +msgid "Remote default-branch not set" +msgstr "Rama por omisión do repositorio remoto non estabelecida" + +#: common/flatpak-dir.c:10332 +msgid "No flatpak cache in remote summary" +msgstr "Non hai caché de flatpak na descrición do remoto" + +#: common/flatpak-dir.c:10342 +#, c-format +msgid "No entry for %s in remote summary flatpak cache " +msgstr "Non hai ningunha entrada para %s na caché de flatpak do resumo remoto " + +#: common/flatpak-run.c:1456 #, c-format msgid "Failed to open flatpak-info temp file: %s" msgstr "Produciuse un fallo ao abrir o ficheiro temporal flatpak-info: %s" -#: common/flatpak-run.c:3904 common/flatpak-run.c:3914 +#: common/flatpak-run.c:1530 common/flatpak-run.c:1540 #, c-format msgid "Failed to open temp file: %s" msgstr "Produciuse un fallo ao abrir o ficheiro temporal: %s" -#: common/flatpak-run.c:4253 +#: common/flatpak-run.c:1883 msgid "Unable to create sync pipe" msgstr "Non foi posíbel crear a tubería de sincronización" -#: common/flatpak-run.c:4280 +#: common/flatpak-run.c:1910 #, c-format msgid "Failed to open app info file: %s" msgstr "" "Produciuse un fallo ao abrir o ficheiro de información de aplicativo: %s" -#: common/flatpak-run.c:4310 +#: common/flatpak-run.c:1940 msgid "Failed to sync with dbus proxy" msgstr "Procuciuse un fallo ao sincronizarse co proxi de dbus" -#: common/flatpak-run.c:5069 +#: common/flatpak-run.c:2700 #, fuzzy, c-format msgid "ldconfig failed, exit status %d" msgstr "apply_extra script failed, estado de saída %d" -#: common/flatpak-utils.c:2900 +#: common/flatpak-utils.c:624 +#, fuzzy, c-format +msgid "Migrating %s to %s\n" +msgstr "Actualizando: %s desde %s\n" + +#: common/flatpak-utils.c:630 +#, fuzzy, c-format +msgid "Error during migration: %s\n" +msgstr "Produciuse un erro ao buscar o remoto %s: %s" + +#: common/flatpak-utils.c:2988 msgid "No extra data sources" msgstr "Non hai orixes de datos adicionais" +#: common/flatpak-utils.c:6576 +#, c-format +msgid "Downloading metadata: %u/(estimating) %s" +msgstr "" + +#: common/flatpak-utils.c:6600 +#, fuzzy, c-format +msgid "Downloading: %s/%s" +msgstr "Ao descargar %s: " + +#: common/flatpak-utils.c:6620 +#, fuzzy, c-format +msgid "Downloading extra data: %s/%s" +msgstr "Non hai orixes de datos adicionais" + +#: common/flatpak-utils.c:6625 +#, c-format +msgid "Downloading files: %d/%d %s" +msgstr "" + #. SECURITY: #. - Normal users do not need authentication to install signed applications #. from signed repositories, as this cannot exploit a system. @@ -2333,7 +2819,7 @@ msgstr "Actualizar aplicativo asinado" #: system-helper/org.freedesktop.Flatpak.policy.in:59 #: system-helper/org.freedesktop.Flatpak.policy.in:77 -#: system-helper/org.freedesktop.Flatpak.policy.in:169 +#: system-helper/org.freedesktop.Flatpak.policy.in:180 msgid "Authentication is required to update software" msgstr "Requírese autenticación para actualizar software" @@ -2396,16 +2882,41 @@ msgstr "Configurar remoto" msgid "Authentication is required to configure software repositories" msgstr "Requírese autenticación para configurar os repositorios de software" +#: system-helper/org.freedesktop.Flatpak.policy.in:161 +#, fuzzy +msgid "Configure" +msgstr "Configurar remoto" + +#: system-helper/org.freedesktop.Flatpak.policy.in:162 +#, fuzzy +msgid "Authentication is required to configure software installation" +msgstr "Requírese autenticación para configurar os repositorios de software" + #. SECURITY: #. - Normal users do not require admin authentication to update #. appstream data as it will be signed, and the action is required #. to update the system when unattended. #. - Changing this to anything other than 'yes' will break unattended #. updates. -#: system-helper/org.freedesktop.Flatpak.policy.in:168 +#: system-helper/org.freedesktop.Flatpak.policy.in:179 msgid "Update appstream" msgstr "Actualizar appstream" +#~ msgid "No remote %s" +#~ msgstr "Sen remoto %s" + +#, fuzzy +#~ msgid "Search only user installations" +#~ msgstr "Mostrar instalacións do usuario" + +#, fuzzy +#~ msgid "Search only system-wide installations" +#~ msgstr "Mostrar instalacións do sistema" + +#, fuzzy +#~ msgid "Search specific system-wide installations" +#~ msgstr "Mostrar instalacións específicas do sistema" + #~ msgid "Failed to create temporary file" #~ msgstr "Produciuse un fallo ao crear o ficheiro temporal" diff --git a/po/hu.po b/po/hu.po index 5aa25e70..105089a7 100644 --- a/po/hu.po +++ b/po/hu.po @@ -1,15 +1,15 @@ # Hungarian translation for flatpak. -# Copyright (C) 2016, 2017 Free Software Foundation, Inc. +# Copyright (C) 2016, 2017, 2018 Free Software Foundation, Inc. # This file is distributed under the same license as the flatpak package. # -# Balázs Úr , 2016, 2017. +# Balázs Úr , 2016, 2017, 2018. # Gabor Kelemen , 2016. msgid "" msgstr "" "Project-Id-Version: flatpak master\n" "Report-Msgid-Bugs-To: https://github.com/flatpak/flatpak/issues\n" -"POT-Creation-Date: 2017-10-09 12:40+0200\n" -"PO-Revision-Date: 2017-05-14 19:51+0100\n" +"POT-Creation-Date: 2018-02-19 14:20+0100\n" +"PO-Revision-Date: 2018-03-10 00:00+0100\n" "Last-Translator: Balázs Úr \n" "Language-Team: Hungarian \n" "Language: hu\n" @@ -43,10 +43,9 @@ msgstr "A távoli megjelölése függőségekhez használtként" msgid "Set a new url" msgstr "Új URL beállítása" -#: app/flatpak-builtins-add-remote.c:66 app/flatpak-builtins-build-bundle.c:57 -#: app/flatpak-builtins-build-bundle.c:58 -#: app/flatpak-builtins-list-remotes.c:109 -#: app/flatpak-builtins-repo-update.c:52 +#: app/flatpak-builtins-add-remote.c:66 app/flatpak-builtins-build-bundle.c:58 +#: app/flatpak-builtins-build-bundle.c:59 +#: app/flatpak-builtins-list-remotes.c:70 app/flatpak-builtins-repo-update.c:52 msgid "URL" msgstr "URL" @@ -99,19 +98,19 @@ msgstr "ÁG" #: app/flatpak-builtins-add-remote.c:80 app/flatpak-builtins-build-export.c:67 #: app/flatpak-builtins-repo-update.c:56 msgid "Collection ID" -msgstr "" +msgstr "Gyűjteményazonosító" #: app/flatpak-builtins-add-remote.c:80 app/flatpak-builtins-repo-update.c:56 msgid "COLLECTION-ID" -msgstr "" +msgstr "GYŰJTEMÉNY-AZONOSÍTÓ" #: app/flatpak-builtins-add-remote.c:82 msgid "Import GPG key from FILE (- for stdin)" msgstr "GPG kulcs importálása a FÁJLBÓL (- a szabványos bemenethez)" -#: app/flatpak-builtins-add-remote.c:82 app/flatpak-builtins-build-bundle.c:59 -#: app/flatpak-builtins-build.c:50 app/flatpak-builtins-build-export.c:60 -#: app/flatpak-builtins-install.c:66 app/flatpak-builtins-repo-update.c:59 +#: app/flatpak-builtins-add-remote.c:82 app/flatpak-builtins-build-bundle.c:60 +#: app/flatpak-builtins-build.c:54 app/flatpak-builtins-build-export.c:60 +#: app/flatpak-builtins-install.c:67 app/flatpak-builtins-repo-update.c:59 msgid "FILE" msgstr "FÁJL" @@ -123,129 +122,148 @@ msgstr "A távoli letiltása" msgid "Add OCI registry" msgstr "OCI regisztrációs adatbázis hozzáadása" -#: app/flatpak-builtins-add-remote.c:312 +#: app/flatpak-builtins-add-remote.c:218 app/flatpak-builtins-add-remote.c:225 +#, c-format +msgid "Can't load uri %s: %s\n" +msgstr "Nem lehet betölteni a(z) %s URI-t: %s\n" + +#: app/flatpak-builtins-add-remote.c:233 +#, c-format +msgid "Can't load file %s: %s\n" +msgstr "Nem lehet betölteni a(z) %s fájlt: %s\n" + +#: app/flatpak-builtins-add-remote.c:241 +msgid "Invalid file format" +msgstr "Érvénytelen fájlformátum" + +#: app/flatpak-builtins-add-remote.c:249 +#, c-format +msgid "Invalid version %s, only 1 supported" +msgstr "Érvénytelen verzió (%s), csak egy támogatott" + +#: app/flatpak-builtins-add-remote.c:293 +msgid "Invalid gpg key" +msgstr "Érvénytelen gpg kulcs" + +#: app/flatpak-builtins-add-remote.c:320 msgid "NAME LOCATION - Add a remote repository" msgstr "NÉV HELY - Egy távoli tároló hozzáadása" -#: app/flatpak-builtins-add-remote.c:321 -#: app/flatpak-builtins-delete-remote.c:58 app/flatpak-builtins-info.c:104 +#: app/flatpak-builtins-add-remote.c:333 +#: app/flatpak-builtins-delete-remote.c:61 app/flatpak-builtins-info.c:125 msgid "NAME must be specified" msgstr "A NÉV megadása kötelező" -#: app/flatpak-builtins-add-remote.c:324 app/flatpak-builtins-build-sign.c:71 -#: app/flatpak-builtins-repo.c:174 app/flatpak-builtins-repo-update.c:429 +#: app/flatpak-builtins-add-remote.c:336 app/flatpak-builtins-build-sign.c:71 +#: app/flatpak-builtins-repo.c:175 app/flatpak-builtins-repo-update.c:429 msgid "LOCATION must be specified" msgstr "A HELY megadása kötelező" -#: app/flatpak-builtins-add-remote.c:327 -#: app/flatpak-builtins-build-bundle.c:479 +#: app/flatpak-builtins-add-remote.c:339 +#: app/flatpak-builtins-build-bundle.c:461 #: app/flatpak-builtins-build-export.c:676 #: app/flatpak-builtins-build-import-bundle.c:182 #: app/flatpak-builtins-build-init.c:181 app/flatpak-builtins-build-sign.c:74 -#: app/flatpak-builtins-delete-remote.c:63 +#: app/flatpak-builtins-delete-remote.c:66 #: app/flatpak-builtins-document-export.c:102 #: app/flatpak-builtins-document-info.c:75 #: app/flatpak-builtins-document-list.c:70 -#: app/flatpak-builtins-document-unexport.c:67 app/flatpak-builtins-info.c:111 -#: app/flatpak-builtins-install.c:265 app/flatpak-builtins-install.c:399 -#: app/flatpak-builtins-list.c:382 app/flatpak-builtins-list-remotes.c:66 -#: app/flatpak-builtins-ls-remote.c:84 app/flatpak-builtins-make-current.c:67 -#: app/flatpak-builtins-override.c:66 +#: app/flatpak-builtins-document-unexport.c:67 app/flatpak-builtins-info.c:132 +#: app/flatpak-builtins-install.c:267 app/flatpak-builtins-install.c:401 +#: app/flatpak-builtins-list.c:314 app/flatpak-builtins-list-remotes.c:61 +#: app/flatpak-builtins-ls-remote.c:107 app/flatpak-builtins-make-current.c:72 +#: app/flatpak-builtins-override.c:68 msgid "Too many arguments" msgstr "Túl sok argumentum" -#: app/flatpak-builtins-add-remote.c:332 +#: app/flatpak-builtins-add-remote.c:344 #: app/flatpak-builtins-build-export.c:692 -#, fuzzy, c-format +#, c-format msgid "‘%s’ is not a valid collection ID: %s" -msgstr "A(z) „%s” nem érvényes alkalmazásnév: %s" +msgstr "A(z) „%s” nem érvényes gyűjteményazonosító: %s" -#: app/flatpak-builtins-add-remote.c:336 +#: app/flatpak-builtins-add-remote.c:348 msgid "GPG verification is required if collections are enabled" -msgstr "" +msgstr "GPG ellenőrzés szükséges, ha a gyűjtemények engedélyezettek" #. Do nothing -#: app/flatpak-builtins-add-remote.c:351 +#: app/flatpak-builtins-add-remote.c:363 #, c-format msgid "Remote %s already exists" msgstr "A távoli %s már létezik" -#: app/flatpak-builtins-add-remote.c:359 +#: app/flatpak-builtins-add-remote.c:371 msgid "No url specified in flatpakrepo file" msgstr "Nincs URL megadva a flatpaktároló fájlban" -#: app/flatpak-builtins-add-remote.c:403 -#, fuzzy, c-format +#: app/flatpak-builtins-add-remote.c:415 +#, c-format msgid "Warning: Could not update extra metadata for '%s': %s\n" -msgstr "Nem sikerült frissíteni a(z) %s további metaadatait" +msgstr "" +"Figyelmeztetése Nem sikerült frissíteni a(z) %s további metaadatait: %s\n" -#: app/flatpak-builtins-add-remote.c:451 +#: app/flatpak-builtins-add-remote.c:464 msgid "NAME - Modify a remote repository" msgstr "NÉV - Egy távoli tároló módosítása" -#: app/flatpak-builtins-add-remote.c:460 +#: app/flatpak-builtins-add-remote.c:474 msgid "Remote NAME must be specified" msgstr "A távoli NÉV megadása kötelező" -#: app/flatpak-builtins-add-remote.c:465 -#, c-format -msgid "No remote %s" -msgstr "Nincs távoli %s" - -#: app/flatpak-builtins-add-remote.c:471 +#: app/flatpak-builtins-add-remote.c:485 #, c-format msgid "Updating extra metadata from remote summary for %s\n" msgstr "További metaadatok frissítése a(z) %s távoli összegzéséből\n" -#: app/flatpak-builtins-add-remote.c:474 +#: app/flatpak-builtins-add-remote.c:488 #, c-format msgid "Error updating extra metadata for '%s': %s\n" msgstr "Hiba a(z) „%s” további metaadatainak frissítéskor: %s\n" -#: app/flatpak-builtins-add-remote.c:475 +#: app/flatpak-builtins-add-remote.c:489 #, c-format msgid "Could not update extra metadata for %s" msgstr "Nem sikerült frissíteni a(z) %s további metaadatait" -#: app/flatpak-builtins-build-bundle.c:55 +#: app/flatpak-builtins-build-bundle.c:56 msgid "Export runtime instead of app" msgstr "Futtatókörnyezet exportálása az alkalmazás helyett" -#: app/flatpak-builtins-build-bundle.c:56 +#: app/flatpak-builtins-build-bundle.c:57 msgid "Arch to bundle for" msgstr "Csomagolás ezen architektúrához" -#: app/flatpak-builtins-build-bundle.c:56 +#: app/flatpak-builtins-build-bundle.c:57 #: app/flatpak-builtins-build-export.c:55 app/flatpak-builtins-build-init.c:49 -#: app/flatpak-builtins-build-sign.c:41 app/flatpak-builtins-info.c:48 -#: app/flatpak-builtins-install.c:56 app/flatpak-builtins-list.c:52 -#: app/flatpak-builtins-ls-remote.c:48 app/flatpak-builtins-make-current.c:38 -#: app/flatpak-builtins-run.c:52 app/flatpak-builtins-uninstall.c:44 -#: app/flatpak-builtins-update.c:53 +#: app/flatpak-builtins-build-sign.c:41 app/flatpak-builtins-info.c:51 +#: app/flatpak-builtins-info-remote.c:48 app/flatpak-builtins-install.c:57 +#: app/flatpak-builtins-list.c:46 app/flatpak-builtins-ls-remote.c:49 +#: app/flatpak-builtins-make-current.c:38 app/flatpak-builtins-run.c:52 +#: app/flatpak-builtins-uninstall.c:44 app/flatpak-builtins-update.c:53 msgid "ARCH" msgstr "ARCHITEKTÚRA" -#: app/flatpak-builtins-build-bundle.c:57 +#: app/flatpak-builtins-build-bundle.c:58 msgid "Url for repo" msgstr "URL a tárolóhoz" -#: app/flatpak-builtins-build-bundle.c:58 +#: app/flatpak-builtins-build-bundle.c:59 msgid "Url for runtime flatpakrepo file" msgstr "URL a futtatókörnyezet flatpaktároló fájlhoz" -#: app/flatpak-builtins-build-bundle.c:59 +#: app/flatpak-builtins-build-bundle.c:60 msgid "Add GPG key from FILE (- for stdin)" msgstr "GPG kulcs hozzáadása a FÁJLBÓL (- a szabványos bemenethez)" -#: app/flatpak-builtins-build-bundle.c:60 +#: app/flatpak-builtins-build-bundle.c:61 msgid "Export oci image instead of flatpak bundle" msgstr "Egy OCI-lemezkép exportálása flatpak csomag helyett" -#: app/flatpak-builtins-build-bundle.c:61 +#: app/flatpak-builtins-build-bundle.c:62 msgid "GPG Key ID to sign the OCI image with" msgstr "GPG kulcsazonosító az OCI-lemezkép aláírásához" -#: app/flatpak-builtins-build-bundle.c:61 +#: app/flatpak-builtins-build-bundle.c:62 #: app/flatpak-builtins-build-commit-from.c:55 #: app/flatpak-builtins-build-export.c:61 #: app/flatpak-builtins-build-import-bundle.c:46 @@ -253,7 +271,7 @@ msgstr "GPG kulcsazonosító az OCI-lemezkép aláírásához" msgid "KEY-ID" msgstr "KULCSAZONOSÍTÓ" -#: app/flatpak-builtins-build-bundle.c:62 +#: app/flatpak-builtins-build-bundle.c:63 #: app/flatpak-builtins-build-commit-from.c:56 #: app/flatpak-builtins-build-export.c:64 #: app/flatpak-builtins-build-import-bundle.c:47 @@ -261,7 +279,7 @@ msgstr "KULCSAZONOSÍTÓ" msgid "GPG Homedir to use when looking for keyrings" msgstr "A kulcstartók keresésekor használandó GPG saját könyvtár" -#: app/flatpak-builtins-build-bundle.c:62 +#: app/flatpak-builtins-build-bundle.c:63 #: app/flatpak-builtins-build-commit-from.c:56 #: app/flatpak-builtins-build-export.c:64 #: app/flatpak-builtins-build-import-bundle.c:47 @@ -269,103 +287,124 @@ msgstr "A kulcstartók keresésekor használandó GPG saját könyvtár" msgid "HOMEDIR" msgstr "SAJÁTKÖNYVTÁR" -#: app/flatpak-builtins-build-bundle.c:469 +#: app/flatpak-builtins-build-bundle.c:64 +msgid "OSTree commit to create a delta bundle from" +msgstr "OSTree kommit egy deltacsomag előállításához ebből:" + +#: app/flatpak-builtins-build-bundle.c:64 app/flatpak-builtins-info-remote.c:49 +#: app/flatpak-builtins-update.c:54 +msgid "COMMIT" +msgstr "KOMMIT" + +#: app/flatpak-builtins-build-bundle.c:451 msgid "" "LOCATION FILENAME NAME [BRANCH] - Create a single file bundle from a local " "repository" msgstr "" "HELY FÁJLNÉV NÉV [ÁG] - Egyetlen fájlcsomag létrehozása helyi tárolóból" -#: app/flatpak-builtins-build-bundle.c:476 +#: app/flatpak-builtins-build-bundle.c:458 msgid "LOCATION, FILENAME and NAME must be specified" msgstr "A HELY, FÁJLNÉV és NÉV megadása kötelező" -#: app/flatpak-builtins-build-bundle.c:494 -#: app/flatpak-builtins-build-commit-from.c:103 -#: app/flatpak-builtins-build-commit-from.c:113 +#: app/flatpak-builtins-build-bundle.c:476 +#: app/flatpak-builtins-build-commit-from.c:253 +#: app/flatpak-builtins-build-commit-from.c:263 #: app/flatpak-builtins-build-import-bundle.c:191 #, c-format msgid "'%s' is not a valid repository" msgstr "A(z) „%s” nem érvényes tároló" -#: app/flatpak-builtins-build-bundle.c:506 app/flatpak-builtins-build-sign.c:86 +#: app/flatpak-builtins-build-bundle.c:488 app/flatpak-builtins-build-sign.c:86 #, c-format msgid "'%s' is not a valid name: %s" msgstr "A(z) „%s” nem érvényes név: %s" -#: app/flatpak-builtins-build-bundle.c:509 +#: app/flatpak-builtins-build-bundle.c:491 #: app/flatpak-builtins-build-export.c:699 app/flatpak-builtins-build-sign.c:89 #, c-format msgid "'%s' is not a valid branch name: %s" msgstr "A(z) „%s” nem érvényes ágnév: %s" -#: app/flatpak-builtins-build.c:46 +#: app/flatpak-builtins-build.c:49 msgid "Use Platform runtime rather than Sdk" msgstr "Platform futtatókörnyezet használata az Sdk helyett" -#: app/flatpak-builtins-build.c:47 +#: app/flatpak-builtins-build.c:50 +msgid "Make destination readonly" +msgstr "Cél írásvédetté tétele" + +#: app/flatpak-builtins-build.c:51 msgid "Add bind mount" msgstr "Kötési csatolás hozzáadása" -#: app/flatpak-builtins-build.c:47 +#: app/flatpak-builtins-build.c:51 msgid "DEST=SRC" msgstr "CÉL=FORRÁS" -#: app/flatpak-builtins-build.c:48 +#: app/flatpak-builtins-build.c:52 msgid "Start build in this directory" msgstr "Összeállítás indítása ebben a könyvtárban" -#: app/flatpak-builtins-build.c:48 app/flatpak-builtins-build.c:49 +#: app/flatpak-builtins-build.c:52 app/flatpak-builtins-build.c:53 #: app/flatpak-builtins-build-init.c:58 msgid "DIR" msgstr "KÖNYVTÁR" -#: app/flatpak-builtins-build.c:49 +#: app/flatpak-builtins-build.c:53 msgid "Where to look for custom sdk dir (defaults to 'usr')" msgstr "Hol keresse az egyéni sdk könyvtárat (alapértelmezetten „usr”)" -#: app/flatpak-builtins-build.c:50 app/flatpak-builtins-build-export.c:60 +#: app/flatpak-builtins-build.c:54 app/flatpak-builtins-build-export.c:60 msgid "Use alternative file for the metadata" msgstr "Alternatív fájl használata a metaadatokhoz" -#: app/flatpak-builtins-build.c:51 +#: app/flatpak-builtins-build.c:55 msgid "Kill processes when the parent process dies" -msgstr "" +msgstr "Folyamatok kilövése, ha a szülőfolyamat véget ér" -#: app/flatpak-builtins-build.c:52 +#: app/flatpak-builtins-build.c:56 msgid "Export application homedir directory to build" -msgstr "" +msgstr "Az alkalmazás saját könyvtárának exportálása az összeállításba" -#: app/flatpak-builtins-build.c:139 +#: app/flatpak-builtins-build.c:57 app/flatpak-builtins-run.c:58 +msgid "Log session bus calls" +msgstr "Munkamenetbusz-hívások naplózása" + +#: app/flatpak-builtins-build.c:58 app/flatpak-builtins-run.c:59 +msgid "Log system bus calls" +msgstr "Rendszerbusz-hívások naplózása" + +#: app/flatpak-builtins-build.c:126 msgid "DIRECTORY [COMMAND [args...]] - Build in directory" msgstr "KÖNYVTÁR [PARANCS [argumentumok…]] - Összeállítás a könyvtárban" -#: app/flatpak-builtins-build.c:162 app/flatpak-builtins-build-finish.c:533 +#: app/flatpak-builtins-build.c:149 app/flatpak-builtins-build-finish.c:533 msgid "DIRECTORY must be specified" msgstr "A KÖNYVTÁR megadása kötelező" -#: app/flatpak-builtins-build.c:173 app/flatpak-builtins-build-export.c:721 +#: app/flatpak-builtins-build.c:160 app/flatpak-builtins-build-export.c:721 #, c-format msgid "Build directory %s not initialized, use flatpak build-init" msgstr "" "A(z) „%s” összeállítási könyvtár nincs előkészítve, a flatpak összeállítás-" "előkészítő használata" -#: app/flatpak-builtins-build.c:192 +#: app/flatpak-builtins-build.c:179 msgid "metadata invalid, not application or runtime" msgstr "a metaadat érvénytelen, nem alkalmazás vagy futtatókörnyezet" -#: app/flatpak-builtins-build.c:292 +#: app/flatpak-builtins-build.c:283 #, c-format msgid "No extension point matching %s in %s" msgstr "Nincs %s illeszkedésű kiterjesztéspont ebben: %s" -#: app/flatpak-builtins-build.c:432 +#: app/flatpak-builtins-build.c:433 #, c-format msgid "Missing '=' in bind mount option '%s'" msgstr "Hiányzó „=” a(z) „%s” kötési csatolás kapcsolóban" -#: app/flatpak-builtins-build.c:460 common/flatpak-run.c:5406 +#: app/flatpak-builtins-build.c:462 common/flatpak-run.c:3038 msgid "Unable to start app" msgstr "Nem indítható el az alkalmazás" @@ -424,35 +463,40 @@ msgstr "Ne frissítse az összegzést" msgid "GPG Key ID to sign the commit with" msgstr "GPG kulcsazonosító a kommit aláírásához" -#: app/flatpak-builtins-build-commit-from.c:78 +#: app/flatpak-builtins-build-commit-from.c:228 msgid "DST-REPO [DST-REF]... - Make a new commit based on existing commit(s)" msgstr "" "CÉL-TÁROLÓ [CÉL-HIVATKOZÁS]… - Új kommit készítése a meglévő kommitok alapján" -#: app/flatpak-builtins-build-commit-from.c:85 +#: app/flatpak-builtins-build-commit-from.c:235 msgid "DST-REPO must be specified" msgstr "A CÉL-TÁROLÓ megadása kötelező" -#: app/flatpak-builtins-build-commit-from.c:93 +#: app/flatpak-builtins-build-commit-from.c:243 msgid "" "If --src-repo is not specified, exactly one destination ref must be specified" msgstr "" "Ha a --src-repo nincs megadva, akkor pontosan egy célhivatkozást kell megadni" -#: app/flatpak-builtins-build-commit-from.c:96 +#: app/flatpak-builtins-build-commit-from.c:246 msgid "" "If --src-ref is specified, exactly one destination ref must be specified" msgstr "" "Ha a --src-ref meg van adva, akkor pontosan egy célhivatkozást kell megadni" -#: app/flatpak-builtins-build-commit-from.c:99 +#: app/flatpak-builtins-build-commit-from.c:249 msgid "Either --src-repo or --src-ref must be specified." msgstr "Vagy a --src-repo, vagy a --src-ref megadása kötelező." -#: app/flatpak-builtins-build-commit-from.c:251 +#: app/flatpak-builtins-build-commit-from.c:402 msgid "Can't commit from partial source commit." msgstr "Nem lehet kommitolni részleges forráskommitból." +#: app/flatpak-builtins-build-commit-from.c:407 +#, c-format +msgid "%s: no change\n" +msgstr "%s: nincs változás\n" + #: app/flatpak-builtins-build-export.c:55 msgid "Architecture to export for (must be host compatible)" msgstr "Architektúra az exportáláshoz (a gazdával kompatibilisnek kell lennie)" @@ -484,11 +528,53 @@ msgstr "Felvenni kívánt kizárt fájlok" #: app/flatpak-builtins-build-export.c:65 msgid "Override the timestamp of the commit" -msgstr "" +msgstr "A kommit időbélyegének felülírása" #: app/flatpak-builtins-build-export.c:65 msgid "ISO-8601-TIMESTAMP" +msgstr "ISO-8601-IDŐBÉLYEG" + +#: app/flatpak-builtins-build-export.c:341 +#, c-format +msgid "WARNING: Error running desktop-file-validate: %s\n" +msgstr "FIGYELMEZTETÉS: Hiba a desktop-file-validate futtatásakor: %s\n" + +#: app/flatpak-builtins-build-export.c:349 +#, c-format +msgid "WARNING: Error reading from desktop-file-validate: %s\n" msgstr "" +"FIGYELMEZTETÉS: Hiba a desktop-file-validate kimenetének olvasásakor: %s\n" + +#: app/flatpak-builtins-build-export.c:355 +#, c-format +msgid "WARNING: Failed to validate desktop file %s: %s\n" +msgstr "FIGYELMEZTETÉS: Nem sikerült ellenőrizni a(z) %s asztali fájlt: %s\n" + +#: app/flatpak-builtins-build-export.c:370 +#, c-format +msgid "WARNING: Can't find Exec key in %s: %s\n" +msgstr "FIGYELMEZTETÉS: Nem található itt az Exec kulcs: %s: %s\n" + +#: app/flatpak-builtins-build-export.c:378 +#: app/flatpak-builtins-build-export.c:475 +#, c-format +msgid "WARNING: Binary not found for Exec line in %s: %s\n" +msgstr "" +"FIGYELMEZTETÉS: Nem található itt az Exec sorban megadott bináris: %s: %s\n" + +#: app/flatpak-builtins-build-export.c:385 +#, c-format +msgid "WARNING: Icon not matching app id in %s: %s\n" +msgstr "" +"FIGYELMEZTETÉS: Nem egyezik az itt megadott ikon alkalmazásazonosítóval: %s: " +"%s\n" + +#: app/flatpak-builtins-build-export.c:413 +#, c-format +msgid "WARNING: Icon referenced in desktop file but not exported: %s\n" +msgstr "" +"FIGYELMEZTETÉS: Az ikon hivatkozva van az asztali fájlban, de nincs " +"exportálva: %s\n" #: app/flatpak-builtins-build-export.c:551 #, c-format @@ -528,12 +614,41 @@ msgstr "A HELY és KÖNYVTÁR megadása kötelező" msgid "No name specified in the metadata" msgstr "Nincs név megadva a metaadatokban" +#: app/flatpak-builtins-build-export.c:976 +#, c-format +msgid "Commit: %s\n" +msgstr "Kommit: %s\n" + +#: app/flatpak-builtins-build-export.c:977 +#, c-format +msgid "Metadata Total: %u\n" +msgstr "Metaadatok összesen: %u\n" + +#: app/flatpak-builtins-build-export.c:978 +#, c-format +msgid "Metadata Written: %u\n" +msgstr "Kiírt metaadatok: %u\n" + +#: app/flatpak-builtins-build-export.c:979 +#, c-format +msgid "Content Total: %u\n" +msgstr "Tartalom összesen: %u\n" + +#: app/flatpak-builtins-build-export.c:980 +#, c-format +msgid "Content Written: %u\n" +msgstr "Kiírt tartalom: %u\n" + +#: app/flatpak-builtins-build-export.c:981 +msgid "Content Bytes Written:" +msgstr "Kiírt tartalom bájtokban:" + #: app/flatpak-builtins-build-finish.c:48 msgid "Command to set" msgstr "Beállítandó parancs" #: app/flatpak-builtins-build-finish.c:48 app/flatpak-builtins-run.c:53 -#: app/flatpak-main.c:159 +#: app/flatpak-main.c:166 msgid "COMMAND" msgstr "PARANCS" @@ -563,11 +678,11 @@ msgstr "NÉV=VÁLTOZÓ[=ÉRTÉK]" #: app/flatpak-builtins-build-finish.c:53 msgid "Set extension priority (only for extensions)" -msgstr "" +msgstr "Kiterjesztés prioritás beállítása (csak kiterjesztésekhez)" #: app/flatpak-builtins-build-finish.c:53 msgid "0" -msgstr "" +msgstr "0" #: app/flatpak-builtins-build-finish.c:54 msgid "Change the sdk used for the app" @@ -594,6 +709,29 @@ msgstr "Általános metaadat lehetőség beállítása" msgid "GROUP=KEY[=VALUE]" msgstr "CSOPORT=KULCS[=ÉRTÉK]" +#: app/flatpak-builtins-build-finish.c:139 +#, c-format +msgid "Not exporting %s, wrong prefix\n" +msgstr "A(z) %s nem kerül exportálásra, hibás előtag\n" + +#: app/flatpak-builtins-build-finish.c:143 +#, c-format +msgid "Exporting %s\n" +msgstr "%s exportálása\n" + +#: app/flatpak-builtins-build-finish.c:384 +msgid "More than one executable found\n" +msgstr "Több mint egy futtatható állomány található\n" + +#: app/flatpak-builtins-build-finish.c:395 +#, c-format +msgid "Using %s as command\n" +msgstr "A(z) %s használata parancsként\n" + +#: app/flatpak-builtins-build-finish.c:400 +msgid "No executable found\n" +msgstr "Nem található futtatható állomány\n" + #: app/flatpak-builtins-build-finish.c:433 #, c-format msgid "Too few elements in --extra-data argument %s" @@ -658,6 +796,12 @@ msgstr "" "Több lemezkép van a regisztrációs adatbázisban, adjon meg egy hivatkozást a " "--ref használatával" +#: app/flatpak-builtins-build-import-bundle.c:123 +#: app/flatpak-builtins-build-import-bundle.c:151 +#, c-format +msgid "Importing %s (%s)\n" +msgstr "%s importálása (%s)\n" + #: app/flatpak-builtins-build-import-bundle.c:172 msgid "LOCATION FILENAME - Import a file bundle into a local repository" msgstr "HELY FÁJLNÉV - Egy fájlcsomag importálása egy helyi tárolóba" @@ -666,7 +810,7 @@ msgstr "HELY FÁJLNÉV - Egy fájlcsomag importálása egy helyi tárolóba" msgid "LOCATION and FILENAME must be specified" msgstr "A HELY és FÁJLNÉV megadása kötelező" -#: app/flatpak-builtins-build-init.c:49 app/flatpak-builtins-info.c:48 +#: app/flatpak-builtins-build-init.c:49 app/flatpak-builtins-info.c:51 #: app/flatpak-builtins-run.c:52 msgid "Arch to use" msgstr "Használandó architektúra" @@ -760,7 +904,7 @@ msgstr "" "A(z) „%s” nem érvényes összeállítás-típus név, alkalmazás, futtatókörnyezet " "vagy kiterjesztés használata szükséges" -#: app/flatpak-builtins-build-init.c:205 app/flatpak-builtins-override.c:71 +#: app/flatpak-builtins-build-init.c:205 app/flatpak-builtins-override.c:74 #, c-format msgid "'%s' is not a valid application name: %s" msgstr "A(z) „%s” nem érvényes alkalmazásnév: %s" @@ -770,12 +914,14 @@ msgstr "A(z) „%s” nem érvényes alkalmazásnév: %s" msgid "Build directory %s already initialized" msgstr "A(z) „%s” összeállítási könyvtár már elő van készítve" -#: app/flatpak-builtins-build-sign.c:41 app/flatpak-builtins-install.c:56 +#: app/flatpak-builtins-build-sign.c:41 app/flatpak-builtins-info-remote.c:48 +#: app/flatpak-builtins-install.c:57 msgid "Arch to install for" msgstr "Telepítés ezen architektúrára" -#: app/flatpak-builtins-build-sign.c:42 app/flatpak-builtins-install.c:62 -#: app/flatpak-builtins-uninstall.c:48 app/flatpak-builtins-update.c:61 +#: app/flatpak-builtins-build-sign.c:42 app/flatpak-builtins-info-remote.c:50 +#: app/flatpak-builtins-install.c:63 app/flatpak-builtins-uninstall.c:48 +#: app/flatpak-builtins-update.c:61 msgid "Look for runtime with the specified name" msgstr "A megadott nevű futtatókörnyezet keresése" @@ -787,11 +933,48 @@ msgstr "HELY [AZONOSÍTÓ [ÁG]] - Egy alkalmazás vagy futtatókörnyezet alá msgid "No gpg key ids specified" msgstr "Nincsenek megadva GPG kulcsazonosítók" -#: app/flatpak-builtins-delete-remote.c:37 +#: app/flatpak-builtins-config.c:41 +msgid "List configuration keys and values" +msgstr "A konfigurációs kulcsok és értékek listája" + +#: app/flatpak-builtins-config.c:42 +msgid "Get configuration for KEY" +msgstr "Konfiguráció lekérése a KULCShoz" + +#: app/flatpak-builtins-config.c:43 +msgid "Set configuration for KEY to VALUE" +msgstr "A konfigurációs KULCS beállítása az ÉRTÉKre" + +#: app/flatpak-builtins-config.c:44 +msgid "Unset configuration for KEY" +msgstr "KULCS konfigurációs értékének eltávolítása" + +#: app/flatpak-builtins-config.c:95 +#, c-format +msgid "Unknown configure key '%s'" +msgstr "Ismeretlen „%s” konfigurációs kulcs" + +#: app/flatpak-builtins-config.c:144 app/flatpak-builtins-config.c:185 +msgid "You must specify key" +msgstr "Meg kell adnia egy kulcsot" + +#: app/flatpak-builtins-config.c:166 +msgid "You must specify both key and value" +msgstr "Meg kell adnia a kulcsot és az értéket is" + +#: app/flatpak-builtins-config.c:204 +msgid "[KEY [VALUE]] - Manage configuration" +msgstr "[KULCS [ÉRTÉK]] – Konfiguráció kezelése" + +#: app/flatpak-builtins-config.c:223 +msgid "Must specify one of --list, --get, --set or --unset" +msgstr "Meg kell adnia a --list, --get, --set vagy --unset egyikét" + +#: app/flatpak-builtins-delete-remote.c:38 msgid "Remove remote even if in use" msgstr "Távoli eltávolítása akkor is, ha használatban van" -#: app/flatpak-builtins-delete-remote.c:49 +#: app/flatpak-builtins-delete-remote.c:51 msgid "NAME - Delete a remote repository" msgstr "NÉV - Egy távoli tároló törlése" @@ -838,7 +1021,7 @@ msgstr "Az alkalmazás törlési jogosultságának visszavonása" #: app/flatpak-builtins-document-export.c:64 msgid "Revoke the permission to grant further permissions" -msgstr "További jogosultságok adására vonatkozó jogosultság visszavonása." +msgstr "További jogosultságok adására vonatkozó jogosultság visszavonása" #: app/flatpak-builtins-document-export.c:65 msgid "Add permissions for this app" @@ -889,6 +1072,7 @@ msgstr "A HOMOKOZÓS-PID és PARANCS megadása kötelező" #: app/flatpak-builtins-enter.c:109 msgid "Not running as root, may be unable to enter namespace" msgstr "" +"Nem root felhasználóként fut, lehet hogy nem fog tudni belépni a névtérbe" #: app/flatpak-builtins-enter.c:115 #, c-format @@ -944,167 +1128,248 @@ msgstr "Nem állítható át a GID" msgid "Can't switch uid" msgstr "Nem állítható át az UID" -#: app/flatpak-builtins-info.c:49 app/flatpak-builtins-list.c:46 -#: app/flatpak-builtins-list-remotes.c:43 +#: app/flatpak-builtins-info.c:52 msgid "Show user installations" msgstr "Felhasználói telepítések megjelenítése" -#: app/flatpak-builtins-info.c:50 app/flatpak-builtins-list.c:47 -#: app/flatpak-builtins-list-remotes.c:44 +#: app/flatpak-builtins-info.c:53 msgid "Show system-wide installations" msgstr "Rendszerszintű telepítések megjelenítése" -#: app/flatpak-builtins-info.c:51 app/flatpak-builtins-list.c:48 -#: app/flatpak-builtins-list-remotes.c:45 +#: app/flatpak-builtins-info.c:54 msgid "Show specific system-wide installations" msgstr "Bizonyos rendszerszintű telepítések megjelenítése" -#: app/flatpak-builtins-info.c:52 +#: app/flatpak-builtins-info.c:55 app/flatpak-builtins-info-remote.c:53 msgid "Show ref" msgstr "Hivatkozás megjelenítése" -#: app/flatpak-builtins-info.c:53 +#: app/flatpak-builtins-info.c:56 app/flatpak-builtins-info-remote.c:54 msgid "Show commit" msgstr "Kommit megjelenítése" -#: app/flatpak-builtins-info.c:54 +#: app/flatpak-builtins-info.c:57 msgid "Show origin" msgstr "Eredet megjelenítése" -#: app/flatpak-builtins-info.c:55 +#: app/flatpak-builtins-info.c:58 msgid "Show size" msgstr "Méret megjelenítése" -#: app/flatpak-builtins-info.c:56 +#: app/flatpak-builtins-info.c:59 app/flatpak-builtins-info-remote.c:56 msgid "Show metadata" msgstr "Metaadatok megjelenítése" -#: app/flatpak-builtins-info.c:57 +#: app/flatpak-builtins-info.c:60 +msgid "Show permissions" +msgstr "Jogosultságok megjelenítése" + +#: app/flatpak-builtins-info.c:61 +msgid "Query file access" +msgstr "Fájlhozzáférés lekérése" + +#: app/flatpak-builtins-info.c:61 app/flatpak-builtins-install.c:68 +#: app/flatpak-builtins-update.c:64 +msgid "PATH" +msgstr "ÚTVONAL" + +#: app/flatpak-builtins-info.c:62 msgid "Show extensions" msgstr "Kiterjesztések megjelenítése" -#: app/flatpak-builtins-info.c:97 +#: app/flatpak-builtins-info.c:118 msgid "NAME [BRANCH] - Get info about installed app and/or runtime" msgstr "" "NÉV [ÁG] - Információk lekérése a telepített alkalmazásról és/vagy " "futtatókörnyezetről" -#: app/flatpak-builtins-info.c:157 +#: app/flatpak-builtins-info.c:189 msgid "ref not present in origin" -msgstr "" +msgstr "a hivatkozás nincs jelen az eredetben" -#: app/flatpak-builtins-info.c:159 +#: app/flatpak-builtins-info.c:202 app/flatpak-builtins-info-remote.c:177 +msgid "Warning: Commit has no flatpak metadata\n" +msgstr "Figyelmeztetés: a kommitnak nincs flatpak metaadata\n" + +#: app/flatpak-builtins-info.c:209 app/flatpak-builtins-info-remote.c:200 msgid "Ref:" msgstr "Hivatkozás:" -#: app/flatpak-builtins-info.c:160 app/flatpak-builtins-info.c:270 +#: app/flatpak-builtins-info.c:210 app/flatpak-builtins-info.c:364 +#: app/flatpak-builtins-info-remote.c:201 msgid "ID:" msgstr "Azonosító:" -#: app/flatpak-builtins-info.c:161 +#: app/flatpak-builtins-info.c:211 app/flatpak-builtins-info-remote.c:202 msgid "Arch:" msgstr "Architektúra:" -#: app/flatpak-builtins-info.c:162 +#: app/flatpak-builtins-info.c:212 app/flatpak-builtins-info-remote.c:203 msgid "Branch:" msgstr "Ág:" -#: app/flatpak-builtins-info.c:163 app/flatpak-builtins-info.c:271 +#: app/flatpak-builtins-info.c:213 app/flatpak-builtins-info.c:365 msgid "Origin:" msgstr "Eredet:" -#: app/flatpak-builtins-info.c:166 +#: app/flatpak-builtins-info.c:215 app/flatpak-builtins-info-remote.c:205 +msgid "Collection ID:" +msgstr "Gyűjteményazonosító:" + +#: app/flatpak-builtins-info.c:217 app/flatpak-builtins-info-remote.c:206 +msgid "Date:" +msgstr "Dátum:" + +#: app/flatpak-builtins-info.c:219 app/flatpak-builtins-info-remote.c:207 +msgid "Subject:" +msgstr "Tárgy:" + +#: app/flatpak-builtins-info.c:223 msgid "Active commit:" msgstr "Aktív kommit:" -#: app/flatpak-builtins-info.c:167 +#: app/flatpak-builtins-info.c:224 msgid "Latest commit:" msgstr "Legutolsó kommit:" -#: app/flatpak-builtins-info.c:170 app/flatpak-builtins-info.c:272 +#: app/flatpak-builtins-info.c:227 app/flatpak-builtins-info.c:366 +#: app/flatpak-builtins-info-remote.c:208 msgid "Commit:" msgstr "Kommit:" -#: app/flatpak-builtins-info.c:172 +#: app/flatpak-builtins-info.c:229 msgid "alt-id:" msgstr "alternatív azonosító:" -#: app/flatpak-builtins-info.c:173 +#: app/flatpak-builtins-info.c:230 app/flatpak-builtins-info-remote.c:209 +msgid "Parent:" +msgstr "Szülő:" + +#: app/flatpak-builtins-info.c:231 msgid "Location:" msgstr "Hely:" -#: app/flatpak-builtins-info.c:174 app/flatpak-builtins-info.c:273 +#: app/flatpak-builtins-info.c:232 app/flatpak-builtins-info.c:367 +#: app/flatpak-builtins-info-remote.c:211 msgid "Installed size:" msgstr "Telepített méret:" -#: app/flatpak-builtins-info.c:179 +#: app/flatpak-builtins-info.c:237 app/flatpak-builtins-info-remote.c:216 msgid "Runtime:" msgstr "Futtatókörnyezet:" -#: app/flatpak-builtins-info.c:184 +#: app/flatpak-builtins-info.c:242 msgid "Installed subdirectories:" msgstr "Telepített alkönyvtárak:" -#: app/flatpak-builtins-info.c:269 +#: app/flatpak-builtins-info.c:363 msgid "Extension:" msgstr "Kiterjesztés:" -#: app/flatpak-builtins-info.c:280 +#: app/flatpak-builtins-info.c:374 msgid "Subpaths:" msgstr "Alútvonalak:" -#: app/flatpak-builtins-install.c:57 -msgid "Don't pull, only install from local cache" -msgstr "Ne kérje le, csak telepítse a helyi gyorsítótárból" +#: app/flatpak-builtins-info-remote.c:49 +msgid "Commit to show info for" +msgstr "Kommit, amelyhez meg kell jeleníteni az információt" -#: app/flatpak-builtins-install.c:58 app/flatpak-builtins-update.c:57 -msgid "Don't deploy, only download to local cache" -msgstr "Ne telepítse, csak töltse le a helyi gyorsítótárba" - -#: app/flatpak-builtins-install.c:59 -msgid "Don't install related refs" -msgstr "Ne telepítse a kapcsolódó hivatkozásokat" - -#: app/flatpak-builtins-install.c:60 app/flatpak-builtins-update.c:59 -msgid "Don't verify/install runtime dependencies" -msgstr "Ne ellenőrizze/telepítse a futtatókörnyezet függőségeit" - -#: app/flatpak-builtins-install.c:61 app/flatpak-builtins-update.c:60 -msgid "Don't use static deltas" -msgstr "Ne használjon statikus deltákat" - -#: app/flatpak-builtins-install.c:63 app/flatpak-builtins-uninstall.c:49 -#: app/flatpak-builtins-update.c:62 +#: app/flatpak-builtins-info-remote.c:51 app/flatpak-builtins-install.c:64 +#: app/flatpak-builtins-uninstall.c:49 app/flatpak-builtins-update.c:62 msgid "Look for app with the specified name" msgstr "Alkalmazás keresése a megadott névvel" -#: app/flatpak-builtins-install.c:64 +#: app/flatpak-builtins-info-remote.c:52 +msgid "Display log" +msgstr "Napló megjelenítése" + +#: app/flatpak-builtins-info-remote.c:55 +msgid "Show parent" +msgstr "Szülő megjelenítése" + +#: app/flatpak-builtins-info-remote.c:122 +msgid "" +" REMOTE REF - Show information about an application or runtime in a remote" +msgstr "" +" TÁVOLI HIVATKOZÁS – Információk megjelenítése az alkalmazásról vagy " +"futtatókörnyezetről a távoli tárolóban" + +#: app/flatpak-builtins-info-remote.c:133 app/flatpak-builtins-install.c:499 +msgid "REMOTE and REF must be specified" +msgstr "A TÁVOLI és HIVATKOZÁS megadása kötelező" + +#: app/flatpak-builtins-info-remote.c:210 +msgid "Download size:" +msgstr "Letöltési méret:" + +#: app/flatpak-builtins-info-remote.c:223 +msgid "History:\n" +msgstr "Előzmények:\n" + +#: app/flatpak-builtins-info-remote.c:244 +msgid " Subject:" +msgstr " Tárgy:" + +#: app/flatpak-builtins-info-remote.c:245 +msgid " Date:" +msgstr " Dátum:" + +#: app/flatpak-builtins-info-remote.c:246 +msgid " Commit:" +msgstr " Kommit:" + +#: app/flatpak-builtins-info-remote.c:292 +#, c-format +msgid "Warning: Commit %s has no flatpak metadata\n" +msgstr "Figyelmeztetés: a(z) %s kommitnak nincs flatpak metaadata\n" + +#: app/flatpak-builtins-install.c:58 +msgid "Don't pull, only install from local cache" +msgstr "Ne kérje le, csak telepítse a helyi gyorsítótárból" + +#: app/flatpak-builtins-install.c:59 app/flatpak-builtins-update.c:57 +msgid "Don't deploy, only download to local cache" +msgstr "Ne telepítse, csak töltse le a helyi gyorsítótárba" + +#: app/flatpak-builtins-install.c:60 +msgid "Don't install related refs" +msgstr "Ne telepítse a kapcsolódó hivatkozásokat" + +#: app/flatpak-builtins-install.c:61 app/flatpak-builtins-update.c:59 +msgid "Don't verify/install runtime dependencies" +msgstr "Ne ellenőrizze/telepítse a futtatókörnyezet függőségeit" + +#: app/flatpak-builtins-install.c:62 app/flatpak-builtins-update.c:60 +msgid "Don't use static deltas" +msgstr "Ne használjon statikus deltákat" + +#: app/flatpak-builtins-install.c:65 msgid "Assume LOCATION is a .flatpak single-file bundle" msgstr "Feltételezzük, hogy a HELY egy .flatpak önálló fájlból álló csomag" -#: app/flatpak-builtins-install.c:65 +#: app/flatpak-builtins-install.c:66 msgid "Assume LOCATION is a .flatpakref application description" msgstr "Feltételezzük, hogy a HELY egy .flatpakref alkalmazás-leírás" -#: app/flatpak-builtins-install.c:66 +#: app/flatpak-builtins-install.c:67 msgid "Check bundle signatures with GPG key from FILE (- for stdin)" msgstr "" "Csomag aláírásának ellenőrzése GPG kulccsal a FÁJLBÓL (- a szabványos " "bemenethez)" -#: app/flatpak-builtins-install.c:67 +#: app/flatpak-builtins-install.c:68 msgid "Only install this subpath" msgstr "Csak ezen alútvonal telepítése" -#: app/flatpak-builtins-install.c:67 app/flatpak-builtins-update.c:64 -msgid "PATH" -msgstr "ÚTVONAL" - -#: app/flatpak-builtins-install.c:68 app/flatpak-builtins-update.c:65 +#: app/flatpak-builtins-install.c:69 app/flatpak-builtins-update.c:65 msgid "Automatically answer yes for all questions" msgstr "Automatikusan válaszoljon igennel minden kérdésre" -#: app/flatpak-builtins-install.c:210 +#: app/flatpak-builtins-install.c:70 +msgid "Uninstall first if already installed" +msgstr "Eltávolítás először, ha már telepítve van" + +#: app/flatpak-builtins-install.c:212 #, c-format msgid "" "This application depends on runtimes from:\n" @@ -1115,179 +1380,212 @@ msgstr "" " %s\n" "Ennek beállítása mint új távoli „%s”" -#: app/flatpak-builtins-install.c:214 app/flatpak-builtins-install.c:340 +#: app/flatpak-builtins-install.c:216 app/flatpak-builtins-install.c:342 #, c-format msgid "Configuring %s as new remote '%s'" msgstr "A(z) %s beállítása mint új távoli „%s”" -#: app/flatpak-builtins-install.c:262 +#: app/flatpak-builtins-install.c:264 msgid "Bundle filename must be specified" msgstr "A csomagfájlnév megadása kötelező" -#: app/flatpak-builtins-install.c:272 +#: app/flatpak-builtins-install.c:274 msgid "Remote bundles are not supported" msgstr "A távoli csomagok nem támogatottak" -#: app/flatpak-builtins-install.c:336 +#: app/flatpak-builtins-install.c:338 #, c-format msgid "" "The remote '%s', at location %s contains additional applications.\n" -"Do you want to install other applications from here?" +"Should the remote be kept for future installations?" msgstr "" +"A(z) „%s” távoli tároló, a(z) %s helyen további alkalmazásokat tartalmaz.\n" +"Megmaradjon a távoli tároló a jövőbeli telepítésekhez?" -#: app/flatpak-builtins-install.c:396 +#: app/flatpak-builtins-install.c:398 msgid "Filename or uri must be specified" msgstr "A fájlnév vagy URI megadása kötelező" -#: app/flatpak-builtins-install.c:440 +#: app/flatpak-builtins-install.c:442 #, c-format msgid "Installing: %s\n" msgstr "Telepítés: %s\n" -#: app/flatpak-builtins-install.c:470 +#: app/flatpak-builtins-install.c:474 msgid "LOCATION/REMOTE [REF...] - Install applications or runtimes" msgstr "" "HELY/TÁVOLI [HIVATKOZÁS…] - Alkalmazások vagy futtatókörnyezetek telepítése" -#: app/flatpak-builtins-install.c:491 -msgid "REMOTE and REF must be specified" -msgstr "A TÁVOLI és HIVATKOZÁS megadása kötelező" - -#: app/flatpak-builtins-list.c:49 +#: app/flatpak-builtins-list.c:43 msgid "Show extra information" msgstr "További információk megjelenítése" -#: app/flatpak-builtins-list.c:50 +#: app/flatpak-builtins-list.c:44 msgid "List installed runtimes" msgstr "Telepített futtatókörnyezetek felsorolása" -#: app/flatpak-builtins-list.c:51 +#: app/flatpak-builtins-list.c:45 msgid "List installed applications" msgstr "Telepített alkalmazások felsorolása" -#: app/flatpak-builtins-list.c:52 +#: app/flatpak-builtins-list.c:46 msgid "Arch to show" msgstr "Megjelenítendő architektúra" -#: app/flatpak-builtins-list.c:53 app/flatpak-builtins-ls-remote.c:49 +#: app/flatpak-builtins-list.c:47 app/flatpak-builtins-ls-remote.c:50 msgid "List all refs (including locale/debug)" msgstr "" +"Összes hivatkozás felsorolása (területi beállítás és hibakeresési elemekkel " +"együtt)" -#: app/flatpak-builtins-list.c:131 app/flatpak-builtins-ls-remote.c:129 +#: app/flatpak-builtins-list.c:125 app/flatpak-builtins-ls-remote.c:174 #: app/flatpak-builtins-repo.c:98 msgid "Ref" msgstr "Hivatkozás" -#: app/flatpak-builtins-list.c:134 app/flatpak-builtins-ls-remote.c:131 +#: app/flatpak-builtins-list.c:128 app/flatpak-builtins-ls-remote.c:176 msgid "Origin" msgstr "Eredet" -#: app/flatpak-builtins-list.c:135 +#: app/flatpak-builtins-list.c:129 msgid "Active commit" msgstr "Aktív kommit" -#: app/flatpak-builtins-list.c:136 +#: app/flatpak-builtins-list.c:130 msgid "Latest commit" msgstr "Legutolsó kommit" -#: app/flatpak-builtins-list.c:137 app/flatpak-builtins-ls-remote.c:133 +#: app/flatpak-builtins-list.c:131 app/flatpak-builtins-ls-remote.c:178 msgid "Installed size" msgstr "Telepített méret" -#: app/flatpak-builtins-list.c:139 app/flatpak-builtins-list-remotes.c:112 +#: app/flatpak-builtins-list.c:133 app/flatpak-builtins-list-remotes.c:73 msgid "Options" msgstr "Beállítások" -#: app/flatpak-builtins-list.c:375 +#: app/flatpak-builtins-list.c:305 msgid " - List installed apps and/or runtimes" msgstr " - Telepített alkalmazások és/vagy futtatókörnyezetek felsorolása" -#: app/flatpak-builtins-list-remotes.c:46 +#: app/flatpak-builtins-list-remotes.c:40 msgid "Show remote details" msgstr "Távoli részleteinek megjelenítése" -#: app/flatpak-builtins-list-remotes.c:47 +#: app/flatpak-builtins-list-remotes.c:41 msgid "Show disabled remotes" msgstr "Letiltott távoliak megjelenítése" -#: app/flatpak-builtins-list-remotes.c:59 +#: app/flatpak-builtins-list-remotes.c:53 msgid " - List remote repositories" msgstr " - Távoli tárolók felsorolása" -#: app/flatpak-builtins-list-remotes.c:105 +#: app/flatpak-builtins-list-remotes.c:66 msgid "Name" msgstr "Név" -#: app/flatpak-builtins-list-remotes.c:108 +#: app/flatpak-builtins-list-remotes.c:69 msgid "Title" msgstr "Cím" -#: app/flatpak-builtins-list-remotes.c:110 +#: app/flatpak-builtins-list-remotes.c:71 msgid "Priority" msgstr "Prioritás" -#: app/flatpak-builtins-ls-remote.c:44 +#: app/flatpak-builtins-ls-remote.c:45 msgid "Show arches and branches" msgstr "Architektúrák és ágak megjelenítése" -#: app/flatpak-builtins-ls-remote.c:45 +#: app/flatpak-builtins-ls-remote.c:46 msgid "Show only runtimes" msgstr "Csak futtatókörnyezetek megjelenítése" -#: app/flatpak-builtins-ls-remote.c:46 +#: app/flatpak-builtins-ls-remote.c:47 msgid "Show only apps" msgstr "Csak alkalmazások megjelenítése" -#: app/flatpak-builtins-ls-remote.c:47 +#: app/flatpak-builtins-ls-remote.c:48 msgid "Show only those where updates are available" msgstr "Csak azok megjelenítése, ahol frissítések érhetők el" -#: app/flatpak-builtins-ls-remote.c:48 +#: app/flatpak-builtins-ls-remote.c:49 msgid "Limit to this arch (* for all)" msgstr "Korlátozás erre az architektúrára (* az összeshez)" -#: app/flatpak-builtins-ls-remote.c:74 -msgid " REMOTE - Show available runtimes and applications" -msgstr " TÁVOLI - Elérhető futtatókörnyezetek és alkalmazások megjelenítése" +#: app/flatpak-builtins-ls-remote.c:96 +msgid " [REMOTE] - Show available runtimes and applications" +msgstr " [TÁVOLI] – Elérhető futtatókörnyezetek és alkalmazások megjelenítése" -#: app/flatpak-builtins-ls-remote.c:132 +#: app/flatpak-builtins-ls-remote.c:177 msgid "Commit" msgstr "Kommit" -#: app/flatpak-builtins-ls-remote.c:134 +#: app/flatpak-builtins-ls-remote.c:179 msgid "Download size" msgstr "Letöltési méret" -#: app/flatpak-builtins-ls-remote.c:245 -#, fuzzy +#: app/flatpak-builtins-ls-remote.c:304 msgid "No ref information available in repository" -msgstr "Általános információk kiírása a tárolóról" +msgstr "Nem érhetőek el hivatkozásinformációk a tárolóban" #: app/flatpak-builtins-make-current.c:38 msgid "Arch to make current for" msgstr "Aktuálissá tétel ezen architektúrára" -#: app/flatpak-builtins-make-current.c:57 +#: app/flatpak-builtins-make-current.c:58 msgid "APP BRANCH - Make branch of application current" msgstr "ALKALMAZÁS ÁG - Az alkalmazás ágának aktuálissá tétele" -#: app/flatpak-builtins-make-current.c:64 app/flatpak-builtins-override.c:63 -#: app/flatpak-builtins-run.c:105 +#: app/flatpak-builtins-make-current.c:69 app/flatpak-builtins-run.c:105 msgid "APP must be specified" msgstr "Az ALKALMAZÁS megadása kötelező" -#: app/flatpak-builtins-make-current.c:79 +#: app/flatpak-builtins-make-current.c:84 msgid "BRANCH must be specified" msgstr "Az ÁG megadása kötelező" -#: app/flatpak-builtins-make-current.c:92 +#: app/flatpak-builtins-make-current.c:97 #, c-format msgid "App %s branch %s is not installed" msgstr "A(z) %s alkalmazás, %s ág nincs telepítve" -#: app/flatpak-builtins-override.c:53 -msgid "APP - Override settings for application" -msgstr "ALKALMAZÁS - Beállítások felülbírálása az alkalmazáshoz" +#: app/flatpak-builtins-override.c:54 +msgid "[APP] - Override settings [for application]" +msgstr "[ALKALMAZÁS] – Beállítások felülbírálása az alkalmazáshoz" + +#: app/flatpak-builtins-repo.c:48 +#, c-format +msgid "Title: %s\n" +msgstr "Cím: %s\n" + +#: app/flatpak-builtins-repo.c:51 +#, c-format +msgid "Collection ID: %s\n" +msgstr "Gyűjteményazonosító: %s\n" + +#: app/flatpak-builtins-repo.c:54 +#, c-format +msgid "Default branch: %s\n" +msgstr "Alapértelmezett ág: %s\n" + +#: app/flatpak-builtins-repo.c:57 +#, c-format +msgid "Redirect URL: %s\n" +msgstr "URL átirányítás: %s\n" + +#: app/flatpak-builtins-repo.c:60 +#, c-format +msgid "Redirect collection ID: %s\n" +msgstr "Gyűjteményazonosító átirányítás: %s\n" + +#: app/flatpak-builtins-repo.c:68 +#, c-format +msgid "GPG key hash: %s\n" +msgstr "GPG kulcs ujjlenyomat: %s\n" + +#: app/flatpak-builtins-repo.c:77 +#, c-format +msgid "%zd branches\n" +msgstr "%zd ág\n" #: app/flatpak-builtins-repo.c:99 msgid "Installed" @@ -1309,7 +1607,7 @@ msgstr "A tárolóban lévő ágak felsorolása" msgid "Print metadata for a branch" msgstr "Egy ág metaadatainak kiírása" -#: app/flatpak-builtins-repo.c:167 +#: app/flatpak-builtins-repo.c:168 msgid "LOCATION - Repository maintenance" msgstr "HELY - Tároló karbantartása" @@ -1328,6 +1626,8 @@ msgstr "Ehhez a tárolóhoz használandó alapértelmezett ág" #: app/flatpak-builtins-repo-update.c:57 msgid "Permanently deploy collection ID to client remote configurations" msgstr "" +"Gyűjteményazonosítók állandó beállítása az ügyfél távoli tároló " +"beállításaiban" #: app/flatpak-builtins-repo-update.c:59 msgid "Import new default GPG public key from FILE" @@ -1421,18 +1721,9 @@ msgstr "Használandó futtatókörnyezet" msgid "Runtime version to use" msgstr "Használandó futtatókörnyezet-verzió" -#: app/flatpak-builtins-run.c:58 -msgid "Log session bus calls" -msgstr "Munkamenetbusz-hívások naplózása" - -#: app/flatpak-builtins-run.c:59 -msgid "Log system bus calls" -msgstr "Rendszerbusz-hívások naplózása" - #: app/flatpak-builtins-run.c:60 -#, fuzzy msgid "Log accessibility bus calls" -msgstr "Munkamenetbusz-hívások naplózása" +msgstr "Akadálymentesítési busz hívások naplózása" #: app/flatpak-builtins-run.c:61 msgid "Enable file forwarding" @@ -1442,6 +1733,39 @@ msgstr "Fájltovábbítás engedélyezése" msgid "APP [args...] - Run an app" msgstr "ALKALMAZÁS [argumentumok…] - Alkalmazás futtatása" +#: app/flatpak-builtins-search.c:239 +msgid "TEXT - Search remote apps/runtimes for text" +msgstr "" +"SZÖVEG – Távoli alkalmazások vagy futtatókörnyezetek keresése a szöveghez" + +#: app/flatpak-builtins-search.c:249 +msgid "TEXT must be specified" +msgstr "A SZÖVEG megadása kötelező" + +#: app/flatpak-builtins-search.c:305 +msgid "Application ID" +msgstr "Alkalmazásazonosító" + +#: app/flatpak-builtins-search.c:306 +msgid "Version" +msgstr "Verzió" + +#: app/flatpak-builtins-search.c:308 +msgid "Branch" +msgstr "Ág" + +#: app/flatpak-builtins-search.c:310 +msgid "Remotes" +msgstr "Távoli tárolók" + +#: app/flatpak-builtins-search.c:311 +msgid "Description" +msgstr "Leírás" + +#: app/flatpak-builtins-search.c:320 +msgid "No matches found" +msgstr "Nincs találat" + #: app/flatpak-builtins-uninstall.c:44 msgid "Arch to uninstall" msgstr "Eltávolítandó architektúra" @@ -1458,19 +1782,24 @@ msgstr "Ne távolítsa el a kapcsolódó hivatkozásokat" msgid "Remove files even if running" msgstr "Fájlok eltávolítása akkor is, ha futnak" -#: app/flatpak-builtins-uninstall.c:69 +#: app/flatpak-builtins-uninstall.c:70 msgid "REF... - Uninstall an application" msgstr "HIVATKOZÁS… - Alkalmazás eltávolítása" -#: app/flatpak-builtins-uninstall.c:76 +#: app/flatpak-builtins-uninstall.c:81 msgid "Must specify at least one REF" msgstr "Legalább egy HIVATKOZÁS megadása kötelező" -#: app/flatpak-builtins-uninstall.c:129 app/flatpak-transaction.c:340 +#: app/flatpak-builtins-uninstall.c:134 app/flatpak-transaction.c:355 #, c-format msgid "Warning: Problem looking for related refs: %s\n" msgstr "Figyelmeztetés: hiba a kapcsolódó hivatkozások keresésekor: %s\n" +#: app/flatpak-builtins-uninstall.c:164 +#, c-format +msgid "Uninstalling: %s\n" +msgstr "Eltávolítás: %s\n" + #: app/flatpak-builtins-update.c:53 msgid "Arch to update for" msgstr "Frissítés ezen architektúrára" @@ -1479,10 +1808,6 @@ msgstr "Frissítés ezen architektúrára" msgid "Commit to deploy" msgstr "Telepítendő kommit" -#: app/flatpak-builtins-update.c:54 -msgid "COMMIT" -msgstr "KOMMIT" - #: app/flatpak-builtins-update.c:55 msgid "Remove old files even if running" msgstr "Régi fájlok eltávolítása akkor is, ha futnak" @@ -1503,43 +1828,95 @@ msgstr "Az AppStream frissítése a távolihoz" msgid "Only update this subpath" msgstr "Csak ezen alútvonal frissítése" -#: app/flatpak-builtins-update.c:95 -#, c-format -msgid "Updating appstream for remote %s\n" -msgstr "Az AppStream frissítése a távolihoz: %s\n" - -#: app/flatpak-builtins-update.c:133 +#: app/flatpak-builtins-update.c:83 msgid "[REF...] - Update applications or runtimes" -msgstr "[HIVATKOZÁS…] - Alkalmazások vagy futtatókörnyezetek frissítése" +msgstr "[HIVATKOZÁS…] – Alkalmazások vagy futtatókörnyezetek frissítése" + +#: app/flatpak-builtins-update.c:119 +msgid "Looking for updates...\n" +msgstr "Frissítések keresése…\n" + +#: app/flatpak-builtins-utils.c:365 +#, c-format +msgid "Remote ‘%s’ found in multiple installations:\n" +msgstr "A(z) „%s” távoli tároló több telepítésben is megtalálható:\n" + +#: app/flatpak-builtins-utils.c:372 +msgid "Which do you want to use (0 to abort)?" +msgstr "Melyiket szeretné használni (0 a megszakításhoz)?" + +#: app/flatpak-builtins-utils.c:374 +#, c-format +msgid "No remote chosen to resolve ‘%s’ which exists in multiple installations" +msgstr "" +"Nem lett távoli tároló kiválasztva a(z) „%s” feloldásához, amely több " +"telepítésben is létezik" + +#: app/flatpak-builtins-utils.c:479 app/flatpak-builtins-utils.c:481 +#, c-format +msgid "Updating appstream data for user remote %s\n" +msgstr "Az appstream adatok frissítése a felhasználó %s távoli tárolójához\n" + +#: app/flatpak-builtins-utils.c:486 app/flatpak-builtins-utils.c:488 +#, c-format +msgid "Updating appstream data for remote %s\n" +msgstr "Az appstream adatok frissítése a(z) %s távoli tárolóhoz\n" + +#: app/flatpak-builtins-utils.c:493 +#, c-format +msgid "Error updating: %s\n" +msgstr "Hiba a frissítéskor: %s\n" + +#: app/flatpak-builtins-utils.c:526 +#, c-format +msgid "Remote \"%s\" not found" +msgstr "A(z) „%s” távoli tároló nem található" #. translators: please keep the leading space -#: app/flatpak-main.c:61 +#: app/flatpak-main.c:62 msgid " Manage installed apps and runtimes" msgstr " Telepített alkalmazások és futtatókörnyezetek kezelése" -#: app/flatpak-main.c:62 +#: app/flatpak-main.c:63 msgid "Install an application or runtime" msgstr "Egy alkalmazás vagy futtatókörnyezet telepítése" -#: app/flatpak-main.c:63 +#: app/flatpak-main.c:64 msgid "Update an installed application or runtime" msgstr "Telepített alkalmazás vagy futtatókörnyezet frissítése" -#: app/flatpak-main.c:64 +#: app/flatpak-main.c:65 msgid "Uninstall an installed application or runtime" msgstr "Telepített alkalmazás vagy futtatókörnyezet eltávolítása" -#: app/flatpak-main.c:65 +#: app/flatpak-main.c:66 msgid "List installed apps and/or runtimes" msgstr "Telepített alkalmazások és/vagy futtatókörnyezetek felsorolása" -#: app/flatpak-main.c:66 +#: app/flatpak-main.c:67 msgid "Show info for installed app or runtime" msgstr "" "Információk megjelenítése a telepített alkalmazáshoz vagy futtatókörnyezethez" +#: app/flatpak-main.c:68 +msgid "Configure flatpak" +msgstr "Flatpak beállítása" + #. translators: please keep the leading newline and space -#: app/flatpak-main.c:69 +#: app/flatpak-main.c:71 +msgid "" +"\n" +" Finding applications and runtimes" +msgstr "" +"\n" +"Alkalmazás és futtatókörnyezet keresése" + +#: app/flatpak-main.c:72 +msgid "Search for remote apps/runtimes" +msgstr "Távoli alkalmazások vagy futtatókörnyezetek keresése" + +#. translators: please keep the leading newline and space +#: app/flatpak-main.c:75 msgid "" "\n" " Running applications" @@ -1547,24 +1924,24 @@ msgstr "" "\n" " Futó alkalmazások" -#: app/flatpak-main.c:70 +#: app/flatpak-main.c:76 msgid "Run an application" msgstr "Alkalmazás futtatása" -#: app/flatpak-main.c:71 +#: app/flatpak-main.c:77 msgid "Override permissions for an application" msgstr "Jogosultságok felülbírálása egy alkalmazásnál" -#: app/flatpak-main.c:72 +#: app/flatpak-main.c:78 msgid "Specify default version to run" msgstr "Alapértelmezett verzió megadása a futtatáshoz" -#: app/flatpak-main.c:73 +#: app/flatpak-main.c:79 msgid "Enter the namespace of a running application" msgstr "Futó alkalmazás névterének megadása" #. translators: please keep the leading newline and space -#: app/flatpak-main.c:76 +#: app/flatpak-main.c:82 msgid "" "\n" " Manage file access" @@ -1572,24 +1949,24 @@ msgstr "" "\n" " Fájlhozzáférés kezelése" -#: app/flatpak-main.c:77 +#: app/flatpak-main.c:83 msgid "Grant an application access to a specific file" msgstr "Hozzáférés adása egy alkalmazásnak egy bizonyos fájlhoz" -#: app/flatpak-main.c:78 +#: app/flatpak-main.c:84 msgid "Revoke access to a specific file" msgstr "Hozzáférés visszavonása egy bizonyos fájlhoz" -#: app/flatpak-main.c:79 +#: app/flatpak-main.c:85 msgid "Show information about a specific file" msgstr "Információk megjelenítése egy bizonyos fájlról" -#: app/flatpak-main.c:80 +#: app/flatpak-main.c:86 msgid "List exported files" msgstr "Exportált fájlok felsorolása" #. translators: please keep the leading newline and space -#: app/flatpak-main.c:83 +#: app/flatpak-main.c:89 msgid "" "\n" " Manage remote repositories" @@ -1597,28 +1974,33 @@ msgstr "" "\n" " Távoli tárolók kezelése" -#: app/flatpak-main.c:84 +#: app/flatpak-main.c:90 msgid "List all configured remotes" msgstr "Az összes beállított távoli felsorolása" -#: app/flatpak-main.c:85 +#: app/flatpak-main.c:91 msgid "Add a new remote repository (by URL)" msgstr "Új távoli tároló hozzáadása (URL alapján)" -#: app/flatpak-main.c:86 +#: app/flatpak-main.c:92 msgid "Modify properties of a configured remote" msgstr "Beállított távoli tulajdonságainak módosítása" -#: app/flatpak-main.c:87 +#: app/flatpak-main.c:93 msgid "Delete a configured remote" msgstr "Beállított távoli törlése" -#: app/flatpak-main.c:89 +#: app/flatpak-main.c:95 msgid "List contents of a configured remote" msgstr "Beállított távoli tartalmának felsorolása" +#: app/flatpak-main.c:96 +msgid "Show information about a remote app or runtime" +msgstr "" +"Információk megjelenítése a távoli alkalmazáshoz vagy futtatókörnyezethez" + #. translators: please keep the leading newline and space -#: app/flatpak-main.c:92 +#: app/flatpak-main.c:99 msgid "" "\n" " Build applications" @@ -1626,506 +2008,285 @@ msgstr "" "\n" " Alkalmazások összeállítása" -#: app/flatpak-main.c:93 +#: app/flatpak-main.c:100 msgid "Initialize a directory for building" msgstr "Könyvtár előkészítése az összeállításhoz" -#: app/flatpak-main.c:94 +#: app/flatpak-main.c:101 msgid "Run a build command inside the build dir" msgstr "Összeállítási parancs futtatása az összeállítási könyvtáron belül" -#: app/flatpak-main.c:95 +#: app/flatpak-main.c:102 msgid "Finish a build dir for export" msgstr "Összeállítási könyvtár befejezése exportáláshoz" -#: app/flatpak-main.c:96 +#: app/flatpak-main.c:103 msgid "Export a build dir to a repository" msgstr "Összeállítási könyvtár exportálása tárolóba" -#: app/flatpak-main.c:97 -msgid "Create a bundle file from a build directory" -msgstr "Csomagfájl létrehozása összeállítási könyvtárból" +#: app/flatpak-main.c:104 +msgid "Create a bundle file from a ref in a local repository" +msgstr "Csomagfájl létrehozása egy hivatkozásból egy helyi tárolóban" -#: app/flatpak-main.c:98 +#: app/flatpak-main.c:105 msgid "Import a bundle file" msgstr "Csomagfájl importálása" -#: app/flatpak-main.c:99 +#: app/flatpak-main.c:106 msgid "Sign an application or runtime" msgstr "Alkalmazás vagy futtatókörnyezet aláírása" -#: app/flatpak-main.c:100 +#: app/flatpak-main.c:107 msgid "Update the summary file in a repository" msgstr "Az összegzőfájl frissítése egy tárolóban" -#: app/flatpak-main.c:101 +#: app/flatpak-main.c:108 msgid "Create new commit based on existing ref" msgstr "Új kommit létrehozása meglévő hivatkozás alapján" -#: app/flatpak-main.c:102 +#: app/flatpak-main.c:109 msgid "Print information about a repo" msgstr "Információk kiírása egy tárolóról" -#: app/flatpak-main.c:119 -#, fuzzy +#: app/flatpak-main.c:126 msgid "Print debug information during command processing, -vv for more detail" -msgstr "Hibakeresési információk kiírása a parancsfeldolgozás közben" +msgstr "" +"Hibakeresési információk kiírása a parancsfeldolgozás közben, -vv a több " +"részlethez" -#: app/flatpak-main.c:120 +#: app/flatpak-main.c:127 msgid "Print OSTree debug information during command processing" msgstr "OSTree hibakeresési információk kiírása a parancsfeldolgozás közben" -#: app/flatpak-main.c:121 +#: app/flatpak-main.c:128 msgid "Show help options" msgstr "Súgólehetőségek megjelenítése" -#: app/flatpak-main.c:126 +#: app/flatpak-main.c:133 msgid "Print version information and exit" msgstr "Verzióinformációk kiírása és kilépés" -#: app/flatpak-main.c:127 +#: app/flatpak-main.c:134 msgid "Print default arch and exit" msgstr "Alapértelmezett architektúra kiírása és kilépés" -#: app/flatpak-main.c:128 +#: app/flatpak-main.c:135 msgid "Print supported arches and exit" msgstr "Támogatott architektúrák kiírása és kilépés" -#: app/flatpak-main.c:129 +#: app/flatpak-main.c:136 msgid "Print active gl drivers and exit" msgstr "Aktív gl illesztőprogramok kiírása és kilépés" -#: app/flatpak-main.c:134 +#: app/flatpak-main.c:141 msgid "Work on user installations" msgstr "Munkavégzés a felhasználói telepítéseken" -#: app/flatpak-main.c:135 +#: app/flatpak-main.c:142 msgid "Work on system-wide installations (default)" msgstr "Munkavégzés a rendszerszintű telepítéseken (alapértelmezett)" -#: app/flatpak-main.c:136 -msgid "Work on a specific system-wide installation" -msgstr "Munkavégzés egy bizonyos rendszerszintű telepítésen" +#: app/flatpak-main.c:143 +msgid "Work on specific system-wide installation(s)" +msgstr "Munkavégzés adott rendszerszintű telepítés(ek)en" -#: app/flatpak-main.c:136 +#: app/flatpak-main.c:143 msgid "NAME" msgstr "NÉV" -#: app/flatpak-main.c:162 +#: app/flatpak-main.c:169 msgid "Builtin Commands:" msgstr "Beépített parancsok:" -#: app/flatpak-main.c:388 +#: app/flatpak-main.c:370 +msgid "" +"The --installation option was used multiple times for a command that works " +"on one installation" +msgstr "" +"Az --installation kapcsoló többször volt használva egy olyan parancsnál, " +"amely csak egy telepítésnél működik" + +#: app/flatpak-main.c:489 #, c-format msgid "Unknown command '%s'" msgstr "Ismeretlen „%s” parancs" -#: app/flatpak-main.c:396 +#: app/flatpak-main.c:497 msgid "No command specified" msgstr "Nincs parancs megadva" -#: app/flatpak-main.c:514 +#: app/flatpak-main.c:615 msgid "error:" msgstr "hiba:" -#: app/flatpak-transaction.c:302 +#: app/flatpak-transaction.c:313 +#, c-format +msgid "Found in remote %s\n" +msgstr "Megtalálva a(z) %s távoli tárolóban\n" + +#: app/flatpak-transaction.c:317 #, c-format msgid "Found in remote %s, do you want to install it?" msgstr "Megtalálható a(z) %s távoliban, szeretné telepíteni?" -#: app/flatpak-transaction.c:307 +#: app/flatpak-transaction.c:322 msgid "Found in several remotes:\n" msgstr "Megtalálható számos távoliban:\n" -#: app/flatpak-transaction.c:312 +#: app/flatpak-transaction.c:327 msgid "Which do you want to install (0 to abort)?" msgstr "Melyiket szeretné telepíteni (0 a megszakításhoz)?" -#: app/flatpak-transaction.c:402 +#: app/flatpak-transaction.c:417 #, c-format msgid "Required runtime for %s (%s) is not installed, searching...\n" msgstr "A(z) %s (%s) szükséges futtatókörnyezete nincs telepítve, keresés…\n" -#: app/flatpak-transaction.c:408 +#: app/flatpak-transaction.c:423 #, c-format msgid "The required runtime %s was not found in a configured remote.\n" msgstr "" "A szükséges %s futtatókörnyezet nem található a beállított távoliban.\n" -#: app/flatpak-transaction.c:469 common/flatpak-dir.c:1127 -#: common/flatpak-dir.c:1433 common/flatpak-dir.c:1456 -#: common/flatpak-dir.c:1478 common/flatpak-dir.c:10136 -#: common/flatpak-utils.c:1272 common/flatpak-utils.c:1366 +#: app/flatpak-transaction.c:506 common/flatpak-dir.c:1160 +#: common/flatpak-dir.c:1479 common/flatpak-dir.c:1502 +#: common/flatpak-dir.c:1524 common/flatpak-dir.c:10655 +#: common/flatpak-utils.c:1312 common/flatpak-utils.c:1406 #, c-format msgid "%s not installed" msgstr "A(z) %s nincs telepítve" -#: app/flatpak-transaction.c:475 +#: app/flatpak-transaction.c:512 #, c-format msgid "Remote %s disabled, ignoring %s update" msgstr "A(z) %s távoli le van tiltva, %s frissítésének mellőzése" -#: app/flatpak-transaction.c:485 +#: app/flatpak-transaction.c:525 #, c-format msgid "%s already installed, skipping\n" msgstr "A(z) %s már telepítve van, kihagyás\n" -#: app/flatpak-transaction.c:529 +#: app/flatpak-transaction.c:531 +#, c-format +msgid "%s is already installed from other remote (%s)" +msgstr "A(z) %s már telepítve lett egy másik távoli tárolóból (%s)" + +#: app/flatpak-transaction.c:543 +#, c-format +msgid "Warning: Can't find dependencies: %s\n" +msgstr "Figyelmeztetés: a függőségek nem találhatóak: %s\n" + +#: app/flatpak-transaction.c:570 +#, c-format +msgid "Invalid require-flatpak argument %s\n" +msgstr "Érvénytelen require-flatpak argumentum: %s\n" + +#: app/flatpak-transaction.c:576 #, c-format msgid "%s needs a later flatpak version (%s)" msgstr "A(z) %s egy későbbi flatpak verziót (%s) igényel" -#: app/flatpak-transaction.c:704 +#: app/flatpak-transaction.c:688 +#, c-format +msgid "Error updating remote metadata for '%s': %s\n" +msgstr "Hiba a(z) „%s” távoli metaadatainak frissítéskor: %s\n" + +#: app/flatpak-transaction.c:744 msgid "install" msgstr "telepítés" -#: app/flatpak-transaction.c:705 +#: app/flatpak-transaction.c:746 +#, c-format +msgid "Installing for user: %s from %s\n" +msgstr "Telepítés a felhasználónak: %s innen: %s\n" + +#: app/flatpak-transaction.c:748 #, c-format msgid "Installing: %s from %s\n" msgstr "Telepítés: %s innen: %s\n" -#: app/flatpak-transaction.c:721 +#: app/flatpak-transaction.c:765 msgid "update" msgstr "frissítés" -#: app/flatpak-transaction.c:729 +#: app/flatpak-transaction.c:774 +#, c-format +msgid "Updating for user: %s from %s\n" +msgstr "Frissítés a felhasználónak: %s innen: %s\n" + +#: app/flatpak-transaction.c:776 #, c-format msgid "Updating: %s from %s\n" msgstr "Frissítés: %s innen: %s\n" -#: app/flatpak-transaction.c:749 +#: app/flatpak-transaction.c:796 #, c-format msgid "Now at %s.\n" msgstr "Most: %s.\n" -#: app/flatpak-transaction.c:755 +#: app/flatpak-transaction.c:802 msgid "No updates.\n" msgstr "Nincsenek frissítések.\n" -#: app/flatpak-transaction.c:773 +#: app/flatpak-transaction.c:820 msgid "install bundle" msgstr "csomag telepítése" -#: app/flatpak-transaction.c:774 +#: app/flatpak-transaction.c:822 +#, c-format +msgid "Installing for user: %s from bundle %s\n" +msgstr "Telepítés a felhasználónak: %s ebből a csomagból: %s\n" + +#: app/flatpak-transaction.c:824 #, c-format msgid "Installing: %s from bundle %s\n" msgstr "Telepítés: %s ebből a csomagból: %s\n" -#: app/flatpak-transaction.c:786 +#: app/flatpak-transaction.c:836 #, c-format msgid "Warning: Failed to %s %s: %s\n" msgstr "Figyelmeztetés: %s %s sikertelen: %s\n" -#: app/flatpak-transaction.c:791 +#: app/flatpak-transaction.c:841 #, c-format msgid "Error: Failed to %s %s: %s\n" msgstr "Hiba: %s %s sikertelen: %s\n" -#: app/flatpak-transaction.c:796 +#: app/flatpak-transaction.c:846 msgid "One or more operations failed" msgstr "Egy vagy több művelet sikertelen" -#: common/flatpak-dir.c:1015 -#, c-format -msgid "No overrides found for %s" -msgstr "Nem találhatók felülbírálások ehhez: %s" - -#: common/flatpak-dir.c:1611 -#, c-format -msgid "While opening repository %s: " -msgstr "A(z) %s tároló megnyitása közben: " - -#: common/flatpak-dir.c:1770 common/flatpak-dir.c:5109 -msgid "Can't create deploy directory" -msgstr "Nem lehet létrehozni a telepítési könyvtárat" - -#: common/flatpak-dir.c:2450 -#, c-format -msgid "Invalid sha256 for extra data uri %s" -msgstr "Érvénytelen sha256 a további adat URI-nál: %s" - -#: common/flatpak-dir.c:2455 -#, c-format -msgid "Empty name for extra data uri %s" -msgstr "Üres név a további adat URI-nál: %s" - -#: common/flatpak-dir.c:2462 -#, c-format -msgid "Unsupported extra data uri %s" -msgstr "Nem támogatott további adat URI: %s" - -#: common/flatpak-dir.c:2476 -#, fuzzy, c-format -msgid "Failed to load local extra-data %s: %s" -msgstr "Nem sikerült olvasni a(z) %s kommitot: " - -#: common/flatpak-dir.c:2479 -#, fuzzy, c-format -msgid "Wrong size for extra-data %s" -msgstr "Hibás méret a(z) %s további adatnál" - -#: common/flatpak-dir.c:2494 -#, c-format -msgid "While downloading %s: " -msgstr "A(z) %s letöltése közben: " - -#: common/flatpak-dir.c:2501 -#, c-format -msgid "Wrong size for extra data %s" -msgstr "Hibás méret a(z) %s további adatnál" - -#: common/flatpak-dir.c:2512 -#, c-format -msgid "Invalid checksum for extra data %s" -msgstr "Érvénytelen ellenőrzőösszeg a(z) %s további adatnál" - -#: common/flatpak-dir.c:2768 -#, c-format -msgid "%s commit %s already installed" -msgstr "A(z) %s kommit %s már telepítve van" - -#: common/flatpak-dir.c:3097 common/flatpak-dir.c:3411 -#, c-format -msgid "While pulling %s from remote %s: " -msgstr "A(z) %s lekérése közben a(z) %s távoliról: " - -#: common/flatpak-dir.c:3296 -#, c-format -msgid "Can't find %s in remote %s" -msgstr "A(z) %s nem található a(z) %s távoliban" - -#: common/flatpak-dir.c:3969 -msgid "Not enough memory" -msgstr "Nincs elég memória" - -#: common/flatpak-dir.c:3988 -msgid "Failed to read from exported file" -msgstr "Nem sikerült olvasni az exportált fájlból" - -#: common/flatpak-dir.c:4179 -msgid "Error reading mimetype xml file" -msgstr "Hiba a MIME-típus XML-fájl olvasásakor" - -#: common/flatpak-dir.c:4184 -msgid "Invalid mimetype xml file" -msgstr "Érvénytelen MIME-típus XML-fájl" - -#: common/flatpak-dir.c:4726 -msgid "While getting detached metadata: " -msgstr "A különálló metaadatok lekérése közben: " - -#: common/flatpak-dir.c:4744 -msgid "While creating extradir: " -msgstr "A további könyvtár létrehozása közben: " - -#: common/flatpak-dir.c:4765 -msgid "Invalid sha256 for extra data" -msgstr "Érvénytelen sha256 a további adatnál" - -#: common/flatpak-dir.c:4794 -msgid "Wrong size for extra data" -msgstr "Hibás méret a további adatnál" - -#: common/flatpak-dir.c:4798 -msgid "Invalid checksum for extra data" -msgstr "Érvénytelen ellenőrzőösszeg a további adatnál" - -#: common/flatpak-dir.c:4807 -#, c-format -msgid "While writing extra data file '%s': " -msgstr "A(z) „%s” további adatfájl írása közben: " - -#: common/flatpak-dir.c:4991 -#, fuzzy, c-format -msgid "apply_extra script failed, exit status %d" -msgstr "Az apply_extra parancsfájl sikertelen" - -#: common/flatpak-dir.c:5068 -#, c-format -msgid "While trying to resolve ref %s: " -msgstr "A(z) %s hivatkozás feloldására tett kísérlet közben: " - -#: common/flatpak-dir.c:5083 -#, c-format -msgid "%s is not available" -msgstr "A(z) %s nem érhető el" - -#: common/flatpak-dir.c:5098 common/flatpak-dir.c:5436 -#: common/flatpak-dir.c:6204 common/flatpak-dir.c:6217 -#: common/flatpak-dir.c:6293 -#, c-format -msgid "%s branch %s already installed" -msgstr "A(z) %s %s ág már telepítve van" - -#: common/flatpak-dir.c:5117 -#, c-format -msgid "Failed to read commit %s: " -msgstr "Nem sikerült olvasni a(z) %s kommitot: " - -#: common/flatpak-dir.c:5137 -#, c-format -msgid "While trying to checkout %s into %s: " -msgstr "A(z) %s -> %s átváltására tett kísérlet közben: " - -#: common/flatpak-dir.c:5162 common/flatpak-dir.c:5193 -msgid "While trying to checkout metadata subpath: " -msgstr "A metaadatok alútvonalának átváltására tett kísérlet közben: " - -#: common/flatpak-dir.c:5203 -msgid "While trying to remove existing extra dir: " -msgstr "A meglévő további könyvtár eltávolítására tett kísérlet közben: " - -#: common/flatpak-dir.c:5214 -msgid "While trying to apply extra data: " -msgstr "A további adatok alkalmazására tett kísérlet közben: " - -#: common/flatpak-dir.c:5241 -#, fuzzy, c-format -msgid "Invalid deployed ref %s: " -msgstr "Érvénytelen %s pid" - -#: common/flatpak-dir.c:5248 -#, fuzzy, c-format -msgid "Invalid commit ref %s: " -msgstr "Érvénytelen %s pid" - -#: common/flatpak-dir.c:5256 -#, fuzzy, c-format -msgid "Deployed ref %s kind does not match commit (%s)" -msgstr "Az üzembe állított metaadatok nem egyeznek a kommittal" - -#: common/flatpak-dir.c:5264 -#, fuzzy, c-format -msgid "Deployed ref %s name does not match commit (%s)" -msgstr "Az üzembe állított metaadatok nem egyeznek a kommittal" - -#: common/flatpak-dir.c:5272 -#, fuzzy, c-format -msgid "Deployed ref %s arch does not match commit (%s)" -msgstr "Az üzembe állított metaadatok nem egyeznek a kommittal" - -#: common/flatpak-dir.c:5278 -#, fuzzy, c-format -msgid "Deployed ref %s branch does not match commit (%s)" -msgstr "Az üzembe állított metaadatok nem egyeznek a kommittal" - -#: common/flatpak-dir.c:5284 -#, fuzzy, c-format -msgid "Deployed ref %s does not match commit (%s)" -msgstr "Az üzembe állított metaadatok nem egyeznek a kommittal" - -#: common/flatpak-dir.c:5303 -msgid "Deployed metadata does not match commit" -msgstr "Az üzembe állított metaadatok nem egyeznek a kommittal" - -#: common/flatpak-dir.c:6065 -#, c-format -msgid "This version of %s is already installed" -msgstr "A(z) %s ezen verziója már telepítve van" - -#: common/flatpak-dir.c:6072 -msgid "Can't change remote during bundle install" -msgstr "Nem lehet megváltoztatni a távolit csomagtelepítés közben" - -#: common/flatpak-dir.c:6615 -#, c-format -msgid "%s branch %s is not installed" -msgstr "A(z) %s %s ág nincs telepítve" - -#: common/flatpak-dir.c:6859 -#, c-format -msgid "%s branch %s not installed" -msgstr "A(z) %s %s ág nincs telepítve" - -#: common/flatpak-dir.c:7818 -#, c-format -msgid "Nothing matches %s" -msgstr "Semmi sem egyezik: %s" - -#: common/flatpak-dir.c:7900 -#, fuzzy, c-format -msgid "Can't find ref %s%s%s%s%s" -msgstr "A(z) %s%s%s%s%s nem található a(z) %s távoliban" - -#: common/flatpak-dir.c:7942 -#, fuzzy, c-format -msgid "Error searching remote %s: %s" -msgstr "Hiba: %s %s sikertelen: %s\n" - -#: common/flatpak-dir.c:7987 -#, fuzzy, c-format -msgid "Error searching local repository: %s" -msgstr "Hivatkozás megtartása a helyi tárolóban" - -#: common/flatpak-dir.c:8113 -#, c-format -msgid "%s %s not installed" -msgstr "A(z) %s %s nincs telepítve" - -#: common/flatpak-dir.c:8280 -#, c-format -msgid "Could not find installation %s" -msgstr "Nem található a telepítési %s" - -#: common/flatpak-dir.c:8809 -#, c-format -msgid "Runtime %s, branch %s is already installed" -msgstr "A(z) %s futtatókörnyezet, %s ág már telepítve van" - -#: common/flatpak-dir.c:8810 -#, c-format -msgid "App %s, branch %s is already installed" -msgstr "A(z) %s alkalmazás, %s ág már telepítve van" - -#: common/flatpak-dir.c:9269 -msgid "Remote title not set" -msgstr "A távoli cím nincs beállítva" - -#: common/flatpak-dir.c:9291 -msgid "Remote default-branch not set" -msgstr "A távoli alapértelmezett ág nincs beállítva" - -#: common/flatpak-dir.c:9785 -msgid "No flatpak cache in remote summary" -msgstr "Nincs flatpak gyorsítótár a távoli összegzésben" - -#: common/flatpak-dir.c:9795 -#, c-format -msgid "No entry for %s in remote summary flatpak cache " -msgstr "" -"Nincs bejegyzés a(z) %s esetén a távoli összegzés flatpak gyorsítótárban " - -#: common/flatpak-run.c:258 +#: common/flatpak-context.c:175 #, c-format msgid "Unknown share type %s, valid types are: %s" msgstr "Ismeretlen %s megosztástípus, az érvényes típusok: %s" -#: common/flatpak-run.c:293 +#: common/flatpak-context.c:210 #, c-format msgid "Unknown policy type %s, valid types are: %s" msgstr "Ismeretlen %s házirendtípus, az érvényes típusok: %s" -#: common/flatpak-run.c:331 +#: common/flatpak-context.c:248 #, c-format msgid "Invalid dbus name %s\n" msgstr "Ismeretlen %s D-Bus név\n" -#: common/flatpak-run.c:344 +#: common/flatpak-context.c:261 #, c-format msgid "Unknown socket type %s, valid types are: %s" msgstr "Ismeretlen %s foglalattípus, az érvényes típusok: %s" -#: common/flatpak-run.c:373 +#: common/flatpak-context.c:290 #, c-format msgid "Unknown device type %s, valid types are: %s" msgstr "Ismeretlen %s eszköztípus, az érvényes típusok: %s" -#: common/flatpak-run.c:401 +#: common/flatpak-context.c:318 #, c-format msgid "Unknown feature type %s, valid types are: %s" msgstr "Ismeretlen %s jellemzőtípus, az érvényes típusok: %s" -#: common/flatpak-run.c:774 +#: common/flatpak-context.c:691 #, c-format msgid "" "Unknown filesystem location %s, valid locations are: host, home, xdg-" @@ -2134,163 +2295,484 @@ msgstr "" "Ismeretlen %s fájlrendszer hely, az érvényes típusok: gép, saját könyvtár, " "xdg-*[/...], ~/könyvtár, /könyvtár" -#: common/flatpak-run.c:1040 +#: common/flatpak-context.c:963 #, c-format msgid "Invalid env format %s" msgstr "Érvénytelen %s env formátum" -#: common/flatpak-run.c:1180 +#: common/flatpak-context.c:1103 msgid "Share with host" msgstr "Megosztás a gazdagéppel" -#: common/flatpak-run.c:1180 common/flatpak-run.c:1181 +#: common/flatpak-context.c:1103 common/flatpak-context.c:1104 msgid "SHARE" msgstr "MEGOSZTÁS" -#: common/flatpak-run.c:1181 +#: common/flatpak-context.c:1104 msgid "Unshare with host" msgstr "Megosztás megszüntetése a gazdagéppel" -#: common/flatpak-run.c:1182 +#: common/flatpak-context.c:1105 msgid "Expose socket to app" msgstr "Foglalat elérhetővé tétele az alkalmazásnak" -#: common/flatpak-run.c:1182 common/flatpak-run.c:1183 +#: common/flatpak-context.c:1105 common/flatpak-context.c:1106 msgid "SOCKET" msgstr "FOGLALAT" -#: common/flatpak-run.c:1183 +#: common/flatpak-context.c:1106 msgid "Don't expose socket to app" msgstr "Ne tegye elérhetővé a foglalatot az alkalmazásnak" -#: common/flatpak-run.c:1184 +#: common/flatpak-context.c:1107 msgid "Expose device to app" msgstr "Eszköz elérhetővé tétele az alkalmazásnak" -#: common/flatpak-run.c:1184 common/flatpak-run.c:1185 +#: common/flatpak-context.c:1107 common/flatpak-context.c:1108 msgid "DEVICE" msgstr "ESZKÖZ" -#: common/flatpak-run.c:1185 +#: common/flatpak-context.c:1108 msgid "Don't expose device to app" msgstr "Ne tegye elérhetővé az eszközt az alkalmazásnak" -#: common/flatpak-run.c:1186 +#: common/flatpak-context.c:1109 msgid "Allow feature" msgstr "Jellemző engedélyezése" -#: common/flatpak-run.c:1186 common/flatpak-run.c:1187 +#: common/flatpak-context.c:1109 common/flatpak-context.c:1110 msgid "FEATURE" msgstr "JELLEMZŐ" -#: common/flatpak-run.c:1187 +#: common/flatpak-context.c:1110 msgid "Don't allow feature" msgstr "Ne engedélyezze a jellemzőt" -#: common/flatpak-run.c:1188 +#: common/flatpak-context.c:1111 msgid "Expose filesystem to app (:ro for read-only)" msgstr "" "Fájlrendszer elérhetővé tétele az alkalmazásnak (:ro a csak olvashatóhoz)" -#: common/flatpak-run.c:1188 +#: common/flatpak-context.c:1111 msgid "FILESYSTEM[:ro]" msgstr "FÁJLRENDSZER[:ro]" -#: common/flatpak-run.c:1189 +#: common/flatpak-context.c:1112 msgid "Don't expose filesystem to app" msgstr "Ne tegye elérhetővé a fájlrendszert az alkalmazásnak" -#: common/flatpak-run.c:1189 +#: common/flatpak-context.c:1112 msgid "FILESYSTEM" msgstr "FÁJLRENDSZER" -#: common/flatpak-run.c:1190 +#: common/flatpak-context.c:1113 msgid "Set environment variable" msgstr "Környezeti változó beállítása" -#: common/flatpak-run.c:1190 +#: common/flatpak-context.c:1113 msgid "VAR=VALUE" msgstr "VÁLTOZÓ=ÉRTÉK" -#: common/flatpak-run.c:1191 +#: common/flatpak-context.c:1114 msgid "Allow app to own name on the session bus" msgstr "Név birtoklásának lehetővé tétele az alkalmazásnak a munkamenetbuszon" -#: common/flatpak-run.c:1191 common/flatpak-run.c:1192 -#: common/flatpak-run.c:1193 common/flatpak-run.c:1194 +#: common/flatpak-context.c:1114 common/flatpak-context.c:1115 +#: common/flatpak-context.c:1116 common/flatpak-context.c:1117 msgid "DBUS_NAME" msgstr "DBUS_NÉV" -#: common/flatpak-run.c:1192 +#: common/flatpak-context.c:1115 msgid "Allow app to talk to name on the session bus" msgstr "" "A névhez való beszéd lehetővé tétele az alkalmazásnak a munkamenetbuszon" -#: common/flatpak-run.c:1193 +#: common/flatpak-context.c:1116 msgid "Allow app to own name on the system bus" msgstr "Név birtoklásának lehetővé tétele az alkalmazásnak a rendszerbuszon" -#: common/flatpak-run.c:1194 +#: common/flatpak-context.c:1117 msgid "Allow app to talk to name on the system bus" msgstr "A névhez való beszéd lehetővé tétele az alkalmazásnak a rendszerbuszon" -#: common/flatpak-run.c:1195 +#: common/flatpak-context.c:1118 msgid "Add generic policy option" msgstr "Általános irányelv-lehetőség hozzáadása" -#: common/flatpak-run.c:1195 common/flatpak-run.c:1196 +#: common/flatpak-context.c:1118 common/flatpak-context.c:1119 msgid "SUBSYSTEM.KEY=VALUE" msgstr "ALRENDSZER.KULCS=ÉRTÉK" -#: common/flatpak-run.c:1196 +#: common/flatpak-context.c:1119 msgid "Remove generic policy option" msgstr "Általános irányelv-lehetőség eltávolítása" -#: common/flatpak-run.c:1197 +#: common/flatpak-context.c:1120 msgid "Persist home directory" msgstr "Saját könyvtár megőrzése" -#: common/flatpak-run.c:1197 +#: common/flatpak-context.c:1120 msgid "FILENAME" msgstr "FÁJLNÉV" #. This is not needed/used anymore, so hidden, but we accept it for backwards compat -#: common/flatpak-run.c:1199 +#: common/flatpak-context.c:1122 msgid "Don't require a running session (no cgroups creation)" msgstr "Ne követeljen meg egy futó munkamenetet (nincs cgroups létrehozás)" -#: common/flatpak-run.c:3830 +#: common/flatpak-dir.c:1044 +#, c-format +msgid "No overrides found for %s" +msgstr "Nem találhatók felülbírálások ehhez: %s" + +#: common/flatpak-dir.c:1674 +#, c-format +msgid "While opening repository %s: " +msgstr "A(z) %s tároló megnyitása közben: " + +#: common/flatpak-dir.c:1908 common/flatpak-dir.c:5460 +msgid "Can't create deploy directory" +msgstr "Nem lehet létrehozni a telepítési könyvtárat" + +#: common/flatpak-dir.c:2122 common/flatpak-dir.c:2125 +#, c-format +msgid "Failed to find latest revision for ref %s from remote %s: %s\n" +msgstr "" +"Nem sikerült megtalálni a legújabb verziót a(z) %s hivatkozáshoz a(z) %s " +"távoliból: %s\n" + +#: common/flatpak-dir.c:2761 +#, c-format +msgid "Invalid sha256 for extra data uri %s" +msgstr "Érvénytelen sha256 a további adat URI-nál: %s" + +#: common/flatpak-dir.c:2766 +#, c-format +msgid "Empty name for extra data uri %s" +msgstr "Üres név a további adat URI-nál: %s" + +#: common/flatpak-dir.c:2773 +#, c-format +msgid "Unsupported extra data uri %s" +msgstr "Nem támogatott további adat URI: %s" + +#: common/flatpak-dir.c:2787 +#, c-format +msgid "Failed to load local extra-data %s: %s" +msgstr "Nem sikerült a(z) %s helyi további adat betöltése: %s" + +#: common/flatpak-dir.c:2790 +#, c-format +msgid "Wrong size for extra-data %s" +msgstr "Hibás méret a(z) %s további adatnál" + +#: common/flatpak-dir.c:2805 +#, c-format +msgid "While downloading %s: " +msgstr "A(z) %s letöltése közben: " + +#: common/flatpak-dir.c:2812 +#, c-format +msgid "Wrong size for extra data %s" +msgstr "Hibás méret a(z) %s további adatnál" + +#: common/flatpak-dir.c:2823 +#, c-format +msgid "Invalid checksum for extra data %s" +msgstr "Érvénytelen ellenőrzőösszeg a(z) %s további adatnál" + +#: common/flatpak-dir.c:2882 +msgid "Remote OCI index has no registry uri" +msgstr "A távoli OCI indexnek nincs regisztrációs URI-ja" + +#: common/flatpak-dir.c:3100 +#, c-format +msgid "%s commit %s already installed" +msgstr "A(z) %s kommit %s már telepítve van" + +#: common/flatpak-dir.c:3442 common/flatpak-dir.c:3773 +#, c-format +msgid "While pulling %s from remote %s: " +msgstr "A(z) %s lekérése közben a(z) %s távoliról: " + +#: common/flatpak-dir.c:3658 +#, c-format +msgid "Can't find %s in remote %s" +msgstr "A(z) %s nem található a(z) %s távoliban" + +#: common/flatpak-dir.c:4331 +msgid "Not enough memory" +msgstr "Nincs elég memória" + +#: common/flatpak-dir.c:4350 +msgid "Failed to read from exported file" +msgstr "Nem sikerült olvasni az exportált fájlból" + +#: common/flatpak-dir.c:4541 +msgid "Error reading mimetype xml file" +msgstr "Hiba a MIME-típus XML-fájl olvasásakor" + +#: common/flatpak-dir.c:4546 +msgid "Invalid mimetype xml file" +msgstr "Érvénytelen MIME-típus XML-fájl" + +#: common/flatpak-dir.c:5089 +msgid "While getting detached metadata: " +msgstr "A különálló metaadatok lekérése közben: " + +#: common/flatpak-dir.c:5107 +msgid "While creating extradir: " +msgstr "A további könyvtár létrehozása közben: " + +#: common/flatpak-dir.c:5128 +msgid "Invalid sha256 for extra data" +msgstr "Érvénytelen sha256 a további adatnál" + +#: common/flatpak-dir.c:5157 +msgid "Wrong size for extra data" +msgstr "Hibás méret a további adatnál" + +#: common/flatpak-dir.c:5161 +msgid "Invalid checksum for extra data" +msgstr "Érvénytelen ellenőrzőösszeg a további adatnál" + +#: common/flatpak-dir.c:5170 +#, c-format +msgid "While writing extra data file '%s': " +msgstr "A(z) „%s” további adatfájl írása közben: " + +#: common/flatpak-dir.c:5340 +#, c-format +msgid "apply_extra script failed, exit status %d" +msgstr "Az apply_extra parancsfájl sikertelen, kilépési állapot: %d" + +#: common/flatpak-dir.c:5419 +#, c-format +msgid "While trying to resolve ref %s: " +msgstr "A(z) %s hivatkozás feloldására tett kísérlet közben: " + +#: common/flatpak-dir.c:5434 +#, c-format +msgid "%s is not available" +msgstr "A(z) %s nem érhető el" + +#: common/flatpak-dir.c:5449 common/flatpak-dir.c:5881 +#: common/flatpak-dir.c:6671 common/flatpak-dir.c:6681 +#: common/flatpak-dir.c:6713 +#, c-format +msgid "%s branch %s already installed" +msgstr "A(z) %s %s ág már telepítve van" + +#: common/flatpak-dir.c:5468 +#, c-format +msgid "Failed to read commit %s: " +msgstr "Nem sikerült olvasni a(z) %s kommitot: " + +#: common/flatpak-dir.c:5488 +#, c-format +msgid "While trying to checkout %s into %s: " +msgstr "A(z) %s -> %s átváltására tett kísérlet közben: " + +#: common/flatpak-dir.c:5513 common/flatpak-dir.c:5544 +msgid "While trying to checkout metadata subpath: " +msgstr "A metaadatok alútvonalának átváltására tett kísérlet közben: " + +#: common/flatpak-dir.c:5554 +msgid "While trying to remove existing extra dir: " +msgstr "A meglévő további könyvtár eltávolítására tett kísérlet közben: " + +#: common/flatpak-dir.c:5565 +msgid "While trying to apply extra data: " +msgstr "A további adatok alkalmazására tett kísérlet közben: " + +#: common/flatpak-dir.c:5592 +#, c-format +msgid "Invalid deployed ref %s: " +msgstr "Érvénytelen %s üzembe állított hivatkozás:" + +#: common/flatpak-dir.c:5599 +#, c-format +msgid "Invalid commit ref %s: " +msgstr "Érvénytelen %s kommithivatkozás: " + +#: common/flatpak-dir.c:5607 +#, c-format +msgid "Deployed ref %s kind does not match commit (%s)" +msgstr "Az üzembe állított %s típus nem egyezik a kommittal (%s)" + +#: common/flatpak-dir.c:5615 +#, c-format +msgid "Deployed ref %s name does not match commit (%s)" +msgstr "Az üzembe állított %s név nem egyezik a kommittal (%s)" + +#: common/flatpak-dir.c:5623 +#, c-format +msgid "Deployed ref %s arch does not match commit (%s)" +msgstr "Az üzembe állított %s architektúra nem egyezik a kommittal (%s)" + +#: common/flatpak-dir.c:5629 +#, c-format +msgid "Deployed ref %s branch does not match commit (%s)" +msgstr "Az üzembe állított %s ág nem egyezik a kommittal (%s)" + +#: common/flatpak-dir.c:5635 +#, c-format +msgid "Deployed ref %s does not match commit (%s)" +msgstr "Az üzembe állított %s hivatkozás nem egyezik a kommittal (%s)" + +#: common/flatpak-dir.c:5654 +msgid "Deployed metadata does not match commit" +msgstr "Az üzembe állított metaadatok nem egyeznek a kommittal" + +#: common/flatpak-dir.c:6533 +#, c-format +msgid "This version of %s is already installed" +msgstr "A(z) %s ezen verziója már telepítve van" + +#: common/flatpak-dir.c:6540 +msgid "Can't change remote during bundle install" +msgstr "Nem lehet megváltoztatni a távolit csomagtelepítés közben" + +#: common/flatpak-dir.c:7059 +#, c-format +msgid "%s branch %s is not installed" +msgstr "A(z) %s %s ág nincs telepítve" + +#: common/flatpak-dir.c:7304 +#, c-format +msgid "%s branch %s not installed" +msgstr "A(z) %s %s ág nincs telepítve" + +#: common/flatpak-dir.c:7628 +#, c-format +msgid "Pruning repo failed: %s" +msgstr "A tároló nyesése meghiúsult: %s" + +#: common/flatpak-dir.c:8155 +#, c-format +msgid "Multiple branches available for %s, you must specify one of: " +msgstr "Több ág is elérhető ehhez: %s, meg kell adnia az egyiket:" + +#: common/flatpak-dir.c:8176 +#, c-format +msgid "Nothing matches %s" +msgstr "Semmi sem egyezik: %s" + +#: common/flatpak-dir.c:8258 +#, c-format +msgid "Can't find ref %s%s%s%s%s" +msgstr "A(z) %s%s%s%s%s hivatkozás nem található" + +#: common/flatpak-dir.c:8300 +#, c-format +msgid "Error searching remote %s: %s" +msgstr "Hiba a távoli %s tárolóban keresésnél: %s" + +#: common/flatpak-dir.c:8345 +#, c-format +msgid "Error searching local repository: %s" +msgstr "Hiba a helyi tárolóban keresésnél: %s" + +#: common/flatpak-dir.c:8471 +#, c-format +msgid "%s %s not installed" +msgstr "A(z) %s %s nincs telepítve" + +#: common/flatpak-dir.c:8638 +#, c-format +msgid "Could not find installation %s" +msgstr "Nem található a telepítési %s" + +#: common/flatpak-dir.c:9236 +#, c-format +msgid "Runtime %s, branch %s is already installed" +msgstr "A(z) %s futtatókörnyezet, %s ág már telepítve van" + +#: common/flatpak-dir.c:9237 +#, c-format +msgid "App %s, branch %s is already installed" +msgstr "A(z) %s alkalmazás, %s ág már telepítve van" + +#: common/flatpak-dir.c:9717 +msgid "Remote title not set" +msgstr "A távoli cím nincs beállítva" + +#: common/flatpak-dir.c:9739 +msgid "Remote default-branch not set" +msgstr "A távoli alapértelmezett ág nincs beállítva" + +#: common/flatpak-dir.c:10332 +msgid "No flatpak cache in remote summary" +msgstr "Nincs flatpak gyorsítótár a távoli összegzésben" + +#: common/flatpak-dir.c:10342 +#, c-format +msgid "No entry for %s in remote summary flatpak cache " +msgstr "" +"Nincs bejegyzés a(z) %s esetén a távoli összegzés flatpak gyorsítótárban " + +#: common/flatpak-run.c:1456 #, c-format msgid "Failed to open flatpak-info temp file: %s" msgstr "Nem sikerült megnyitni a flatpak-információs átmeneti fájlt: %s" -#: common/flatpak-run.c:3904 common/flatpak-run.c:3914 +#: common/flatpak-run.c:1530 common/flatpak-run.c:1540 #, c-format msgid "Failed to open temp file: %s" msgstr "Nem sikerült megnyitni az átmeneti fájlt: %s" -#: common/flatpak-run.c:4253 +#: common/flatpak-run.c:1883 msgid "Unable to create sync pipe" msgstr "Nem hozható létre szinkronizálási cső" -#: common/flatpak-run.c:4280 +#: common/flatpak-run.c:1910 #, c-format msgid "Failed to open app info file: %s" msgstr "Nem sikerült megnyitni az alkalmazás-információs fájlt: %s" -#: common/flatpak-run.c:4310 +#: common/flatpak-run.c:1940 msgid "Failed to sync with dbus proxy" msgstr "Nem sikerült szinkronizálni a dbus proxyval" -#: common/flatpak-run.c:5069 -#, fuzzy, c-format +#: common/flatpak-run.c:2700 +#, c-format msgid "ldconfig failed, exit status %d" -msgstr "Az apply_extra parancsfájl sikertelen" +msgstr "ldconfig meghiúsult, kilépési állapot: %d" -#: common/flatpak-utils.c:2900 +#: common/flatpak-utils.c:624 +#, c-format +msgid "Migrating %s to %s\n" +msgstr "%s migrálása ide: %s\n" + +#: common/flatpak-utils.c:630 +#, c-format +msgid "Error during migration: %s\n" +msgstr "Hiba a migráció során: %s\n" + +#: common/flatpak-utils.c:2988 msgid "No extra data sources" msgstr "Nincsenek további adatforrások" +#: common/flatpak-utils.c:6576 +#, c-format +msgid "Downloading metadata: %u/(estimating) %s" +msgstr "Metaadatok letöltése: %u/%s (becslés)" + +#: common/flatpak-utils.c:6600 +#, c-format +msgid "Downloading: %s/%s" +msgstr "Letöltés: %s/%s" + +#: common/flatpak-utils.c:6620 +#, c-format +msgid "Downloading extra data: %s/%s" +msgstr "További adatok letöltése: %s/%s" + +#: common/flatpak-utils.c:6625 +#, c-format +msgid "Downloading files: %d/%d %s" +msgstr "Fájlok letöltése: %d/%d %s" + #. SECURITY: #. - Normal users do not need authentication to install signed applications #. from signed repositories, as this cannot exploit a system. @@ -2327,7 +2809,7 @@ msgstr "Aláírt alkalmazás frissítése" #: system-helper/org.freedesktop.Flatpak.policy.in:59 #: system-helper/org.freedesktop.Flatpak.policy.in:77 -#: system-helper/org.freedesktop.Flatpak.policy.in:169 +#: system-helper/org.freedesktop.Flatpak.policy.in:180 msgid "Authentication is required to update software" msgstr "Hitelesítés szükséges a szoftver frissítéséhez" @@ -2356,14 +2838,12 @@ msgstr "Hitelesítés szükséges a távoli információk frissítéséhez" #. - Normal users do not need authentication to modify the #. OSTree repository #: system-helper/org.freedesktop.Flatpak.policy.in:106 -#, fuzzy msgid "Update system repository" -msgstr "Az összegzőfájl frissítése egy tárolóban" +msgstr "Rendszertároló frissítése" #: system-helper/org.freedesktop.Flatpak.policy.in:107 -#, fuzzy msgid "Authentication is required to update the system repository" -msgstr "Hitelesítés szükséges a távoli információk frissítéséhez" +msgstr "Hitelesítés szükséges a rendszertároló frissítéséhez" #: system-helper/org.freedesktop.Flatpak.policy.in:117 msgid "Install bundle" @@ -2390,43 +2870,21 @@ msgstr "Távoli beállítása" msgid "Authentication is required to configure software repositories" msgstr "Hitelesítés szükséges a szoftvertárolók beállításához" +#: system-helper/org.freedesktop.Flatpak.policy.in:161 +msgid "Configure" +msgstr "Beállítás" + +#: system-helper/org.freedesktop.Flatpak.policy.in:162 +msgid "Authentication is required to configure software installation" +msgstr "Hitelesítés szükséges a szoftvertelepítés beállításához" + #. SECURITY: #. - Normal users do not require admin authentication to update #. appstream data as it will be signed, and the action is required #. to update the system when unattended. #. - Changing this to anything other than 'yes' will break unattended #. updates. -#: system-helper/org.freedesktop.Flatpak.policy.in:168 +#: system-helper/org.freedesktop.Flatpak.policy.in:179 msgid "Update appstream" msgstr "AppStream frissítése" -#~ msgid "Failed to create temporary file" -#~ msgstr "Nem sikerült létrehozni az átmeneti fájlt" - -#~ msgid "Failed to unlink temporary file" -#~ msgstr "Nem sikerült törölni az átmeneti fájlt" - -#~ msgid "Failed to write to temporary file" -#~ msgstr "Nem sikerült írni az átmeneti fájlba" - -#~ msgid "REMOTE must be specified" -#~ msgstr "A TÁVOLI megadása kötelező" - -#, fuzzy -#~ msgid "Downloading %s" -#~ msgstr "Letöltési méret" - -#, fuzzy -#~ msgid "Installing %s" -#~ msgstr "Telepítés: %s\n" - -#, fuzzy -#~ msgid "Post-Install %s" -#~ msgstr "Telepítés: %s\n" - -#, fuzzy -#~ msgid "Updating %s" -#~ msgstr "Összegzés frissítése\n" - -#~ msgid "Metadata:" -#~ msgstr "Metaadatok:" diff --git a/po/id.po b/po/id.po index 73e6752f..c78b213c 100644 --- a/po/id.po +++ b/po/id.po @@ -1,21 +1,21 @@ # Indonesian translation for flatpak. # Copyright (C) 2017 flatpak's COPYRIGHT HOLDER # This file is distributed under the same license as the flatpak package. -# Kukuh Syafaat , 2017. +# Kukuh Syafaat , 2017, 2018. # msgid "" msgstr "" "Project-Id-Version: flatpak master\n" "Report-Msgid-Bugs-To: https://github.com/flatpak/flatpak/issues\n" -"POT-Creation-Date: 2017-10-12 03:24+0000\n" -"PO-Revision-Date: 2017-10-12 14:49+0700\n" +"POT-Creation-Date: 2018-02-22 03:24+0000\n" +"PO-Revision-Date: 2018-02-22 15:58+0700\n" "Last-Translator: Kukuh Syafaat \n" "Language-Team: Indonesian \n" "Language: id\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 2.0.3\n" +"X-Generator: Poedit 2.0.6\n" #: app/flatpak-builtins-add-remote.c:57 msgid "Do nothing if the provided remote exists" @@ -41,10 +41,9 @@ msgstr "Tandai remote seperti yang digunakan untuk dependensi" msgid "Set a new url" msgstr "Atur url baru" -#: app/flatpak-builtins-add-remote.c:66 app/flatpak-builtins-build-bundle.c:57 -#: app/flatpak-builtins-build-bundle.c:58 -#: app/flatpak-builtins-list-remotes.c:109 -#: app/flatpak-builtins-repo-update.c:52 +#: app/flatpak-builtins-add-remote.c:66 app/flatpak-builtins-build-bundle.c:58 +#: app/flatpak-builtins-build-bundle.c:59 +#: app/flatpak-builtins-list-remotes.c:70 app/flatpak-builtins-repo-update.c:52 msgid "URL" msgstr "URL" @@ -106,9 +105,9 @@ msgstr "ID-KOLEKSI" msgid "Import GPG key from FILE (- for stdin)" msgstr "Impor kunci GPG dari BERKAS (- untuk stdin)" -#: app/flatpak-builtins-add-remote.c:82 app/flatpak-builtins-build-bundle.c:59 -#: app/flatpak-builtins-build.c:50 app/flatpak-builtins-build-export.c:60 -#: app/flatpak-builtins-install.c:66 app/flatpak-builtins-repo-update.c:59 +#: app/flatpak-builtins-add-remote.c:82 app/flatpak-builtins-build-bundle.c:60 +#: app/flatpak-builtins-build.c:54 app/flatpak-builtins-build-export.c:60 +#: app/flatpak-builtins-install.c:67 app/flatpak-builtins-repo-update.c:59 msgid "FILE" msgstr "BERKAS" @@ -120,129 +119,147 @@ msgstr "Nonaktifkan remote" msgid "Add OCI registry" msgstr "Tambah registri OCI" -#: app/flatpak-builtins-add-remote.c:312 +#: app/flatpak-builtins-add-remote.c:218 app/flatpak-builtins-add-remote.c:225 +#, c-format +msgid "Can't load uri %s: %s\n" +msgstr "Tidak dapat memuat uri %s: %s\n" + +#: app/flatpak-builtins-add-remote.c:233 +#, c-format +msgid "Can't load file %s: %s\n" +msgstr "Tidak dapat memuat berkas %s: %s\n" + +#: app/flatpak-builtins-add-remote.c:241 +msgid "Invalid file format" +msgstr "Format berkas tidak valid" + +#: app/flatpak-builtins-add-remote.c:249 +#, c-format +msgid "Invalid version %s, only 1 supported" +msgstr "Versi %s tidak valid, hanya 1 yang didukung" + +#: app/flatpak-builtins-add-remote.c:293 +msgid "Invalid gpg key" +msgstr "Kunci gpg tidak valid" + +#: app/flatpak-builtins-add-remote.c:320 msgid "NAME LOCATION - Add a remote repository" msgstr "NAMA LOKASI - Tambah repositori remote" -#: app/flatpak-builtins-add-remote.c:321 -#: app/flatpak-builtins-delete-remote.c:58 app/flatpak-builtins-info.c:104 +#: app/flatpak-builtins-add-remote.c:333 +#: app/flatpak-builtins-delete-remote.c:61 app/flatpak-builtins-info.c:125 msgid "NAME must be specified" msgstr "NAMA harus ditentukan" -#: app/flatpak-builtins-add-remote.c:324 app/flatpak-builtins-build-sign.c:71 -#: app/flatpak-builtins-repo.c:174 app/flatpak-builtins-repo-update.c:429 +#: app/flatpak-builtins-add-remote.c:336 app/flatpak-builtins-build-sign.c:71 +#: app/flatpak-builtins-repo.c:175 app/flatpak-builtins-repo-update.c:429 msgid "LOCATION must be specified" msgstr "LOKASI harus ditentukan" -#: app/flatpak-builtins-add-remote.c:327 -#: app/flatpak-builtins-build-bundle.c:479 +#: app/flatpak-builtins-add-remote.c:339 +#: app/flatpak-builtins-build-bundle.c:461 #: app/flatpak-builtins-build-export.c:676 #: app/flatpak-builtins-build-import-bundle.c:182 #: app/flatpak-builtins-build-init.c:181 app/flatpak-builtins-build-sign.c:74 -#: app/flatpak-builtins-delete-remote.c:63 +#: app/flatpak-builtins-delete-remote.c:66 #: app/flatpak-builtins-document-export.c:102 #: app/flatpak-builtins-document-info.c:75 #: app/flatpak-builtins-document-list.c:70 -#: app/flatpak-builtins-document-unexport.c:67 app/flatpak-builtins-info.c:111 -#: app/flatpak-builtins-install.c:265 app/flatpak-builtins-install.c:399 -#: app/flatpak-builtins-list.c:382 app/flatpak-builtins-list-remotes.c:66 -#: app/flatpak-builtins-ls-remote.c:84 app/flatpak-builtins-make-current.c:67 -#: app/flatpak-builtins-override.c:66 +#: app/flatpak-builtins-document-unexport.c:67 app/flatpak-builtins-info.c:132 +#: app/flatpak-builtins-install.c:267 app/flatpak-builtins-install.c:401 +#: app/flatpak-builtins-list.c:314 app/flatpak-builtins-list-remotes.c:61 +#: app/flatpak-builtins-ls-remote.c:107 app/flatpak-builtins-make-current.c:72 +#: app/flatpak-builtins-override.c:68 msgid "Too many arguments" msgstr "Terlalu banyak argumen" -#: app/flatpak-builtins-add-remote.c:332 +#: app/flatpak-builtins-add-remote.c:344 #: app/flatpak-builtins-build-export.c:692 #, c-format msgid "‘%s’ is not a valid collection ID: %s" msgstr "'%s' bukan ID koleksi yang valid: %s" -#: app/flatpak-builtins-add-remote.c:336 +#: app/flatpak-builtins-add-remote.c:348 msgid "GPG verification is required if collections are enabled" msgstr "Verifikasi GPG diperlukan jika koleksi diaktifkan" #. Do nothing -#: app/flatpak-builtins-add-remote.c:351 +#: app/flatpak-builtins-add-remote.c:363 #, c-format msgid "Remote %s already exists" msgstr "Remote %s sudah ada" -#: app/flatpak-builtins-add-remote.c:359 +#: app/flatpak-builtins-add-remote.c:371 msgid "No url specified in flatpakrepo file" msgstr "Tidak ada url yang ditentukan dalam berkas flatpakrepo" -#: app/flatpak-builtins-add-remote.c:403 +#: app/flatpak-builtins-add-remote.c:415 #, c-format msgid "Warning: Could not update extra metadata for '%s': %s\n" msgstr "Peringatan: Tidak dapat memperbarui metadata tambahan untuk '%s': %s\n" -#: app/flatpak-builtins-add-remote.c:451 +#: app/flatpak-builtins-add-remote.c:464 msgid "NAME - Modify a remote repository" msgstr "NAMA - Mengubah repositori remote" -#: app/flatpak-builtins-add-remote.c:460 +#: app/flatpak-builtins-add-remote.c:474 msgid "Remote NAME must be specified" msgstr "NAMA remote harus ditentukan" -#: app/flatpak-builtins-add-remote.c:465 -#, c-format -msgid "No remote %s" -msgstr "Tidak ada remote %s" - -#: app/flatpak-builtins-add-remote.c:471 +#: app/flatpak-builtins-add-remote.c:485 #, c-format msgid "Updating extra metadata from remote summary for %s\n" msgstr "Memperbarui metadata ekstra dari ringkasan remote untuk %s\n" -#: app/flatpak-builtins-add-remote.c:474 +#: app/flatpak-builtins-add-remote.c:488 #, c-format msgid "Error updating extra metadata for '%s': %s\n" msgstr "Galat memperbarui metadata tambahan untuk '%s': %s\n" -#: app/flatpak-builtins-add-remote.c:475 +#: app/flatpak-builtins-add-remote.c:489 #, c-format msgid "Could not update extra metadata for %s" msgstr "Tidak dapat memperbarui metadata tambahan untuk %s" -#: app/flatpak-builtins-build-bundle.c:55 +#: app/flatpak-builtins-build-bundle.c:56 msgid "Export runtime instead of app" msgstr "Ekspor runtime alih-alih aplikasi" -#: app/flatpak-builtins-build-bundle.c:56 +#: app/flatpak-builtins-build-bundle.c:57 msgid "Arch to bundle for" msgstr "Arsitektur tujuan bundel" -#: app/flatpak-builtins-build-bundle.c:56 +#: app/flatpak-builtins-build-bundle.c:57 #: app/flatpak-builtins-build-export.c:55 app/flatpak-builtins-build-init.c:49 -#: app/flatpak-builtins-build-sign.c:41 app/flatpak-builtins-info.c:48 -#: app/flatpak-builtins-install.c:56 app/flatpak-builtins-list.c:52 -#: app/flatpak-builtins-ls-remote.c:48 app/flatpak-builtins-make-current.c:38 -#: app/flatpak-builtins-run.c:52 app/flatpak-builtins-uninstall.c:44 -#: app/flatpak-builtins-update.c:53 +#: app/flatpak-builtins-build-sign.c:41 app/flatpak-builtins-info.c:51 +#: app/flatpak-builtins-info-remote.c:48 app/flatpak-builtins-install.c:57 +#: app/flatpak-builtins-list.c:46 app/flatpak-builtins-ls-remote.c:49 +#: app/flatpak-builtins-make-current.c:38 app/flatpak-builtins-run.c:52 +#: app/flatpak-builtins-uninstall.c:44 app/flatpak-builtins-update.c:53 msgid "ARCH" msgstr "ARSITEKTUR" -#: app/flatpak-builtins-build-bundle.c:57 +#: app/flatpak-builtins-build-bundle.c:58 msgid "Url for repo" msgstr "Url untuk repo" -#: app/flatpak-builtins-build-bundle.c:58 +#: app/flatpak-builtins-build-bundle.c:59 msgid "Url for runtime flatpakrepo file" msgstr "Url untuk berkas flatpakrepo runtime" -#: app/flatpak-builtins-build-bundle.c:59 +#: app/flatpak-builtins-build-bundle.c:60 msgid "Add GPG key from FILE (- for stdin)" msgstr "Tambah kunci GPG dari BERKAS (- untuk stdin)" -#: app/flatpak-builtins-build-bundle.c:60 +#: app/flatpak-builtins-build-bundle.c:61 msgid "Export oci image instead of flatpak bundle" msgstr "Ekspor citra oci alih-alih paket flatpak" -#: app/flatpak-builtins-build-bundle.c:61 +#: app/flatpak-builtins-build-bundle.c:62 msgid "GPG Key ID to sign the OCI image with" msgstr "ID kunci GPG untuk menandatangani citra OCI" -#: app/flatpak-builtins-build-bundle.c:61 +#: app/flatpak-builtins-build-bundle.c:62 #: app/flatpak-builtins-build-commit-from.c:55 #: app/flatpak-builtins-build-export.c:61 #: app/flatpak-builtins-build-import-bundle.c:46 @@ -250,7 +267,7 @@ msgstr "ID kunci GPG untuk menandatangani citra OCI" msgid "KEY-ID" msgstr "ID KUNCI" -#: app/flatpak-builtins-build-bundle.c:62 +#: app/flatpak-builtins-build-bundle.c:63 #: app/flatpak-builtins-build-commit-from.c:56 #: app/flatpak-builtins-build-export.c:64 #: app/flatpak-builtins-build-import-bundle.c:47 @@ -258,7 +275,7 @@ msgstr "ID KUNCI" msgid "GPG Homedir to use when looking for keyrings" msgstr "Homedir GPG untuk digunakan saat mencari ring kunci" -#: app/flatpak-builtins-build-bundle.c:62 +#: app/flatpak-builtins-build-bundle.c:63 #: app/flatpak-builtins-build-commit-from.c:56 #: app/flatpak-builtins-build-export.c:64 #: app/flatpak-builtins-build-import-bundle.c:47 @@ -266,7 +283,16 @@ msgstr "Homedir GPG untuk digunakan saat mencari ring kunci" msgid "HOMEDIR" msgstr "HOMEDIR" -#: app/flatpak-builtins-build-bundle.c:469 +#: app/flatpak-builtins-build-bundle.c:64 +msgid "OSTree commit to create a delta bundle from" +msgstr "Komit OSTree untuk membuat bundel delta dari" + +#: app/flatpak-builtins-build-bundle.c:64 app/flatpak-builtins-info-remote.c:49 +#: app/flatpak-builtins-update.c:54 +msgid "COMMIT" +msgstr "KOMIT" + +#: app/flatpak-builtins-build-bundle.c:451 msgid "" "LOCATION FILENAME NAME [BRANCH] - Create a single file bundle from a local " "repository" @@ -274,94 +300,106 @@ msgstr "" "LOKASI NAMABERKAS NAMA [CABANG] - Buat bundel berkas tunggal dari repositori " "lokal" -#: app/flatpak-builtins-build-bundle.c:476 +#: app/flatpak-builtins-build-bundle.c:458 msgid "LOCATION, FILENAME and NAME must be specified" msgstr "LOKASI, NAMABERKAS dan NAMA harus ditentukan" -#: app/flatpak-builtins-build-bundle.c:494 -#: app/flatpak-builtins-build-commit-from.c:103 -#: app/flatpak-builtins-build-commit-from.c:113 +#: app/flatpak-builtins-build-bundle.c:476 +#: app/flatpak-builtins-build-commit-from.c:253 +#: app/flatpak-builtins-build-commit-from.c:263 #: app/flatpak-builtins-build-import-bundle.c:191 #, c-format msgid "'%s' is not a valid repository" msgstr "'%s' bukan repositori yang valid" -#: app/flatpak-builtins-build-bundle.c:506 app/flatpak-builtins-build-sign.c:86 +#: app/flatpak-builtins-build-bundle.c:488 app/flatpak-builtins-build-sign.c:86 #, c-format msgid "'%s' is not a valid name: %s" msgstr "'%s' bukan nama yang valid: %s" -#: app/flatpak-builtins-build-bundle.c:509 +#: app/flatpak-builtins-build-bundle.c:491 #: app/flatpak-builtins-build-export.c:699 app/flatpak-builtins-build-sign.c:89 #, c-format msgid "'%s' is not a valid branch name: %s" msgstr "'%s' bukan nama cabang yang valid: %s" -#: app/flatpak-builtins-build.c:46 +#: app/flatpak-builtins-build.c:49 msgid "Use Platform runtime rather than Sdk" msgstr "Gunakan runtime Platform daripada Sdk" -#: app/flatpak-builtins-build.c:47 +#: app/flatpak-builtins-build.c:50 +msgid "Make destination readonly" +msgstr "Buat tujuan hanya baca" + +#: app/flatpak-builtins-build.c:51 msgid "Add bind mount" msgstr "Tambah kait bind" -#: app/flatpak-builtins-build.c:47 +#: app/flatpak-builtins-build.c:51 msgid "DEST=SRC" msgstr "DEST=SRC" -#: app/flatpak-builtins-build.c:48 +#: app/flatpak-builtins-build.c:52 msgid "Start build in this directory" msgstr "Mulai bangun di direktori ini" -#: app/flatpak-builtins-build.c:48 app/flatpak-builtins-build.c:49 +#: app/flatpak-builtins-build.c:52 app/flatpak-builtins-build.c:53 #: app/flatpak-builtins-build-init.c:58 msgid "DIR" msgstr "DIR" -#: app/flatpak-builtins-build.c:49 +#: app/flatpak-builtins-build.c:53 msgid "Where to look for custom sdk dir (defaults to 'usr')" msgstr "Di mana mencari direktori sdk tersuai (bawaan ke 'usr')" -#: app/flatpak-builtins-build.c:50 app/flatpak-builtins-build-export.c:60 +#: app/flatpak-builtins-build.c:54 app/flatpak-builtins-build-export.c:60 msgid "Use alternative file for the metadata" msgstr "Gunakan berkas alternatif untuk metadata" -#: app/flatpak-builtins-build.c:51 +#: app/flatpak-builtins-build.c:55 msgid "Kill processes when the parent process dies" msgstr "Bunuh proses saat proses induk mati" -#: app/flatpak-builtins-build.c:52 +#: app/flatpak-builtins-build.c:56 msgid "Export application homedir directory to build" msgstr "Ekspor direktori homedir aplikasi untuk membangun" -#: app/flatpak-builtins-build.c:139 +#: app/flatpak-builtins-build.c:57 app/flatpak-builtins-run.c:58 +msgid "Log session bus calls" +msgstr "Catat log pemanggilan bus sesi" + +#: app/flatpak-builtins-build.c:58 app/flatpak-builtins-run.c:59 +msgid "Log system bus calls" +msgstr "Catat log pemanggilan bus sistem" + +#: app/flatpak-builtins-build.c:126 msgid "DIRECTORY [COMMAND [args...]] - Build in directory" msgstr "DIREKTORI [PERINTAH [argumen ...]] - Bangun di direktori" -#: app/flatpak-builtins-build.c:162 app/flatpak-builtins-build-finish.c:533 +#: app/flatpak-builtins-build.c:149 app/flatpak-builtins-build-finish.c:533 msgid "DIRECTORY must be specified" msgstr "DIREKTORI harus ditentukan" -#: app/flatpak-builtins-build.c:173 app/flatpak-builtins-build-export.c:721 +#: app/flatpak-builtins-build.c:160 app/flatpak-builtins-build-export.c:721 #, c-format msgid "Build directory %s not initialized, use flatpak build-init" msgstr "Direktori bangun %s tidak diinisialisasi, gunakan flatpak build-init" -#: app/flatpak-builtins-build.c:192 +#: app/flatpak-builtins-build.c:179 msgid "metadata invalid, not application or runtime" msgstr "metadata tidak valid, bukan aplikasi atau runtime" -#: app/flatpak-builtins-build.c:292 +#: app/flatpak-builtins-build.c:283 #, c-format msgid "No extension point matching %s in %s" msgstr "Tidak ada titik ekstensi %s yang cocok pada %s" -#: app/flatpak-builtins-build.c:432 +#: app/flatpak-builtins-build.c:433 #, c-format msgid "Missing '=' in bind mount option '%s'" msgstr "Kehilangan '=' pada opsi kait bind '%s'" -#: app/flatpak-builtins-build.c:460 common/flatpak-run.c:5406 +#: app/flatpak-builtins-build.c:462 common/flatpak-run.c:3038 msgid "Unable to start app" msgstr "Tidak dapat memulai aplikasi" @@ -420,34 +458,39 @@ msgstr "Jangan perbarui ringkasan" msgid "GPG Key ID to sign the commit with" msgstr "ID kunci GPG untuk menandatangani komit dengan" -#: app/flatpak-builtins-build-commit-from.c:78 +#: app/flatpak-builtins-build-commit-from.c:228 msgid "DST-REPO [DST-REF]... - Make a new commit based on existing commit(s)" msgstr "" "DST-REPO [DST-REF]... - Buat komit baru berdasarkan komit yang sudah ada" -#: app/flatpak-builtins-build-commit-from.c:85 +#: app/flatpak-builtins-build-commit-from.c:235 msgid "DST-REPO must be specified" msgstr "DST-REPO harus ditentukan" -#: app/flatpak-builtins-build-commit-from.c:93 +#: app/flatpak-builtins-build-commit-from.c:243 msgid "" "If --src-repo is not specified, exactly one destination ref must be specified" msgstr "" "Jika --src-repo tidak ditentukan, tepatnya satu tujuan harus ditentukan" -#: app/flatpak-builtins-build-commit-from.c:96 +#: app/flatpak-builtins-build-commit-from.c:246 msgid "" "If --src-ref is specified, exactly one destination ref must be specified" msgstr "Jika --src-ref ditentukan, salah satu tujuan ref harus ditentukan" -#: app/flatpak-builtins-build-commit-from.c:99 +#: app/flatpak-builtins-build-commit-from.c:249 msgid "Either --src-repo or --src-ref must be specified." msgstr "Entah --src-repo atau --src-ref harus ditentukan." -#: app/flatpak-builtins-build-commit-from.c:251 +#: app/flatpak-builtins-build-commit-from.c:402 msgid "Can't commit from partial source commit." msgstr "Tidak bisa melakukan komit dari sebagian sumber." +#: app/flatpak-builtins-build-commit-from.c:407 +#, c-format +msgid "%s: no change\n" +msgstr "%s: tidak ada perubahan\n" + #: app/flatpak-builtins-build-export.c:55 msgid "Architecture to export for (must be host compatible)" msgstr "Arsitektur tujuan ekspor (mesti kompatibel dengan host)" @@ -485,6 +528,43 @@ msgstr "Menimpa timestamp dari komit" msgid "ISO-8601-TIMESTAMP" msgstr "ISO-8601-TIMESTAMP" +#: app/flatpak-builtins-build-export.c:341 +#, c-format +msgid "WARNING: Error running desktop-file-validate: %s\n" +msgstr "PERINGATAN: Galat menjalankan desktop-file-validate: %s\n" + +#: app/flatpak-builtins-build-export.c:349 +#, c-format +msgid "WARNING: Error reading from desktop-file-validate: %s\n" +msgstr "PERINGATAN: Galat membaca dari desktop-file-validate: %s\n" + +#: app/flatpak-builtins-build-export.c:355 +#, c-format +msgid "WARNING: Failed to validate desktop file %s: %s\n" +msgstr "PERINGATAN: Gagal memvalidasi berkas destop %s: %s\n" + +#: app/flatpak-builtins-build-export.c:370 +#, c-format +msgid "WARNING: Can't find Exec key in %s: %s\n" +msgstr "PERINGATAN: Tidak dapat menemukan kunci Exec di %s: %s\n" + +#: app/flatpak-builtins-build-export.c:378 +#: app/flatpak-builtins-build-export.c:475 +#, c-format +msgid "WARNING: Binary not found for Exec line in %s: %s\n" +msgstr "PERINGATAN: Biner tidak ditemukan untuk baris Exec di %s: %s\n" + +#: app/flatpak-builtins-build-export.c:385 +#, c-format +msgid "WARNING: Icon not matching app id in %s: %s\n" +msgstr "PERINGATAN: Ikon tidak cocok dengan id aplikasi di %s: %s\n" + +#: app/flatpak-builtins-build-export.c:413 +#, c-format +msgid "WARNING: Icon referenced in desktop file but not exported: %s\n" +msgstr "" +"PERINGATAN: Ikon direferensikan dalam berkas destop tapi tidak diekspor: %s\n" + #: app/flatpak-builtins-build-export.c:551 #, c-format msgid "Invalid uri type %s, only http/https supported" @@ -522,12 +602,41 @@ msgstr "LOKASI dan DIREKTORI harus ditentukan" msgid "No name specified in the metadata" msgstr "Tidak ada nama yang ditentukan dalam metadata" +#: app/flatpak-builtins-build-export.c:976 +#, c-format +msgid "Commit: %s\n" +msgstr "Komit: %s\n" + +#: app/flatpak-builtins-build-export.c:977 +#, c-format +msgid "Metadata Total: %u\n" +msgstr "Total Metadata: %u\n" + +#: app/flatpak-builtins-build-export.c:978 +#, c-format +msgid "Metadata Written: %u\n" +msgstr "Metadata yang Ditulis: %u\n" + +#: app/flatpak-builtins-build-export.c:979 +#, c-format +msgid "Content Total: %u\n" +msgstr "Total Isi: %u\n" + +#: app/flatpak-builtins-build-export.c:980 +#, c-format +msgid "Content Written: %u\n" +msgstr "Konten yang Ditulis: %u\n" + +#: app/flatpak-builtins-build-export.c:981 +msgid "Content Bytes Written:" +msgstr "Isi Byte yang Ditulis:" + #: app/flatpak-builtins-build-finish.c:48 msgid "Command to set" msgstr "Perintah yang akan diatur" #: app/flatpak-builtins-build-finish.c:48 app/flatpak-builtins-run.c:53 -#: app/flatpak-main.c:160 +#: app/flatpak-main.c:166 msgid "COMMAND" msgstr "PERINTAH" @@ -586,7 +695,30 @@ msgstr "Atur pilihan metadata generik" #: app/flatpak-builtins-build-finish.c:56 msgid "GROUP=KEY[=VALUE]" -msgstr "GRUP=KUNCI[=VALUE]" +msgstr "GRUP=KUNCI[=NILAI]" + +#: app/flatpak-builtins-build-finish.c:139 +#, c-format +msgid "Not exporting %s, wrong prefix\n" +msgstr "Tidak mengekspor %s, salah awalan\n" + +#: app/flatpak-builtins-build-finish.c:143 +#, c-format +msgid "Exporting %s\n" +msgstr "Mengekspor %s\n" + +#: app/flatpak-builtins-build-finish.c:384 +msgid "More than one executable found\n" +msgstr "Lebih dari satu yang bisa dieksekusi ditemukan\n" + +#: app/flatpak-builtins-build-finish.c:395 +#, c-format +msgid "Using %s as command\n" +msgstr "Menggunakan %s sebagai perintah\n" + +#: app/flatpak-builtins-build-finish.c:400 +msgid "No executable found\n" +msgstr "Tidak ada yang bisa dieksekusi ditemukan\n" #: app/flatpak-builtins-build-finish.c:433 #, c-format @@ -650,6 +782,12 @@ msgstr "Ref '%s' tidak ditemukan di registri" msgid "Multiple images in registry, specify a ref with --ref" msgstr "Beberapa gambar pada registry, tentukan ref dengan --ref" +#: app/flatpak-builtins-build-import-bundle.c:123 +#: app/flatpak-builtins-build-import-bundle.c:151 +#, c-format +msgid "Importing %s (%s)\n" +msgstr "Mengimpor %s (%s)\n" + #: app/flatpak-builtins-build-import-bundle.c:172 msgid "LOCATION FILENAME - Import a file bundle into a local repository" msgstr "LOKASI NAMABERKAS - Impor bundel berkas ke repositori lokal" @@ -658,7 +796,7 @@ msgstr "LOKASI NAMABERKAS - Impor bundel berkas ke repositori lokal" msgid "LOCATION and FILENAME must be specified" msgstr "LOKASI dan NAMABERKAS harus ditentukan" -#: app/flatpak-builtins-build-init.c:49 app/flatpak-builtins-info.c:48 +#: app/flatpak-builtins-build-init.c:49 app/flatpak-builtins-info.c:51 #: app/flatpak-builtins-run.c:52 msgid "Arch to use" msgstr "Arsitektur yang digunakan" @@ -750,7 +888,7 @@ msgid "'%s' is not a valid build type name, use app, runtime or extension" msgstr "" "'%s' bukan nama tipe bangun yang valid, gunakan app, runtime, atau ekstensi" -#: app/flatpak-builtins-build-init.c:205 app/flatpak-builtins-override.c:71 +#: app/flatpak-builtins-build-init.c:205 app/flatpak-builtins-override.c:74 #, c-format msgid "'%s' is not a valid application name: %s" msgstr "'%s' bukan nama aplikasi yang valid: %s" @@ -760,12 +898,14 @@ msgstr "'%s' bukan nama aplikasi yang valid: %s" msgid "Build directory %s already initialized" msgstr "Direktori bangun %s sudah diinisialisasi" -#: app/flatpak-builtins-build-sign.c:41 app/flatpak-builtins-install.c:56 +#: app/flatpak-builtins-build-sign.c:41 app/flatpak-builtins-info-remote.c:48 +#: app/flatpak-builtins-install.c:57 msgid "Arch to install for" msgstr "Arsitektur tujuan pemasangan" -#: app/flatpak-builtins-build-sign.c:42 app/flatpak-builtins-install.c:62 -#: app/flatpak-builtins-uninstall.c:48 app/flatpak-builtins-update.c:61 +#: app/flatpak-builtins-build-sign.c:42 app/flatpak-builtins-info-remote.c:50 +#: app/flatpak-builtins-install.c:63 app/flatpak-builtins-uninstall.c:48 +#: app/flatpak-builtins-update.c:61 msgid "Look for runtime with the specified name" msgstr "Cari runtime dengan nama yang ditentukan" @@ -777,11 +917,48 @@ msgstr "LOKASI [ID [CABANG]] - Menandatangani sebuah aplikasi atau runtime" msgid "No gpg key ids specified" msgstr "Tidak ada id kunci gpg yang ditentukan" -#: app/flatpak-builtins-delete-remote.c:37 +#: app/flatpak-builtins-config.c:41 +msgid "List configuration keys and values" +msgstr "Buat daftar kunci dan nilai konfigurasi" + +#: app/flatpak-builtins-config.c:42 +msgid "Get configuration for KEY" +msgstr "Dapatkan konfigurasi untuk KUNCI" + +#: app/flatpak-builtins-config.c:43 +msgid "Set configuration for KEY to VALUE" +msgstr "Atur konfigurasi untuk KUNCI ke NILAI" + +#: app/flatpak-builtins-config.c:44 +msgid "Unset configuration for KEY" +msgstr "Batalkan konfigurasi untuk KUNCI" + +#: app/flatpak-builtins-config.c:95 +#, c-format +msgid "Unknown configure key '%s'" +msgstr "Kunci konfigurasi tidak dikenal '%s'" + +#: app/flatpak-builtins-config.c:144 app/flatpak-builtins-config.c:185 +msgid "You must specify key" +msgstr "Anda harus menentukan kunci" + +#: app/flatpak-builtins-config.c:166 +msgid "You must specify both key and value" +msgstr "Anda harus menentukan kunci dan nilai" + +#: app/flatpak-builtins-config.c:204 +msgid "[KEY [VALUE]] - Manage configuration" +msgstr "[KUNCI [NILAI]] - Kelola konfigurasi" + +#: app/flatpak-builtins-config.c:223 +msgid "Must specify one of --list, --get, --set or --unset" +msgstr "Harus menentukan salah satu dari --list, --get, --set atau --unset" + +#: app/flatpak-builtins-delete-remote.c:38 msgid "Remove remote even if in use" msgstr "Hapus remote meskipun digunakan" -#: app/flatpak-builtins-delete-remote.c:49 +#: app/flatpak-builtins-delete-remote.c:51 msgid "NAME - Delete a remote repository" msgstr "NAMA - Menghapus repositori remote" @@ -933,166 +1110,246 @@ msgstr "Tidak dapat berganti gid" msgid "Can't switch uid" msgstr "Tidak dapat berganti uid" -#: app/flatpak-builtins-info.c:49 app/flatpak-builtins-list.c:46 -#: app/flatpak-builtins-list-remotes.c:43 +#: app/flatpak-builtins-info.c:52 msgid "Show user installations" msgstr "Tampilkan pemasangan pengguna" -#: app/flatpak-builtins-info.c:50 app/flatpak-builtins-list.c:47 -#: app/flatpak-builtins-list-remotes.c:44 +#: app/flatpak-builtins-info.c:53 msgid "Show system-wide installations" msgstr "Tampilkan pemasangan di seluruh sistem" -#: app/flatpak-builtins-info.c:51 app/flatpak-builtins-list.c:48 -#: app/flatpak-builtins-list-remotes.c:45 +#: app/flatpak-builtins-info.c:54 msgid "Show specific system-wide installations" msgstr "Tampilkan pemasangan tertentu di seluruh sistem" -#: app/flatpak-builtins-info.c:52 +#: app/flatpak-builtins-info.c:55 app/flatpak-builtins-info-remote.c:53 msgid "Show ref" msgstr "Tampilkan ref" -#: app/flatpak-builtins-info.c:53 +#: app/flatpak-builtins-info.c:56 app/flatpak-builtins-info-remote.c:54 msgid "Show commit" msgstr "Tampilkan komit" -#: app/flatpak-builtins-info.c:54 +#: app/flatpak-builtins-info.c:57 msgid "Show origin" msgstr "Tampilkan asal" -#: app/flatpak-builtins-info.c:55 +#: app/flatpak-builtins-info.c:58 msgid "Show size" msgstr "Tampilkan ukuran" -#: app/flatpak-builtins-info.c:56 +#: app/flatpak-builtins-info.c:59 app/flatpak-builtins-info-remote.c:56 msgid "Show metadata" msgstr "Tampilkan metadata" -#: app/flatpak-builtins-info.c:57 +#: app/flatpak-builtins-info.c:60 +msgid "Show permissions" +msgstr "Tampilkan izin" + +#: app/flatpak-builtins-info.c:61 +msgid "Query file access" +msgstr "Akses berkas kueri" + +#: app/flatpak-builtins-info.c:61 app/flatpak-builtins-install.c:68 +#: app/flatpak-builtins-update.c:64 +msgid "PATH" +msgstr "PATH" + +#: app/flatpak-builtins-info.c:62 msgid "Show extensions" msgstr "Tampilkan ekstensi" -#: app/flatpak-builtins-info.c:97 +#: app/flatpak-builtins-info.c:118 msgid "NAME [BRANCH] - Get info about installed app and/or runtime" msgstr "" "NAMA [CABANG] - Dapatkan info tentang aplikasi dan/atau runtime yang " "terpasang" -#: app/flatpak-builtins-info.c:157 +#: app/flatpak-builtins-info.c:189 msgid "ref not present in origin" msgstr "ref tidak ada di asal" -#: app/flatpak-builtins-info.c:159 +#: app/flatpak-builtins-info.c:202 app/flatpak-builtins-info-remote.c:177 +msgid "Warning: Commit has no flatpak metadata\n" +msgstr "Peringatan: Komit tidak memiliki metadata flatpak\n" + +#: app/flatpak-builtins-info.c:209 app/flatpak-builtins-info-remote.c:200 msgid "Ref:" msgstr "Ref:" -#: app/flatpak-builtins-info.c:160 app/flatpak-builtins-info.c:270 +#: app/flatpak-builtins-info.c:210 app/flatpak-builtins-info.c:364 +#: app/flatpak-builtins-info-remote.c:201 msgid "ID:" msgstr "ID:" -#: app/flatpak-builtins-info.c:161 +#: app/flatpak-builtins-info.c:211 app/flatpak-builtins-info-remote.c:202 msgid "Arch:" msgstr "Arsitektur:" -#: app/flatpak-builtins-info.c:162 +#: app/flatpak-builtins-info.c:212 app/flatpak-builtins-info-remote.c:203 msgid "Branch:" msgstr "Cabang:" -#: app/flatpak-builtins-info.c:163 app/flatpak-builtins-info.c:271 +#: app/flatpak-builtins-info.c:213 app/flatpak-builtins-info.c:365 msgid "Origin:" msgstr "Asal:" -#: app/flatpak-builtins-info.c:166 +#: app/flatpak-builtins-info.c:215 app/flatpak-builtins-info-remote.c:205 +msgid "Collection ID:" +msgstr "ID Koleksi:" + +#: app/flatpak-builtins-info.c:217 app/flatpak-builtins-info-remote.c:206 +msgid "Date:" +msgstr "Tanggal:" + +#: app/flatpak-builtins-info.c:219 app/flatpak-builtins-info-remote.c:207 +msgid "Subject:" +msgstr "Subjek:" + +#: app/flatpak-builtins-info.c:223 msgid "Active commit:" msgstr "Komit aktif:" -#: app/flatpak-builtins-info.c:167 +#: app/flatpak-builtins-info.c:224 msgid "Latest commit:" msgstr "Komit terbaru:" -#: app/flatpak-builtins-info.c:170 app/flatpak-builtins-info.c:272 +#: app/flatpak-builtins-info.c:227 app/flatpak-builtins-info.c:366 +#: app/flatpak-builtins-info-remote.c:208 msgid "Commit:" msgstr "Komit:" -#: app/flatpak-builtins-info.c:172 +#: app/flatpak-builtins-info.c:229 msgid "alt-id:" msgstr "alt-id:" -#: app/flatpak-builtins-info.c:173 +#: app/flatpak-builtins-info.c:230 app/flatpak-builtins-info-remote.c:209 +msgid "Parent:" +msgstr "Induk:" + +#: app/flatpak-builtins-info.c:231 msgid "Location:" msgstr "Lokasi:" -#: app/flatpak-builtins-info.c:174 app/flatpak-builtins-info.c:273 +#: app/flatpak-builtins-info.c:232 app/flatpak-builtins-info.c:367 +#: app/flatpak-builtins-info-remote.c:211 msgid "Installed size:" msgstr "Ukuran terpasang:" -#: app/flatpak-builtins-info.c:179 +#: app/flatpak-builtins-info.c:237 app/flatpak-builtins-info-remote.c:216 msgid "Runtime:" msgstr "Runtime:" -#: app/flatpak-builtins-info.c:184 +#: app/flatpak-builtins-info.c:242 msgid "Installed subdirectories:" msgstr "Subdirektori terpasang:" -#: app/flatpak-builtins-info.c:269 +#: app/flatpak-builtins-info.c:363 msgid "Extension:" msgstr "Ekstensi:" -#: app/flatpak-builtins-info.c:280 +#: app/flatpak-builtins-info.c:374 msgid "Subpaths:" msgstr "Subpath:" -#: app/flatpak-builtins-install.c:57 -msgid "Don't pull, only install from local cache" -msgstr "Jangan tarik, hanya memasang dari cache lokal" +#: app/flatpak-builtins-info-remote.c:49 +msgid "Commit to show info for" +msgstr "Komit untuk menunjukkan info untuk" -#: app/flatpak-builtins-install.c:58 app/flatpak-builtins-update.c:57 -msgid "Don't deploy, only download to local cache" -msgstr "Jangan deploy, hanya mengunduh ke cache lokal" - -#: app/flatpak-builtins-install.c:59 -msgid "Don't install related refs" -msgstr "Jangan pasang ref yang terkait" - -#: app/flatpak-builtins-install.c:60 app/flatpak-builtins-update.c:59 -msgid "Don't verify/install runtime dependencies" -msgstr "Jangan memverifikasi/memasang dependensi runtime" - -#: app/flatpak-builtins-install.c:61 app/flatpak-builtins-update.c:60 -msgid "Don't use static deltas" -msgstr "Jangan menggunakan delta statis" - -#: app/flatpak-builtins-install.c:63 app/flatpak-builtins-uninstall.c:49 -#: app/flatpak-builtins-update.c:62 +#: app/flatpak-builtins-info-remote.c:51 app/flatpak-builtins-install.c:64 +#: app/flatpak-builtins-uninstall.c:49 app/flatpak-builtins-update.c:62 msgid "Look for app with the specified name" msgstr "Cari aplikasi dengan nama yang ditentukan" -#: app/flatpak-builtins-install.c:64 +#: app/flatpak-builtins-info-remote.c:52 +msgid "Display log" +msgstr "Tampilkan log" + +#: app/flatpak-builtins-info-remote.c:55 +msgid "Show parent" +msgstr "Tampilkan induk" + +#: app/flatpak-builtins-info-remote.c:122 +msgid "" +" REMOTE REF - Show information about an application or runtime in a remote" +msgstr "" +" REMOTE REF - Tampilkan informasi tentang aplikasi atau runtime pada remote" + +#: app/flatpak-builtins-info-remote.c:133 app/flatpak-builtins-install.c:499 +msgid "REMOTE and REF must be specified" +msgstr "REMOTE dan REF harus ditentukan" + +#: app/flatpak-builtins-info-remote.c:210 +msgid "Download size:" +msgstr "Ukuran unduh:" + +#: app/flatpak-builtins-info-remote.c:223 +msgid "History:\n" +msgstr "Riwayat:\n" + +#: app/flatpak-builtins-info-remote.c:244 +msgid " Subject:" +msgstr " Subjek:" + +#: app/flatpak-builtins-info-remote.c:245 +msgid " Date:" +msgstr " Tanggal:" + +#: app/flatpak-builtins-info-remote.c:246 +msgid " Commit:" +msgstr " Komit:" + +#: app/flatpak-builtins-info-remote.c:292 +#, c-format +msgid "Warning: Commit %s has no flatpak metadata\n" +msgstr "Peringatan: Komit %s tidak memiliki metadata flatpak\n" + +#: app/flatpak-builtins-install.c:58 +msgid "Don't pull, only install from local cache" +msgstr "Jangan tarik, hanya memasang dari cache lokal" + +#: app/flatpak-builtins-install.c:59 app/flatpak-builtins-update.c:57 +msgid "Don't deploy, only download to local cache" +msgstr "Jangan deploy, hanya mengunduh ke cache lokal" + +#: app/flatpak-builtins-install.c:60 +msgid "Don't install related refs" +msgstr "Jangan pasang ref yang terkait" + +#: app/flatpak-builtins-install.c:61 app/flatpak-builtins-update.c:59 +msgid "Don't verify/install runtime dependencies" +msgstr "Jangan memverifikasi/memasang dependensi runtime" + +#: app/flatpak-builtins-install.c:62 app/flatpak-builtins-update.c:60 +msgid "Don't use static deltas" +msgstr "Jangan menggunakan delta statis" + +#: app/flatpak-builtins-install.c:65 msgid "Assume LOCATION is a .flatpak single-file bundle" msgstr "Asumsikan LOKASI adalah bundel berkas tunggal .flatpak" -#: app/flatpak-builtins-install.c:65 +#: app/flatpak-builtins-install.c:66 msgid "Assume LOCATION is a .flatpakref application description" msgstr "Asumsikan LOKASI adalah deskripsi aplikasi .flatpakref" -#: app/flatpak-builtins-install.c:66 +#: app/flatpak-builtins-install.c:67 msgid "Check bundle signatures with GPG key from FILE (- for stdin)" msgstr "" "Periksa tanda tangan bundel dengan kunci GPG dari BERKAS (-untuk stdin)" -#: app/flatpak-builtins-install.c:67 +#: app/flatpak-builtins-install.c:68 msgid "Only install this subpath" msgstr "Hanya pasang subpath ini" -#: app/flatpak-builtins-install.c:67 app/flatpak-builtins-update.c:64 -msgid "PATH" -msgstr "PATH" - -#: app/flatpak-builtins-install.c:68 app/flatpak-builtins-update.c:65 +#: app/flatpak-builtins-install.c:69 app/flatpak-builtins-update.c:65 msgid "Automatically answer yes for all questions" msgstr "Secara otomatis menjawab ya untuk semua pertanyaan" -#: app/flatpak-builtins-install.c:210 +#: app/flatpak-builtins-install.c:70 +msgid "Uninstall first if already installed" +msgstr "Copot dulu jika sudah terpasang" + +#: app/flatpak-builtins-install.c:212 #, c-format msgid "" "This application depends on runtimes from:\n" @@ -1103,151 +1360,147 @@ msgstr "" "   %s\n" "Konfigurasikan ini sebagai remote baru '%s'" -#: app/flatpak-builtins-install.c:214 app/flatpak-builtins-install.c:340 +#: app/flatpak-builtins-install.c:216 app/flatpak-builtins-install.c:342 #, c-format msgid "Configuring %s as new remote '%s'" msgstr "Mengonfigurasi %s sebagai remote baru '%s'" -#: app/flatpak-builtins-install.c:262 +#: app/flatpak-builtins-install.c:264 msgid "Bundle filename must be specified" msgstr "Nama berkas bundel harus ditentukan" -#: app/flatpak-builtins-install.c:272 +#: app/flatpak-builtins-install.c:274 msgid "Remote bundles are not supported" msgstr "Bundel remote tidak didukung" -#: app/flatpak-builtins-install.c:336 +#: app/flatpak-builtins-install.c:338 #, c-format msgid "" "The remote '%s', at location %s contains additional applications.\n" -"Do you want to install other applications from here?" +"Should the remote be kept for future installations?" msgstr "" "Remote '%s', pada lokasi %s berisi aplikasi tambahan.\n" -"Apakah Anda ingin memasang aplikasi lain dari sini?" +"Haruskah remote disimpan untuk pemasangan di masa depan?" -#: app/flatpak-builtins-install.c:396 +#: app/flatpak-builtins-install.c:398 msgid "Filename or uri must be specified" msgstr "Nama berkas atau uri harus ditentukan" -#: app/flatpak-builtins-install.c:440 +#: app/flatpak-builtins-install.c:442 #, c-format msgid "Installing: %s\n" msgstr "Memasang: %s\n" -#: app/flatpak-builtins-install.c:470 +#: app/flatpak-builtins-install.c:474 msgid "LOCATION/REMOTE [REF...] - Install applications or runtimes" msgstr "LOKASI/REMOTE [REF...] - Pasang aplikasi atau runtime" -#: app/flatpak-builtins-install.c:491 -msgid "REMOTE and REF must be specified" -msgstr "REMOTE dan REF harus ditentukan" - -#: app/flatpak-builtins-list.c:49 +#: app/flatpak-builtins-list.c:43 msgid "Show extra information" msgstr "Tampilkan informasi ekstra" -#: app/flatpak-builtins-list.c:50 +#: app/flatpak-builtins-list.c:44 msgid "List installed runtimes" msgstr "Daftar runtime yang terpasang" -#: app/flatpak-builtins-list.c:51 +#: app/flatpak-builtins-list.c:45 msgid "List installed applications" msgstr "Daftar aplikasi yang terpasang" -#: app/flatpak-builtins-list.c:52 +#: app/flatpak-builtins-list.c:46 msgid "Arch to show" msgstr "Arsitektur yang akan ditampilkan" -#: app/flatpak-builtins-list.c:53 app/flatpak-builtins-ls-remote.c:49 +#: app/flatpak-builtins-list.c:47 app/flatpak-builtins-ls-remote.c:50 msgid "List all refs (including locale/debug)" msgstr "Daftar semua ref (termasuk lokal/awakutu)" -#: app/flatpak-builtins-list.c:131 app/flatpak-builtins-ls-remote.c:129 +#: app/flatpak-builtins-list.c:125 app/flatpak-builtins-ls-remote.c:174 #: app/flatpak-builtins-repo.c:98 msgid "Ref" msgstr "Ref" -#: app/flatpak-builtins-list.c:134 app/flatpak-builtins-ls-remote.c:131 +#: app/flatpak-builtins-list.c:128 app/flatpak-builtins-ls-remote.c:176 msgid "Origin" msgstr "Asal" -#: app/flatpak-builtins-list.c:135 +#: app/flatpak-builtins-list.c:129 msgid "Active commit" msgstr "Komit aktif" -#: app/flatpak-builtins-list.c:136 +#: app/flatpak-builtins-list.c:130 msgid "Latest commit" msgstr "Komit terbaru" -#: app/flatpak-builtins-list.c:137 app/flatpak-builtins-ls-remote.c:133 +#: app/flatpak-builtins-list.c:131 app/flatpak-builtins-ls-remote.c:178 msgid "Installed size" msgstr "Ukuran terpasang" -#: app/flatpak-builtins-list.c:139 app/flatpak-builtins-list-remotes.c:112 +#: app/flatpak-builtins-list.c:133 app/flatpak-builtins-list-remotes.c:73 msgid "Options" msgstr "Opsi" -#: app/flatpak-builtins-list.c:375 +#: app/flatpak-builtins-list.c:305 msgid " - List installed apps and/or runtimes" msgstr " - Daftar aplikasi dan/atau runtimes yang terpasang" -#: app/flatpak-builtins-list-remotes.c:46 +#: app/flatpak-builtins-list-remotes.c:40 msgid "Show remote details" msgstr "Tampilkan detail remote" -#: app/flatpak-builtins-list-remotes.c:47 +#: app/flatpak-builtins-list-remotes.c:41 msgid "Show disabled remotes" msgstr "Tampilkan remote yang dinonaktifkan" -#: app/flatpak-builtins-list-remotes.c:59 +#: app/flatpak-builtins-list-remotes.c:53 msgid " - List remote repositories" msgstr " - Daftar repositori remote" -#: app/flatpak-builtins-list-remotes.c:105 +#: app/flatpak-builtins-list-remotes.c:66 msgid "Name" msgstr "Nama" -#: app/flatpak-builtins-list-remotes.c:108 +#: app/flatpak-builtins-list-remotes.c:69 msgid "Title" msgstr "Judul" -#: app/flatpak-builtins-list-remotes.c:110 +#: app/flatpak-builtins-list-remotes.c:71 msgid "Priority" msgstr "Prioritas" -#: app/flatpak-builtins-ls-remote.c:44 +#: app/flatpak-builtins-ls-remote.c:45 msgid "Show arches and branches" msgstr "Tampilkan arsitektur dan cabang" -#: app/flatpak-builtins-ls-remote.c:45 +#: app/flatpak-builtins-ls-remote.c:46 msgid "Show only runtimes" msgstr "Hanya tampilkan runtime" -#: app/flatpak-builtins-ls-remote.c:46 +#: app/flatpak-builtins-ls-remote.c:47 msgid "Show only apps" msgstr "Hanya tampilkan aplikasi" -#: app/flatpak-builtins-ls-remote.c:47 +#: app/flatpak-builtins-ls-remote.c:48 msgid "Show only those where updates are available" msgstr "Hanya tampilkan itu ketika pembaruan tersedia" -#: app/flatpak-builtins-ls-remote.c:48 +#: app/flatpak-builtins-ls-remote.c:49 msgid "Limit to this arch (* for all)" msgstr "Batasi arsitektur ini (* untuk semua)" -#: app/flatpak-builtins-ls-remote.c:74 -msgid " REMOTE - Show available runtimes and applications" -msgstr " REMOTE - Tampilkan runtime dan aplikasi yang tersedia" +#: app/flatpak-builtins-ls-remote.c:96 +msgid " [REMOTE] - Show available runtimes and applications" +msgstr " [REMOTE] - Tampilkan runtime dan aplikasi yang tersedia" -#: app/flatpak-builtins-ls-remote.c:132 +#: app/flatpak-builtins-ls-remote.c:177 msgid "Commit" msgstr "Komit" -#: app/flatpak-builtins-ls-remote.c:134 +#: app/flatpak-builtins-ls-remote.c:179 msgid "Download size" msgstr "Ukuran unduh" -#: app/flatpak-builtins-ls-remote.c:245 +#: app/flatpak-builtins-ls-remote.c:304 msgid "No ref information available in repository" msgstr "Tidak ada informasi ref yang tersedia dalam repositori" @@ -1255,27 +1508,61 @@ msgstr "Tidak ada informasi ref yang tersedia dalam repositori" msgid "Arch to make current for" msgstr "Arsitektur seperti sekarang" -#: app/flatpak-builtins-make-current.c:57 +#: app/flatpak-builtins-make-current.c:58 msgid "APP BRANCH - Make branch of application current" msgstr "APL CABANG - Buat cabang aplikasi saat ini" -#: app/flatpak-builtins-make-current.c:64 app/flatpak-builtins-override.c:63 -#: app/flatpak-builtins-run.c:105 +#: app/flatpak-builtins-make-current.c:69 app/flatpak-builtins-run.c:105 msgid "APP must be specified" msgstr "APL harus ditentukan" -#: app/flatpak-builtins-make-current.c:79 +#: app/flatpak-builtins-make-current.c:84 msgid "BRANCH must be specified" msgstr "CABANG harus ditentukan" -#: app/flatpak-builtins-make-current.c:92 +#: app/flatpak-builtins-make-current.c:97 #, c-format msgid "App %s branch %s is not installed" msgstr "Aplikasi %s cabang %s tidak terpasang" -#: app/flatpak-builtins-override.c:53 -msgid "APP - Override settings for application" -msgstr "APL - Menimpa pengaturan untuk aplikasi" +#: app/flatpak-builtins-override.c:54 +msgid "[APP] - Override settings [for application]" +msgstr "[APP] - Menimpa pengaturan [untuk aplikasi]" + +#: app/flatpak-builtins-repo.c:48 +#, c-format +msgid "Title: %s\n" +msgstr "Judul: %s\n" + +#: app/flatpak-builtins-repo.c:51 +#, c-format +msgid "Collection ID: %s\n" +msgstr "ID koleksi: %s\n" + +#: app/flatpak-builtins-repo.c:54 +#, c-format +msgid "Default branch: %s\n" +msgstr "Cabang bawaan: %s\n" + +#: app/flatpak-builtins-repo.c:57 +#, c-format +msgid "Redirect URL: %s\n" +msgstr "URL pengalihan: %s\n" + +#: app/flatpak-builtins-repo.c:60 +#, c-format +msgid "Redirect collection ID: %s\n" +msgstr "Mengalihkan ID koleksi: %s\n" + +#: app/flatpak-builtins-repo.c:68 +#, c-format +msgid "GPG key hash: %s\n" +msgstr "Hash kunci GPG: %s\n" + +#: app/flatpak-builtins-repo.c:77 +#, c-format +msgid "%zd branches\n" +msgstr "%zd cabang\n" #: app/flatpak-builtins-repo.c:99 msgid "Installed" @@ -1297,7 +1584,7 @@ msgstr "Daftar cabang di repositori" msgid "Print metadata for a branch" msgstr "Cetak metadata untuk cabang" -#: app/flatpak-builtins-repo.c:167 +#: app/flatpak-builtins-repo.c:168 msgid "LOCATION - Repository maintenance" msgstr "LOKASI - Perbaikan repositori" @@ -1411,14 +1698,6 @@ msgstr "Runtime untuk digunakan" msgid "Runtime version to use" msgstr "Versi runtime untuk digunakan" -#: app/flatpak-builtins-run.c:58 -msgid "Log session bus calls" -msgstr "Catat log pemanggilan bus sesi" - -#: app/flatpak-builtins-run.c:59 -msgid "Log system bus calls" -msgstr "Catat log pemanggilan bus sistem" - #: app/flatpak-builtins-run.c:60 msgid "Log accessibility bus calls" msgstr "Catat log aksesibilitas bus sesi" @@ -1431,6 +1710,38 @@ msgstr "Aktifkan penerusan berkas" msgid "APP [args...] - Run an app" msgstr "APL [argumen...] - Jalankan aplikasi" +#: app/flatpak-builtins-search.c:239 +msgid "TEXT - Search remote apps/runtimes for text" +msgstr "TEXT - Cari aplikasi remote/runtime untuk teks" + +#: app/flatpak-builtins-search.c:249 +msgid "TEXT must be specified" +msgstr "TEXT harus ditentukan" + +#: app/flatpak-builtins-search.c:305 +msgid "Application ID" +msgstr "ID Aplikasi" + +#: app/flatpak-builtins-search.c:306 +msgid "Version" +msgstr "Versi" + +#: app/flatpak-builtins-search.c:308 +msgid "Branch" +msgstr "Cabang" + +#: app/flatpak-builtins-search.c:310 +msgid "Remotes" +msgstr "Remote" + +#: app/flatpak-builtins-search.c:311 +msgid "Description" +msgstr "Deskripsi" + +#: app/flatpak-builtins-search.c:320 +msgid "No matches found" +msgstr "Tidak ditemukan kecocokan" + #: app/flatpak-builtins-uninstall.c:44 msgid "Arch to uninstall" msgstr "Arsitektur untuk dihapus" @@ -1447,19 +1758,24 @@ msgstr "Jangan hapus ref terkait" msgid "Remove files even if running" msgstr "Hapus berkas meski berjalan" -#: app/flatpak-builtins-uninstall.c:69 +#: app/flatpak-builtins-uninstall.c:70 msgid "REF... - Uninstall an application" msgstr "REF... - Hapus aplikasi" -#: app/flatpak-builtins-uninstall.c:76 +#: app/flatpak-builtins-uninstall.c:81 msgid "Must specify at least one REF" msgstr "Harus menentukan setidaknya satu REF" -#: app/flatpak-builtins-uninstall.c:129 app/flatpak-transaction.c:336 +#: app/flatpak-builtins-uninstall.c:134 app/flatpak-transaction.c:355 #, c-format msgid "Warning: Problem looking for related refs: %s\n" msgstr "Peringatan: Masalah mencari ref terkait: %s\n" +#: app/flatpak-builtins-uninstall.c:164 +#, c-format +msgid "Uninstalling: %s\n" +msgstr "Mencopot: %s\n" + #: app/flatpak-builtins-update.c:53 msgid "Arch to update for" msgstr "Arsitektur untuk pembaruan" @@ -1468,10 +1784,6 @@ msgstr "Arsitektur untuk pembaruan" msgid "Commit to deploy" msgstr "Komit untuk deploy" -#: app/flatpak-builtins-update.c:54 -msgid "COMMIT" -msgstr "KOMIT" - #: app/flatpak-builtins-update.c:55 msgid "Remove old files even if running" msgstr "Hapus berkas lama meski berjalan" @@ -1492,46 +1804,96 @@ msgstr "Perbarui appstream untuk remote" msgid "Only update this subpath" msgstr "Hanya perbarui subpath ini" -#: app/flatpak-builtins-update.c:95 -#, c-format -msgid "Updating appstream for remote %s\n" -msgstr "Memperbarui appstream untuk remote %s\n" - -#: app/flatpak-builtins-update.c:133 +#: app/flatpak-builtins-update.c:83 msgid "[REF...] - Update applications or runtimes" msgstr "[REF...] - Perbarui aplikasi atau runtime" +#: app/flatpak-builtins-update.c:119 +msgid "Looking for updates...\n" +msgstr "" +"Mencari pembaruan...\n" +"\n" + +#: app/flatpak-builtins-utils.c:365 +#, c-format +msgid "Remote ‘%s’ found in multiple installations:\n" +msgstr "Remote '%s' ditemukan pada beberapa pemasangan:\n" + +#: app/flatpak-builtins-utils.c:372 +msgid "Which do you want to use (0 to abort)?" +msgstr "Mana yang ingin Anda gunakan (0 untuk membatalkan)?" + +#: app/flatpak-builtins-utils.c:374 +#, c-format +msgid "No remote chosen to resolve ‘%s’ which exists in multiple installations" +msgstr "" +"Tidak ada remote yang dipilih untuk menyelesaikan '%s' yang ada pada " +"beberapa pemasangan" + +#: app/flatpak-builtins-utils.c:479 app/flatpak-builtins-utils.c:481 +#, c-format +msgid "Updating appstream data for user remote %s\n" +msgstr "Memperbarui data appstream untuk remote pengguna %s\n" + +#: app/flatpak-builtins-utils.c:486 app/flatpak-builtins-utils.c:488 +#, c-format +msgid "Updating appstream data for remote %s\n" +msgstr "Memperbarui data appstream untuk remote %s\n" + +#: app/flatpak-builtins-utils.c:493 +#, c-format +msgid "Error updating: %s\n" +msgstr "Galat memperbarui: %s\n" + +#: app/flatpak-builtins-utils.c:526 +#, c-format +msgid "Remote \"%s\" not found" +msgstr "Remote \"%s\" tidak ditemukan" + #. translators: please keep the leading space -#: app/flatpak-main.c:61 +#: app/flatpak-main.c:62 msgid " Manage installed apps and runtimes" msgstr " Mengelola aplikasi dan runtime yang terpasang" -#: app/flatpak-main.c:62 +#: app/flatpak-main.c:63 msgid "Install an application or runtime" msgstr "Pasang aplikasi atau runtime" -#: app/flatpak-main.c:63 +#: app/flatpak-main.c:64 msgid "Update an installed application or runtime" msgstr "Perbarui aplikasi yang terpasang atau runtime" -#: app/flatpak-main.c:64 +#: app/flatpak-main.c:65 msgid "Uninstall an installed application or runtime" msgstr "Hapus aplikasi yang terpasang atau runtime" -#: app/flatpak-main.c:65 +#: app/flatpak-main.c:66 msgid "List installed apps and/or runtimes" msgstr "Daftar aplikasi dan/atau runtime yang terpasang" -#: app/flatpak-main.c:66 +#: app/flatpak-main.c:67 msgid "Show info for installed app or runtime" msgstr "Tampilkan info untuk aplikasi yang terpasang atau runtime" -#: app/flatpak-main.c:67 +#: app/flatpak-main.c:68 msgid "Configure flatpak" msgstr "Konfigurasi flatpak" #. translators: please keep the leading newline and space -#: app/flatpak-main.c:70 +#: app/flatpak-main.c:71 +msgid "" +"\n" +" Finding applications and runtimes" +msgstr "" +"\n" +"Menemukan aplikasi dan runtime" + +#: app/flatpak-main.c:72 +msgid "Search for remote apps/runtimes" +msgstr "Cari aplikasi remote/runtime" + +#. translators: please keep the leading newline and space +#: app/flatpak-main.c:75 msgid "" "\n" " Running applications" @@ -1539,24 +1901,24 @@ msgstr "" "\n" " Menjalankan aplikasi" -#: app/flatpak-main.c:71 +#: app/flatpak-main.c:76 msgid "Run an application" msgstr "Menjalankan aplikasi" -#: app/flatpak-main.c:72 +#: app/flatpak-main.c:77 msgid "Override permissions for an application" msgstr "Timpa perizinan untuk aplikasi" -#: app/flatpak-main.c:73 +#: app/flatpak-main.c:78 msgid "Specify default version to run" msgstr "Tentukan versi bawaan untuk dijalankan" -#: app/flatpak-main.c:74 +#: app/flatpak-main.c:79 msgid "Enter the namespace of a running application" msgstr "Masukkan namespace aplikasi yang sedang berjalan" #. translators: please keep the leading newline and space -#: app/flatpak-main.c:77 +#: app/flatpak-main.c:82 msgid "" "\n" " Manage file access" @@ -1564,24 +1926,24 @@ msgstr "" "\n" " Kelola akses berkas" -#: app/flatpak-main.c:78 +#: app/flatpak-main.c:83 msgid "Grant an application access to a specific file" msgstr "Berikan akses aplikasi ke berkas tertentu" -#: app/flatpak-main.c:79 +#: app/flatpak-main.c:84 msgid "Revoke access to a specific file" msgstr "Cabut akses ke berkas tertentu" -#: app/flatpak-main.c:80 +#: app/flatpak-main.c:85 msgid "Show information about a specific file" msgstr "Tampilkan informasi tentang berkas tertentu" -#: app/flatpak-main.c:81 +#: app/flatpak-main.c:86 msgid "List exported files" msgstr "Daftar berkas yang diekspor" #. translators: please keep the leading newline and space -#: app/flatpak-main.c:84 +#: app/flatpak-main.c:89 msgid "" "\n" " Manage remote repositories" @@ -1589,28 +1951,32 @@ msgstr "" "\n" " Kelola repositori remote" -#: app/flatpak-main.c:85 +#: app/flatpak-main.c:90 msgid "List all configured remotes" msgstr "Daftar semua remote yang dikonfigurasi" -#: app/flatpak-main.c:86 +#: app/flatpak-main.c:91 msgid "Add a new remote repository (by URL)" msgstr "Tambahkan repositori remote baru (menurut URL)" -#: app/flatpak-main.c:87 +#: app/flatpak-main.c:92 msgid "Modify properties of a configured remote" msgstr "Modifikasi properti dari remote yang terkonfigurasi" -#: app/flatpak-main.c:88 +#: app/flatpak-main.c:93 msgid "Delete a configured remote" msgstr "Hapus remote yang terkonfigurasi" -#: app/flatpak-main.c:90 +#: app/flatpak-main.c:95 msgid "List contents of a configured remote" msgstr "Daftar isi dari remote yang terkonfigurasi" +#: app/flatpak-main.c:96 +msgid "Show information about a remote app or runtime" +msgstr "Tampilkan informasi tentang aplikasi remote atau runtime" + #. translators: please keep the leading newline and space -#: app/flatpak-main.c:93 +#: app/flatpak-main.c:99 msgid "" "\n" " Build applications" @@ -1618,508 +1984,289 @@ msgstr "" "\n" " Bangun aplikasi" -#: app/flatpak-main.c:94 +#: app/flatpak-main.c:100 msgid "Initialize a directory for building" msgstr "Inisialisasi direktori untuk membangun" -#: app/flatpak-main.c:95 +#: app/flatpak-main.c:101 msgid "Run a build command inside the build dir" msgstr "Jalankan perintah bangun di dalam direktori bangun" -#: app/flatpak-main.c:96 +#: app/flatpak-main.c:102 msgid "Finish a build dir for export" msgstr "Selesaikan direktori bangun untuk ekspor" -#: app/flatpak-main.c:97 +#: app/flatpak-main.c:103 msgid "Export a build dir to a repository" msgstr "Ekspor direktori bangun ke repositori" -#: app/flatpak-main.c:98 -msgid "Create a bundle file from a build directory" -msgstr "Buat berkas bundel dari direktori bangun" +#: app/flatpak-main.c:104 +msgid "Create a bundle file from a ref in a local repository" +msgstr "Buat berkas bundel dari ref pada repositori lokal" -#: app/flatpak-main.c:99 +#: app/flatpak-main.c:105 msgid "Import a bundle file" msgstr "Impor berkas bundel" -#: app/flatpak-main.c:100 +#: app/flatpak-main.c:106 msgid "Sign an application or runtime" msgstr "Menandatangani sebuah aplikasi atau runtime" -#: app/flatpak-main.c:101 +#: app/flatpak-main.c:107 msgid "Update the summary file in a repository" msgstr "Perbarui berkas ringkasan dalam repositori" -#: app/flatpak-main.c:102 +#: app/flatpak-main.c:108 msgid "Create new commit based on existing ref" msgstr "Buat komit baru berdasarkan ref yang ada" -#: app/flatpak-main.c:103 +#: app/flatpak-main.c:109 msgid "Print information about a repo" msgstr "Cetak informasi tentang repo" -#: app/flatpak-main.c:120 +#: app/flatpak-main.c:126 msgid "Print debug information during command processing, -vv for more detail" msgstr "" "Cetak informasi awakutu selama pemrosesan perintah, -vv untuk detail lebih " "lanjut" -#: app/flatpak-main.c:121 +#: app/flatpak-main.c:127 msgid "Print OSTree debug information during command processing" msgstr "Cetak informasi awakutu OSTree selama pemrosesan perintah" -#: app/flatpak-main.c:122 +#: app/flatpak-main.c:128 msgid "Show help options" msgstr "Tampilkan opsi bantuan" -#: app/flatpak-main.c:127 +#: app/flatpak-main.c:133 msgid "Print version information and exit" msgstr "Cetak informasi versi dan keluar" -#: app/flatpak-main.c:128 +#: app/flatpak-main.c:134 msgid "Print default arch and exit" msgstr "Cetak arsitektur bawaan dan keluar" -#: app/flatpak-main.c:129 +#: app/flatpak-main.c:135 msgid "Print supported arches and exit" msgstr "Cetak arsitektur yang didukung dan keluar" -#: app/flatpak-main.c:130 +#: app/flatpak-main.c:136 msgid "Print active gl drivers and exit" msgstr "Cetak penggerak gl aktif dan keluar" -#: app/flatpak-main.c:135 +#: app/flatpak-main.c:141 msgid "Work on user installations" msgstr "Bekerja pada pemasangan pengguna" -#: app/flatpak-main.c:136 +#: app/flatpak-main.c:142 msgid "Work on system-wide installations (default)" msgstr "Bekerja pada pemasangan di seluruh sistem (bawaan)" -#: app/flatpak-main.c:137 -msgid "Work on a specific system-wide installation" +#: app/flatpak-main.c:143 +msgid "Work on specific system-wide installation(s)" msgstr "Bekerja pada pemasangan seluruh sistem yang spesifik" -#: app/flatpak-main.c:137 +#: app/flatpak-main.c:143 msgid "NAME" msgstr "NAMA" -#: app/flatpak-main.c:163 +#: app/flatpak-main.c:169 msgid "Builtin Commands:" msgstr "Perintah Terpasang:" -#: app/flatpak-main.c:389 +#: app/flatpak-main.c:370 +msgid "" +"The --installation option was used multiple times for a command that works " +"on one installation" +msgstr "" +"Opsi --installation digunakan berkali-kali untuk sebuah perintah yang " +"bekerja pada satu pemasangan" + +#: app/flatpak-main.c:489 #, c-format msgid "Unknown command '%s'" msgstr "Perintah tidak dikenal '%s'" -#: app/flatpak-main.c:397 +#: app/flatpak-main.c:497 msgid "No command specified" msgstr "Tidak ada perintah yang ditentukan" -#: app/flatpak-main.c:515 +#: app/flatpak-main.c:615 msgid "error:" msgstr "galat:" -#: app/flatpak-transaction.c:298 +#: app/flatpak-transaction.c:313 +#, c-format +msgid "Found in remote %s\n" +msgstr "" +"Ditemukan di remote %s\n" +"\n" + +#: app/flatpak-transaction.c:317 #, c-format msgid "Found in remote %s, do you want to install it?" msgstr "Ditemukan di remote %s, apakah Anda ingin memasangnya?" -#: app/flatpak-transaction.c:303 +#: app/flatpak-transaction.c:322 msgid "Found in several remotes:\n" msgstr "Ditemukan di beberapa remote:\n" -#: app/flatpak-transaction.c:308 +#: app/flatpak-transaction.c:327 msgid "Which do you want to install (0 to abort)?" msgstr "Mana yang ingin Anda pasang (0 untuk membatalkan)?" -#: app/flatpak-transaction.c:398 +#: app/flatpak-transaction.c:417 #, c-format msgid "Required runtime for %s (%s) is not installed, searching...\n" msgstr "Diperlukan runtime untuk %s (%s) tidak terpasang, mencari...\n" -#: app/flatpak-transaction.c:404 +#: app/flatpak-transaction.c:423 #, c-format msgid "The required runtime %s was not found in a configured remote.\n" msgstr "" "Runtime %s yang dibutuhkan tidak ditemukan di remote yang dikonfigurasi.\n" -#: app/flatpak-transaction.c:465 common/flatpak-dir.c:1127 -#: common/flatpak-dir.c:1433 common/flatpak-dir.c:1456 -#: common/flatpak-dir.c:1478 common/flatpak-dir.c:10131 -#: common/flatpak-utils.c:1272 common/flatpak-utils.c:1366 +#: app/flatpak-transaction.c:506 common/flatpak-dir.c:1160 +#: common/flatpak-dir.c:1479 common/flatpak-dir.c:1502 +#: common/flatpak-dir.c:1524 common/flatpak-dir.c:10656 +#: common/flatpak-utils.c:1312 common/flatpak-utils.c:1406 #, c-format msgid "%s not installed" msgstr "%s tidak terpasang" -#: app/flatpak-transaction.c:471 +#: app/flatpak-transaction.c:512 #, c-format msgid "Remote %s disabled, ignoring %s update" msgstr "Remote %s dinonaktifkan, mengabaikan pembaruan %s" -#: app/flatpak-transaction.c:481 +#: app/flatpak-transaction.c:525 #, c-format msgid "%s already installed, skipping\n" msgstr "%s sudah terpasang, melewati\n" -#: app/flatpak-transaction.c:525 +#: app/flatpak-transaction.c:531 +#, c-format +msgid "%s is already installed from other remote (%s)" +msgstr "%s sudah terpasang dari remote lainnya (%s)" + +#: app/flatpak-transaction.c:543 +#, c-format +msgid "Warning: Can't find dependencies: %s\n" +msgstr "Peringatan: Tidak dapat menemukan dependensi: %s\n" + +#: app/flatpak-transaction.c:570 +#, c-format +msgid "Invalid require-flatpak argument %s\n" +msgstr "Argumen require-flatpak %s tidak valid\n" + +#: app/flatpak-transaction.c:576 #, c-format msgid "%s needs a later flatpak version (%s)" msgstr "%s membutuhkan versi flatpak kelak (%s)" -#: app/flatpak-transaction.c:692 +#: app/flatpak-transaction.c:688 +#, c-format +msgid "Error updating remote metadata for '%s': %s\n" +msgstr "Galat memperbarui metadata remote untuk '%s': %s\n" + +#: app/flatpak-transaction.c:744 msgid "install" msgstr "pasang" -#: app/flatpak-transaction.c:693 +#: app/flatpak-transaction.c:746 +#, c-format +msgid "Installing for user: %s from %s\n" +msgstr "Memasang untuk pengguna: %s dari %s\n" + +#: app/flatpak-transaction.c:748 #, c-format msgid "Installing: %s from %s\n" msgstr "Memasang: %s dari %s\n" -#: app/flatpak-transaction.c:709 +#: app/flatpak-transaction.c:765 msgid "update" msgstr "pembaruan" -#: app/flatpak-transaction.c:717 +#: app/flatpak-transaction.c:774 +#, c-format +msgid "Updating for user: %s from %s\n" +msgstr "Memperbarui untuk pengguna: %s dari %s\n" + +#: app/flatpak-transaction.c:776 #, c-format msgid "Updating: %s from %s\n" msgstr "Memperbarui: %s dari %s\n" -#: app/flatpak-transaction.c:737 +#: app/flatpak-transaction.c:796 #, c-format msgid "Now at %s.\n" msgstr "Sekarang di %s.\n" -#: app/flatpak-transaction.c:743 +#: app/flatpak-transaction.c:802 msgid "No updates.\n" msgstr "Tidak ada pembaruan.\n" -#: app/flatpak-transaction.c:761 +#: app/flatpak-transaction.c:820 msgid "install bundle" msgstr "pasang bundel" -#: app/flatpak-transaction.c:762 +#: app/flatpak-transaction.c:822 +#, c-format +msgid "Installing for user: %s from bundle %s\n" +msgstr "Memasang untuk pengguna: %s dari bundel %s\n" + +#: app/flatpak-transaction.c:824 #, c-format msgid "Installing: %s from bundle %s\n" msgstr "" "Memasang: %s dari bundel %s\n" "\n" -#: app/flatpak-transaction.c:774 +#: app/flatpak-transaction.c:836 #, c-format msgid "Warning: Failed to %s %s: %s\n" msgstr "Peringatan: Gagal untuk %s %s: %s\n" -#: app/flatpak-transaction.c:779 +#: app/flatpak-transaction.c:841 #, c-format msgid "Error: Failed to %s %s: %s\n" msgstr "Galat: Gagal untuk %s %s: %s\n" -#: app/flatpak-transaction.c:784 +#: app/flatpak-transaction.c:846 msgid "One or more operations failed" msgstr "Satu atau beberapa operasi gagal" -#: common/flatpak-dir.c:1015 -#, c-format -msgid "No overrides found for %s" -msgstr "Tidak ada penimpaan yang ditemukan untuk %s" - -#: common/flatpak-dir.c:1611 -#, c-format -msgid "While opening repository %s: " -msgstr "Saat membuka repositori %s: " - -#: common/flatpak-dir.c:1792 common/flatpak-dir.c:5131 -msgid "Can't create deploy directory" -msgstr "Tidak dapat membuat direktori deploy" - -#: common/flatpak-dir.c:2472 -#, c-format -msgid "Invalid sha256 for extra data uri %s" -msgstr "Sha256 tidak valid untuk data ekstra uri %s" - -#: common/flatpak-dir.c:2477 -#, c-format -msgid "Empty name for extra data uri %s" -msgstr "Nama kosong untuk data ekstra uri %s" - -#: common/flatpak-dir.c:2484 -#, c-format -msgid "Unsupported extra data uri %s" -msgstr "Data ekstra yang tidak didukung uri %s" - -#: common/flatpak-dir.c:2498 -#, c-format -msgid "Failed to load local extra-data %s: %s" -msgstr "Gagal memuat data-ekstra lokal %s: %s" - -#: common/flatpak-dir.c:2501 -#, c-format -msgid "Wrong size for extra-data %s" -msgstr "Ukuran yang salah untuk data-ekstra %s" - -#: common/flatpak-dir.c:2516 -#, c-format -msgid "While downloading %s: " -msgstr "Saat mengunduh %s: " - -#: common/flatpak-dir.c:2523 -#, c-format -msgid "Wrong size for extra data %s" -msgstr "Ukuran yang salah untuk data ekstra %s" - -#: common/flatpak-dir.c:2534 -#, c-format -msgid "Invalid checksum for extra data %s" -msgstr "Checksum tidak valid untuk data ekstra %s" - -#: common/flatpak-dir.c:2790 -#, c-format -msgid "%s commit %s already installed" -msgstr "%s komit %s sudah terpasang" - -#: common/flatpak-dir.c:3119 common/flatpak-dir.c:3433 -#, c-format -msgid "While pulling %s from remote %s: " -msgstr "Saat menarik %s dari remote %s: " - -#: common/flatpak-dir.c:3318 -#, c-format -msgid "Can't find %s in remote %s" -msgstr "Tidak dapat menemukan %s di remote %s" - -#: common/flatpak-dir.c:3991 -msgid "Not enough memory" -msgstr "Memori tidak cukup" - -#: common/flatpak-dir.c:4010 -msgid "Failed to read from exported file" -msgstr "Gagal membaca dari berkas yang diekspor" - -#: common/flatpak-dir.c:4201 -msgid "Error reading mimetype xml file" -msgstr "Kesalahan saat membaca berkas xml mimetype" - -#: common/flatpak-dir.c:4206 -msgid "Invalid mimetype xml file" -msgstr "Berkas xml mimetype tidak valid" - -#: common/flatpak-dir.c:4748 -msgid "While getting detached metadata: " -msgstr "Saat mendapatkan metadata yang terpisah: " - -#: common/flatpak-dir.c:4766 -msgid "While creating extradir: " -msgstr "Saat membuat direktori ekstra: " - -#: common/flatpak-dir.c:4787 -msgid "Invalid sha256 for extra data" -msgstr "Sha256 tidak valid untuk data ekstra" - -#: common/flatpak-dir.c:4816 -msgid "Wrong size for extra data" -msgstr "Ukuran yang salah untuk data ekstra" - -#: common/flatpak-dir.c:4820 -msgid "Invalid checksum for extra data" -msgstr "Checksum tidak valid untuk data ekstra" - -#: common/flatpak-dir.c:4829 -#, c-format -msgid "While writing extra data file '%s': " -msgstr "Saat menulis berkas data ekstra '%s': " - -#: common/flatpak-dir.c:5013 -#, c-format -msgid "apply_extra script failed, exit status %d" -msgstr "Skrip apply_extra gagal, status keluar %d" - -#: common/flatpak-dir.c:5090 -#, c-format -msgid "While trying to resolve ref %s: " -msgstr "Saat mencoba menyelesaikan ref %s: " - -#: common/flatpak-dir.c:5105 -#, c-format -msgid "%s is not available" -msgstr "%s tak tersedia" - -#: common/flatpak-dir.c:5120 common/flatpak-dir.c:5458 -#: common/flatpak-dir.c:6226 common/flatpak-dir.c:6239 -#: common/flatpak-dir.c:6315 -#, c-format -msgid "%s branch %s already installed" -msgstr "%s cabang %s sudah terpasang" - -#: common/flatpak-dir.c:5139 -#, c-format -msgid "Failed to read commit %s: " -msgstr "Gagal membaca komit %s: " - -#: common/flatpak-dir.c:5159 -#, c-format -msgid "While trying to checkout %s into %s: " -msgstr "Saat mencoba melakukan checkout %s ke %s: " - -#: common/flatpak-dir.c:5184 common/flatpak-dir.c:5215 -msgid "While trying to checkout metadata subpath: " -msgstr "Saat mencoba melakukan checkout metadata subpath: " - -#: common/flatpak-dir.c:5225 -msgid "While trying to remove existing extra dir: " -msgstr "Saat mencoba menghapus direktori tambahan yang ada: " - -#: common/flatpak-dir.c:5236 -msgid "While trying to apply extra data: " -msgstr "Saat mencoba menerapkan data tambahan: " - -#: common/flatpak-dir.c:5263 -#, c-format -msgid "Invalid deployed ref %s: " -msgstr "Ref %s yang dideploy tidak valid: " - -#: common/flatpak-dir.c:5270 -#, c-format -msgid "Invalid commit ref %s: " -msgstr "Komit ref %s tidak valid: " - -#: common/flatpak-dir.c:5278 -#, c-format -msgid "Deployed ref %s kind does not match commit (%s)" -msgstr "Jenis ref %s yang dideploy tidak cocok dengan komit (%s)" - -#: common/flatpak-dir.c:5286 -#, c-format -msgid "Deployed ref %s name does not match commit (%s)" -msgstr "Nama ref %s yang dideploy tidak cocok dengan komit (%s)" - -#: common/flatpak-dir.c:5294 -#, c-format -msgid "Deployed ref %s arch does not match commit (%s)" -msgstr "Arsitektur ref %s yang dideploy tidak cocok dengan komit (%s)" - -#: common/flatpak-dir.c:5300 -#, c-format -msgid "Deployed ref %s branch does not match commit (%s)" -msgstr "Cabang ref %s yang dideploy tidak cocok dengan komit (%s)" - -#: common/flatpak-dir.c:5306 -#, c-format -msgid "Deployed ref %s does not match commit (%s)" -msgstr "Ref %s yang dideploy tidak cocok dengan komit (%s)" - -#: common/flatpak-dir.c:5325 -msgid "Deployed metadata does not match commit" -msgstr "Metadata yang dideploy tidak cocok dengan komit" - -#: common/flatpak-dir.c:6087 -#, c-format -msgid "This version of %s is already installed" -msgstr "Versi %s ini sudah terpasang" - -#: common/flatpak-dir.c:6094 -msgid "Can't change remote during bundle install" -msgstr "Tidak dapat mengubah remote saat memasang paket" - -#: common/flatpak-dir.c:6637 -#, c-format -msgid "%s branch %s is not installed" -msgstr "%s cabang %s tidak terpasang" - -#: common/flatpak-dir.c:6881 -#, c-format -msgid "%s branch %s not installed" -msgstr "%s cabang %s tidak terpasang" - -#: common/flatpak-dir.c:7840 -#, c-format -msgid "Nothing matches %s" -msgstr "Tidak ada yang cocok dengan %s" - -#: common/flatpak-dir.c:7922 -#, c-format -msgid "Can't find ref %s%s%s%s%s" -msgstr "Tidak dapat menemukan ref %s%s%s%s%s" - -#: common/flatpak-dir.c:7964 -#, c-format -msgid "Error searching remote %s: %s" -msgstr "Galat mencari remote %s: %s" - -#: common/flatpak-dir.c:8009 -#, c-format -msgid "Error searching local repository: %s" -msgstr "Galat mencari repositori lokal: %s" - -#: common/flatpak-dir.c:8135 -#, c-format -msgid "%s %s not installed" -msgstr "%s %s tidak terpasang" - -#: common/flatpak-dir.c:8302 -#, c-format -msgid "Could not find installation %s" -msgstr "Tidak dapat menemukan pemasangan %s" - -#: common/flatpak-dir.c:8832 -#, c-format -msgid "Runtime %s, branch %s is already installed" -msgstr "Runtime %s, cabang %s telah terpasang" - -#: common/flatpak-dir.c:8833 -#, c-format -msgid "App %s, branch %s is already installed" -msgstr "Aplikasi %s, cabang %s sudah terpasang" - -#: common/flatpak-dir.c:9292 -msgid "Remote title not set" -msgstr "Judul remote tidak diatur" - -#: common/flatpak-dir.c:9314 -msgid "Remote default-branch not set" -msgstr "Cabang bawaaan remote tidak diatur" - -#: common/flatpak-dir.c:9808 -msgid "No flatpak cache in remote summary" -msgstr "Tidak ada cache flatpak dalam ringkasan remote" - -#: common/flatpak-dir.c:9818 -#, c-format -msgid "No entry for %s in remote summary flatpak cache " -msgstr "Tidak ada entri untuk %s dalam ringkasan remote cache flatpak " - -#: common/flatpak-run.c:258 +#: common/flatpak-context.c:175 #, c-format msgid "Unknown share type %s, valid types are: %s" msgstr "Tipe berbagi %s tidak diketahui, tipe yang valid adalah: %s" -#: common/flatpak-run.c:293 +#: common/flatpak-context.c:210 #, c-format msgid "Unknown policy type %s, valid types are: %s" msgstr "Tipe kebijakan %s tidak diketahui, tipe yang valid adalah: %s" -#: common/flatpak-run.c:331 +#: common/flatpak-context.c:248 #, c-format msgid "Invalid dbus name %s\n" msgstr "Nama dbus %s tidak valid\n" -#: common/flatpak-run.c:344 +#: common/flatpak-context.c:261 #, c-format msgid "Unknown socket type %s, valid types are: %s" msgstr "Tipe soket %s tidak diketahui, tipe yang valid adalah: %s" -#: common/flatpak-run.c:373 +#: common/flatpak-context.c:290 #, c-format msgid "Unknown device type %s, valid types are: %s" msgstr "Tipe perangkat %s tidak diketahui, tipe yang valid adalah: %s" -#: common/flatpak-run.c:401 +#: common/flatpak-context.c:318 #, c-format msgid "Unknown feature type %s, valid types are: %s" msgstr "Tipe fitur %s tidak diketahui, tipe yang valid adalah: %s" -#: common/flatpak-run.c:774 +#: common/flatpak-context.c:691 #, c-format msgid "" "Unknown filesystem location %s, valid locations are: host, home, xdg-" @@ -2128,161 +2275,480 @@ msgstr "" "Lokasi sistem berkas %s tidak diketahui, lokasi yang valid adalah: host, " "home, xdg-*[/...], ~/dir, /dir" -#: common/flatpak-run.c:1040 +#: common/flatpak-context.c:963 #, c-format msgid "Invalid env format %s" msgstr "Format env tidak valid %s" -#: common/flatpak-run.c:1180 +#: common/flatpak-context.c:1103 msgid "Share with host" msgstr "Berbagi dengan host" -#: common/flatpak-run.c:1180 common/flatpak-run.c:1181 +#: common/flatpak-context.c:1103 common/flatpak-context.c:1104 msgid "SHARE" msgstr "BERBAGI" -#: common/flatpak-run.c:1181 +#: common/flatpak-context.c:1104 msgid "Unshare with host" msgstr "Tidak berbagi dengan host" -#: common/flatpak-run.c:1182 +#: common/flatpak-context.c:1105 msgid "Expose socket to app" msgstr "Ekspos soket ke aplikasi" -#: common/flatpak-run.c:1182 common/flatpak-run.c:1183 +#: common/flatpak-context.c:1105 common/flatpak-context.c:1106 msgid "SOCKET" msgstr "SOKET" -#: common/flatpak-run.c:1183 +#: common/flatpak-context.c:1106 msgid "Don't expose socket to app" msgstr "Jangan ekspos soket ke aplikasi" -#: common/flatpak-run.c:1184 +#: common/flatpak-context.c:1107 msgid "Expose device to app" msgstr "Ekspos perangkat ke aplikasi" -#: common/flatpak-run.c:1184 common/flatpak-run.c:1185 +#: common/flatpak-context.c:1107 common/flatpak-context.c:1108 msgid "DEVICE" msgstr "PERANGKAT" -#: common/flatpak-run.c:1185 +#: common/flatpak-context.c:1108 msgid "Don't expose device to app" msgstr "Jangan ekspos perangkat ke aplikasi" -#: common/flatpak-run.c:1186 +#: common/flatpak-context.c:1109 msgid "Allow feature" msgstr "Izinkan fitur" -#: common/flatpak-run.c:1186 common/flatpak-run.c:1187 +#: common/flatpak-context.c:1109 common/flatpak-context.c:1110 msgid "FEATURE" msgstr "FITUR" -#: common/flatpak-run.c:1187 +#: common/flatpak-context.c:1110 msgid "Don't allow feature" msgstr "Jangan izinkan fitur" -#: common/flatpak-run.c:1188 +#: common/flatpak-context.c:1111 msgid "Expose filesystem to app (:ro for read-only)" msgstr "Ekspos sistem berkas ke aplikasi (:ro untuk hanya baca)" -#: common/flatpak-run.c:1188 +#: common/flatpak-context.c:1111 msgid "FILESYSTEM[:ro]" msgstr "SISTEMBERKAS[:ro]" -#: common/flatpak-run.c:1189 +#: common/flatpak-context.c:1112 msgid "Don't expose filesystem to app" msgstr "Jangan ekspos sistem berkas ke aplikasi" -#: common/flatpak-run.c:1189 +#: common/flatpak-context.c:1112 msgid "FILESYSTEM" msgstr "SISTEMBERKAS" -#: common/flatpak-run.c:1190 +#: common/flatpak-context.c:1113 msgid "Set environment variable" msgstr "Atur variabel lingkungan" -#: common/flatpak-run.c:1190 +#: common/flatpak-context.c:1113 msgid "VAR=VALUE" msgstr "VAR=NILAI" -#: common/flatpak-run.c:1191 +#: common/flatpak-context.c:1114 msgid "Allow app to own name on the session bus" msgstr "Izinkan aplikasi memiliki nama di bus sesi" -#: common/flatpak-run.c:1191 common/flatpak-run.c:1192 -#: common/flatpak-run.c:1193 common/flatpak-run.c:1194 +#: common/flatpak-context.c:1114 common/flatpak-context.c:1115 +#: common/flatpak-context.c:1116 common/flatpak-context.c:1117 msgid "DBUS_NAME" msgstr "DBUS_NAME" -#: common/flatpak-run.c:1192 +#: common/flatpak-context.c:1115 msgid "Allow app to talk to name on the session bus" msgstr "Izinkan aplikasi berbicara dengan nama di bus sesi" -#: common/flatpak-run.c:1193 +#: common/flatpak-context.c:1116 msgid "Allow app to own name on the system bus" msgstr "Izinkan aplikasi memiliki nama di bus sistem" -#: common/flatpak-run.c:1194 +#: common/flatpak-context.c:1117 msgid "Allow app to talk to name on the system bus" msgstr "Izinkan aplikasi berbicara dengan nama di bus sistem" -#: common/flatpak-run.c:1195 +#: common/flatpak-context.c:1118 msgid "Add generic policy option" msgstr "Tambahkan opsi kebijakan umum" -#: common/flatpak-run.c:1195 common/flatpak-run.c:1196 +#: common/flatpak-context.c:1118 common/flatpak-context.c:1119 msgid "SUBSYSTEM.KEY=VALUE" msgstr "SUBSISTEM.KUNCI=NILAI" -#: common/flatpak-run.c:1196 +#: common/flatpak-context.c:1119 msgid "Remove generic policy option" msgstr "Hapus opsi kebijakan umum" -#: common/flatpak-run.c:1197 +#: common/flatpak-context.c:1120 msgid "Persist home directory" msgstr "Direktori home yang tetap" -#: common/flatpak-run.c:1197 +#: common/flatpak-context.c:1120 msgid "FILENAME" msgstr "NAMABERKAS" #. This is not needed/used anymore, so hidden, but we accept it for backwards compat -#: common/flatpak-run.c:1199 +#: common/flatpak-context.c:1122 msgid "Don't require a running session (no cgroups creation)" msgstr "Tidak memerlukan sesi berjalan (tidak ada pembuatan cgroups)" -#: common/flatpak-run.c:3830 +#: common/flatpak-dir.c:1044 +#, c-format +msgid "No overrides found for %s" +msgstr "Tidak ada penimpaan yang ditemukan untuk %s" + +#: common/flatpak-dir.c:1674 +#, c-format +msgid "While opening repository %s: " +msgstr "Saat membuka repositori %s: " + +#: common/flatpak-dir.c:1908 common/flatpak-dir.c:5461 +msgid "Can't create deploy directory" +msgstr "Tidak dapat membuat direktori deploy" + +#: common/flatpak-dir.c:2123 common/flatpak-dir.c:2126 +#, c-format +msgid "Failed to find latest revision for ref %s from remote %s: %s\n" +msgstr "Gagal menemukan revisi terbaru untuk %s dari %s: %s\n" + +#: common/flatpak-dir.c:2762 +#, c-format +msgid "Invalid sha256 for extra data uri %s" +msgstr "Sha256 tidak valid untuk data ekstra uri %s" + +#: common/flatpak-dir.c:2767 +#, c-format +msgid "Empty name for extra data uri %s" +msgstr "Nama kosong untuk data ekstra uri %s" + +#: common/flatpak-dir.c:2774 +#, c-format +msgid "Unsupported extra data uri %s" +msgstr "Data ekstra yang tidak didukung uri %s" + +#: common/flatpak-dir.c:2788 +#, c-format +msgid "Failed to load local extra-data %s: %s" +msgstr "Gagal memuat data-ekstra lokal %s: %s" + +#: common/flatpak-dir.c:2791 +#, c-format +msgid "Wrong size for extra-data %s" +msgstr "Ukuran yang salah untuk data-ekstra %s" + +#: common/flatpak-dir.c:2806 +#, c-format +msgid "While downloading %s: " +msgstr "Saat mengunduh %s: " + +#: common/flatpak-dir.c:2813 +#, c-format +msgid "Wrong size for extra data %s" +msgstr "Ukuran yang salah untuk data ekstra %s" + +#: common/flatpak-dir.c:2824 +#, c-format +msgid "Invalid checksum for extra data %s" +msgstr "Checksum tidak valid untuk data ekstra %s" + +#: common/flatpak-dir.c:2883 +msgid "Remote OCI index has no registry uri" +msgstr "Indeks remote OCI tidak memiliki registry uri" + +#: common/flatpak-dir.c:3101 +#, c-format +msgid "%s commit %s already installed" +msgstr "%s komit %s sudah terpasang" + +#: common/flatpak-dir.c:3443 common/flatpak-dir.c:3774 +#, c-format +msgid "While pulling %s from remote %s: " +msgstr "Saat menarik %s dari remote %s: " + +#: common/flatpak-dir.c:3659 +#, c-format +msgid "Can't find %s in remote %s" +msgstr "Tidak dapat menemukan %s di remote %s" + +#: common/flatpak-dir.c:4332 +msgid "Not enough memory" +msgstr "Memori tidak cukup" + +#: common/flatpak-dir.c:4351 +msgid "Failed to read from exported file" +msgstr "Gagal membaca dari berkas yang diekspor" + +#: common/flatpak-dir.c:4542 +msgid "Error reading mimetype xml file" +msgstr "Kesalahan saat membaca berkas xml mimetype" + +#: common/flatpak-dir.c:4547 +msgid "Invalid mimetype xml file" +msgstr "Berkas xml mimetype tidak valid" + +#: common/flatpak-dir.c:5090 +msgid "While getting detached metadata: " +msgstr "Saat mendapatkan metadata yang terpisah: " + +#: common/flatpak-dir.c:5108 +msgid "While creating extradir: " +msgstr "Saat membuat direktori ekstra: " + +#: common/flatpak-dir.c:5129 +msgid "Invalid sha256 for extra data" +msgstr "Sha256 tidak valid untuk data ekstra" + +#: common/flatpak-dir.c:5158 +msgid "Wrong size for extra data" +msgstr "Ukuran yang salah untuk data ekstra" + +#: common/flatpak-dir.c:5162 +msgid "Invalid checksum for extra data" +msgstr "Checksum tidak valid untuk data ekstra" + +#: common/flatpak-dir.c:5171 +#, c-format +msgid "While writing extra data file '%s': " +msgstr "Saat menulis berkas data ekstra '%s': " + +#: common/flatpak-dir.c:5341 +#, c-format +msgid "apply_extra script failed, exit status %d" +msgstr "Skrip apply_extra gagal, status keluar %d" + +#: common/flatpak-dir.c:5420 +#, c-format +msgid "While trying to resolve ref %s: " +msgstr "Saat mencoba menyelesaikan ref %s: " + +#: common/flatpak-dir.c:5435 +#, c-format +msgid "%s is not available" +msgstr "%s tak tersedia" + +#: common/flatpak-dir.c:5450 common/flatpak-dir.c:5882 +#: common/flatpak-dir.c:6672 common/flatpak-dir.c:6682 +#: common/flatpak-dir.c:6714 +#, c-format +msgid "%s branch %s already installed" +msgstr "%s cabang %s sudah terpasang" + +#: common/flatpak-dir.c:5469 +#, c-format +msgid "Failed to read commit %s: " +msgstr "Gagal membaca komit %s: " + +#: common/flatpak-dir.c:5489 +#, c-format +msgid "While trying to checkout %s into %s: " +msgstr "Saat mencoba melakukan checkout %s ke %s: " + +#: common/flatpak-dir.c:5514 common/flatpak-dir.c:5545 +msgid "While trying to checkout metadata subpath: " +msgstr "Saat mencoba melakukan checkout metadata subpath: " + +#: common/flatpak-dir.c:5555 +msgid "While trying to remove existing extra dir: " +msgstr "Saat mencoba menghapus direktori tambahan yang ada: " + +#: common/flatpak-dir.c:5566 +msgid "While trying to apply extra data: " +msgstr "Saat mencoba menerapkan data tambahan: " + +#: common/flatpak-dir.c:5593 +#, c-format +msgid "Invalid deployed ref %s: " +msgstr "Ref %s yang dideploy tidak valid: " + +#: common/flatpak-dir.c:5600 +#, c-format +msgid "Invalid commit ref %s: " +msgstr "Komit ref %s tidak valid: " + +#: common/flatpak-dir.c:5608 +#, c-format +msgid "Deployed ref %s kind does not match commit (%s)" +msgstr "Jenis ref %s yang dideploy tidak cocok dengan komit (%s)" + +#: common/flatpak-dir.c:5616 +#, c-format +msgid "Deployed ref %s name does not match commit (%s)" +msgstr "Nama ref %s yang dideploy tidak cocok dengan komit (%s)" + +#: common/flatpak-dir.c:5624 +#, c-format +msgid "Deployed ref %s arch does not match commit (%s)" +msgstr "Arsitektur ref %s yang dideploy tidak cocok dengan komit (%s)" + +#: common/flatpak-dir.c:5630 +#, c-format +msgid "Deployed ref %s branch does not match commit (%s)" +msgstr "Cabang ref %s yang dideploy tidak cocok dengan komit (%s)" + +#: common/flatpak-dir.c:5636 +#, c-format +msgid "Deployed ref %s does not match commit (%s)" +msgstr "Ref %s yang dideploy tidak cocok dengan komit (%s)" + +#: common/flatpak-dir.c:5655 +msgid "Deployed metadata does not match commit" +msgstr "Metadata yang dideploy tidak cocok dengan komit" + +#: common/flatpak-dir.c:6534 +#, c-format +msgid "This version of %s is already installed" +msgstr "Versi %s ini sudah terpasang" + +#: common/flatpak-dir.c:6541 +msgid "Can't change remote during bundle install" +msgstr "Tidak dapat mengubah remote saat memasang paket" + +#: common/flatpak-dir.c:7060 +#, c-format +msgid "%s branch %s is not installed" +msgstr "%s cabang %s tidak terpasang" + +#: common/flatpak-dir.c:7305 +#, c-format +msgid "%s branch %s not installed" +msgstr "%s cabang %s tidak terpasang" + +#: common/flatpak-dir.c:7629 +#, c-format +msgid "Pruning repo failed: %s" +msgstr "Repo pemangkasan gagal: %s" + +#: common/flatpak-dir.c:8156 +#, c-format +msgid "Multiple branches available for %s, you must specify one of: " +msgstr "" +"Beberapa cabang tersedia untuk %s, Anda harus menentukan salah satu dari: " + +#: common/flatpak-dir.c:8177 +#, c-format +msgid "Nothing matches %s" +msgstr "Tidak ada yang cocok dengan %s" + +#: common/flatpak-dir.c:8259 +#, c-format +msgid "Can't find ref %s%s%s%s%s" +msgstr "Tidak dapat menemukan ref %s%s%s%s%s" + +#: common/flatpak-dir.c:8301 +#, c-format +msgid "Error searching remote %s: %s" +msgstr "Galat mencari remote %s: %s" + +#: common/flatpak-dir.c:8346 +#, c-format +msgid "Error searching local repository: %s" +msgstr "Galat mencari repositori lokal: %s" + +#: common/flatpak-dir.c:8472 +#, c-format +msgid "%s %s not installed" +msgstr "%s %s tidak terpasang" + +#: common/flatpak-dir.c:8639 +#, c-format +msgid "Could not find installation %s" +msgstr "Tidak dapat menemukan pemasangan %s" + +#: common/flatpak-dir.c:9237 +#, c-format +msgid "Runtime %s, branch %s is already installed" +msgstr "Runtime %s, cabang %s telah terpasang" + +#: common/flatpak-dir.c:9238 +#, c-format +msgid "App %s, branch %s is already installed" +msgstr "Aplikasi %s, cabang %s sudah terpasang" + +#: common/flatpak-dir.c:9718 +msgid "Remote title not set" +msgstr "Judul remote tidak diatur" + +#: common/flatpak-dir.c:9740 +msgid "Remote default-branch not set" +msgstr "Cabang bawaaan remote tidak diatur" + +#: common/flatpak-dir.c:10333 +msgid "No flatpak cache in remote summary" +msgstr "Tidak ada cache flatpak dalam ringkasan remote" + +#: common/flatpak-dir.c:10343 +#, c-format +msgid "No entry for %s in remote summary flatpak cache " +msgstr "Tidak ada entri untuk %s dalam ringkasan remote cache flatpak " + +#: common/flatpak-run.c:1456 #, c-format msgid "Failed to open flatpak-info temp file: %s" msgstr "Gagal membuka berkas temporer flatpak-info: %s" -#: common/flatpak-run.c:3904 common/flatpak-run.c:3914 +#: common/flatpak-run.c:1530 common/flatpak-run.c:1540 #, c-format msgid "Failed to open temp file: %s" msgstr "Gagal membuka berkas temporer: %s" -#: common/flatpak-run.c:4253 +#: common/flatpak-run.c:1883 msgid "Unable to create sync pipe" msgstr "Tidak dapat membuat pipa sinkronisasi" -#: common/flatpak-run.c:4280 +#: common/flatpak-run.c:1910 #, c-format msgid "Failed to open app info file: %s" msgstr "Gagal membuka berkas info aplikasi: %s" -#: common/flatpak-run.c:4310 +#: common/flatpak-run.c:1940 msgid "Failed to sync with dbus proxy" msgstr "Gagal melakukan sinkronisasi dengan proksi dbus" -#: common/flatpak-run.c:5069 +#: common/flatpak-run.c:2700 #, c-format msgid "ldconfig failed, exit status %d" msgstr "ldconfig gagal, status keluar %d" -#: common/flatpak-utils.c:2900 +#: common/flatpak-utils.c:624 +#, c-format +msgid "Migrating %s to %s\n" +msgstr "Migrasi %s ke %s\n" + +#: common/flatpak-utils.c:630 +#, c-format +msgid "Error during migration: %s\n" +msgstr "Galat saat migrasi: %s\n" + +#: common/flatpak-utils.c:2988 msgid "No extra data sources" msgstr "Tidak ada sumber data tambahan" +#: common/flatpak-utils.c:6576 +#, c-format +msgid "Downloading metadata: %u/(estimating) %s" +msgstr "Mengunduh metadata: %u /(perkiraan) %s" + +#: common/flatpak-utils.c:6600 +#, c-format +msgid "Downloading: %s/%s" +msgstr "Mengunduh: %s/%s" + +#: common/flatpak-utils.c:6620 +#, c-format +msgid "Downloading extra data: %s/%s" +msgstr "Mengunduh data ekstra: %s/%s" + +#: common/flatpak-utils.c:6625 +#, c-format +msgid "Downloading files: %d/%d %s" +msgstr "Mengunduh berkas: %d/%d %s" + #. SECURITY: #. - Normal users do not need authentication to install signed applications #. from signed repositories, as this cannot exploit a system. @@ -2319,7 +2785,7 @@ msgstr "Perbarui aplikasi yang ditandatangani" #: system-helper/org.freedesktop.Flatpak.policy.in:59 #: system-helper/org.freedesktop.Flatpak.policy.in:77 -#: system-helper/org.freedesktop.Flatpak.policy.in:169 +#: system-helper/org.freedesktop.Flatpak.policy.in:180 msgid "Authentication is required to update software" msgstr "Otentikasi diperlukan untuk memperbarui perangkat lunak" @@ -2380,16 +2846,36 @@ msgstr "Mengkonfigurasi Remote" msgid "Authentication is required to configure software repositories" msgstr "Otentikasi diperlukan untuk mengkonfigurasi repositori perangkat lunak" +#: system-helper/org.freedesktop.Flatpak.policy.in:161 +msgid "Configure" +msgstr "Konfigurasi" + +#: system-helper/org.freedesktop.Flatpak.policy.in:162 +msgid "Authentication is required to configure software installation" +msgstr "Otentikasi diperlukan untuk mengkonfigurasi pemasangan perangkat lunak" + #. SECURITY: #. - Normal users do not require admin authentication to update #. appstream data as it will be signed, and the action is required #. to update the system when unattended. #. - Changing this to anything other than 'yes' will break unattended #. updates. -#: system-helper/org.freedesktop.Flatpak.policy.in:168 +#: system-helper/org.freedesktop.Flatpak.policy.in:179 msgid "Update appstream" msgstr "Perbarui appstream" +#~ msgid "No remote %s" +#~ msgstr "Tidak ada remote %s" + +#~ msgid "Search only user installations" +#~ msgstr "Cari hanya pemasangan pengguna" + +#~ msgid "Search only system-wide installations" +#~ msgstr "Cari hanya pemasangan di seluruh sistem" + +#~ msgid "Search specific system-wide installations" +#~ msgstr "Cari pemasangan tertentu di seluruh sistem" + #~ msgid "Failed to create temporary file" #~ msgstr "Gagal membuat berkas sementara" @@ -2399,15 +2885,9 @@ msgstr "Perbarui appstream" #~ msgid "Failed to write to temporary file" #~ msgstr "Gagal menulis ke berkas sementara" -#~ msgid "REMOTE must be specified" -#~ msgstr "REMOTE harus ditentukan" - #~ msgid "Could not parse URI “%s”" #~ msgstr "Tidak dapat mengurai URI \"%s\"" -#~ msgid "Downloading %s" -#~ msgstr "Mengunduh %s" - #~ msgid "Building %s" #~ msgstr "Membangun %s" @@ -2419,6 +2899,3 @@ msgstr "Perbarui appstream" #~ msgid "Cleanup %s" #~ msgstr "Bersihkan %s" - -#~ msgid "Updating %s" -#~ msgstr "Memperbarui %s" diff --git a/po/pl.po b/po/pl.po index 9485738b..7512ca4c 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: 2017-10-09 12:40+0200\n" -"PO-Revision-Date: 2017-10-09 16:40+0200\n" +"POT-Creation-Date: 2018-02-19 14:20+0100\n" +"PO-Revision-Date: 2017-12-21 19:22+0100\n" "Last-Translator: Piotr Drąg \n" "Language-Team: Polish \n" "Language: pl\n" @@ -43,10 +43,9 @@ msgstr "Oznacza repozytorium jako używane dla zależności" msgid "Set a new url" msgstr "Ustawia nowy adres URL" -#: app/flatpak-builtins-add-remote.c:66 app/flatpak-builtins-build-bundle.c:57 -#: app/flatpak-builtins-build-bundle.c:58 -#: app/flatpak-builtins-list-remotes.c:109 -#: app/flatpak-builtins-repo-update.c:52 +#: app/flatpak-builtins-add-remote.c:66 app/flatpak-builtins-build-bundle.c:58 +#: app/flatpak-builtins-build-bundle.c:59 +#: app/flatpak-builtins-list-remotes.c:70 app/flatpak-builtins-repo-update.c:52 msgid "URL" msgstr "URL" @@ -108,9 +107,9 @@ msgstr "IDENTYFIKATOR-KOLEKCJI" msgid "Import GPG key from FILE (- for stdin)" msgstr "Importuje klucz GPG z PLIKU (- dla standardowego wejścia)" -#: app/flatpak-builtins-add-remote.c:82 app/flatpak-builtins-build-bundle.c:59 -#: app/flatpak-builtins-build.c:50 app/flatpak-builtins-build-export.c:60 -#: app/flatpak-builtins-install.c:66 app/flatpak-builtins-repo-update.c:59 +#: app/flatpak-builtins-add-remote.c:82 app/flatpak-builtins-build-bundle.c:60 +#: app/flatpak-builtins-build.c:54 app/flatpak-builtins-build-export.c:60 +#: app/flatpak-builtins-install.c:67 app/flatpak-builtins-repo-update.c:59 msgid "FILE" msgstr "PLIK" @@ -122,131 +121,149 @@ msgstr "Wyłącza repozytorium" msgid "Add OCI registry" msgstr "Dodaje rejestr OCI" -#: app/flatpak-builtins-add-remote.c:312 +#: app/flatpak-builtins-add-remote.c:218 app/flatpak-builtins-add-remote.c:225 +#, c-format +msgid "Can't load uri %s: %s\n" +msgstr "Nie można wczytać adresu URI %s: %s\n" + +#: app/flatpak-builtins-add-remote.c:233 +#, c-format +msgid "Can't load file %s: %s\n" +msgstr "Nie można wczytać pliku %s: %s\n" + +#: app/flatpak-builtins-add-remote.c:241 +msgid "Invalid file format" +msgstr "Nieznany format pliku" + +#: app/flatpak-builtins-add-remote.c:249 +#, c-format +msgid "Invalid version %s, only 1 supported" +msgstr "Nieprawidłowa wersja %s, obsługiwana jest tylko wersja 1" + +#: app/flatpak-builtins-add-remote.c:293 +msgid "Invalid gpg key" +msgstr "Nieprawidłowy klucz GPG" + +#: app/flatpak-builtins-add-remote.c:320 msgid "NAME LOCATION - Add a remote repository" msgstr "NAZWA POŁOŻENIE — dodaje zdalne repozytorium" -#: app/flatpak-builtins-add-remote.c:321 -#: app/flatpak-builtins-delete-remote.c:58 app/flatpak-builtins-info.c:104 +#: app/flatpak-builtins-add-remote.c:333 +#: app/flatpak-builtins-delete-remote.c:61 app/flatpak-builtins-info.c:125 msgid "NAME must be specified" msgstr "Należy podać NAZWĘ" -#: app/flatpak-builtins-add-remote.c:324 app/flatpak-builtins-build-sign.c:71 -#: app/flatpak-builtins-repo.c:174 app/flatpak-builtins-repo-update.c:429 +#: app/flatpak-builtins-add-remote.c:336 app/flatpak-builtins-build-sign.c:71 +#: app/flatpak-builtins-repo.c:175 app/flatpak-builtins-repo-update.c:429 msgid "LOCATION must be specified" msgstr "Należy podać POŁOŻENIE" -#: app/flatpak-builtins-add-remote.c:327 -#: app/flatpak-builtins-build-bundle.c:479 +#: app/flatpak-builtins-add-remote.c:339 +#: app/flatpak-builtins-build-bundle.c:461 #: app/flatpak-builtins-build-export.c:676 #: app/flatpak-builtins-build-import-bundle.c:182 #: app/flatpak-builtins-build-init.c:181 app/flatpak-builtins-build-sign.c:74 -#: app/flatpak-builtins-delete-remote.c:63 +#: app/flatpak-builtins-delete-remote.c:66 #: app/flatpak-builtins-document-export.c:102 #: app/flatpak-builtins-document-info.c:75 #: app/flatpak-builtins-document-list.c:70 -#: app/flatpak-builtins-document-unexport.c:67 app/flatpak-builtins-info.c:111 -#: app/flatpak-builtins-install.c:265 app/flatpak-builtins-install.c:399 -#: app/flatpak-builtins-list.c:382 app/flatpak-builtins-list-remotes.c:66 -#: app/flatpak-builtins-ls-remote.c:84 app/flatpak-builtins-make-current.c:67 -#: app/flatpak-builtins-override.c:66 +#: app/flatpak-builtins-document-unexport.c:67 app/flatpak-builtins-info.c:132 +#: app/flatpak-builtins-install.c:267 app/flatpak-builtins-install.c:401 +#: app/flatpak-builtins-list.c:314 app/flatpak-builtins-list-remotes.c:61 +#: app/flatpak-builtins-ls-remote.c:107 app/flatpak-builtins-make-current.c:72 +#: app/flatpak-builtins-override.c:68 msgid "Too many arguments" msgstr "Za dużo parametrów" -#: app/flatpak-builtins-add-remote.c:332 +#: app/flatpak-builtins-add-remote.c:344 #: app/flatpak-builtins-build-export.c:692 #, c-format msgid "‘%s’ is not a valid collection ID: %s" msgstr "„%s” nie jest prawidłowym identyfikatorem kolekcji: %s" -#: app/flatpak-builtins-add-remote.c:336 +#: app/flatpak-builtins-add-remote.c:348 msgid "GPG verification is required if collections are enabled" msgstr "Sprawdzanie poprawności GPG jest wymagane, jeśli kolekcje są włączone" #. Do nothing -#: app/flatpak-builtins-add-remote.c:351 +#: app/flatpak-builtins-add-remote.c:363 #, c-format msgid "Remote %s already exists" msgstr "Repozytorium %s już istnieje" -#: app/flatpak-builtins-add-remote.c:359 +#: app/flatpak-builtins-add-remote.c:371 msgid "No url specified in flatpakrepo file" msgstr "Nie podano adresu URL w pliku repozytorium Flatpak" -#: app/flatpak-builtins-add-remote.c:403 +#: app/flatpak-builtins-add-remote.c:415 #, c-format msgid "Warning: Could not update extra metadata for '%s': %s\n" msgstr "" "Ostrzeżenie: nie można zaktualizować dodatkowych metadanych dla „%s”: %s\n" -#: app/flatpak-builtins-add-remote.c:451 +#: app/flatpak-builtins-add-remote.c:464 msgid "NAME - Modify a remote repository" msgstr "NAZWA — modyfikuje zdalne repozytorium" -#: app/flatpak-builtins-add-remote.c:460 +#: app/flatpak-builtins-add-remote.c:474 msgid "Remote NAME must be specified" msgstr "Należy podać NAZWĘ repozytorium" -#: app/flatpak-builtins-add-remote.c:465 -#, c-format -msgid "No remote %s" -msgstr "Brak repozytorium %s" - -#: app/flatpak-builtins-add-remote.c:471 +#: app/flatpak-builtins-add-remote.c:485 #, c-format msgid "Updating extra metadata from remote summary for %s\n" msgstr "" "Aktualizowanie dodatkowych metadanych z podsumowania repozytorium dla %s\n" -#: app/flatpak-builtins-add-remote.c:474 +#: app/flatpak-builtins-add-remote.c:488 #, c-format msgid "Error updating extra metadata for '%s': %s\n" msgstr "Błąd podczas aktualizowania dodatkowych metadanych dla „%s”: %s\n" -#: app/flatpak-builtins-add-remote.c:475 +#: app/flatpak-builtins-add-remote.c:489 #, c-format msgid "Could not update extra metadata for %s" msgstr "Nie można zaktualizować dodatkowych metadanych dla %s" -#: app/flatpak-builtins-build-bundle.c:55 +#: app/flatpak-builtins-build-bundle.c:56 msgid "Export runtime instead of app" msgstr "Eksportuje środowisko wykonawcze zamiast programu" -#: app/flatpak-builtins-build-bundle.c:56 +#: app/flatpak-builtins-build-bundle.c:57 msgid "Arch to bundle for" msgstr "Architektura pakietu" -#: app/flatpak-builtins-build-bundle.c:56 +#: app/flatpak-builtins-build-bundle.c:57 #: app/flatpak-builtins-build-export.c:55 app/flatpak-builtins-build-init.c:49 -#: app/flatpak-builtins-build-sign.c:41 app/flatpak-builtins-info.c:48 -#: app/flatpak-builtins-install.c:56 app/flatpak-builtins-list.c:52 -#: app/flatpak-builtins-ls-remote.c:48 app/flatpak-builtins-make-current.c:38 -#: app/flatpak-builtins-run.c:52 app/flatpak-builtins-uninstall.c:44 -#: app/flatpak-builtins-update.c:53 +#: app/flatpak-builtins-build-sign.c:41 app/flatpak-builtins-info.c:51 +#: app/flatpak-builtins-info-remote.c:48 app/flatpak-builtins-install.c:57 +#: app/flatpak-builtins-list.c:46 app/flatpak-builtins-ls-remote.c:49 +#: app/flatpak-builtins-make-current.c:38 app/flatpak-builtins-run.c:52 +#: app/flatpak-builtins-uninstall.c:44 app/flatpak-builtins-update.c:53 msgid "ARCH" msgstr "ARCHITEKTURA" -#: app/flatpak-builtins-build-bundle.c:57 +#: app/flatpak-builtins-build-bundle.c:58 msgid "Url for repo" msgstr "Adres URL do repozytorium" -#: app/flatpak-builtins-build-bundle.c:58 +#: app/flatpak-builtins-build-bundle.c:59 msgid "Url for runtime flatpakrepo file" msgstr "Adres URL do pliku repozytorium Flatpak środowiska wykonawczego" -#: app/flatpak-builtins-build-bundle.c:59 +#: app/flatpak-builtins-build-bundle.c:60 msgid "Add GPG key from FILE (- for stdin)" msgstr "Dodaje klucz GPG z PLIKU (- dla standardowego wejścia)" -#: app/flatpak-builtins-build-bundle.c:60 +#: app/flatpak-builtins-build-bundle.c:61 msgid "Export oci image instead of flatpak bundle" msgstr "Eksportuje obraz OCI zamiast pakietu Flatpak" -#: app/flatpak-builtins-build-bundle.c:61 +#: app/flatpak-builtins-build-bundle.c:62 msgid "GPG Key ID to sign the OCI image with" msgstr "Identyfikator klucza GPG do podpisania obrazu OCI" -#: app/flatpak-builtins-build-bundle.c:61 +#: app/flatpak-builtins-build-bundle.c:62 #: app/flatpak-builtins-build-commit-from.c:55 #: app/flatpak-builtins-build-export.c:61 #: app/flatpak-builtins-build-import-bundle.c:46 @@ -254,7 +271,7 @@ msgstr "Identyfikator klucza GPG do podpisania obrazu OCI" msgid "KEY-ID" msgstr "IDENTYFIKATOR-KLUCZA" -#: app/flatpak-builtins-build-bundle.c:62 +#: app/flatpak-builtins-build-bundle.c:63 #: app/flatpak-builtins-build-commit-from.c:56 #: app/flatpak-builtins-build-export.c:64 #: app/flatpak-builtins-build-import-bundle.c:47 @@ -262,7 +279,7 @@ msgstr "IDENTYFIKATOR-KLUCZA" msgid "GPG Homedir to use when looking for keyrings" msgstr "Katalog domowy GPG do wyszukiwania baz kluczy" -#: app/flatpak-builtins-build-bundle.c:62 +#: app/flatpak-builtins-build-bundle.c:63 #: app/flatpak-builtins-build-commit-from.c:56 #: app/flatpak-builtins-build-export.c:64 #: app/flatpak-builtins-build-import-bundle.c:47 @@ -270,7 +287,16 @@ msgstr "Katalog domowy GPG do wyszukiwania baz kluczy" msgid "HOMEDIR" msgstr "KATALOG-DOMOWY" -#: app/flatpak-builtins-build-bundle.c:469 +#: app/flatpak-builtins-build-bundle.c:64 +msgid "OSTree commit to create a delta bundle from" +msgstr "" + +#: app/flatpak-builtins-build-bundle.c:64 app/flatpak-builtins-info-remote.c:49 +#: app/flatpak-builtins-update.c:54 +msgid "COMMIT" +msgstr "ZATWIERDZENIE" + +#: app/flatpak-builtins-build-bundle.c:451 msgid "" "LOCATION FILENAME NAME [BRANCH] - Create a single file bundle from a local " "repository" @@ -278,100 +304,112 @@ msgstr "" "POŁOŻENIE NAZWA-PLIKU NAZWA [GAŁĄŹ] — tworzy pakiet w jednym pliku " "z lokalnego repozytorium" -#: app/flatpak-builtins-build-bundle.c:476 +#: app/flatpak-builtins-build-bundle.c:458 msgid "LOCATION, FILENAME and NAME must be specified" msgstr "Należy podać POŁOŻENIE, NAZWĘ-PLIKU i NAZWĘ" -#: app/flatpak-builtins-build-bundle.c:494 -#: app/flatpak-builtins-build-commit-from.c:103 -#: app/flatpak-builtins-build-commit-from.c:113 +#: app/flatpak-builtins-build-bundle.c:476 +#: app/flatpak-builtins-build-commit-from.c:253 +#: app/flatpak-builtins-build-commit-from.c:263 #: app/flatpak-builtins-build-import-bundle.c:191 #, c-format msgid "'%s' is not a valid repository" msgstr "„%s” nie jest prawidłowym repozytorium" -#: app/flatpak-builtins-build-bundle.c:506 app/flatpak-builtins-build-sign.c:86 +#: app/flatpak-builtins-build-bundle.c:488 app/flatpak-builtins-build-sign.c:86 #, c-format msgid "'%s' is not a valid name: %s" msgstr "„%s” nie jest prawidłową nazwą: %s" -#: app/flatpak-builtins-build-bundle.c:509 +#: app/flatpak-builtins-build-bundle.c:491 #: app/flatpak-builtins-build-export.c:699 app/flatpak-builtins-build-sign.c:89 #, 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.c:46 +#: app/flatpak-builtins-build.c:49 msgid "Use Platform runtime rather than Sdk" msgstr "" "Używa środowiska wykonawczego typu Platforma zamiast środowiska " "programistycznego" -#: app/flatpak-builtins-build.c:47 +#: app/flatpak-builtins-build.c:50 +msgid "Make destination readonly" +msgstr "Ustawia element docelowy jako tylko do odczytu" + +#: app/flatpak-builtins-build.c:51 msgid "Add bind mount" msgstr "Dodaje montowanie dowiązania" -#: app/flatpak-builtins-build.c:47 +#: app/flatpak-builtins-build.c:51 msgid "DEST=SRC" msgstr "CEL=ŹRÓDŁO" -#: app/flatpak-builtins-build.c:48 +#: app/flatpak-builtins-build.c:52 msgid "Start build in this directory" msgstr "Rozpoczyna budowanie w tym katalogu" -#: app/flatpak-builtins-build.c:48 app/flatpak-builtins-build.c:49 +#: app/flatpak-builtins-build.c:52 app/flatpak-builtins-build.c:53 #: app/flatpak-builtins-build-init.c:58 msgid "DIR" msgstr "KATALOG" -#: app/flatpak-builtins-build.c:49 +#: app/flatpak-builtins-build.c:53 msgid "Where to look for custom sdk dir (defaults to 'usr')" msgstr "" "Gdzie szukać niestandardowego katalogu środowiska programistycznego " "(domyślnie „usr”)" -#: app/flatpak-builtins-build.c:50 app/flatpak-builtins-build-export.c:60 +#: app/flatpak-builtins-build.c:54 app/flatpak-builtins-build-export.c:60 msgid "Use alternative file for the metadata" msgstr "Używa alternatywnego pliku dla metadanych" -#: app/flatpak-builtins-build.c:51 +#: app/flatpak-builtins-build.c:55 msgid "Kill processes when the parent process dies" msgstr "Usuwa procesy po usunięciu procesu nadrzędnego" -#: app/flatpak-builtins-build.c:52 +#: app/flatpak-builtins-build.c:56 msgid "Export application homedir directory to build" msgstr "Eksportuje katalog domowy programu do budowania" -#: app/flatpak-builtins-build.c:139 +#: app/flatpak-builtins-build.c:57 app/flatpak-builtins-run.c:58 +msgid "Log session bus calls" +msgstr "Zapisywanie wywołań magistrali sesji w dzienniku" + +#: app/flatpak-builtins-build.c:58 app/flatpak-builtins-run.c:59 +msgid "Log system bus calls" +msgstr "Zapisywanie wywołań magistrali systemu w dzienniku" + +#: app/flatpak-builtins-build.c:126 msgid "DIRECTORY [COMMAND [args...]] - Build in directory" msgstr "KATALOG [POLECENIE [parametry…]] — buduje w katalogu" -#: app/flatpak-builtins-build.c:162 app/flatpak-builtins-build-finish.c:533 +#: app/flatpak-builtins-build.c:149 app/flatpak-builtins-build-finish.c:533 msgid "DIRECTORY must be specified" msgstr "Należy podać KATALOG" -#: app/flatpak-builtins-build.c:173 app/flatpak-builtins-build-export.c:721 +#: app/flatpak-builtins-build.c:160 app/flatpak-builtins-build-export.c:721 #, 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:192 +#: app/flatpak-builtins-build.c:179 msgid "metadata invalid, not application or runtime" msgstr "" "nieprawidłowe metadane, nie jest programem lub środowiskiem wykonawczym" -#: app/flatpak-builtins-build.c:292 +#: app/flatpak-builtins-build.c:283 #, 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:432 +#: app/flatpak-builtins-build.c:433 #, c-format msgid "Missing '=' in bind mount option '%s'" msgstr "Brak „=” w opcji montowania dowiązania „%s”" -#: app/flatpak-builtins-build.c:460 common/flatpak-run.c:5406 +#: app/flatpak-builtins-build.c:462 common/flatpak-run.c:3038 msgid "Unable to start app" msgstr "Nie można uruchomić programu" @@ -430,37 +468,42 @@ msgstr "Bez aktualizowania podsumowania" msgid "GPG Key ID to sign the commit with" msgstr "Identyfikator klucza GPG do podpisania zatwierdzenia" -#: app/flatpak-builtins-build-commit-from.c:78 +#: app/flatpak-builtins-build-commit-from.c:228 msgid "DST-REPO [DST-REF]... - Make a new commit based on existing commit(s)" msgstr "" "REPOZYTORIUM-DOCELOWE [ODNIESIENIE-DOCELOWE]… — tworzy nowe zatwierdzenie na " "podstawie istniejących zatwierdzeń" -#: app/flatpak-builtins-build-commit-from.c:85 +#: app/flatpak-builtins-build-commit-from.c:235 msgid "DST-REPO must be specified" msgstr "Należy podać REPOZYTORIUM-DOCELOWE" -#: app/flatpak-builtins-build-commit-from.c:93 +#: app/flatpak-builtins-build-commit-from.c:243 msgid "" "If --src-repo is not specified, exactly one destination ref must be specified" msgstr "" "Jeśli nie podano --src-repo, to należy podać dokładnie jedno odniesienie " "docelowe" -#: app/flatpak-builtins-build-commit-from.c:96 +#: app/flatpak-builtins-build-commit-from.c:246 msgid "" "If --src-ref is specified, exactly one destination ref must be specified" msgstr "" "Jeśli podano --src-ref, to należy podać dokładnie jedno odniesienie docelowe" -#: app/flatpak-builtins-build-commit-from.c:99 +#: app/flatpak-builtins-build-commit-from.c:249 msgid "Either --src-repo or --src-ref must be specified." msgstr "Należy podać --src-repo lub --src-ref." -#: app/flatpak-builtins-build-commit-from.c:251 +#: app/flatpak-builtins-build-commit-from.c:402 msgid "Can't commit from partial source commit." msgstr "Nie można zatwierdzić z częściowego zatwierdzenia źródłowego." +#: app/flatpak-builtins-build-commit-from.c:407 +#, c-format +msgid "%s: no change\n" +msgstr "%s: brak zmian\n" + #: app/flatpak-builtins-build-export.c:55 msgid "Architecture to export for (must be host compatible)" msgstr "Architektura eksportu (musi być zgodna z komputerem)" @@ -498,6 +541,49 @@ msgstr "Zastępuje czas zatwierdzenia" msgid "ISO-8601-TIMESTAMP" msgstr "CZAS-ISO-8601" +#: app/flatpak-builtins-build-export.c:341 +#, c-format +msgid "WARNING: Error running desktop-file-validate: %s\n" +msgstr "" +"OSTRZEŻENIE: błąd podczas wykonywania polecenia desktop-file-validate: %s\n" + +#: app/flatpak-builtins-build-export.c:349 +#, c-format +msgid "WARNING: Error reading from desktop-file-validate: %s\n" +msgstr "" +"OSTRZEŻENIE: błąd podczas odczytywania z polecenia desktop-file-validate: " +"%s\n" + +#: app/flatpak-builtins-build-export.c:355 +#, c-format +msgid "WARNING: Failed to validate desktop file %s: %s\n" +msgstr "" +"OSTRZEŻENIE: sprawdzenie poprawności pliku desktop %s się nie powiodło: %s\n" + +#: app/flatpak-builtins-build-export.c:370 +#, c-format +msgid "WARNING: Can't find Exec key in %s: %s\n" +msgstr "OSTRZEŻENIE: nie można odnaleźć klucza Exec w %s: %s\n" + +#: app/flatpak-builtins-build-export.c:378 +#: app/flatpak-builtins-build-export.c:475 +#, c-format +msgid "WARNING: Binary not found for Exec line in %s: %s\n" +msgstr "" +"OSTRZEŻENIE: nie odnaleziono pliku binarnego dla wiersza Exec w %s: %s\n" + +#: app/flatpak-builtins-build-export.c:385 +#, c-format +msgid "WARNING: Icon not matching app id in %s: %s\n" +msgstr "OSTRZEŻENIE: ikona nie pasuje do identyfikatora programu w %s: %s\n" + +#: app/flatpak-builtins-build-export.c:413 +#, c-format +msgid "WARNING: Icon referenced in desktop file but not exported: %s\n" +msgstr "" +"OSTRZEŻENIE: ikona jest wymieniona w pliku desktop, ale nie jest " +"eksportowana: %s\n" + #: app/flatpak-builtins-build-export.c:551 #, c-format msgid "Invalid uri type %s, only http/https supported" @@ -536,12 +622,41 @@ msgstr "Należy podać POŁOŻENIE i KATALOG" msgid "No name specified in the metadata" msgstr "Nie podano nazwy w metadanych" +#: app/flatpak-builtins-build-export.c:976 +#, c-format +msgid "Commit: %s\n" +msgstr "Zatwierdzenie: %s\n" + +#: app/flatpak-builtins-build-export.c:977 +#, c-format +msgid "Metadata Total: %u\n" +msgstr "Razem metadanych: %u\n" + +#: app/flatpak-builtins-build-export.c:978 +#, c-format +msgid "Metadata Written: %u\n" +msgstr "Zapisane metadane: %u\n" + +#: app/flatpak-builtins-build-export.c:979 +#, c-format +msgid "Content Total: %u\n" +msgstr "Razem treść: %u\n" + +#: app/flatpak-builtins-build-export.c:980 +#, c-format +msgid "Content Written: %u\n" +msgstr "Zapisana treść: %u\n" + +#: app/flatpak-builtins-build-export.c:981 +msgid "Content Bytes Written:" +msgstr "Zapisane bajty treści:" + #: app/flatpak-builtins-build-finish.c:48 msgid "Command to set" msgstr "Ustawiane polecenie" #: app/flatpak-builtins-build-finish.c:48 app/flatpak-builtins-run.c:53 -#: app/flatpak-main.c:159 +#: app/flatpak-main.c:166 msgid "COMMAND" msgstr "POLECENIE" @@ -602,6 +717,29 @@ msgstr "Ustawia opcję ogólnych metadanych" msgid "GROUP=KEY[=VALUE]" msgstr "GRUPA=KLUCZ[=WARTOŚĆ]" +#: app/flatpak-builtins-build-finish.c:139 +#, c-format +msgid "Not exporting %s, wrong prefix\n" +msgstr "%s nie zostanie wyeksportowane, błędny przedrostek\n" + +#: app/flatpak-builtins-build-finish.c:143 +#, c-format +msgid "Exporting %s\n" +msgstr "Eksportowanie %s\n" + +#: app/flatpak-builtins-build-finish.c:384 +msgid "More than one executable found\n" +msgstr "Odnaleziono więcej niż jeden plik wykonywalny\n" + +#: app/flatpak-builtins-build-finish.c:395 +#, c-format +msgid "Using %s as command\n" +msgstr "Używanie %s jako polecenia\n" + +#: app/flatpak-builtins-build-finish.c:400 +msgid "No executable found\n" +msgstr "Nie odnaleziono żadnych plików wykonywalnych\n" + #: app/flatpak-builtins-build-finish.c:433 #, c-format msgid "Too few elements in --extra-data argument %s" @@ -665,6 +803,12 @@ 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:123 +#: app/flatpak-builtins-build-import-bundle.c:151 +#, c-format +msgid "Importing %s (%s)\n" +msgstr "Importowanie %s (%s)\n" + #: app/flatpak-builtins-build-import-bundle.c:172 msgid "LOCATION FILENAME - Import a file bundle into a local repository" msgstr "" @@ -674,7 +818,7 @@ msgstr "" msgid "LOCATION and FILENAME must be specified" msgstr "Należy podać POŁOŻENIE i NAZWĘ-PLIKU" -#: app/flatpak-builtins-build-init.c:49 app/flatpak-builtins-info.c:48 +#: app/flatpak-builtins-build-init.c:49 app/flatpak-builtins-info.c:51 #: app/flatpak-builtins-run.c:52 msgid "Arch to use" msgstr "Używana architektura" @@ -769,7 +913,7 @@ msgstr "" "„%s” nie jest prawidłową nazwą typu budowania, należy użyć „app” (program), " "„runtime” (środowisko wykonawcze) lub „extension” (rozszerzenie)" -#: app/flatpak-builtins-build-init.c:205 app/flatpak-builtins-override.c:71 +#: app/flatpak-builtins-build-init.c:205 app/flatpak-builtins-override.c:74 #, c-format msgid "'%s' is not a valid application name: %s" msgstr "„%s” nie jest prawidłową nazwą programu: %s" @@ -779,12 +923,14 @@ 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:41 app/flatpak-builtins-install.c:56 +#: app/flatpak-builtins-build-sign.c:41 app/flatpak-builtins-info-remote.c:48 +#: app/flatpak-builtins-install.c:57 msgid "Arch to install for" msgstr "Instalowana architektura" -#: app/flatpak-builtins-build-sign.c:42 app/flatpak-builtins-install.c:62 -#: app/flatpak-builtins-uninstall.c:48 app/flatpak-builtins-update.c:61 +#: app/flatpak-builtins-build-sign.c:42 app/flatpak-builtins-info-remote.c:50 +#: app/flatpak-builtins-install.c:63 app/flatpak-builtins-uninstall.c:48 +#: app/flatpak-builtins-update.c:61 msgid "Look for runtime with the specified name" msgstr "Wyszukuje środowisko wykonawcze o podanej nazwie" @@ -798,11 +944,48 @@ msgstr "" msgid "No gpg key ids specified" msgstr "Nie podano identyfikatorów kluczy GPG" -#: app/flatpak-builtins-delete-remote.c:37 +#: app/flatpak-builtins-config.c:41 +msgid "List configuration keys and values" +msgstr "Wyświetla listę kluczy i wartości konfiguracji" + +#: app/flatpak-builtins-config.c:42 +msgid "Get configuration for KEY" +msgstr "Pobiera konfigurację KLUCZA" + +#: app/flatpak-builtins-config.c:43 +msgid "Set configuration for KEY to VALUE" +msgstr "Ustawia konfigurację KLUCZA na WARTOŚĆ" + +#: app/flatpak-builtins-config.c:44 +msgid "Unset configuration for KEY" +msgstr "Usuwa ustawienie konfiguracji KLUCZA" + +#: app/flatpak-builtins-config.c:95 +#, c-format +msgid "Unknown configure key '%s'" +msgstr "Nieznany klucz konfiguracji „%s”" + +#: app/flatpak-builtins-config.c:144 app/flatpak-builtins-config.c:185 +msgid "You must specify key" +msgstr "Należy podać klucz" + +#: app/flatpak-builtins-config.c:166 +msgid "You must specify both key and value" +msgstr "Należy podać klucz i wartość" + +#: app/flatpak-builtins-config.c:204 +msgid "[KEY [VALUE]] - Manage configuration" +msgstr "[KLUCZ [WARTOŚĆ]] — zarządza konfiguracją" + +#: app/flatpak-builtins-config.c:223 +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-delete-remote.c:38 msgid "Remove remote even if in use" msgstr "Usuwa repozytorium nawet, jeśli jest używane" -#: app/flatpak-builtins-delete-remote.c:49 +#: app/flatpak-builtins-delete-remote.c:51 msgid "NAME - Delete a remote repository" msgstr "NAZWA — usuwa zdalne repozytorium" @@ -956,167 +1139,253 @@ msgstr "Nie można przełączyć GID" msgid "Can't switch uid" msgstr "Nie można przełączyć UID" -#: app/flatpak-builtins-info.c:49 app/flatpak-builtins-list.c:46 -#: app/flatpak-builtins-list-remotes.c:43 +#: app/flatpak-builtins-info.c:52 msgid "Show user installations" msgstr "Wyświetla instalacje użytkownika" -#: app/flatpak-builtins-info.c:50 app/flatpak-builtins-list.c:47 -#: app/flatpak-builtins-list-remotes.c:44 +#: app/flatpak-builtins-info.c:53 msgid "Show system-wide installations" msgstr "Wyświetla instalacje systemowe" -#: app/flatpak-builtins-info.c:51 app/flatpak-builtins-list.c:48 -#: app/flatpak-builtins-list-remotes.c:45 +#: app/flatpak-builtins-info.c:54 msgid "Show specific system-wide installations" msgstr "Wyświetla podane instalacje systemowe" -#: app/flatpak-builtins-info.c:52 +#: app/flatpak-builtins-info.c:55 app/flatpak-builtins-info-remote.c:53 msgid "Show ref" msgstr "Wyświetla odniesienie" -#: app/flatpak-builtins-info.c:53 +#: app/flatpak-builtins-info.c:56 app/flatpak-builtins-info-remote.c:54 msgid "Show commit" msgstr "Wyświetla zatwierdzenie" -#: app/flatpak-builtins-info.c:54 +#: app/flatpak-builtins-info.c:57 msgid "Show origin" msgstr "Wyświetla pochodzenie" -#: app/flatpak-builtins-info.c:55 +#: app/flatpak-builtins-info.c:58 msgid "Show size" msgstr "Wyświetla rozmiar" -#: app/flatpak-builtins-info.c:56 +#: app/flatpak-builtins-info.c:59 app/flatpak-builtins-info-remote.c:56 msgid "Show metadata" msgstr "Wyświetla metadane" -#: app/flatpak-builtins-info.c:57 +#: app/flatpak-builtins-info.c:60 +#, fuzzy +msgid "Show permissions" +msgstr "Wyświetla rozszerzenia" + +#: app/flatpak-builtins-info.c:61 +#, fuzzy +msgid "Query file access" +msgstr "" +"\n" +" Zarządza dostępem do plików" + +#: app/flatpak-builtins-info.c:61 app/flatpak-builtins-install.c:68 +#: app/flatpak-builtins-update.c:64 +msgid "PATH" +msgstr "ŚCIEŻKA" + +#: app/flatpak-builtins-info.c:62 msgid "Show extensions" msgstr "Wyświetla rozszerzenia" -#: app/flatpak-builtins-info.c:97 +#: app/flatpak-builtins-info.c:118 msgid "NAME [BRANCH] - Get info about installed app and/or runtime" msgstr "" "NAZWA [GAŁĄŹ] — pobiera informacje o zainstalowanym programie lub środowisku " "wykonawczym" -#: app/flatpak-builtins-info.c:157 +#: app/flatpak-builtins-info.c:189 msgid "ref not present in origin" msgstr "odniesienia nie ma w pochodzeniu" -#: app/flatpak-builtins-info.c:159 +#: app/flatpak-builtins-info.c:202 app/flatpak-builtins-info-remote.c:177 +msgid "Warning: Commit has no flatpak metadata\n" +msgstr "" + +#: app/flatpak-builtins-info.c:209 app/flatpak-builtins-info-remote.c:200 msgid "Ref:" msgstr "Odniesienie:" -#: app/flatpak-builtins-info.c:160 app/flatpak-builtins-info.c:270 +#: app/flatpak-builtins-info.c:210 app/flatpak-builtins-info.c:364 +#: app/flatpak-builtins-info-remote.c:201 msgid "ID:" msgstr "Identyfikator:" -#: app/flatpak-builtins-info.c:161 +#: app/flatpak-builtins-info.c:211 app/flatpak-builtins-info-remote.c:202 msgid "Arch:" msgstr "Architektura:" -#: app/flatpak-builtins-info.c:162 +#: app/flatpak-builtins-info.c:212 app/flatpak-builtins-info-remote.c:203 msgid "Branch:" msgstr "Gałąź:" -#: app/flatpak-builtins-info.c:163 app/flatpak-builtins-info.c:271 +#: app/flatpak-builtins-info.c:213 app/flatpak-builtins-info.c:365 msgid "Origin:" msgstr "Pochodzenie:" -#: app/flatpak-builtins-info.c:166 +#: app/flatpak-builtins-info.c:215 app/flatpak-builtins-info-remote.c:205 +#, fuzzy +msgid "Collection ID:" +msgstr "Identyfikator kolekcji" + +#: app/flatpak-builtins-info.c:217 app/flatpak-builtins-info-remote.c:206 +msgid "Date:" +msgstr "Data:" + +#: app/flatpak-builtins-info.c:219 app/flatpak-builtins-info-remote.c:207 +msgid "Subject:" +msgstr "Temat:" + +#: app/flatpak-builtins-info.c:223 msgid "Active commit:" msgstr "Aktywne zatwierdzenie:" -#: app/flatpak-builtins-info.c:167 +#: app/flatpak-builtins-info.c:224 msgid "Latest commit:" msgstr "Najnowsze zatwierdzenie:" -#: app/flatpak-builtins-info.c:170 app/flatpak-builtins-info.c:272 +#: app/flatpak-builtins-info.c:227 app/flatpak-builtins-info.c:366 +#: app/flatpak-builtins-info-remote.c:208 msgid "Commit:" msgstr "Zatwierdzenie:" -#: app/flatpak-builtins-info.c:172 +#: app/flatpak-builtins-info.c:229 msgid "alt-id:" msgstr "Alternatywny identyfikator:" -#: app/flatpak-builtins-info.c:173 +#: app/flatpak-builtins-info.c:230 app/flatpak-builtins-info-remote.c:209 +msgid "Parent:" +msgstr "Element nadrzędny:" + +#: app/flatpak-builtins-info.c:231 msgid "Location:" msgstr "Położenie:" -#: app/flatpak-builtins-info.c:174 app/flatpak-builtins-info.c:273 +#: app/flatpak-builtins-info.c:232 app/flatpak-builtins-info.c:367 +#: app/flatpak-builtins-info-remote.c:211 msgid "Installed size:" msgstr "Rozmiar po instalacji:" -#: app/flatpak-builtins-info.c:179 +#: app/flatpak-builtins-info.c:237 app/flatpak-builtins-info-remote.c:216 msgid "Runtime:" msgstr "Środowisko wykonawcze:" -#: app/flatpak-builtins-info.c:184 +#: app/flatpak-builtins-info.c:242 msgid "Installed subdirectories:" msgstr "Zainstalowane podkatalogi:" -#: app/flatpak-builtins-info.c:269 +#: app/flatpak-builtins-info.c:363 msgid "Extension:" msgstr "Rozszerzenie:" -#: app/flatpak-builtins-info.c:280 +#: app/flatpak-builtins-info.c:374 msgid "Subpaths:" msgstr "Podścieżki:" -#: app/flatpak-builtins-install.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-info-remote.c:49 +msgid "Commit to show info for" +msgstr "Zatwierdzenie, dla którego wyświetlić informacje" -#: app/flatpak-builtins-install.c:58 app/flatpak-builtins-update.c:57 -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:59 -msgid "Don't install related refs" -msgstr "Bez instalowania powiązanych odniesień" - -#: app/flatpak-builtins-install.c:60 app/flatpak-builtins-update.c:59 -msgid "Don't verify/install runtime dependencies" -msgstr "Bez sprawdzania poprawności/instalowania zależności wykonawczych" - -#: app/flatpak-builtins-install.c:61 app/flatpak-builtins-update.c:60 -msgid "Don't use static deltas" -msgstr "Bez używania statycznych delt" - -#: app/flatpak-builtins-install.c:63 app/flatpak-builtins-uninstall.c:49 -#: app/flatpak-builtins-update.c:62 +#: app/flatpak-builtins-info-remote.c:51 app/flatpak-builtins-install.c:64 +#: app/flatpak-builtins-uninstall.c:49 app/flatpak-builtins-update.c:62 msgid "Look for app with the specified name" msgstr "Wyszukuje program o podanej nazwie" -#: app/flatpak-builtins-install.c:64 +#: app/flatpak-builtins-info-remote.c:52 +msgid "Display log" +msgstr "Wyświetla dziennik" + +#: app/flatpak-builtins-info-remote.c:55 +msgid "Show parent" +msgstr "Wyświetla element nadrzędny" + +#: app/flatpak-builtins-info-remote.c:122 +msgid "" +" REMOTE REF - Show information about an application or runtime in a remote" +msgstr "" +" REPOZYTORIUM ODNIESIENIE — wyświetla informacje o programie lub środowisku " +"wykonawczym w repozytorium" + +#: app/flatpak-builtins-info-remote.c:133 app/flatpak-builtins-install.c:499 +msgid "REMOTE and REF must be specified" +msgstr "Należy podać REPOZYTORIUM i ODNIESIENIE" + +#: app/flatpak-builtins-info-remote.c:210 +msgid "Download size:" +msgstr "Rozmiar do pobrania:" + +#: app/flatpak-builtins-info-remote.c:223 +msgid "History:\n" +msgstr "Historia:\n" + +#: app/flatpak-builtins-info-remote.c:244 +msgid " Subject:" +msgstr " Temat:" + +#: app/flatpak-builtins-info-remote.c:245 +msgid " Date:" +msgstr " Data:" + +#: app/flatpak-builtins-info-remote.c:246 +msgid " Commit:" +msgstr " Zatwierdzenie:" + +#: app/flatpak-builtins-info-remote.c:292 +#, c-format +msgid "Warning: Commit %s has no flatpak metadata\n" +msgstr "" + +#: app/flatpak-builtins-install.c:58 +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:59 app/flatpak-builtins-update.c:57 +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:60 +msgid "Don't install related refs" +msgstr "Bez instalowania powiązanych odniesień" + +#: app/flatpak-builtins-install.c:61 app/flatpak-builtins-update.c:59 +msgid "Don't verify/install runtime dependencies" +msgstr "Bez sprawdzania poprawności/instalowania zależności wykonawczych" + +#: app/flatpak-builtins-install.c:62 app/flatpak-builtins-update.c:60 +msgid "Don't use static deltas" +msgstr "Bez używania statycznych delt" + +#: app/flatpak-builtins-install.c:65 msgid "Assume LOCATION is a .flatpak single-file bundle" msgstr "Przyjmuje, że POŁOŻENIE to jednoplikowy pakiet .flatpak" -#: app/flatpak-builtins-install.c:65 +#: app/flatpak-builtins-install.c:66 msgid "Assume LOCATION is a .flatpakref application description" msgstr "Przyjmuje, że POŁOŻENIE to opis programu .flatpakref" -#: app/flatpak-builtins-install.c:66 +#: app/flatpak-builtins-install.c:67 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:67 +#: app/flatpak-builtins-install.c:68 msgid "Only install this subpath" msgstr "Instaluje tylko tę podścieżkę" -#: app/flatpak-builtins-install.c:67 app/flatpak-builtins-update.c:64 -msgid "PATH" -msgstr "ŚCIEŻKA" - -#: app/flatpak-builtins-install.c:68 app/flatpak-builtins-update.c:65 +#: app/flatpak-builtins-install.c:69 app/flatpak-builtins-update.c:65 msgid "Automatically answer yes for all questions" msgstr "Automatycznie odpowiada tak na wszystkie pytania" -#: app/flatpak-builtins-install.c:210 +#: app/flatpak-builtins-install.c:70 +msgid "Uninstall first if already installed" +msgstr "Należy najpierw odinstalować, jeśli jest już zainstalowane" + +#: app/flatpak-builtins-install.c:212 #, c-format msgid "" "This application depends on runtimes from:\n" @@ -1127,155 +1396,152 @@ msgstr "" " %s\n" "Należy skonfigurować jako nowe repozytorium „%s”" -#: app/flatpak-builtins-install.c:214 app/flatpak-builtins-install.c:340 +#: app/flatpak-builtins-install.c:216 app/flatpak-builtins-install.c:342 #, c-format msgid "Configuring %s as new remote '%s'" msgstr "Konfigurowanie %s jako nowe repozytorium „%s”" -#: app/flatpak-builtins-install.c:262 +#: app/flatpak-builtins-install.c:264 msgid "Bundle filename must be specified" msgstr "Należy podać nazwę pliku pakietu" -#: app/flatpak-builtins-install.c:272 +#: app/flatpak-builtins-install.c:274 msgid "Remote bundles are not supported" msgstr "Zdalne pakiety nie są obsługiwane" -#: app/flatpak-builtins-install.c:336 +#: app/flatpak-builtins-install.c:338 #, c-format msgid "" "The remote '%s', at location %s contains additional applications.\n" -"Do you want to install other applications from here?" +"Should the remote be kept for future installations?" msgstr "" "Repozytorium „%s” w położeniu %s zawiera dodatkowe programy.\n" -"Zainstalować pozostałe programy z tego repozytorium?" +"Zachować repozytorium, aby móc instalować z niego w przyszłości?" -#: app/flatpak-builtins-install.c:396 +#: app/flatpak-builtins-install.c:398 msgid "Filename or uri must be specified" msgstr "Należy podać nazwę pliku lub adres URI" -#: app/flatpak-builtins-install.c:440 +#: app/flatpak-builtins-install.c:442 #, c-format msgid "Installing: %s\n" msgstr "Instalowanie: %s\n" -#: app/flatpak-builtins-install.c:470 +#: app/flatpak-builtins-install.c:474 msgid "LOCATION/REMOTE [REF...] - Install applications or runtimes" msgstr "" "POŁOŻENIE/REPOZYTORIUM [ODNIESIENIE…] — instaluje programy lub środowiska " "wykonawcze" -#: app/flatpak-builtins-install.c:491 -msgid "REMOTE and REF must be specified" -msgstr "Należy podać REPOZYTORIUM i ODNIESIENIE" - -#: app/flatpak-builtins-list.c:49 +#: app/flatpak-builtins-list.c:43 msgid "Show extra information" msgstr "Wyświetla dodatkowe informacje" -#: app/flatpak-builtins-list.c:50 +#: app/flatpak-builtins-list.c:44 msgid "List installed runtimes" msgstr "Wyświetla listę zainstalowanych środowisk wykonawczych" -#: app/flatpak-builtins-list.c:51 +#: app/flatpak-builtins-list.c:45 msgid "List installed applications" msgstr "Wyświetla listę zainstalowanych programów" -#: app/flatpak-builtins-list.c:52 +#: app/flatpak-builtins-list.c:46 msgid "Arch to show" msgstr "Wyświetlana architektura" -#: app/flatpak-builtins-list.c:53 app/flatpak-builtins-ls-remote.c:49 +#: app/flatpak-builtins-list.c:47 app/flatpak-builtins-ls-remote.c:50 msgid "List all refs (including locale/debug)" msgstr "Wyświetla listę wszystkich odniesień (także lokalizacji/debugowania)" -#: app/flatpak-builtins-list.c:131 app/flatpak-builtins-ls-remote.c:129 +#: app/flatpak-builtins-list.c:125 app/flatpak-builtins-ls-remote.c:174 #: app/flatpak-builtins-repo.c:98 msgid "Ref" msgstr "Odniesienie" -#: app/flatpak-builtins-list.c:134 app/flatpak-builtins-ls-remote.c:131 +#: app/flatpak-builtins-list.c:128 app/flatpak-builtins-ls-remote.c:176 msgid "Origin" msgstr "Pochodzenie" -#: app/flatpak-builtins-list.c:135 +#: app/flatpak-builtins-list.c:129 msgid "Active commit" msgstr "Aktywne zatwierdzenie" -#: app/flatpak-builtins-list.c:136 +#: app/flatpak-builtins-list.c:130 msgid "Latest commit" msgstr "Najnowsze zatwierdzenie" -#: app/flatpak-builtins-list.c:137 app/flatpak-builtins-ls-remote.c:133 +#: app/flatpak-builtins-list.c:131 app/flatpak-builtins-ls-remote.c:178 msgid "Installed size" msgstr "Rozmiar po instalacji" -#: app/flatpak-builtins-list.c:139 app/flatpak-builtins-list-remotes.c:112 +#: app/flatpak-builtins-list.c:133 app/flatpak-builtins-list-remotes.c:73 msgid "Options" msgstr "Opcje" -#: app/flatpak-builtins-list.c:375 +#: app/flatpak-builtins-list.c:305 msgid " - List installed apps and/or runtimes" msgstr "" " — wyświetla listę zainstalowanych programów lub środowisk wykonawczych" -#: app/flatpak-builtins-list-remotes.c:46 +#: app/flatpak-builtins-list-remotes.c:40 msgid "Show remote details" msgstr "Wyświetla informacje o repozytorium" -#: app/flatpak-builtins-list-remotes.c:47 +#: app/flatpak-builtins-list-remotes.c:41 msgid "Show disabled remotes" msgstr "Wyświetla wyłączone repozytoria" -#: app/flatpak-builtins-list-remotes.c:59 +#: app/flatpak-builtins-list-remotes.c:53 msgid " - List remote repositories" msgstr " — wyświetla listę zdalnych repozytoriów" -#: app/flatpak-builtins-list-remotes.c:105 +#: app/flatpak-builtins-list-remotes.c:66 msgid "Name" msgstr "Nazwa" -#: app/flatpak-builtins-list-remotes.c:108 +#: app/flatpak-builtins-list-remotes.c:69 msgid "Title" msgstr "Tytuł" -#: app/flatpak-builtins-list-remotes.c:110 +#: app/flatpak-builtins-list-remotes.c:71 msgid "Priority" msgstr "Priorytet" -#: app/flatpak-builtins-ls-remote.c:44 +#: app/flatpak-builtins-ls-remote.c:45 msgid "Show arches and branches" msgstr "Wyświetla architektury i gałęzie" -#: app/flatpak-builtins-ls-remote.c:45 +#: app/flatpak-builtins-ls-remote.c:46 msgid "Show only runtimes" msgstr "Wyświetla tylko środowiska wykonawcze" -#: app/flatpak-builtins-ls-remote.c:46 +#: app/flatpak-builtins-ls-remote.c:47 msgid "Show only apps" msgstr "Wyświetla tylko programy" -#: app/flatpak-builtins-ls-remote.c:47 +#: app/flatpak-builtins-ls-remote.c:48 msgid "Show only those where updates are available" msgstr "Wyświetla tylko z dostępnymi aktualizacjami" -#: app/flatpak-builtins-ls-remote.c:48 +#: app/flatpak-builtins-ls-remote.c:49 msgid "Limit to this arch (* for all)" msgstr "Ogranicza do tej architektury (* dla wszystkich)" -#: app/flatpak-builtins-ls-remote.c:74 -msgid " REMOTE - Show available runtimes and applications" +#: app/flatpak-builtins-ls-remote.c:96 +msgid " [REMOTE] - Show available runtimes and applications" msgstr "" -" REPOZYTORIUM — wyświetla listę dostępnych środowisk wykonawczych i programów" +" [REPOZYTORIUM] — wyświetla listę dostępnych środowisk wykonawczych " +"i programów" -#: app/flatpak-builtins-ls-remote.c:132 +#: app/flatpak-builtins-ls-remote.c:177 msgid "Commit" msgstr "Zatwierdzenie" -#: app/flatpak-builtins-ls-remote.c:134 +#: app/flatpak-builtins-ls-remote.c:179 msgid "Download size" msgstr "Rozmiar do pobrania" -#: app/flatpak-builtins-ls-remote.c:245 +#: app/flatpak-builtins-ls-remote.c:304 msgid "No ref information available in repository" msgstr "Brak dostępnych informacji o odniesieniu w repozytorium" @@ -1283,27 +1549,61 @@ msgstr "Brak dostępnych informacji o odniesieniu w repozytorium" msgid "Arch to make current for" msgstr "Architektura ustawiania na bieżącą" -#: app/flatpak-builtins-make-current.c:57 +#: app/flatpak-builtins-make-current.c:58 msgid "APP BRANCH - Make branch of application current" msgstr "PROGRAM GAŁĄŹ — ustawia gałąź programu jako bieżącą" -#: app/flatpak-builtins-make-current.c:64 app/flatpak-builtins-override.c:63 -#: app/flatpak-builtins-run.c:105 +#: app/flatpak-builtins-make-current.c:69 app/flatpak-builtins-run.c:105 msgid "APP must be specified" msgstr "Należy podać PROGRAM" -#: app/flatpak-builtins-make-current.c:79 +#: app/flatpak-builtins-make-current.c:84 msgid "BRANCH must be specified" msgstr "Należy podać GAŁĄŹ" -#: app/flatpak-builtins-make-current.c:92 +#: app/flatpak-builtins-make-current.c:97 #, c-format msgid "App %s branch %s is not installed" msgstr "Nie zainstalowano programu %s gałęzi %s" -#: app/flatpak-builtins-override.c:53 -msgid "APP - Override settings for application" -msgstr "PROGRAM — zastępuje ustawienia programu" +#: app/flatpak-builtins-override.c:54 +msgid "[APP] - Override settings [for application]" +msgstr "[PROGRAM] — zastępuje ustawienia [programu]" + +#: app/flatpak-builtins-repo.c:48 +#, c-format +msgid "Title: %s\n" +msgstr "Tytuł: %s\n" + +#: app/flatpak-builtins-repo.c:51 +#, c-format +msgid "Collection ID: %s\n" +msgstr "Identyfikator kolekcji: %s\n" + +#: app/flatpak-builtins-repo.c:54 +#, c-format +msgid "Default branch: %s\n" +msgstr "Domyślna gałąź: %s\n" + +#: app/flatpak-builtins-repo.c:57 +#, c-format +msgid "Redirect URL: %s\n" +msgstr "Adres URL przekierowania: %s\n" + +#: app/flatpak-builtins-repo.c:60 +#, c-format +msgid "Redirect collection ID: %s\n" +msgstr "Identyfikator przekierowania kolekcji: %s\n" + +#: app/flatpak-builtins-repo.c:68 +#, c-format +msgid "GPG key hash: %s\n" +msgstr "Suma klucza GPG: %s\n" + +#: app/flatpak-builtins-repo.c:77 +#, c-format +msgid "%zd branches\n" +msgstr "Gałęzie: %zd\n" #: app/flatpak-builtins-repo.c:99 msgid "Installed" @@ -1325,7 +1625,7 @@ msgstr "Wyświetla listę gałęzi w repozytorium" msgid "Print metadata for a branch" msgstr "Wyświetla metadane gałęzi" -#: app/flatpak-builtins-repo.c:167 +#: app/flatpak-builtins-repo.c:168 msgid "LOCATION - Repository maintenance" msgstr "POŁOŻENIE — zarządzanie repozytorium" @@ -1438,14 +1738,6 @@ msgstr "Używane środowisko wykonawcze" msgid "Runtime version to use" msgstr "Używana wersja środowiska wykonawczego" -#: app/flatpak-builtins-run.c:58 -msgid "Log session bus calls" -msgstr "Zapisywanie wywołań magistrali sesji w dzienniku" - -#: app/flatpak-builtins-run.c:59 -msgid "Log system bus calls" -msgstr "Zapisywanie wywołań magistrali systemu w dzienniku" - #: app/flatpak-builtins-run.c:60 msgid "Log accessibility bus calls" msgstr "Zapisywanie wywołań magistrali ułatwień dostępu w dzienniku" @@ -1458,6 +1750,39 @@ msgstr "Włącza przekazywanie plików" msgid "APP [args...] - Run an app" msgstr "PROGRAM [parametry…] — uruchamia program" +#: app/flatpak-builtins-search.c:239 +msgid "TEXT - Search remote apps/runtimes for text" +msgstr "" +"TEKST — wyszukuje programy/środowiska wykonawcze repozytorium według tekstu" + +#: app/flatpak-builtins-search.c:249 +msgid "TEXT must be specified" +msgstr "Należy podać TEKST" + +#: app/flatpak-builtins-search.c:305 +msgid "Application ID" +msgstr "Identyfikator programu" + +#: app/flatpak-builtins-search.c:306 +msgid "Version" +msgstr "Wersja" + +#: app/flatpak-builtins-search.c:308 +msgid "Branch" +msgstr "Gałąź" + +#: app/flatpak-builtins-search.c:310 +msgid "Remotes" +msgstr "Repozytoria" + +#: app/flatpak-builtins-search.c:311 +msgid "Description" +msgstr "Opis" + +#: app/flatpak-builtins-search.c:320 +msgid "No matches found" +msgstr "Brak wyników" + #: app/flatpak-builtins-uninstall.c:44 msgid "Arch to uninstall" msgstr "Odinstalowywana architektura" @@ -1474,19 +1799,24 @@ msgstr "Bez odinstalowywania powiązanych odniesień" msgid "Remove files even if running" msgstr "Usuwa nawet uruchomione pliki" -#: app/flatpak-builtins-uninstall.c:69 +#: app/flatpak-builtins-uninstall.c:70 msgid "REF... - Uninstall an application" msgstr "ODNIESIENIE… — odinstalowuje program" -#: app/flatpak-builtins-uninstall.c:76 +#: app/flatpak-builtins-uninstall.c:81 msgid "Must specify at least one REF" msgstr "Należy podać co najmniej jedno ODNIESIENIE" -#: app/flatpak-builtins-uninstall.c:129 app/flatpak-transaction.c:340 +#: app/flatpak-builtins-uninstall.c:134 app/flatpak-transaction.c:355 #, c-format msgid "Warning: Problem looking for related refs: %s\n" msgstr "Ostrzeżenie: problem podczas wyszukiwania powiązanych odniesień: %s\n" +#: app/flatpak-builtins-uninstall.c:164 +#, c-format +msgid "Uninstalling: %s\n" +msgstr "Odinstalowywanie: %s\n" + #: app/flatpak-builtins-update.c:53 msgid "Arch to update for" msgstr "Aktualizowana architektura" @@ -1495,10 +1825,6 @@ msgstr "Aktualizowana architektura" msgid "Commit to deploy" msgstr "Wdrażane zatwierdzenie" -#: app/flatpak-builtins-update.c:54 -msgid "COMMIT" -msgstr "ZATWIERDZENIE" - #: app/flatpak-builtins-update.c:55 msgid "Remove old files even if running" msgstr "Usuwa stare pliki nawet, jeśli są uruchomione" @@ -1519,43 +1845,95 @@ msgstr "Aktualizuje AppStream dla repozytorium" msgid "Only update this subpath" msgstr "Aktualizuje tylko tę podścieżkę" -#: app/flatpak-builtins-update.c:95 -#, c-format -msgid "Updating appstream for remote %s\n" -msgstr "Aktualizuje AppStream dla repozytorium %s\n" - -#: app/flatpak-builtins-update.c:133 +#: app/flatpak-builtins-update.c:83 msgid "[REF...] - Update applications or runtimes" msgstr "[ODNIESIENIE…] — aktualizuje programy lub środowiska wykonawcze" +#: app/flatpak-builtins-update.c:119 +msgid "Looking for updates...\n" +msgstr "Wyszukiwanie aktualizacji…\n" + +#: app/flatpak-builtins-utils.c:365 +#, c-format +msgid "Remote ‘%s’ found in multiple installations:\n" +msgstr "Odnaleziono repozytorium „%s” w wielu instalacjach:\n" + +#: app/flatpak-builtins-utils.c:372 +msgid "Which do you want to use (0 to abort)?" +msgstr "Którego użyć (0 przerwie)?" + +#: app/flatpak-builtins-utils.c:374 +#, c-format +msgid "No remote chosen to resolve ‘%s’ which exists in multiple installations" +msgstr "" +"Nie wybrano repozytorium do rozwiązania „%s”, które istnieje w wielu " +"instalacjach" + +#: app/flatpak-builtins-utils.c:479 app/flatpak-builtins-utils.c:481 +#, c-format +msgid "Updating appstream data for user remote %s\n" +msgstr "Aktualizowanie danych AppStream dla repozytorium użytkownika %s\n" + +#: app/flatpak-builtins-utils.c:486 app/flatpak-builtins-utils.c:488 +#, c-format +msgid "Updating appstream data for remote %s\n" +msgstr "Aktualizowanie danych AppStream dla repozytorium %s\n" + +#: app/flatpak-builtins-utils.c:493 +#, c-format +msgid "Error updating: %s\n" +msgstr "Błąd podczas aktualizowania: %s\n" + +#: app/flatpak-builtins-utils.c:526 +#, c-format +msgid "Remote \"%s\" not found" +msgstr "Nie odnaleziono repozytorium „%s”" + #. translators: please keep the leading space -#: app/flatpak-main.c:61 +#: app/flatpak-main.c:62 msgid " Manage installed apps and runtimes" msgstr " Zarządza zainstalowanymi programami i środowiskami wykonawczymi" -#: app/flatpak-main.c:62 +#: app/flatpak-main.c:63 msgid "Install an application or runtime" msgstr "Instaluje program lub środowisko wykonawcze" -#: app/flatpak-main.c:63 +#: app/flatpak-main.c:64 msgid "Update an installed application or runtime" msgstr "Aktualizuje zainstalowany program lub środowisko wykonawcze" -#: app/flatpak-main.c:64 +#: app/flatpak-main.c:65 msgid "Uninstall an installed application or runtime" msgstr "Odinstalowuje zainstalowany program lub środowisko wykonawcze" -#: app/flatpak-main.c:65 +#: app/flatpak-main.c:66 msgid "List installed apps and/or runtimes" msgstr "Wyświetla listę zainstalowanych programów lub środowisk wykonawczych" -#: app/flatpak-main.c:66 +#: app/flatpak-main.c:67 msgid "Show info for installed app or runtime" msgstr "" "Wyświetla informacje o zainstalowanym programie lub środowisku wykonawczym" +#: app/flatpak-main.c:68 +msgid "Configure flatpak" +msgstr "Konfiguruje Flatpak" + #. translators: please keep the leading newline and space -#: app/flatpak-main.c:69 +#: app/flatpak-main.c:71 +msgid "" +"\n" +" Finding applications and runtimes" +msgstr "" +"\n" +" Wyszukiwanie programów i środowisk wykonawczych" + +#: app/flatpak-main.c:72 +msgid "Search for remote apps/runtimes" +msgstr "Wyszukuje programy/środowiska wykonawcze repozytorium" + +#. translators: please keep the leading newline and space +#: app/flatpak-main.c:75 msgid "" "\n" " Running applications" @@ -1563,24 +1941,24 @@ msgstr "" "\n" " Uruchamianie programów" -#: app/flatpak-main.c:70 +#: app/flatpak-main.c:76 msgid "Run an application" msgstr "Uruchamia program" -#: app/flatpak-main.c:71 +#: app/flatpak-main.c:77 msgid "Override permissions for an application" msgstr "Zastępuje uprawnienia programu" -#: app/flatpak-main.c:72 +#: app/flatpak-main.c:78 msgid "Specify default version to run" msgstr "Podaje domyślnie uruchamianą wersję" -#: app/flatpak-main.c:73 +#: app/flatpak-main.c:79 msgid "Enter the namespace of a running application" msgstr "Przestrzeń nazw działającego programu" #. translators: please keep the leading newline and space -#: app/flatpak-main.c:76 +#: app/flatpak-main.c:82 msgid "" "\n" " Manage file access" @@ -1588,24 +1966,24 @@ msgstr "" "\n" " Zarządza dostępem do plików" -#: app/flatpak-main.c:77 +#: app/flatpak-main.c:83 msgid "Grant an application access to a specific file" msgstr "Nadaje programowi dostęp do podanego pliku" -#: app/flatpak-main.c:78 +#: app/flatpak-main.c:84 msgid "Revoke access to a specific file" msgstr "Odbiera dostęp do podanego pliku" -#: app/flatpak-main.c:79 +#: app/flatpak-main.c:85 msgid "Show information about a specific file" msgstr "Wyświetla informacje o podanym pliku" -#: app/flatpak-main.c:80 +#: app/flatpak-main.c:86 msgid "List exported files" msgstr "Wyświetla listę wyeksportowanych plików" #. translators: please keep the leading newline and space -#: app/flatpak-main.c:83 +#: app/flatpak-main.c:89 msgid "" "\n" " Manage remote repositories" @@ -1613,28 +1991,33 @@ msgstr "" "\n" " Zarządza zdalnymi repozytoriami" -#: app/flatpak-main.c:84 +#: app/flatpak-main.c:90 msgid "List all configured remotes" msgstr "Wyświetla listę wszystkich skonfigurowanych repozytoriów" -#: app/flatpak-main.c:85 +#: app/flatpak-main.c:91 msgid "Add a new remote repository (by URL)" msgstr "Dodaje nowe zdalne repozytorium (według adresu URL)" -#: app/flatpak-main.c:86 +#: app/flatpak-main.c:92 msgid "Modify properties of a configured remote" msgstr "Modyfikuje właściwości skonfigurowanego repozytorium" -#: app/flatpak-main.c:87 +#: app/flatpak-main.c:93 msgid "Delete a configured remote" msgstr "Usuwa skonfigurowane repozytorium" -#: app/flatpak-main.c:89 +#: app/flatpak-main.c:95 msgid "List contents of a configured remote" msgstr "Wyświetla listę zawartości skonfigurowanego repozytorium" +#: app/flatpak-main.c:96 +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:92 +#: app/flatpak-main.c:99 msgid "" "\n" " Build applications" @@ -1642,511 +2025,289 @@ msgstr "" "\n" " Buduje programy" -#: app/flatpak-main.c:93 +#: app/flatpak-main.c:100 msgid "Initialize a directory for building" msgstr "Inicjuje katalog do budowania" -#: app/flatpak-main.c:94 +#: app/flatpak-main.c:101 msgid "Run a build command inside the build dir" msgstr "Wykonuje polecenie budowania w katalogu budowania" -#: app/flatpak-main.c:95 +#: app/flatpak-main.c:102 msgid "Finish a build dir for export" msgstr "Kończy katalog budowania do eksportu" -#: app/flatpak-main.c:96 +#: app/flatpak-main.c:103 msgid "Export a build dir to a repository" msgstr "Eksportuje katalog budowania do repozytorium" -#: app/flatpak-main.c:97 -msgid "Create a bundle file from a build directory" +#: app/flatpak-main.c:104 +#, fuzzy +msgid "Create a bundle file from a ref in a local repository" msgstr "Tworzy pakiet z katalogu budowania" -#: app/flatpak-main.c:98 +#: app/flatpak-main.c:105 msgid "Import a bundle file" msgstr "Importuje pakiet" -#: app/flatpak-main.c:99 +#: app/flatpak-main.c:106 msgid "Sign an application or runtime" msgstr "Podpisuje program lub środowisko wykonawcze" -#: app/flatpak-main.c:100 +#: app/flatpak-main.c:107 msgid "Update the summary file in a repository" msgstr "Aktualizuje plik podsumowania w repozytorium" -#: app/flatpak-main.c:101 +#: app/flatpak-main.c:108 msgid "Create new commit based on existing ref" msgstr "Tworzy nowe zatwierdzenie na podstawie istniejącego odniesienia" -#: app/flatpak-main.c:102 +#: app/flatpak-main.c:109 msgid "Print information about a repo" msgstr "Wyświetla informacje o repozytorium" -#: app/flatpak-main.c:119 +#: app/flatpak-main.c:126 msgid "Print debug information during command processing, -vv for more detail" msgstr "" "Wyświetla informacje debugowania podczas przetwarzania poleceń, -vv " "wyświetla więcej" -#: app/flatpak-main.c:120 +#: app/flatpak-main.c:127 msgid "Print OSTree debug information during command processing" msgstr "Wyświetla informacje debugowania OSTree podczas przetwarzania poleceń" -#: app/flatpak-main.c:121 +#: app/flatpak-main.c:128 msgid "Show help options" msgstr "Wyświetla opcje pomocy" -#: app/flatpak-main.c:126 +#: app/flatpak-main.c:133 msgid "Print version information and exit" msgstr "Wyświetla informacje o wersji i kończy działanie" -#: app/flatpak-main.c:127 +#: app/flatpak-main.c:134 msgid "Print default arch and exit" msgstr "Wyświetla domyślną architekturę i kończy działanie" -#: app/flatpak-main.c:128 +#: app/flatpak-main.c:135 msgid "Print supported arches and exit" msgstr "Wyświetla obsługiwane architektury i kończy działanie" -#: app/flatpak-main.c:129 +#: app/flatpak-main.c:136 msgid "Print active gl drivers and exit" msgstr "Wyświetla aktywne sterowniki GL i kończy działanie" -#: app/flatpak-main.c:134 +#: app/flatpak-main.c:141 msgid "Work on user installations" msgstr "Działa na instalacjach użytkownika" -#: app/flatpak-main.c:135 +#: app/flatpak-main.c:142 msgid "Work on system-wide installations (default)" msgstr "Działa na instalacjach systemowych (domyślnie)" -#: app/flatpak-main.c:136 -msgid "Work on a specific system-wide installation" -msgstr "Działa na podanej instalacji systemowej" +#: app/flatpak-main.c:143 +msgid "Work on specific system-wide installation(s)" +msgstr "Działa na podanych instalacjach systemowych" -#: app/flatpak-main.c:136 +#: app/flatpak-main.c:143 msgid "NAME" msgstr "NAZWA" -#: app/flatpak-main.c:162 +#: app/flatpak-main.c:169 msgid "Builtin Commands:" msgstr "Wbudowane polecenia:" -#: app/flatpak-main.c:388 +#: app/flatpak-main.c:370 +msgid "" +"The --installation option was used multiple times for a command that works " +"on one installation" +msgstr "" +"Opcja --installation została użyta wiele razy dla polecenia, które działa na " +"jednej instalacji" + +#: app/flatpak-main.c:489 #, c-format msgid "Unknown command '%s'" msgstr "Nieznane polecenie „%s”" -#: app/flatpak-main.c:396 +#: app/flatpak-main.c:497 msgid "No command specified" msgstr "Nie podano polecenia" -#: app/flatpak-main.c:514 +#: app/flatpak-main.c:615 msgid "error:" msgstr "błąd:" -#: app/flatpak-transaction.c:302 +#: app/flatpak-transaction.c:313 +#, c-format +msgid "Found in remote %s\n" +msgstr "Odnaleziono w repozytorium %s\n" + +#: app/flatpak-transaction.c:317 #, c-format msgid "Found in remote %s, do you want to install it?" msgstr "Odnaleziono w repozytorium %s, zainstalować?" -#: app/flatpak-transaction.c:307 +#: app/flatpak-transaction.c:322 msgid "Found in several remotes:\n" msgstr "Odnaleziono w kilku repozytoriach:\n" -#: app/flatpak-transaction.c:312 +#: app/flatpak-transaction.c:327 msgid "Which do you want to install (0 to abort)?" msgstr "Które zainstalować (0 przerwie)?" -#: app/flatpak-transaction.c:402 +#: app/flatpak-transaction.c:417 #, c-format msgid "Required runtime for %s (%s) is not installed, searching...\n" msgstr "" "Wymagane środowisko wykonawcze dla %s (%s) nie jest zainstalowane, " "wyszukiwanie…\n" -#: app/flatpak-transaction.c:408 +#: app/flatpak-transaction.c:423 #, c-format msgid "The required runtime %s was not found in a configured remote.\n" msgstr "" "Nie odnaleziono wymaganego środowiska wykonawczego %s w skonfigurowanym " "repozytorium.\n" -#: app/flatpak-transaction.c:469 common/flatpak-dir.c:1127 -#: common/flatpak-dir.c:1433 common/flatpak-dir.c:1456 -#: common/flatpak-dir.c:1478 common/flatpak-dir.c:10136 -#: common/flatpak-utils.c:1272 common/flatpak-utils.c:1366 +#: app/flatpak-transaction.c:506 common/flatpak-dir.c:1160 +#: common/flatpak-dir.c:1479 common/flatpak-dir.c:1502 +#: common/flatpak-dir.c:1524 common/flatpak-dir.c:10655 +#: common/flatpak-utils.c:1312 common/flatpak-utils.c:1406 #, c-format msgid "%s not installed" msgstr "Nie zainstalowano %s" -#: app/flatpak-transaction.c:475 +#: app/flatpak-transaction.c:512 #, c-format msgid "Remote %s disabled, ignoring %s update" msgstr "Repozytorium %s jest wyłączone, ignorowanie aktualizacji %s" -#: app/flatpak-transaction.c:485 +#: app/flatpak-transaction.c:525 #, c-format msgid "%s already installed, skipping\n" msgstr "Już zainstalowano %s, pomijanie\n" -#: app/flatpak-transaction.c:529 +#: app/flatpak-transaction.c:531 +#, c-format +msgid "%s is already installed from other remote (%s)" +msgstr "%s jest już zainstalowane z innego repozytorium (%s)" + +#: app/flatpak-transaction.c:543 +#, c-format +msgid "Warning: Can't find dependencies: %s\n" +msgstr "Ostrzeżenie: nie można odnaleźć zależności: %s\n" + +#: app/flatpak-transaction.c:570 +#, c-format +msgid "Invalid require-flatpak argument %s\n" +msgstr "Nieprawidłowy parametr „require-flatpak” %s\n" + +#: app/flatpak-transaction.c:576 #, c-format msgid "%s needs a later flatpak version (%s)" msgstr "%s wymaga późniejszej wersji Flatpak (%s)" -#: app/flatpak-transaction.c:704 +#: app/flatpak-transaction.c:688 +#, c-format +msgid "Error updating remote metadata for '%s': %s\n" +msgstr "Błąd podczas aktualizowania metadanych repozytorium dla „%s”: %s\n" + +#: app/flatpak-transaction.c:744 msgid "install" msgstr "instalacja" -#: app/flatpak-transaction.c:705 +#: app/flatpak-transaction.c:746 +#, c-format +msgid "Installing for user: %s from %s\n" +msgstr "Instalowanie dla użytkownika: %s z %s\n" + +#: app/flatpak-transaction.c:748 #, c-format msgid "Installing: %s from %s\n" msgstr "Instalowanie: %s z %s\n" -#: app/flatpak-transaction.c:721 +#: app/flatpak-transaction.c:765 msgid "update" msgstr "aktualizacja" -#: app/flatpak-transaction.c:729 +#: app/flatpak-transaction.c:774 +#, c-format +msgid "Updating for user: %s from %s\n" +msgstr "Aktualizowanie dla użytkownika: %s z %s\n" + +#: app/flatpak-transaction.c:776 #, c-format msgid "Updating: %s from %s\n" msgstr "Aktualizowanie: %s z %s\n" -#: app/flatpak-transaction.c:749 +#: app/flatpak-transaction.c:796 #, c-format msgid "Now at %s.\n" msgstr "Teraz: %s.\n" -#: app/flatpak-transaction.c:755 +#: app/flatpak-transaction.c:802 msgid "No updates.\n" msgstr "Brak aktualizacji.\n" -#: app/flatpak-transaction.c:773 +#: app/flatpak-transaction.c:820 msgid "install bundle" msgstr "instalacja pakietu" -#: app/flatpak-transaction.c:774 +#: app/flatpak-transaction.c:822 +#, c-format +msgid "Installing for user: %s from bundle %s\n" +msgstr "Instalowanie dla użytkownika: %s z pakietu %s\n" + +#: app/flatpak-transaction.c:824 #, c-format msgid "Installing: %s from bundle %s\n" msgstr "Instalowanie: %s z pakietu %s\n" -#: app/flatpak-transaction.c:786 +#: app/flatpak-transaction.c:836 #, c-format msgid "Warning: Failed to %s %s: %s\n" msgstr "Ostrzeżenie: %s %s się nie powiodła: %s\n" -#: app/flatpak-transaction.c:791 +#: app/flatpak-transaction.c:841 #, c-format msgid "Error: Failed to %s %s: %s\n" msgstr "Błąd: %s %s się nie powiodła: %s\n" -#: app/flatpak-transaction.c:796 +#: app/flatpak-transaction.c:846 msgid "One or more operations failed" msgstr "Jedno lub więcej działań się nie powiodło" -#: common/flatpak-dir.c:1015 -#, c-format -msgid "No overrides found for %s" -msgstr "Nie odnaleziono zastępników dla %s" - -#: common/flatpak-dir.c:1611 -#, c-format -msgid "While opening repository %s: " -msgstr "Podczas otwierania repozytorium %s: " - -#: common/flatpak-dir.c:1770 common/flatpak-dir.c:5109 -msgid "Can't create deploy directory" -msgstr "Nie można utworzyć katalogu wdrażania" - -#: common/flatpak-dir.c:2450 -#, c-format -msgid "Invalid sha256 for extra data uri %s" -msgstr "Nieprawidłowa suma SHA256 dla adresu URI %s dodatkowych danych" - -#: common/flatpak-dir.c:2455 -#, c-format -msgid "Empty name for extra data uri %s" -msgstr "Pusta nazwa dla adresu URI %s dodatkowych danych" - -#: common/flatpak-dir.c:2462 -#, c-format -msgid "Unsupported extra data uri %s" -msgstr "Nieobsługiwany adres URI %s dodatkowych danych" - -#: common/flatpak-dir.c:2476 -#, 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:2479 -#, c-format -msgid "Wrong size for extra-data %s" -msgstr "Błędny rozmiar dodatkowych danych %s" - -#: common/flatpak-dir.c:2494 -#, c-format -msgid "While downloading %s: " -msgstr "Podczas pobierania %s: " - -#: common/flatpak-dir.c:2501 -#, c-format -msgid "Wrong size for extra data %s" -msgstr "Błędny rozmiar dodatkowych danych %s" - -#: common/flatpak-dir.c:2512 -#, c-format -msgid "Invalid checksum for extra data %s" -msgstr "Nieprawidłowa suma kontrolna dodatkowych danych %s" - -#: common/flatpak-dir.c:2768 -#, c-format -msgid "%s commit %s already installed" -msgstr "Już zainstalowano %s zatwierdzenie %s" - -#: common/flatpak-dir.c:3097 common/flatpak-dir.c:3411 -#, c-format -msgid "While pulling %s from remote %s: " -msgstr "Podczas pobierania %s z repozytorium %s: " - -#: common/flatpak-dir.c:3296 -#, c-format -msgid "Can't find %s in remote %s" -msgstr "Nie można odnaleźć %s w repozytorium %s" - -#: common/flatpak-dir.c:3969 -msgid "Not enough memory" -msgstr "Za mało pamięci" - -#: common/flatpak-dir.c:3988 -msgid "Failed to read from exported file" -msgstr "Odczytanie z wyeksportowanego pliku się nie powiodło" - -#: common/flatpak-dir.c:4179 -msgid "Error reading mimetype xml file" -msgstr "Błąd podczas odczytywania pliku XML typu MIME" - -#: common/flatpak-dir.c:4184 -msgid "Invalid mimetype xml file" -msgstr "Nieprawidłowy plik XML typu MIME" - -#: common/flatpak-dir.c:4726 -msgid "While getting detached metadata: " -msgstr "Podczas pobierania odłączonych metadanych: " - -#: common/flatpak-dir.c:4744 -msgid "While creating extradir: " -msgstr "Podczas tworzenia dodatkowego katalogu: " - -#: common/flatpak-dir.c:4765 -msgid "Invalid sha256 for extra data" -msgstr "Nieprawidłowa suma SHA256 dodatkowych danych" - -#: common/flatpak-dir.c:4794 -msgid "Wrong size for extra data" -msgstr "Błędny rozmiar dodatkowych danych" - -#: common/flatpak-dir.c:4798 -msgid "Invalid checksum for extra data" -msgstr "Nieprawidłowa suma kontrolna dodatkowych danych" - -#: common/flatpak-dir.c:4807 -#, c-format -msgid "While writing extra data file '%s': " -msgstr "Podczas zapisywania pliku dodatkowych danych „%s”: " - -#: common/flatpak-dir.c:4991 -#, c-format -msgid "apply_extra script failed, exit status %d" -msgstr "Skrypt „apply_extra” się nie powiódł, stan wyjścia %d" - -#: common/flatpak-dir.c:5068 -#, c-format -msgid "While trying to resolve ref %s: " -msgstr "Podczas rozwiązywania odniesienia %s: " - -#: common/flatpak-dir.c:5083 -#, c-format -msgid "%s is not available" -msgstr "%s jest niedostępne" - -#: common/flatpak-dir.c:5098 common/flatpak-dir.c:5436 -#: common/flatpak-dir.c:6204 common/flatpak-dir.c:6217 -#: common/flatpak-dir.c:6293 -#, c-format -msgid "%s branch %s already installed" -msgstr "Już zainstalowano %s gałąź %s" - -#: common/flatpak-dir.c:5117 -#, c-format -msgid "Failed to read commit %s: " -msgstr "Odczytanie zatwierdzenia %s się nie powiodło: " - -#: common/flatpak-dir.c:5137 -#, c-format -msgid "While trying to checkout %s into %s: " -msgstr "Podczas wymeldowywania %s do %s: " - -#: common/flatpak-dir.c:5162 common/flatpak-dir.c:5193 -msgid "While trying to checkout metadata subpath: " -msgstr "Podczas wymeldowywania podścieżki metadanych: " - -#: common/flatpak-dir.c:5203 -msgid "While trying to remove existing extra dir: " -msgstr "Podczas usuwania istniejącego dodatkowego katalogu: " - -#: common/flatpak-dir.c:5214 -msgid "While trying to apply extra data: " -msgstr "Podczas zastosowywania dodatkowych danych: " - -#: common/flatpak-dir.c:5241 -#, c-format -msgid "Invalid deployed ref %s: " -msgstr "Nieprawidłowe wdrożone odniesienie %s: " - -#: common/flatpak-dir.c:5248 -#, c-format -msgid "Invalid commit ref %s: " -msgstr "Nieprawidłowe odniesienie zatwierdzenia %s: " - -#: common/flatpak-dir.c:5256 -#, c-format -msgid "Deployed ref %s kind does not match commit (%s)" -msgstr "Rodzaj wdrożonego odniesienia %s nie pasuje do zatwierdzenia (%s)" - -#: common/flatpak-dir.c:5264 -#, c-format -msgid "Deployed ref %s name does not match commit (%s)" -msgstr "Nazwa wdrożonego odniesienia %s nie pasuje do zatwierdzenia (%s)" - -#: common/flatpak-dir.c:5272 -#, c-format -msgid "Deployed ref %s arch does not match commit (%s)" -msgstr "" -"Architektura wdrożonego odniesienia %s nie pasuje do zatwierdzenia (%s)" - -#: common/flatpak-dir.c:5278 -#, 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:5284 -#, 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:5303 -msgid "Deployed metadata does not match commit" -msgstr "Wdrożone metadane nie pasują do zatwierdzenia" - -#: common/flatpak-dir.c:6065 -#, c-format -msgid "This version of %s is already installed" -msgstr "Ta wersja programu %s jest już zainstalowana" - -#: common/flatpak-dir.c:6072 -msgid "Can't change remote during bundle install" -msgstr "Nie można zmienić repozytorium podczas instalacji pakietu" - -#: common/flatpak-dir.c:6615 -#, c-format -msgid "%s branch %s is not installed" -msgstr "Nie zainstalowano %s gałęzi %s" - -#: common/flatpak-dir.c:6859 -#, c-format -msgid "%s branch %s not installed" -msgstr "Nie zainstalowano %s gałęzi %s" - -#: common/flatpak-dir.c:7818 -#, c-format -msgid "Nothing matches %s" -msgstr "Nic nie pasuje do %s" - -#: common/flatpak-dir.c:7900 -#, 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:7942 -#, c-format -msgid "Error searching remote %s: %s" -msgstr "Błąd podczas wyszukiwania repozytorium %s: %s" - -#: common/flatpak-dir.c:7987 -#, c-format -msgid "Error searching local repository: %s" -msgstr "Błąd podczas wyszukiwania lokalnego repozytorium: %s" - -#: common/flatpak-dir.c:8113 -#, c-format -msgid "%s %s not installed" -msgstr "Nie zainstalowano %s %s" - -#: common/flatpak-dir.c:8280 -#, c-format -msgid "Could not find installation %s" -msgstr "Nie można odnaleźć instalacji %s" - -#: common/flatpak-dir.c:8809 -#, c-format -msgid "Runtime %s, branch %s is already installed" -msgstr "Już zainstalowano środowisko wykonawcze %s, gałąź %s" - -#: common/flatpak-dir.c:8810 -#, c-format -msgid "App %s, branch %s is already installed" -msgstr "Już zainstalowano program %s, gałąź %s" - -#: common/flatpak-dir.c:9269 -msgid "Remote title not set" -msgstr "Nie ustawiono tytułu repozytorium" - -#: common/flatpak-dir.c:9291 -msgid "Remote default-branch not set" -msgstr "Nie ustawiono domyślnej gałęzi repozytorium" - -#: common/flatpak-dir.c:9785 -msgid "No flatpak cache in remote summary" -msgstr "Brak pamięci podręcznej Flatpak w podsumowaniu repozytorium" - -#: common/flatpak-dir.c:9795 -#, c-format -msgid "No entry for %s in remote summary flatpak cache " -msgstr "" -"Brak wpisu dla %s w pamięci podręcznej Flatpak podsumowania repozytorium " - -#: common/flatpak-run.c:258 +#: common/flatpak-context.c:175 #, c-format msgid "Unknown share type %s, valid types are: %s" msgstr "Nieznany typ udziału %s, prawidłowe typy: %s" -#: common/flatpak-run.c:293 +#: common/flatpak-context.c:210 #, c-format msgid "Unknown policy type %s, valid types are: %s" msgstr "Nieznany typ polityki %s, prawidłowe typy: %s" -#: common/flatpak-run.c:331 +#: common/flatpak-context.c:248 #, c-format msgid "Invalid dbus name %s\n" msgstr "Nieprawidłowa nazwa D-Bus %s\n" -#: common/flatpak-run.c:344 +#: common/flatpak-context.c:261 #, c-format msgid "Unknown socket type %s, valid types are: %s" msgstr "Nieznany typ gniazda %s, prawidłowe typy: %s" -#: common/flatpak-run.c:373 +#: common/flatpak-context.c:290 #, c-format msgid "Unknown device type %s, valid types are: %s" msgstr "Nieznany typ urządzenia %s, prawidłowe typy: %s" -#: common/flatpak-run.c:401 +#: common/flatpak-context.c:318 #, c-format msgid "Unknown feature type %s, valid types are: %s" msgstr "Nieznany typ funkcji %s, prawidłowe typy: %s" -#: common/flatpak-run.c:774 +#: common/flatpak-context.c:691 #, c-format msgid "" "Unknown filesystem location %s, valid locations are: host, home, xdg-" @@ -2155,161 +2316,481 @@ msgstr "" "Nieznane położenie systemu plików %s, prawidłowe położenia: host, home, xdg-" "*[/...], ~/dir, /dir" -#: common/flatpak-run.c:1040 +#: common/flatpak-context.c:963 #, c-format msgid "Invalid env format %s" msgstr "Nieznany format środowiska %s" -#: common/flatpak-run.c:1180 +#: common/flatpak-context.c:1103 msgid "Share with host" msgstr "Udostępnia temu komputerowi" -#: common/flatpak-run.c:1180 common/flatpak-run.c:1181 +#: common/flatpak-context.c:1103 common/flatpak-context.c:1104 msgid "SHARE" msgstr "UDZIAŁ" -#: common/flatpak-run.c:1181 +#: common/flatpak-context.c:1104 msgid "Unshare with host" msgstr "Przestaje udostępniać temu komputerowi" -#: common/flatpak-run.c:1182 +#: common/flatpak-context.c:1105 msgid "Expose socket to app" msgstr "Udostępnia gniazdo programowi" -#: common/flatpak-run.c:1182 common/flatpak-run.c:1183 +#: common/flatpak-context.c:1105 common/flatpak-context.c:1106 msgid "SOCKET" msgstr "GNIAZDO" -#: common/flatpak-run.c:1183 +#: common/flatpak-context.c:1106 msgid "Don't expose socket to app" msgstr "Nie udostępnia gniazda programowi" -#: common/flatpak-run.c:1184 +#: common/flatpak-context.c:1107 msgid "Expose device to app" msgstr "Udostępnia urządzenie programowi" -#: common/flatpak-run.c:1184 common/flatpak-run.c:1185 +#: common/flatpak-context.c:1107 common/flatpak-context.c:1108 msgid "DEVICE" msgstr "URZĄDZENIE" -#: common/flatpak-run.c:1185 +#: common/flatpak-context.c:1108 msgid "Don't expose device to app" msgstr "Nie udostępnia urządzenia programowi" -#: common/flatpak-run.c:1186 +#: common/flatpak-context.c:1109 msgid "Allow feature" msgstr "Zezwala na funkcję" -#: common/flatpak-run.c:1186 common/flatpak-run.c:1187 +#: common/flatpak-context.c:1109 common/flatpak-context.c:1110 msgid "FEATURE" msgstr "FUNKCJA" -#: common/flatpak-run.c:1187 +#: common/flatpak-context.c:1110 msgid "Don't allow feature" msgstr "Bez zezwolenia na funkcję" -#: common/flatpak-run.c:1188 +#: common/flatpak-context.c:1111 msgid "Expose filesystem to app (:ro for read-only)" msgstr "Udostępnia system plików programowi (:ro dla tylko do odczytu)" -#: common/flatpak-run.c:1188 +#: common/flatpak-context.c:1111 msgid "FILESYSTEM[:ro]" msgstr "SYSTEM-PLIKÓW[:ro]" -#: common/flatpak-run.c:1189 +#: common/flatpak-context.c:1112 msgid "Don't expose filesystem to app" msgstr "Nie udostępnia systemu plików programowi" -#: common/flatpak-run.c:1189 +#: common/flatpak-context.c:1112 msgid "FILESYSTEM" msgstr "SYSTEM-PLIKÓW" -#: common/flatpak-run.c:1190 +#: common/flatpak-context.c:1113 msgid "Set environment variable" msgstr "Ustawia zmienną środowiskową" -#: common/flatpak-run.c:1190 +#: common/flatpak-context.c:1113 msgid "VAR=VALUE" msgstr "ZMIENNA=WARTOŚĆ" -#: common/flatpak-run.c:1191 +#: common/flatpak-context.c:1114 msgid "Allow app to own name on the session bus" msgstr "Zezwala programowi na posiadanie nazwy na magistrali sesji" -#: common/flatpak-run.c:1191 common/flatpak-run.c:1192 -#: common/flatpak-run.c:1193 common/flatpak-run.c:1194 +#: common/flatpak-context.c:1114 common/flatpak-context.c:1115 +#: common/flatpak-context.c:1116 common/flatpak-context.c:1117 msgid "DBUS_NAME" msgstr "NAZWA_D-BUS" -#: common/flatpak-run.c:1192 +#: common/flatpak-context.c:1115 msgid "Allow app to talk to name on the session bus" msgstr "Umożliwia programowi rozmawianie z nazwą na magistrali sesji" -#: common/flatpak-run.c:1193 +#: common/flatpak-context.c:1116 msgid "Allow app to own name on the system bus" msgstr "Zezwala programowi na posiadanie nazwy na magistrali systemu" -#: common/flatpak-run.c:1194 +#: common/flatpak-context.c:1117 msgid "Allow app to talk to name on the system bus" msgstr "Umożliwia programowi rozmawianie z nazwą na magistrali systemu" -#: common/flatpak-run.c:1195 +#: common/flatpak-context.c:1118 msgid "Add generic policy option" msgstr "Dodaje ogólną opcję polityki" -#: common/flatpak-run.c:1195 common/flatpak-run.c:1196 +#: common/flatpak-context.c:1118 common/flatpak-context.c:1119 msgid "SUBSYSTEM.KEY=VALUE" msgstr "PODSYSTEM.KLUCZ=WARTOŚĆ" -#: common/flatpak-run.c:1196 +#: common/flatpak-context.c:1119 msgid "Remove generic policy option" msgstr "Usuwa ogólną opcję polityki" -#: common/flatpak-run.c:1197 +#: common/flatpak-context.c:1120 msgid "Persist home directory" msgstr "Trwały katalog domowy" -#: common/flatpak-run.c:1197 +#: common/flatpak-context.c:1120 msgid "FILENAME" msgstr "NAZWA-PLIKU" #. This is not needed/used anymore, so hidden, but we accept it for backwards compat -#: common/flatpak-run.c:1199 +#: common/flatpak-context.c:1122 msgid "Don't require a running session (no cgroups creation)" msgstr "Bez wymagania działającej sesji (bez tworzenia cgroups)" -#: common/flatpak-run.c:3830 +#: common/flatpak-dir.c:1044 +#, c-format +msgid "No overrides found for %s" +msgstr "Nie odnaleziono zastępników dla %s" + +#: common/flatpak-dir.c:1674 +#, c-format +msgid "While opening repository %s: " +msgstr "Podczas otwierania repozytorium %s: " + +#: common/flatpak-dir.c:1908 common/flatpak-dir.c:5460 +msgid "Can't create deploy directory" +msgstr "Nie można utworzyć katalogu wdrażania" + +#: common/flatpak-dir.c:2122 common/flatpak-dir.c:2125 +#, c-format +msgid "Failed to find latest revision for ref %s from remote %s: %s\n" +msgstr "" + +#: common/flatpak-dir.c:2761 +#, c-format +msgid "Invalid sha256 for extra data uri %s" +msgstr "Nieprawidłowa suma SHA256 dla adresu URI %s dodatkowych danych" + +#: common/flatpak-dir.c:2766 +#, c-format +msgid "Empty name for extra data uri %s" +msgstr "Pusta nazwa dla adresu URI %s dodatkowych danych" + +#: common/flatpak-dir.c:2773 +#, c-format +msgid "Unsupported extra data uri %s" +msgstr "Nieobsługiwany adres URI %s dodatkowych danych" + +#: common/flatpak-dir.c:2787 +#, 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:2790 +#, c-format +msgid "Wrong size for extra-data %s" +msgstr "Błędny rozmiar dodatkowych danych %s" + +#: common/flatpak-dir.c:2805 +#, c-format +msgid "While downloading %s: " +msgstr "Podczas pobierania %s: " + +#: common/flatpak-dir.c:2812 +#, c-format +msgid "Wrong size for extra data %s" +msgstr "Błędny rozmiar dodatkowych danych %s" + +#: common/flatpak-dir.c:2823 +#, c-format +msgid "Invalid checksum for extra data %s" +msgstr "Nieprawidłowa suma kontrolna dodatkowych danych %s" + +#: common/flatpak-dir.c:2882 +msgid "Remote OCI index has no registry uri" +msgstr "Indeks OCI repozytorium nie ma adresu URI rejestru" + +#: common/flatpak-dir.c:3100 +#, c-format +msgid "%s commit %s already installed" +msgstr "Już zainstalowano %s zatwierdzenie %s" + +#: common/flatpak-dir.c:3442 common/flatpak-dir.c:3773 +#, c-format +msgid "While pulling %s from remote %s: " +msgstr "Podczas pobierania %s z repozytorium %s: " + +#: common/flatpak-dir.c:3658 +#, c-format +msgid "Can't find %s in remote %s" +msgstr "Nie można odnaleźć %s w repozytorium %s" + +#: common/flatpak-dir.c:4331 +msgid "Not enough memory" +msgstr "Za mało pamięci" + +#: common/flatpak-dir.c:4350 +msgid "Failed to read from exported file" +msgstr "Odczytanie z wyeksportowanego pliku się nie powiodło" + +#: common/flatpak-dir.c:4541 +msgid "Error reading mimetype xml file" +msgstr "Błąd podczas odczytywania pliku XML typu MIME" + +#: common/flatpak-dir.c:4546 +msgid "Invalid mimetype xml file" +msgstr "Nieprawidłowy plik XML typu MIME" + +#: common/flatpak-dir.c:5089 +msgid "While getting detached metadata: " +msgstr "Podczas pobierania odłączonych metadanych: " + +#: common/flatpak-dir.c:5107 +msgid "While creating extradir: " +msgstr "Podczas tworzenia dodatkowego katalogu: " + +#: common/flatpak-dir.c:5128 +msgid "Invalid sha256 for extra data" +msgstr "Nieprawidłowa suma SHA256 dodatkowych danych" + +#: common/flatpak-dir.c:5157 +msgid "Wrong size for extra data" +msgstr "Błędny rozmiar dodatkowych danych" + +#: common/flatpak-dir.c:5161 +msgid "Invalid checksum for extra data" +msgstr "Nieprawidłowa suma kontrolna dodatkowych danych" + +#: common/flatpak-dir.c:5170 +#, c-format +msgid "While writing extra data file '%s': " +msgstr "Podczas zapisywania pliku dodatkowych danych „%s”: " + +#: common/flatpak-dir.c:5340 +#, c-format +msgid "apply_extra script failed, exit status %d" +msgstr "Skrypt „apply_extra” się nie powiódł, stan wyjścia %d" + +#: common/flatpak-dir.c:5419 +#, c-format +msgid "While trying to resolve ref %s: " +msgstr "Podczas rozwiązywania odniesienia %s: " + +#: common/flatpak-dir.c:5434 +#, c-format +msgid "%s is not available" +msgstr "%s jest niedostępne" + +#: common/flatpak-dir.c:5449 common/flatpak-dir.c:5881 +#: common/flatpak-dir.c:6671 common/flatpak-dir.c:6681 +#: common/flatpak-dir.c:6713 +#, c-format +msgid "%s branch %s already installed" +msgstr "Już zainstalowano %s gałąź %s" + +#: common/flatpak-dir.c:5468 +#, c-format +msgid "Failed to read commit %s: " +msgstr "Odczytanie zatwierdzenia %s się nie powiodło: " + +#: common/flatpak-dir.c:5488 +#, c-format +msgid "While trying to checkout %s into %s: " +msgstr "Podczas wymeldowywania %s do %s: " + +#: common/flatpak-dir.c:5513 common/flatpak-dir.c:5544 +msgid "While trying to checkout metadata subpath: " +msgstr "Podczas wymeldowywania podścieżki metadanych: " + +#: common/flatpak-dir.c:5554 +msgid "While trying to remove existing extra dir: " +msgstr "Podczas usuwania istniejącego dodatkowego katalogu: " + +#: common/flatpak-dir.c:5565 +msgid "While trying to apply extra data: " +msgstr "Podczas zastosowywania dodatkowych danych: " + +#: common/flatpak-dir.c:5592 +#, c-format +msgid "Invalid deployed ref %s: " +msgstr "Nieprawidłowe wdrożone odniesienie %s: " + +#: common/flatpak-dir.c:5599 +#, c-format +msgid "Invalid commit ref %s: " +msgstr "Nieprawidłowe odniesienie zatwierdzenia %s: " + +#: common/flatpak-dir.c:5607 +#, c-format +msgid "Deployed ref %s kind does not match commit (%s)" +msgstr "Rodzaj wdrożonego odniesienia %s nie pasuje do zatwierdzenia (%s)" + +#: common/flatpak-dir.c:5615 +#, c-format +msgid "Deployed ref %s name does not match commit (%s)" +msgstr "Nazwa wdrożonego odniesienia %s nie pasuje do zatwierdzenia (%s)" + +#: common/flatpak-dir.c:5623 +#, c-format +msgid "Deployed ref %s arch does not match commit (%s)" +msgstr "" +"Architektura wdrożonego odniesienia %s nie pasuje do zatwierdzenia (%s)" + +#: common/flatpak-dir.c:5629 +#, 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:5635 +#, 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:5654 +msgid "Deployed metadata does not match commit" +msgstr "Wdrożone metadane nie pasują do zatwierdzenia" + +#: common/flatpak-dir.c:6533 +#, c-format +msgid "This version of %s is already installed" +msgstr "Ta wersja programu %s jest już zainstalowana" + +#: common/flatpak-dir.c:6540 +msgid "Can't change remote during bundle install" +msgstr "Nie można zmienić repozytorium podczas instalacji pakietu" + +#: common/flatpak-dir.c:7059 +#, c-format +msgid "%s branch %s is not installed" +msgstr "Nie zainstalowano %s gałęzi %s" + +#: common/flatpak-dir.c:7304 +#, c-format +msgid "%s branch %s not installed" +msgstr "Nie zainstalowano %s gałęzi %s" + +#: common/flatpak-dir.c:7628 +#, c-format +msgid "Pruning repo failed: %s" +msgstr "Usuwanie nieużywanych obiektów z repozytorium się nie powiodło: %s" + +#: common/flatpak-dir.c:8155 +#, 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:8176 +#, c-format +msgid "Nothing matches %s" +msgstr "Nic nie pasuje do %s" + +#: common/flatpak-dir.c:8258 +#, 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:8300 +#, c-format +msgid "Error searching remote %s: %s" +msgstr "Błąd podczas wyszukiwania repozytorium %s: %s" + +#: common/flatpak-dir.c:8345 +#, c-format +msgid "Error searching local repository: %s" +msgstr "Błąd podczas wyszukiwania lokalnego repozytorium: %s" + +#: common/flatpak-dir.c:8471 +#, c-format +msgid "%s %s not installed" +msgstr "Nie zainstalowano %s %s" + +#: common/flatpak-dir.c:8638 +#, c-format +msgid "Could not find installation %s" +msgstr "Nie można odnaleźć instalacji %s" + +#: common/flatpak-dir.c:9236 +#, c-format +msgid "Runtime %s, branch %s is already installed" +msgstr "Już zainstalowano środowisko wykonawcze %s, gałąź %s" + +#: common/flatpak-dir.c:9237 +#, c-format +msgid "App %s, branch %s is already installed" +msgstr "Już zainstalowano program %s, gałąź %s" + +#: common/flatpak-dir.c:9717 +msgid "Remote title not set" +msgstr "Nie ustawiono tytułu repozytorium" + +#: common/flatpak-dir.c:9739 +msgid "Remote default-branch not set" +msgstr "Nie ustawiono domyślnej gałęzi repozytorium" + +#: common/flatpak-dir.c:10332 +msgid "No flatpak cache in remote summary" +msgstr "Brak pamięci podręcznej Flatpak w podsumowaniu repozytorium" + +#: common/flatpak-dir.c:10342 +#, c-format +msgid "No entry for %s in remote summary flatpak cache " +msgstr "" +"Brak wpisu dla %s w pamięci podręcznej Flatpak podsumowania repozytorium " + +#: common/flatpak-run.c:1456 #, c-format msgid "Failed to open flatpak-info temp file: %s" msgstr "Otwarcie pliku tymczasowego „flatpak-info” się nie powiodło: %s" -#: common/flatpak-run.c:3904 common/flatpak-run.c:3914 +#: common/flatpak-run.c:1530 common/flatpak-run.c:1540 #, c-format msgid "Failed to open temp file: %s" msgstr "Otwarcie pliku tymczasowego się nie powiodło: %s" -#: common/flatpak-run.c:4253 +#: common/flatpak-run.c:1883 msgid "Unable to create sync pipe" msgstr "Utworzenie potoku synchronizacji się nie powiodło" -#: common/flatpak-run.c:4280 +#: common/flatpak-run.c:1910 #, c-format msgid "Failed to open app info file: %s" msgstr "Otwarcie pliku informacji o programie się nie powiodło: %s" -#: common/flatpak-run.c:4310 +#: common/flatpak-run.c:1940 msgid "Failed to sync with dbus proxy" msgstr "Synchronizacja z pośrednikiem D-Bus się nie powiodła" -#: common/flatpak-run.c:5069 +#: common/flatpak-run.c:2700 #, c-format msgid "ldconfig failed, exit status %d" msgstr "ldconfig się nie powiodło, stan wyjścia %d" -#: common/flatpak-utils.c:2900 +#: common/flatpak-utils.c:624 +#, c-format +msgid "Migrating %s to %s\n" +msgstr "Migrowanie %s do %s\n" + +#: common/flatpak-utils.c:630 +#, c-format +msgid "Error during migration: %s\n" +msgstr "Błąd podczas migracji: %s\n" + +#: common/flatpak-utils.c:2988 msgid "No extra data sources" msgstr "Brak źródeł dodatkowych danych" +#: common/flatpak-utils.c:6576 +#, c-format +msgid "Downloading metadata: %u/(estimating) %s" +msgstr "Pobieranie metadanych: %u/(szacowanie) %s" + +#: common/flatpak-utils.c:6600 +#, c-format +msgid "Downloading: %s/%s" +msgstr "Pobieranie: %s/%s" + +#: common/flatpak-utils.c:6620 +#, c-format +msgid "Downloading extra data: %s/%s" +msgstr "Pobieranie dodatkowych danych: %s/%s" + +#: common/flatpak-utils.c:6625 +#, c-format +msgid "Downloading files: %d/%d %s" +msgstr "Pobieranie plików: %d/%d %s" + #. SECURITY: #. - Normal users do not need authentication to install signed applications #. from signed repositories, as this cannot exploit a system. @@ -2346,7 +2827,7 @@ msgstr "Aktualizacja podpisanego programu" #: system-helper/org.freedesktop.Flatpak.policy.in:59 #: system-helper/org.freedesktop.Flatpak.policy.in:77 -#: system-helper/org.freedesktop.Flatpak.policy.in:169 +#: system-helper/org.freedesktop.Flatpak.policy.in:180 msgid "Authentication is required to update software" msgstr "Wymagane jest uwierzytelnienie, aby zaktualizować oprogramowanie" @@ -2409,12 +2890,21 @@ msgid "Authentication is required to configure software repositories" msgstr "" "Wymagane jest uwierzytelnienie, aby skonfigurować repozytoria oprogramowania" +#: system-helper/org.freedesktop.Flatpak.policy.in:161 +msgid "Configure" +msgstr "Konfiguracja" + +#: system-helper/org.freedesktop.Flatpak.policy.in:162 +msgid "Authentication is required to configure software installation" +msgstr "" +"Wymagane jest uwierzytelnienie, aby skonfigurować instalację oprogramowania" + #. SECURITY: #. - Normal users do not require admin authentication to update #. appstream data as it will be signed, and the action is required #. to update the system when unattended. #. - Changing this to anything other than 'yes' will break unattended #. updates. -#: system-helper/org.freedesktop.Flatpak.policy.in:168 +#: system-helper/org.freedesktop.Flatpak.policy.in:179 msgid "Update appstream" msgstr "Aktualizacja danych AppStream" diff --git a/po/pt_BR.po b/po/pt_BR.po index 08e308db..b2ffb4a9 100644 --- a/po/pt_BR.po +++ b/po/pt_BR.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: flatpak master\n" "Report-Msgid-Bugs-To: https://github.com/flatpak/flatpak/issues\n" -"POT-Creation-Date: 2017-10-09 12:40+0200\n" +"POT-Creation-Date: 2018-02-19 14:20+0100\n" "PO-Revision-Date: 2017-09-08 21:48-0200\n" "Last-Translator: Rafael Fontenelle \n" "Language-Team: Brazilian Portuguese \n" @@ -43,10 +43,9 @@ msgstr "Marca o repositório como usado para dependências" msgid "Set a new url" msgstr "Define uma nova url" -#: app/flatpak-builtins-add-remote.c:66 app/flatpak-builtins-build-bundle.c:57 -#: app/flatpak-builtins-build-bundle.c:58 -#: app/flatpak-builtins-list-remotes.c:109 -#: app/flatpak-builtins-repo-update.c:52 +#: app/flatpak-builtins-add-remote.c:66 app/flatpak-builtins-build-bundle.c:58 +#: app/flatpak-builtins-build-bundle.c:59 +#: app/flatpak-builtins-list-remotes.c:70 app/flatpak-builtins-repo-update.c:52 msgid "URL" msgstr "URL" @@ -108,9 +107,9 @@ msgstr "ID-COLEÇÃO" msgid "Import GPG key from FILE (- for stdin)" msgstr "Importa uma chave GPG do ARQUIVO (- para stdin)" -#: app/flatpak-builtins-add-remote.c:82 app/flatpak-builtins-build-bundle.c:59 -#: app/flatpak-builtins-build.c:50 app/flatpak-builtins-build-export.c:60 -#: app/flatpak-builtins-install.c:66 app/flatpak-builtins-repo-update.c:59 +#: app/flatpak-builtins-add-remote.c:82 app/flatpak-builtins-build-bundle.c:60 +#: app/flatpak-builtins-build.c:54 app/flatpak-builtins-build-export.c:60 +#: app/flatpak-builtins-install.c:67 app/flatpak-builtins-repo-update.c:59 msgid "FILE" msgstr "ARQUIVO" @@ -122,129 +121,149 @@ msgstr "Desabilita o remoto" msgid "Add OCI registry" msgstr "Adiciona registro OCI" -#: app/flatpak-builtins-add-remote.c:312 +#: app/flatpak-builtins-add-remote.c:218 app/flatpak-builtins-add-remote.c:225 +#, c-format +msgid "Can't load uri %s: %s\n" +msgstr "" + +#: app/flatpak-builtins-add-remote.c:233 +#, fuzzy, c-format +msgid "Can't load file %s: %s\n" +msgstr "Não foi possível abrir o espaço de nome %s: %s" + +#: app/flatpak-builtins-add-remote.c:241 +#, fuzzy +msgid "Invalid file format" +msgstr "Formato de env inválido %s" + +#: app/flatpak-builtins-add-remote.c:249 +#, fuzzy, c-format +msgid "Invalid version %s, only 1 supported" +msgstr "Tipo de uri inválida %s, há suporte apenas a http/https" + +#: app/flatpak-builtins-add-remote.c:293 +#, fuzzy +msgid "Invalid gpg key" +msgstr "Pid inválido %s" + +#: app/flatpak-builtins-add-remote.c:320 msgid "NAME LOCATION - Add a remote repository" msgstr "NOME LOCALIZAÇÃO – Adiciona um repositório remoto" -#: app/flatpak-builtins-add-remote.c:321 -#: app/flatpak-builtins-delete-remote.c:58 app/flatpak-builtins-info.c:104 +#: app/flatpak-builtins-add-remote.c:333 +#: app/flatpak-builtins-delete-remote.c:61 app/flatpak-builtins-info.c:125 msgid "NAME must be specified" msgstr "NOME deve ser especificado" -#: app/flatpak-builtins-add-remote.c:324 app/flatpak-builtins-build-sign.c:71 -#: app/flatpak-builtins-repo.c:174 app/flatpak-builtins-repo-update.c:429 +#: app/flatpak-builtins-add-remote.c:336 app/flatpak-builtins-build-sign.c:71 +#: app/flatpak-builtins-repo.c:175 app/flatpak-builtins-repo-update.c:429 msgid "LOCATION must be specified" msgstr "LOCALIZAÇÃO deve ser especificada" -#: app/flatpak-builtins-add-remote.c:327 -#: app/flatpak-builtins-build-bundle.c:479 +#: app/flatpak-builtins-add-remote.c:339 +#: app/flatpak-builtins-build-bundle.c:461 #: app/flatpak-builtins-build-export.c:676 #: app/flatpak-builtins-build-import-bundle.c:182 #: app/flatpak-builtins-build-init.c:181 app/flatpak-builtins-build-sign.c:74 -#: app/flatpak-builtins-delete-remote.c:63 +#: app/flatpak-builtins-delete-remote.c:66 #: app/flatpak-builtins-document-export.c:102 #: app/flatpak-builtins-document-info.c:75 #: app/flatpak-builtins-document-list.c:70 -#: app/flatpak-builtins-document-unexport.c:67 app/flatpak-builtins-info.c:111 -#: app/flatpak-builtins-install.c:265 app/flatpak-builtins-install.c:399 -#: app/flatpak-builtins-list.c:382 app/flatpak-builtins-list-remotes.c:66 -#: app/flatpak-builtins-ls-remote.c:84 app/flatpak-builtins-make-current.c:67 -#: app/flatpak-builtins-override.c:66 +#: app/flatpak-builtins-document-unexport.c:67 app/flatpak-builtins-info.c:132 +#: app/flatpak-builtins-install.c:267 app/flatpak-builtins-install.c:401 +#: app/flatpak-builtins-list.c:314 app/flatpak-builtins-list-remotes.c:61 +#: app/flatpak-builtins-ls-remote.c:107 app/flatpak-builtins-make-current.c:72 +#: app/flatpak-builtins-override.c:68 msgid "Too many arguments" msgstr "Número excessivo de argumentos" -#: app/flatpak-builtins-add-remote.c:332 +#: app/flatpak-builtins-add-remote.c:344 #: app/flatpak-builtins-build-export.c:692 #, c-format msgid "‘%s’ is not a valid collection ID: %s" msgstr "“%s” não é um ID de coleção válido: %s" -#: app/flatpak-builtins-add-remote.c:336 +#: app/flatpak-builtins-add-remote.c:348 msgid "GPG verification is required if collections are enabled" msgstr "Verificação GPG é exigida se coleções estiverem habilitadas" #. Do nothing -#: app/flatpak-builtins-add-remote.c:351 +#: app/flatpak-builtins-add-remote.c:363 #, c-format msgid "Remote %s already exists" msgstr "O remoto %s já existe" -#: app/flatpak-builtins-add-remote.c:359 +#: app/flatpak-builtins-add-remote.c:371 msgid "No url specified in flatpakrepo file" msgstr "Nenhuma url especificada no arquivo flatpakrepo" -#: app/flatpak-builtins-add-remote.c:403 +#: app/flatpak-builtins-add-remote.c:415 #, c-format msgid "Warning: Could not update extra metadata for '%s': %s\n" msgstr "Aviso: Não foi possível atualizar metadados extras para “%s”: %s\n" -#: app/flatpak-builtins-add-remote.c:451 +#: app/flatpak-builtins-add-remote.c:464 msgid "NAME - Modify a remote repository" msgstr "NOME – Modifica um repositório remoto" -#: app/flatpak-builtins-add-remote.c:460 +#: app/flatpak-builtins-add-remote.c:474 msgid "Remote NAME must be specified" msgstr "NOME remoto deve ser especificado" -#: app/flatpak-builtins-add-remote.c:465 -#, c-format -msgid "No remote %s" -msgstr "Nenhum remoto %s" - -#: app/flatpak-builtins-add-remote.c:471 +#: app/flatpak-builtins-add-remote.c:485 #, c-format msgid "Updating extra metadata from remote summary for %s\n" msgstr "Atualizando metadados extras para resumo de remoto para %s\n" -#: app/flatpak-builtins-add-remote.c:474 +#: app/flatpak-builtins-add-remote.c:488 #, c-format msgid "Error updating extra metadata for '%s': %s\n" msgstr "Erro ao atualizar metadados extras para “%s”: %s\n" -#: app/flatpak-builtins-add-remote.c:475 +#: app/flatpak-builtins-add-remote.c:489 #, c-format msgid "Could not update extra metadata for %s" msgstr "Não foi possível atualizar metadados extras para %s" -#: app/flatpak-builtins-build-bundle.c:55 +#: app/flatpak-builtins-build-bundle.c:56 msgid "Export runtime instead of app" msgstr "Exporta runtime em vez do aplicativo" -#: app/flatpak-builtins-build-bundle.c:56 +#: app/flatpak-builtins-build-bundle.c:57 msgid "Arch to bundle for" msgstr "Arquitetura para a qual será empacotada" -#: app/flatpak-builtins-build-bundle.c:56 +#: app/flatpak-builtins-build-bundle.c:57 #: app/flatpak-builtins-build-export.c:55 app/flatpak-builtins-build-init.c:49 -#: app/flatpak-builtins-build-sign.c:41 app/flatpak-builtins-info.c:48 -#: app/flatpak-builtins-install.c:56 app/flatpak-builtins-list.c:52 -#: app/flatpak-builtins-ls-remote.c:48 app/flatpak-builtins-make-current.c:38 -#: app/flatpak-builtins-run.c:52 app/flatpak-builtins-uninstall.c:44 -#: app/flatpak-builtins-update.c:53 +#: app/flatpak-builtins-build-sign.c:41 app/flatpak-builtins-info.c:51 +#: app/flatpak-builtins-info-remote.c:48 app/flatpak-builtins-install.c:57 +#: app/flatpak-builtins-list.c:46 app/flatpak-builtins-ls-remote.c:49 +#: app/flatpak-builtins-make-current.c:38 app/flatpak-builtins-run.c:52 +#: app/flatpak-builtins-uninstall.c:44 app/flatpak-builtins-update.c:53 msgid "ARCH" msgstr "ARQUITETURA" -#: app/flatpak-builtins-build-bundle.c:57 +#: app/flatpak-builtins-build-bundle.c:58 msgid "Url for repo" msgstr "Url para o repo" -#: app/flatpak-builtins-build-bundle.c:58 +#: app/flatpak-builtins-build-bundle.c:59 msgid "Url for runtime flatpakrepo file" msgstr "Url para o arquivo de flatpakrepo de runtime" -#: app/flatpak-builtins-build-bundle.c:59 +#: app/flatpak-builtins-build-bundle.c:60 msgid "Add GPG key from FILE (- for stdin)" msgstr "Adiciona uma chave GPG do ARQUIVO (- para stdin)" -#: app/flatpak-builtins-build-bundle.c:60 +#: app/flatpak-builtins-build-bundle.c:61 msgid "Export oci image instead of flatpak bundle" msgstr "Exporta a imagem oci em vez do pacote flatpak" -#: app/flatpak-builtins-build-bundle.c:61 +#: app/flatpak-builtins-build-bundle.c:62 msgid "GPG Key ID to sign the OCI image with" msgstr "ID da chave GPG para assinar a imagem OCI" -#: app/flatpak-builtins-build-bundle.c:61 +#: app/flatpak-builtins-build-bundle.c:62 #: app/flatpak-builtins-build-commit-from.c:55 #: app/flatpak-builtins-build-export.c:61 #: app/flatpak-builtins-build-import-bundle.c:46 @@ -252,7 +271,7 @@ msgstr "ID da chave GPG para assinar a imagem OCI" msgid "KEY-ID" msgstr "ID-CHAVE" -#: app/flatpak-builtins-build-bundle.c:62 +#: app/flatpak-builtins-build-bundle.c:63 #: app/flatpak-builtins-build-commit-from.c:56 #: app/flatpak-builtins-build-export.c:64 #: app/flatpak-builtins-build-import-bundle.c:47 @@ -260,7 +279,7 @@ msgstr "ID-CHAVE" msgid "GPG Homedir to use when looking for keyrings" msgstr "Diretório do GPG para usar quando estiver procurando por chaveiros" -#: app/flatpak-builtins-build-bundle.c:62 +#: app/flatpak-builtins-build-bundle.c:63 #: app/flatpak-builtins-build-commit-from.c:56 #: app/flatpak-builtins-build-export.c:64 #: app/flatpak-builtins-build-import-bundle.c:47 @@ -268,7 +287,16 @@ msgstr "Diretório do GPG para usar quando estiver procurando por chaveiros" msgid "HOMEDIR" msgstr "DIRETÓRIO" -#: app/flatpak-builtins-build-bundle.c:469 +#: app/flatpak-builtins-build-bundle.c:64 +msgid "OSTree commit to create a delta bundle from" +msgstr "" + +#: app/flatpak-builtins-build-bundle.c:64 app/flatpak-builtins-info-remote.c:49 +#: app/flatpak-builtins-update.c:54 +msgid "COMMIT" +msgstr "COMMIT" + +#: app/flatpak-builtins-build-bundle.c:451 msgid "" "LOCATION FILENAME NAME [BRANCH] - Create a single file bundle from a local " "repository" @@ -276,94 +304,106 @@ msgstr "" "LOCALIZAÇÃO ARQUIVO NOME [RAMO] – Cria um único arquivo de pacote de um " "repositório local" -#: app/flatpak-builtins-build-bundle.c:476 +#: app/flatpak-builtins-build-bundle.c:458 msgid "LOCATION, FILENAME and NAME must be specified" msgstr "LOCALIZAÇÃO, ARQUIVO e NOME devem ser especificados" -#: app/flatpak-builtins-build-bundle.c:494 -#: app/flatpak-builtins-build-commit-from.c:103 -#: app/flatpak-builtins-build-commit-from.c:113 +#: app/flatpak-builtins-build-bundle.c:476 +#: app/flatpak-builtins-build-commit-from.c:253 +#: app/flatpak-builtins-build-commit-from.c:263 #: app/flatpak-builtins-build-import-bundle.c:191 #, c-format msgid "'%s' is not a valid repository" msgstr "“%s” não é um repositório válido" -#: app/flatpak-builtins-build-bundle.c:506 app/flatpak-builtins-build-sign.c:86 +#: app/flatpak-builtins-build-bundle.c:488 app/flatpak-builtins-build-sign.c:86 #, c-format msgid "'%s' is not a valid name: %s" msgstr "“%s” não é um nome válido: %s" -#: app/flatpak-builtins-build-bundle.c:509 +#: app/flatpak-builtins-build-bundle.c:491 #: app/flatpak-builtins-build-export.c:699 app/flatpak-builtins-build-sign.c:89 #, c-format msgid "'%s' is not a valid branch name: %s" msgstr "“%s” não é um nome de ramo válido: %s" -#: app/flatpak-builtins-build.c:46 +#: app/flatpak-builtins-build.c:49 msgid "Use Platform runtime rather than Sdk" msgstr "Usa runtime Platform em vez de Sdk" -#: app/flatpak-builtins-build.c:47 +#: app/flatpak-builtins-build.c:50 +msgid "Make destination readonly" +msgstr "" + +#: app/flatpak-builtins-build.c:51 msgid "Add bind mount" msgstr "Adiciona montagem associativa (bind)" -#: app/flatpak-builtins-build.c:47 +#: app/flatpak-builtins-build.c:51 msgid "DEST=SRC" msgstr "DEST=ORIG" -#: app/flatpak-builtins-build.c:48 +#: app/flatpak-builtins-build.c:52 msgid "Start build in this directory" msgstr "Começa compilação neste diretório" -#: app/flatpak-builtins-build.c:48 app/flatpak-builtins-build.c:49 +#: app/flatpak-builtins-build.c:52 app/flatpak-builtins-build.c:53 #: app/flatpak-builtins-build-init.c:58 msgid "DIR" msgstr "DIR" -#: app/flatpak-builtins-build.c:49 +#: app/flatpak-builtins-build.c:53 msgid "Where to look for custom sdk dir (defaults to 'usr')" msgstr "Onde procurar por diretório de sdk personalizado (padrão é “usr”)" -#: app/flatpak-builtins-build.c:50 app/flatpak-builtins-build-export.c:60 +#: app/flatpak-builtins-build.c:54 app/flatpak-builtins-build-export.c:60 msgid "Use alternative file for the metadata" msgstr "Usa um arquivo alternativo para os metadados" -#: app/flatpak-builtins-build.c:51 +#: app/flatpak-builtins-build.c:55 msgid "Kill processes when the parent process dies" msgstr "Mata processos quando o processo pai morre" -#: app/flatpak-builtins-build.c:52 +#: app/flatpak-builtins-build.c:56 msgid "Export application homedir directory to build" msgstr "" -#: app/flatpak-builtins-build.c:139 +#: app/flatpak-builtins-build.c:57 app/flatpak-builtins-run.c:58 +msgid "Log session bus calls" +msgstr "Registra o log das chamadas de barramento de sessão" + +#: app/flatpak-builtins-build.c:58 app/flatpak-builtins-run.c:59 +msgid "Log system bus calls" +msgstr "Registra o log das chamadas de barramento de sistema" + +#: app/flatpak-builtins-build.c:126 msgid "DIRECTORY [COMMAND [args...]] - Build in directory" msgstr "DIRETÓRIO [COMANDO [args…]] – Compila no diretório" -#: app/flatpak-builtins-build.c:162 app/flatpak-builtins-build-finish.c:533 +#: app/flatpak-builtins-build.c:149 app/flatpak-builtins-build-finish.c:533 msgid "DIRECTORY must be specified" msgstr "DIRETÓRIO deve ser especificado" -#: app/flatpak-builtins-build.c:173 app/flatpak-builtins-build-export.c:721 +#: app/flatpak-builtins-build.c:160 app/flatpak-builtins-build-export.c:721 #, c-format msgid "Build directory %s not initialized, use flatpak build-init" msgstr "Diretório de compilação %s não inicializado, use flatpak build-init" -#: app/flatpak-builtins-build.c:192 +#: app/flatpak-builtins-build.c:179 msgid "metadata invalid, not application or runtime" msgstr "metadados inválido, não é aplicativo ou runtime" -#: app/flatpak-builtins-build.c:292 +#: app/flatpak-builtins-build.c:283 #, c-format msgid "No extension point matching %s in %s" msgstr "Nenhum ponto de extensão correspondendo %s em %s" -#: app/flatpak-builtins-build.c:432 +#: app/flatpak-builtins-build.c:433 #, c-format msgid "Missing '=' in bind mount option '%s'" msgstr "Faltando “=” na opção de montagem associativa “%s”" -#: app/flatpak-builtins-build.c:460 common/flatpak-run.c:5406 +#: app/flatpak-builtins-build.c:462 common/flatpak-run.c:3038 msgid "Unable to start app" msgstr "Não foi possível iniciar o aplicativo" @@ -422,37 +462,42 @@ msgstr "Não atualiza o sumário" msgid "GPG Key ID to sign the commit with" msgstr "ID da chave GPG para assinar o commit" -#: app/flatpak-builtins-build-commit-from.c:78 +#: app/flatpak-builtins-build-commit-from.c:228 msgid "DST-REPO [DST-REF]... - Make a new commit based on existing commit(s)" msgstr "" "DST-REPO [DST-REF]… – Faz um novo commit baseado em commit(s) existente(s)" -#: app/flatpak-builtins-build-commit-from.c:85 +#: app/flatpak-builtins-build-commit-from.c:235 msgid "DST-REPO must be specified" msgstr "DST-REPO deve ser especificado" -#: app/flatpak-builtins-build-commit-from.c:93 +#: app/flatpak-builtins-build-commit-from.c:243 msgid "" "If --src-repo is not specified, exactly one destination ref must be specified" msgstr "" "Se --src-repo não for especificado, exatamente uma referência destino deve " "ser especificado" -#: app/flatpak-builtins-build-commit-from.c:96 +#: app/flatpak-builtins-build-commit-from.c:246 msgid "" "If --src-ref is specified, exactly one destination ref must be specified" msgstr "" "Se --src-ref for especificado, exatamente uma referência destino deve ser " "especificado" -#: app/flatpak-builtins-build-commit-from.c:99 +#: app/flatpak-builtins-build-commit-from.c:249 msgid "Either --src-repo or --src-ref must be specified." msgstr "--src-repo ou --src-ref deve ser especificado." -#: app/flatpak-builtins-build-commit-from.c:251 +#: app/flatpak-builtins-build-commit-from.c:402 msgid "Can't commit from partial source commit." msgstr "Não foi possível fazer commit de commit fonte parcial." +#: app/flatpak-builtins-build-commit-from.c:407 +#, c-format +msgid "%s: no change\n" +msgstr "" + #: app/flatpak-builtins-build-export.c:55 msgid "Architecture to export for (must be host compatible)" msgstr "Arquitetura alvo da exportação (deve ser compatível com o hospedeiro)" @@ -490,6 +535,42 @@ msgstr "Sobrepõe o carimbo de tempo do commit" msgid "ISO-8601-TIMESTAMP" msgstr "CARIMBO-TEMPO-ISO-8601" +#: app/flatpak-builtins-build-export.c:341 +#, c-format +msgid "WARNING: Error running desktop-file-validate: %s\n" +msgstr "" + +#: app/flatpak-builtins-build-export.c:349 +#, c-format +msgid "WARNING: Error reading from desktop-file-validate: %s\n" +msgstr "" + +#: app/flatpak-builtins-build-export.c:355 +#, fuzzy, c-format +msgid "WARNING: Failed to validate desktop file %s: %s\n" +msgstr "Falha ao abrir arquivo temporário: %s" + +#: app/flatpak-builtins-build-export.c:370 +#, c-format +msgid "WARNING: Can't find Exec key in %s: %s\n" +msgstr "" + +#: app/flatpak-builtins-build-export.c:378 +#: app/flatpak-builtins-build-export.c:475 +#, c-format +msgid "WARNING: Binary not found for Exec line in %s: %s\n" +msgstr "" + +#: app/flatpak-builtins-build-export.c:385 +#, c-format +msgid "WARNING: Icon not matching app id in %s: %s\n" +msgstr "" + +#: app/flatpak-builtins-build-export.c:413 +#, c-format +msgid "WARNING: Icon referenced in desktop file but not exported: %s\n" +msgstr "" + #: app/flatpak-builtins-build-export.c:551 #, c-format msgid "Invalid uri type %s, only http/https supported" @@ -531,12 +612,41 @@ msgstr "LOCALIZAÇÃO e DIRETÓRIO devem ser especificados" msgid "No name specified in the metadata" msgstr "Nenhum nome especificado nos metadados" +#: app/flatpak-builtins-build-export.c:976 +#, fuzzy, c-format +msgid "Commit: %s\n" +msgstr "Commit:" + +#: app/flatpak-builtins-build-export.c:977 +#, fuzzy, c-format +msgid "Metadata Total: %u\n" +msgstr "Mostra metadados" + +#: app/flatpak-builtins-build-export.c:978 +#, fuzzy, c-format +msgid "Metadata Written: %u\n" +msgstr "Mostra metadados" + +#: app/flatpak-builtins-build-export.c:979 +#, c-format +msgid "Content Total: %u\n" +msgstr "" + +#: app/flatpak-builtins-build-export.c:980 +#, c-format +msgid "Content Written: %u\n" +msgstr "" + +#: app/flatpak-builtins-build-export.c:981 +msgid "Content Bytes Written:" +msgstr "" + #: app/flatpak-builtins-build-finish.c:48 msgid "Command to set" msgstr "Comando para definir" #: app/flatpak-builtins-build-finish.c:48 app/flatpak-builtins-run.c:53 -#: app/flatpak-main.c:159 +#: app/flatpak-main.c:166 msgid "COMMAND" msgstr "COMANDO" @@ -597,6 +707,29 @@ msgstr "Define a opção de metadados genérica" msgid "GROUP=KEY[=VALUE]" msgstr "GRUPO=CHAVE[=VALOR]" +#: app/flatpak-builtins-build-finish.c:139 +#, c-format +msgid "Not exporting %s, wrong prefix\n" +msgstr "" + +#: app/flatpak-builtins-build-finish.c:143 +#, fuzzy, c-format +msgid "Exporting %s\n" +msgstr "Atualizando resumo\n" + +#: app/flatpak-builtins-build-finish.c:384 +msgid "More than one executable found\n" +msgstr "" + +#: app/flatpak-builtins-build-finish.c:395 +#, c-format +msgid "Using %s as command\n" +msgstr "" + +#: app/flatpak-builtins-build-finish.c:400 +msgid "No executable found\n" +msgstr "" + #: app/flatpak-builtins-build-finish.c:433 #, c-format msgid "Too few elements in --extra-data argument %s" @@ -659,6 +792,12 @@ msgstr "Referência “%s” não localizado no registro" msgid "Multiple images in registry, specify a ref with --ref" msgstr "Múltiplas imagens no registro, especifique um ref com --ref" +#: app/flatpak-builtins-build-import-bundle.c:123 +#: app/flatpak-builtins-build-import-bundle.c:151 +#, fuzzy, c-format +msgid "Importing %s (%s)\n" +msgstr "Atualizando: %s de %s\n" + #: app/flatpak-builtins-build-import-bundle.c:172 msgid "LOCATION FILENAME - Import a file bundle into a local repository" msgstr "" @@ -668,7 +807,7 @@ msgstr "" msgid "LOCATION and FILENAME must be specified" msgstr "LOCALIZAÇÃO e ARQUIVO devem ser especificados" -#: app/flatpak-builtins-build-init.c:49 app/flatpak-builtins-info.c:48 +#: app/flatpak-builtins-build-init.c:49 app/flatpak-builtins-info.c:51 #: app/flatpak-builtins-run.c:52 msgid "Arch to use" msgstr "Arquitetura para usar" @@ -761,7 +900,7 @@ msgstr "" "“%s” não é um nome de tipo de compilação válido, use app, runtime ou " "extension" -#: app/flatpak-builtins-build-init.c:205 app/flatpak-builtins-override.c:71 +#: app/flatpak-builtins-build-init.c:205 app/flatpak-builtins-override.c:74 #, c-format msgid "'%s' is not a valid application name: %s" msgstr "“%s” não é um nome de aplicativo válido: %s" @@ -771,12 +910,14 @@ msgstr "“%s” não é um nome de aplicativo válido: %s" msgid "Build directory %s already initialized" msgstr "Diretório de compilação %s já inicializado" -#: app/flatpak-builtins-build-sign.c:41 app/flatpak-builtins-install.c:56 +#: app/flatpak-builtins-build-sign.c:41 app/flatpak-builtins-info-remote.c:48 +#: app/flatpak-builtins-install.c:57 msgid "Arch to install for" msgstr "Arquitetura para a qual será instalada" -#: app/flatpak-builtins-build-sign.c:42 app/flatpak-builtins-install.c:62 -#: app/flatpak-builtins-uninstall.c:48 app/flatpak-builtins-update.c:61 +#: app/flatpak-builtins-build-sign.c:42 app/flatpak-builtins-info-remote.c:50 +#: app/flatpak-builtins-install.c:63 app/flatpak-builtins-uninstall.c:48 +#: app/flatpak-builtins-update.c:61 msgid "Look for runtime with the specified name" msgstr "Procura pelo runtime com o nome especificado" @@ -788,11 +929,49 @@ msgstr "LOCALIZAÇÃO [ID [RAMO]] – Assina um aplicativo ou runtime" msgid "No gpg key ids specified" msgstr "Nenhum id de chave gpg especificado" -#: app/flatpak-builtins-delete-remote.c:37 +#: app/flatpak-builtins-config.c:41 +msgid "List configuration keys and values" +msgstr "" + +#: app/flatpak-builtins-config.c:42 +msgid "Get configuration for KEY" +msgstr "" + +#: app/flatpak-builtins-config.c:43 +msgid "Set configuration for KEY to VALUE" +msgstr "" + +#: app/flatpak-builtins-config.c:44 +msgid "Unset configuration for KEY" +msgstr "" + +#: app/flatpak-builtins-config.c:95 +#, fuzzy, c-format +msgid "Unknown configure key '%s'" +msgstr "Comando desconhecido “%s”" + +#: app/flatpak-builtins-config.c:144 app/flatpak-builtins-config.c:185 +#, fuzzy +msgid "You must specify key" +msgstr "APLICATIVO deve ser especificado" + +#: app/flatpak-builtins-config.c:166 +msgid "You must specify both key and value" +msgstr "" + +#: app/flatpak-builtins-config.c:204 +msgid "[KEY [VALUE]] - Manage configuration" +msgstr "" + +#: app/flatpak-builtins-config.c:223 +msgid "Must specify one of --list, --get, --set or --unset" +msgstr "" + +#: app/flatpak-builtins-delete-remote.c:38 msgid "Remove remote even if in use" msgstr "Remove remoto ainda que ele esteja em uso" -#: app/flatpak-builtins-delete-remote.c:49 +#: app/flatpak-builtins-delete-remote.c:51 msgid "NAME - Delete a remote repository" msgstr "NOME – Exclui um repositório remoto" @@ -943,163 +1122,251 @@ msgstr "Não foi possível trocar o gid" msgid "Can't switch uid" msgstr "Não foi possível trocar o uid" -#: app/flatpak-builtins-info.c:49 app/flatpak-builtins-list.c:46 -#: app/flatpak-builtins-list-remotes.c:43 +#: app/flatpak-builtins-info.c:52 msgid "Show user installations" msgstr "Mostra instalações do usuário" -#: app/flatpak-builtins-info.c:50 app/flatpak-builtins-list.c:47 -#: app/flatpak-builtins-list-remotes.c:44 +#: app/flatpak-builtins-info.c:53 msgid "Show system-wide installations" msgstr "Mostra instalações do sistema" -#: app/flatpak-builtins-info.c:51 app/flatpak-builtins-list.c:48 -#: app/flatpak-builtins-list-remotes.c:45 +#: app/flatpak-builtins-info.c:54 msgid "Show specific system-wide installations" msgstr "Mostra instalações específicas do sistema" -#: app/flatpak-builtins-info.c:52 +#: app/flatpak-builtins-info.c:55 app/flatpak-builtins-info-remote.c:53 msgid "Show ref" msgstr "Mostra referência" -#: app/flatpak-builtins-info.c:53 +#: app/flatpak-builtins-info.c:56 app/flatpak-builtins-info-remote.c:54 msgid "Show commit" msgstr "Mostra commit" -#: app/flatpak-builtins-info.c:54 +#: app/flatpak-builtins-info.c:57 msgid "Show origin" msgstr "Mostra origem" -#: app/flatpak-builtins-info.c:55 +#: app/flatpak-builtins-info.c:58 msgid "Show size" msgstr "Mostra tamanho" -#: app/flatpak-builtins-info.c:56 +#: app/flatpak-builtins-info.c:59 app/flatpak-builtins-info-remote.c:56 msgid "Show metadata" msgstr "Mostra metadados" -#: app/flatpak-builtins-info.c:57 -msgid "Show extensions" +#: app/flatpak-builtins-info.c:60 +#, fuzzy +msgid "Show permissions" msgstr "Mostra extensões" -#: app/flatpak-builtins-info.c:97 -msgid "NAME [BRANCH] - Get info about installed app and/or runtime" -msgstr "NOME [RAMO] – Obtém info sobre aplicativo e/ou runtime instalados" +#: app/flatpak-builtins-info.c:61 +#, fuzzy +msgid "Query file access" +msgstr "" +"\n" +" Gerência de acesso a arquivos" -#: app/flatpak-builtins-info.c:157 -msgid "ref not present in origin" -msgstr "ref não presento na origem" - -#: app/flatpak-builtins-info.c:159 -msgid "Ref:" -msgstr "Ref:" - -#: app/flatpak-builtins-info.c:160 app/flatpak-builtins-info.c:270 -msgid "ID:" -msgstr "ID:" - -#: app/flatpak-builtins-info.c:161 -msgid "Arch:" -msgstr "Arq.:" - -#: app/flatpak-builtins-info.c:162 -msgid "Branch:" -msgstr "Ramo:" - -#: app/flatpak-builtins-info.c:163 app/flatpak-builtins-info.c:271 -msgid "Origin:" -msgstr "Origem:" - -#: app/flatpak-builtins-info.c:166 -msgid "Active commit:" -msgstr "Commit ativo:" - -#: app/flatpak-builtins-info.c:167 -msgid "Latest commit:" -msgstr "Último commit:" - -#: app/flatpak-builtins-info.c:170 app/flatpak-builtins-info.c:272 -msgid "Commit:" -msgstr "Commit:" - -#: app/flatpak-builtins-info.c:172 -msgid "alt-id:" -msgstr "alt-id:" - -#: app/flatpak-builtins-info.c:173 -msgid "Location:" -msgstr "Localização:" - -#: app/flatpak-builtins-info.c:174 app/flatpak-builtins-info.c:273 -msgid "Installed size:" -msgstr "Tamanho instalado:" - -#: app/flatpak-builtins-info.c:179 -msgid "Runtime:" -msgstr "Runtime:" - -#: app/flatpak-builtins-info.c:184 -msgid "Installed subdirectories:" -msgstr "Subdiretórios instalados:" - -#: app/flatpak-builtins-info.c:269 -msgid "Extension:" -msgstr "Extensões:" - -#: app/flatpak-builtins-info.c:280 -msgid "Subpaths:" -msgstr "Subcaminhos:" - -#: app/flatpak-builtins-install.c:57 -msgid "Don't pull, only install from local cache" -msgstr "Não faz pull, apenas instala do cache local" - -#: app/flatpak-builtins-install.c:58 app/flatpak-builtins-update.c:57 -msgid "Don't deploy, only download to local cache" -msgstr "Não implementa (deploy), apenas baixa para o cache local" - -#: app/flatpak-builtins-install.c:59 -msgid "Don't install related refs" -msgstr "Não instala referências relacionadas" - -#: app/flatpak-builtins-install.c:60 app/flatpak-builtins-update.c:59 -msgid "Don't verify/install runtime dependencies" -msgstr "Não verifica/instala dependências de runtime" - -#: app/flatpak-builtins-install.c:61 app/flatpak-builtins-update.c:60 -msgid "Don't use static deltas" -msgstr "Não usa deltas estáticos" - -#: app/flatpak-builtins-install.c:63 app/flatpak-builtins-uninstall.c:49 -#: app/flatpak-builtins-update.c:62 -msgid "Look for app with the specified name" -msgstr "Procura pelo aplicativo com o nome especificado" - -#: app/flatpak-builtins-install.c:64 -msgid "Assume LOCATION is a .flatpak single-file bundle" -msgstr "Presume LOCALIZAÇÃO como sendo um pacote de arquivo único .flatpak" - -#: app/flatpak-builtins-install.c:65 -msgid "Assume LOCATION is a .flatpakref application description" -msgstr "Presume LOCALIZAÇÃO como sendo uma descrição de aplicativo .flatpakref" - -#: app/flatpak-builtins-install.c:66 -msgid "Check bundle signatures with GPG key from FILE (- for stdin)" -msgstr "Verifica assinaturas de pacote com chave GPG do ARQUIVO (- para stdin)" - -#: app/flatpak-builtins-install.c:67 -msgid "Only install this subpath" -msgstr "Instala apenas esse subcaminho" - -#: app/flatpak-builtins-install.c:67 app/flatpak-builtins-update.c:64 +#: app/flatpak-builtins-info.c:61 app/flatpak-builtins-install.c:68 +#: app/flatpak-builtins-update.c:64 msgid "PATH" msgstr "CAMINHO" -#: app/flatpak-builtins-install.c:68 app/flatpak-builtins-update.c:65 +#: app/flatpak-builtins-info.c:62 +msgid "Show extensions" +msgstr "Mostra extensões" + +#: app/flatpak-builtins-info.c:118 +msgid "NAME [BRANCH] - Get info about installed app and/or runtime" +msgstr "NOME [RAMO] – Obtém info sobre aplicativo e/ou runtime instalados" + +#: app/flatpak-builtins-info.c:189 +msgid "ref not present in origin" +msgstr "ref não presento na origem" + +#: app/flatpak-builtins-info.c:202 app/flatpak-builtins-info-remote.c:177 +msgid "Warning: Commit has no flatpak metadata\n" +msgstr "" + +#: app/flatpak-builtins-info.c:209 app/flatpak-builtins-info-remote.c:200 +msgid "Ref:" +msgstr "Ref:" + +#: app/flatpak-builtins-info.c:210 app/flatpak-builtins-info.c:364 +#: app/flatpak-builtins-info-remote.c:201 +msgid "ID:" +msgstr "ID:" + +#: app/flatpak-builtins-info.c:211 app/flatpak-builtins-info-remote.c:202 +msgid "Arch:" +msgstr "Arq.:" + +#: app/flatpak-builtins-info.c:212 app/flatpak-builtins-info-remote.c:203 +msgid "Branch:" +msgstr "Ramo:" + +#: app/flatpak-builtins-info.c:213 app/flatpak-builtins-info.c:365 +msgid "Origin:" +msgstr "Origem:" + +#: app/flatpak-builtins-info.c:215 app/flatpak-builtins-info-remote.c:205 +#, fuzzy +msgid "Collection ID:" +msgstr "ID de coleção" + +#: app/flatpak-builtins-info.c:217 app/flatpak-builtins-info-remote.c:206 +msgid "Date:" +msgstr "" + +#: app/flatpak-builtins-info.c:219 app/flatpak-builtins-info-remote.c:207 +msgid "Subject:" +msgstr "" + +#: app/flatpak-builtins-info.c:223 +msgid "Active commit:" +msgstr "Commit ativo:" + +#: app/flatpak-builtins-info.c:224 +msgid "Latest commit:" +msgstr "Último commit:" + +#: app/flatpak-builtins-info.c:227 app/flatpak-builtins-info.c:366 +#: app/flatpak-builtins-info-remote.c:208 +msgid "Commit:" +msgstr "Commit:" + +#: app/flatpak-builtins-info.c:229 +msgid "alt-id:" +msgstr "alt-id:" + +#: app/flatpak-builtins-info.c:230 app/flatpak-builtins-info-remote.c:209 +msgid "Parent:" +msgstr "" + +#: app/flatpak-builtins-info.c:231 +msgid "Location:" +msgstr "Localização:" + +#: app/flatpak-builtins-info.c:232 app/flatpak-builtins-info.c:367 +#: app/flatpak-builtins-info-remote.c:211 +msgid "Installed size:" +msgstr "Tamanho instalado:" + +#: app/flatpak-builtins-info.c:237 app/flatpak-builtins-info-remote.c:216 +msgid "Runtime:" +msgstr "Runtime:" + +#: app/flatpak-builtins-info.c:242 +msgid "Installed subdirectories:" +msgstr "Subdiretórios instalados:" + +#: app/flatpak-builtins-info.c:363 +msgid "Extension:" +msgstr "Extensões:" + +#: app/flatpak-builtins-info.c:374 +msgid "Subpaths:" +msgstr "Subcaminhos:" + +#: app/flatpak-builtins-info-remote.c:49 +msgid "Commit to show info for" +msgstr "" + +#: app/flatpak-builtins-info-remote.c:51 app/flatpak-builtins-install.c:64 +#: app/flatpak-builtins-uninstall.c:49 app/flatpak-builtins-update.c:62 +msgid "Look for app with the specified name" +msgstr "Procura pelo aplicativo com o nome especificado" + +#: app/flatpak-builtins-info-remote.c:52 +msgid "Display log" +msgstr "" + +#: app/flatpak-builtins-info-remote.c:55 +#, fuzzy +msgid "Show parent" +msgstr "Mostra referência" + +#: app/flatpak-builtins-info-remote.c:122 +msgid "" +" REMOTE REF - Show information about an application or runtime in a remote" +msgstr "" + +#: app/flatpak-builtins-info-remote.c:133 app/flatpak-builtins-install.c:499 +msgid "REMOTE and REF must be specified" +msgstr "REMOTO e REF devem ser especificados" + +#: app/flatpak-builtins-info-remote.c:210 +#, fuzzy +msgid "Download size:" +msgstr "Tamanho baixado" + +#: app/flatpak-builtins-info-remote.c:223 +msgid "History:\n" +msgstr "" + +#: app/flatpak-builtins-info-remote.c:244 +msgid " Subject:" +msgstr "" + +#: app/flatpak-builtins-info-remote.c:245 +msgid " Date:" +msgstr "" + +#: app/flatpak-builtins-info-remote.c:246 +#, fuzzy +msgid " Commit:" +msgstr "Commit:" + +#: app/flatpak-builtins-info-remote.c:292 +#, c-format +msgid "Warning: Commit %s has no flatpak metadata\n" +msgstr "" + +#: app/flatpak-builtins-install.c:58 +msgid "Don't pull, only install from local cache" +msgstr "Não faz pull, apenas instala do cache local" + +#: app/flatpak-builtins-install.c:59 app/flatpak-builtins-update.c:57 +msgid "Don't deploy, only download to local cache" +msgstr "Não implementa (deploy), apenas baixa para o cache local" + +#: app/flatpak-builtins-install.c:60 +msgid "Don't install related refs" +msgstr "Não instala referências relacionadas" + +#: app/flatpak-builtins-install.c:61 app/flatpak-builtins-update.c:59 +msgid "Don't verify/install runtime dependencies" +msgstr "Não verifica/instala dependências de runtime" + +#: app/flatpak-builtins-install.c:62 app/flatpak-builtins-update.c:60 +msgid "Don't use static deltas" +msgstr "Não usa deltas estáticos" + +#: app/flatpak-builtins-install.c:65 +msgid "Assume LOCATION is a .flatpak single-file bundle" +msgstr "Presume LOCALIZAÇÃO como sendo um pacote de arquivo único .flatpak" + +#: app/flatpak-builtins-install.c:66 +msgid "Assume LOCATION is a .flatpakref application description" +msgstr "Presume LOCALIZAÇÃO como sendo uma descrição de aplicativo .flatpakref" + +#: app/flatpak-builtins-install.c:67 +msgid "Check bundle signatures with GPG key from FILE (- for stdin)" +msgstr "Verifica assinaturas de pacote com chave GPG do ARQUIVO (- para stdin)" + +#: app/flatpak-builtins-install.c:68 +msgid "Only install this subpath" +msgstr "Instala apenas esse subcaminho" + +#: app/flatpak-builtins-install.c:69 app/flatpak-builtins-update.c:65 msgid "Automatically answer yes for all questions" msgstr "Responde sim automaticamente para todas as perguntas" -#: app/flatpak-builtins-install.c:210 +#: app/flatpak-builtins-install.c:70 +#, fuzzy +msgid "Uninstall first if already installed" +msgstr "%s commit %s já está instalado" + +#: app/flatpak-builtins-install.c:212 #, c-format msgid "" "This application depends on runtimes from:\n" @@ -1110,151 +1377,148 @@ msgstr "" " %s\n" "Configure esse como o novo remoto “%s”" -#: app/flatpak-builtins-install.c:214 app/flatpak-builtins-install.c:340 +#: app/flatpak-builtins-install.c:216 app/flatpak-builtins-install.c:342 #, c-format msgid "Configuring %s as new remote '%s'" msgstr "Configurando %s como novo remoto “%s”" -#: app/flatpak-builtins-install.c:262 +#: app/flatpak-builtins-install.c:264 msgid "Bundle filename must be specified" msgstr "Arquivo do pacote deve ser especificado" -#: app/flatpak-builtins-install.c:272 +#: app/flatpak-builtins-install.c:274 msgid "Remote bundles are not supported" msgstr "Não há suporte a pacotes remotos" -#: app/flatpak-builtins-install.c:336 -#, c-format +#: app/flatpak-builtins-install.c:338 +#, fuzzy, c-format msgid "" "The remote '%s', at location %s contains additional applications.\n" -"Do you want to install other applications from here?" +"Should the remote be kept for future installations?" msgstr "" "O remoto “%s”, na localização %s contém aplicativos adicionais.\n" "Você deseja instalar outros aplicativos daqui?" -#: app/flatpak-builtins-install.c:396 +#: app/flatpak-builtins-install.c:398 msgid "Filename or uri must be specified" msgstr "Arquivo ou uri deve ser especificado" -#: app/flatpak-builtins-install.c:440 +#: app/flatpak-builtins-install.c:442 #, c-format msgid "Installing: %s\n" msgstr "Instalando: %s\n" -#: app/flatpak-builtins-install.c:470 +#: app/flatpak-builtins-install.c:474 msgid "LOCATION/REMOTE [REF...] - Install applications or runtimes" msgstr "LOCALIZAÇÃO/REMOTO [REF…] – Instala aplicativos ou runtimes" -#: app/flatpak-builtins-install.c:491 -msgid "REMOTE and REF must be specified" -msgstr "REMOTO e REF devem ser especificados" - -#: app/flatpak-builtins-list.c:49 +#: app/flatpak-builtins-list.c:43 msgid "Show extra information" msgstr "Mostra informações extras" -#: app/flatpak-builtins-list.c:50 +#: app/flatpak-builtins-list.c:44 msgid "List installed runtimes" msgstr "Lista runtimes instalados" -#: app/flatpak-builtins-list.c:51 +#: app/flatpak-builtins-list.c:45 msgid "List installed applications" msgstr "Lista aplicativos instalados" -#: app/flatpak-builtins-list.c:52 +#: app/flatpak-builtins-list.c:46 msgid "Arch to show" msgstr "Arquitetura para mostrar" -#: app/flatpak-builtins-list.c:53 app/flatpak-builtins-ls-remote.c:49 +#: app/flatpak-builtins-list.c:47 app/flatpak-builtins-ls-remote.c:50 msgid "List all refs (including locale/debug)" msgstr "Lista todos os refs (incluindo localidade/depuração)" -#: app/flatpak-builtins-list.c:131 app/flatpak-builtins-ls-remote.c:129 +#: app/flatpak-builtins-list.c:125 app/flatpak-builtins-ls-remote.c:174 #: app/flatpak-builtins-repo.c:98 msgid "Ref" msgstr "Ref" -#: app/flatpak-builtins-list.c:134 app/flatpak-builtins-ls-remote.c:131 +#: app/flatpak-builtins-list.c:128 app/flatpak-builtins-ls-remote.c:176 msgid "Origin" msgstr "Origem" -#: app/flatpak-builtins-list.c:135 +#: app/flatpak-builtins-list.c:129 msgid "Active commit" msgstr "Commit ativo" -#: app/flatpak-builtins-list.c:136 +#: app/flatpak-builtins-list.c:130 msgid "Latest commit" msgstr "Último commit" -#: app/flatpak-builtins-list.c:137 app/flatpak-builtins-ls-remote.c:133 +#: app/flatpak-builtins-list.c:131 app/flatpak-builtins-ls-remote.c:178 msgid "Installed size" msgstr "Tamanho instalado" -#: app/flatpak-builtins-list.c:139 app/flatpak-builtins-list-remotes.c:112 +#: app/flatpak-builtins-list.c:133 app/flatpak-builtins-list-remotes.c:73 msgid "Options" msgstr "Opções" -#: app/flatpak-builtins-list.c:375 +#: app/flatpak-builtins-list.c:305 msgid " - List installed apps and/or runtimes" msgstr " – Lista os aplicativos e/ou runtimes instalados" -#: app/flatpak-builtins-list-remotes.c:46 +#: app/flatpak-builtins-list-remotes.c:40 msgid "Show remote details" msgstr "Mostra os detalhes do remoto" -#: app/flatpak-builtins-list-remotes.c:47 +#: app/flatpak-builtins-list-remotes.c:41 msgid "Show disabled remotes" msgstr "Mostra remotos desabilitados" -#: app/flatpak-builtins-list-remotes.c:59 +#: app/flatpak-builtins-list-remotes.c:53 msgid " - List remote repositories" msgstr " – Lista repositórios remotos" -#: app/flatpak-builtins-list-remotes.c:105 +#: app/flatpak-builtins-list-remotes.c:66 msgid "Name" msgstr "Nome" -#: app/flatpak-builtins-list-remotes.c:108 +#: app/flatpak-builtins-list-remotes.c:69 msgid "Title" msgstr "Título" -#: app/flatpak-builtins-list-remotes.c:110 +#: app/flatpak-builtins-list-remotes.c:71 msgid "Priority" msgstr "Prioridade" -#: app/flatpak-builtins-ls-remote.c:44 +#: app/flatpak-builtins-ls-remote.c:45 msgid "Show arches and branches" msgstr "Mostra arquiteturas e ramos" -#: app/flatpak-builtins-ls-remote.c:45 +#: app/flatpak-builtins-ls-remote.c:46 msgid "Show only runtimes" msgstr "Mostra apenas runtimes" -#: app/flatpak-builtins-ls-remote.c:46 +#: app/flatpak-builtins-ls-remote.c:47 msgid "Show only apps" msgstr "Mostra apenas aplicativos" -#: app/flatpak-builtins-ls-remote.c:47 +#: app/flatpak-builtins-ls-remote.c:48 msgid "Show only those where updates are available" msgstr "Mostra apenas aqueles com atualizações disponíveis" -#: app/flatpak-builtins-ls-remote.c:48 +#: app/flatpak-builtins-ls-remote.c:49 msgid "Limit to this arch (* for all)" msgstr "Limita a essa arquitetura (* para todas)" -#: app/flatpak-builtins-ls-remote.c:74 -msgid " REMOTE - Show available runtimes and applications" +#: app/flatpak-builtins-ls-remote.c:96 +#, fuzzy +msgid " [REMOTE] - Show available runtimes and applications" msgstr " REMOTO – Mostra runtimes e aplicativos disponíveis" -#: app/flatpak-builtins-ls-remote.c:132 +#: app/flatpak-builtins-ls-remote.c:177 msgid "Commit" msgstr "Commit" -#: app/flatpak-builtins-ls-remote.c:134 +#: app/flatpak-builtins-ls-remote.c:179 msgid "Download size" msgstr "Tamanho baixado" -#: app/flatpak-builtins-ls-remote.c:245 +#: app/flatpak-builtins-ls-remote.c:304 msgid "No ref information available in repository" msgstr "Nenhuma informação de ref disponível no repositório" @@ -1262,28 +1526,63 @@ msgstr "Nenhuma informação de ref disponível no repositório" msgid "Arch to make current for" msgstr "Arquitetura para a qual será tornada atual" -#: app/flatpak-builtins-make-current.c:57 +#: app/flatpak-builtins-make-current.c:58 msgid "APP BRANCH - Make branch of application current" msgstr "APLICATIVO RAMO – Faz o ramo do aplicativo atual" -#: app/flatpak-builtins-make-current.c:64 app/flatpak-builtins-override.c:63 -#: app/flatpak-builtins-run.c:105 +#: app/flatpak-builtins-make-current.c:69 app/flatpak-builtins-run.c:105 msgid "APP must be specified" msgstr "APLICATIVO deve ser especificado" -#: app/flatpak-builtins-make-current.c:79 +#: app/flatpak-builtins-make-current.c:84 msgid "BRANCH must be specified" msgstr "RAMO deve ser especificado" -#: app/flatpak-builtins-make-current.c:92 +#: app/flatpak-builtins-make-current.c:97 #, c-format msgid "App %s branch %s is not installed" msgstr "Aplicativo %s ramo %s não está instalado" -#: app/flatpak-builtins-override.c:53 -msgid "APP - Override settings for application" +#: app/flatpak-builtins-override.c:54 +#, fuzzy +msgid "[APP] - Override settings [for application]" msgstr "APLICATIVO – Sobrepõe as configurações para um aplicativo" +#: app/flatpak-builtins-repo.c:48 +#, fuzzy, c-format +msgid "Title: %s\n" +msgstr "Título" + +#: app/flatpak-builtins-repo.c:51 +#, fuzzy, c-format +msgid "Collection ID: %s\n" +msgstr "ID de coleção" + +#: app/flatpak-builtins-repo.c:54 +#, c-format +msgid "Default branch: %s\n" +msgstr "" + +#: app/flatpak-builtins-repo.c:57 +#, c-format +msgid "Redirect URL: %s\n" +msgstr "" + +#: app/flatpak-builtins-repo.c:60 +#, fuzzy, c-format +msgid "Redirect collection ID: %s\n" +msgstr "ID de coleção" + +#: app/flatpak-builtins-repo.c:68 +#, c-format +msgid "GPG key hash: %s\n" +msgstr "" + +#: app/flatpak-builtins-repo.c:77 +#, c-format +msgid "%zd branches\n" +msgstr "" + #: app/flatpak-builtins-repo.c:99 msgid "Installed" msgstr "Instalado" @@ -1304,7 +1603,7 @@ msgstr "Lisa os ramos no repositório" msgid "Print metadata for a branch" msgstr "Mostra metadados para um ramo" -#: app/flatpak-builtins-repo.c:167 +#: app/flatpak-builtins-repo.c:168 msgid "LOCATION - Repository maintenance" msgstr "LOCALIZAÇÃO – Manutenção de repositório" @@ -1415,14 +1714,6 @@ msgstr "Runtime para usar" msgid "Runtime version to use" msgstr "Versão do runtime para usar" -#: app/flatpak-builtins-run.c:58 -msgid "Log session bus calls" -msgstr "Registra o log das chamadas de barramento de sessão" - -#: app/flatpak-builtins-run.c:59 -msgid "Log system bus calls" -msgstr "Registra o log das chamadas de barramento de sistema" - #: app/flatpak-builtins-run.c:60 msgid "Log accessibility bus calls" msgstr "Registra o log das chamadas de barramento de acessibilidade" @@ -1435,6 +1726,44 @@ msgstr "Habilita encaminhamento de arquivo" msgid "APP [args...] - Run an app" msgstr "APLICATIVO [args…] – Executa um aplicativo" +#: app/flatpak-builtins-search.c:239 +msgid "TEXT - Search remote apps/runtimes for text" +msgstr "" + +#: app/flatpak-builtins-search.c:249 +#, fuzzy +msgid "TEXT must be specified" +msgstr "REMOTO deve ser especificado" + +#: app/flatpak-builtins-search.c:305 +#, fuzzy +msgid "Application ID" +msgstr "ID de coleção" + +#: app/flatpak-builtins-search.c:306 +msgid "Version" +msgstr "" + +#: app/flatpak-builtins-search.c:308 +#, fuzzy +msgid "Branch" +msgstr "Ramo:" + +#: app/flatpak-builtins-search.c:310 +#, fuzzy +msgid "Remotes" +msgstr "Nenhum remoto %s" + +#: app/flatpak-builtins-search.c:311 +#, fuzzy +msgid "Description" +msgstr "Descrição completa" + +#: app/flatpak-builtins-search.c:320 +#, fuzzy +msgid "No matches found" +msgstr "Sem combinações com %s" + #: app/flatpak-builtins-uninstall.c:44 msgid "Arch to uninstall" msgstr "Arquitetura para desinstalar" @@ -1451,19 +1780,24 @@ msgstr "Não desinstala referências relacionadas" msgid "Remove files even if running" msgstr "Remove arquivos ainda que estejam em execução" -#: app/flatpak-builtins-uninstall.c:69 +#: app/flatpak-builtins-uninstall.c:70 msgid "REF... - Uninstall an application" msgstr "REF… – Desinstala um aplicativo" -#: app/flatpak-builtins-uninstall.c:76 +#: app/flatpak-builtins-uninstall.c:81 msgid "Must specify at least one REF" msgstr "Deve especificar pelo menos uma REF" -#: app/flatpak-builtins-uninstall.c:129 app/flatpak-transaction.c:340 +#: app/flatpak-builtins-uninstall.c:134 app/flatpak-transaction.c:355 #, c-format msgid "Warning: Problem looking for related refs: %s\n" msgstr "Aviso: Problema ao procurar por refs relacionadas: %s\n" +#: app/flatpak-builtins-uninstall.c:164 +#, fuzzy, c-format +msgid "Uninstalling: %s\n" +msgstr "Instalando: %s\n" + #: app/flatpak-builtins-update.c:53 msgid "Arch to update for" msgstr "Arquitetura para a qual será atualizada" @@ -1472,10 +1806,6 @@ msgstr "Arquitetura para a qual será atualizada" msgid "Commit to deploy" msgstr "Commit para implementar" -#: app/flatpak-builtins-update.c:54 -msgid "COMMIT" -msgstr "COMMIT" - #: app/flatpak-builtins-update.c:55 msgid "Remove old files even if running" msgstr "Remove arquivos antigos ainda que estejam em execução" @@ -1496,42 +1826,94 @@ msgstr "Atualiza appstream para remoto" msgid "Only update this subpath" msgstr "Atualiza apenas esse subcaminho" -#: app/flatpak-builtins-update.c:95 -#, c-format -msgid "Updating appstream for remote %s\n" -msgstr "Atualizando appstream para remoto %s\n" - -#: app/flatpak-builtins-update.c:133 +#: app/flatpak-builtins-update.c:83 msgid "[REF...] - Update applications or runtimes" msgstr "[REF…] – Atualiza aplicativos ou runtimes" +#: app/flatpak-builtins-update.c:119 +#, fuzzy +msgid "Looking for updates...\n" +msgstr "Nenhuma atualização.\n" + +#: app/flatpak-builtins-utils.c:365 +#, c-format +msgid "Remote ‘%s’ found in multiple installations:\n" +msgstr "" + +#: app/flatpak-builtins-utils.c:372 +#, fuzzy +msgid "Which do you want to use (0 to abort)?" +msgstr "Qual você deseja instalar (0 para abortar)?" + +#: app/flatpak-builtins-utils.c:374 +#, c-format +msgid "No remote chosen to resolve ‘%s’ which exists in multiple installations" +msgstr "" + +#: app/flatpak-builtins-utils.c:479 app/flatpak-builtins-utils.c:481 +#, fuzzy, c-format +msgid "Updating appstream data for user remote %s\n" +msgstr "Atualizando appstream para remoto %s\n" + +#: app/flatpak-builtins-utils.c:486 app/flatpak-builtins-utils.c:488 +#, fuzzy, c-format +msgid "Updating appstream data for remote %s\n" +msgstr "Atualizando appstream para remoto %s\n" + +#: app/flatpak-builtins-utils.c:493 +#, fuzzy, c-format +msgid "Error updating: %s\n" +msgstr "Atualizando resumo\n" + +#: app/flatpak-builtins-utils.c:526 +#, c-format +msgid "Remote \"%s\" not found" +msgstr "" + #. translators: please keep the leading space -#: app/flatpak-main.c:61 +#: app/flatpak-main.c:62 msgid " Manage installed apps and runtimes" msgstr " Gerência de aplicativos e runtimes instalados" -#: app/flatpak-main.c:62 +#: app/flatpak-main.c:63 msgid "Install an application or runtime" msgstr "Instala um aplicativo ou runtime" -#: app/flatpak-main.c:63 +#: app/flatpak-main.c:64 msgid "Update an installed application or runtime" msgstr "Atualiza um aplicativo ou runtime instalado" -#: app/flatpak-main.c:64 +#: app/flatpak-main.c:65 msgid "Uninstall an installed application or runtime" msgstr "Desinstala um aplicativo ou runtime instalado" -#: app/flatpak-main.c:65 +#: app/flatpak-main.c:66 msgid "List installed apps and/or runtimes" msgstr "Lista aplicativos e/ou runtimes instalados" -#: app/flatpak-main.c:66 +#: app/flatpak-main.c:67 msgid "Show info for installed app or runtime" msgstr "Mostra informações do aplicativo ou runtime instalado" +#: app/flatpak-main.c:68 +#, fuzzy +msgid "Configure flatpak" +msgstr "Configurar remoto" + #. translators: please keep the leading newline and space -#: app/flatpak-main.c:69 +#: app/flatpak-main.c:71 +#, fuzzy +msgid "" +"\n" +" Finding applications and runtimes" +msgstr "Assina um aplicativo ou runtime" + +#: app/flatpak-main.c:72 +msgid "Search for remote apps/runtimes" +msgstr "" + +#. translators: please keep the leading newline and space +#: app/flatpak-main.c:75 msgid "" "\n" " Running applications" @@ -1539,24 +1921,24 @@ msgstr "" "\n" " Execução de aplicativos" -#: app/flatpak-main.c:70 +#: app/flatpak-main.c:76 msgid "Run an application" msgstr "Executa um aplicativo" -#: app/flatpak-main.c:71 +#: app/flatpak-main.c:77 msgid "Override permissions for an application" msgstr "Sobrepõe as permissões para um aplicativo" -#: app/flatpak-main.c:72 +#: app/flatpak-main.c:78 msgid "Specify default version to run" msgstr "Especifica a versão padrão para executar" -#: app/flatpak-main.c:73 +#: app/flatpak-main.c:79 msgid "Enter the namespace of a running application" msgstr "Insere o espaço de nome de um aplicativo em execução" #. translators: please keep the leading newline and space -#: app/flatpak-main.c:76 +#: app/flatpak-main.c:82 msgid "" "\n" " Manage file access" @@ -1564,24 +1946,24 @@ msgstr "" "\n" " Gerência de acesso a arquivos" -#: app/flatpak-main.c:77 +#: app/flatpak-main.c:83 msgid "Grant an application access to a specific file" msgstr "Concede a um aplicativo acesso a um arquivo específico" -#: app/flatpak-main.c:78 +#: app/flatpak-main.c:84 msgid "Revoke access to a specific file" msgstr "Revoga o acesso a um arquivo específico" -#: app/flatpak-main.c:79 +#: app/flatpak-main.c:85 msgid "Show information about a specific file" msgstr "Mostra informações sobre um arquivo específico" -#: app/flatpak-main.c:80 +#: app/flatpak-main.c:86 msgid "List exported files" msgstr "Lista arquivos exportados" #. translators: please keep the leading newline and space -#: app/flatpak-main.c:83 +#: app/flatpak-main.c:89 msgid "" "\n" " Manage remote repositories" @@ -1589,28 +1971,33 @@ msgstr "" "\n" " Gerência de repositórios remotos" -#: app/flatpak-main.c:84 +#: app/flatpak-main.c:90 msgid "List all configured remotes" msgstr "Lista todos os remotos configurados" -#: app/flatpak-main.c:85 +#: app/flatpak-main.c:91 msgid "Add a new remote repository (by URL)" msgstr "Adiciona um novo repositório remoto (via URL)" -#: app/flatpak-main.c:86 +#: app/flatpak-main.c:92 msgid "Modify properties of a configured remote" msgstr "Modifica as propriedades de um remoto configurado" -#: app/flatpak-main.c:87 +#: app/flatpak-main.c:93 msgid "Delete a configured remote" msgstr "Exclui um remoto configurado" -#: app/flatpak-main.c:89 +#: app/flatpak-main.c:95 msgid "List contents of a configured remote" msgstr "Lista o conteúdo de um remoto configurado" +#: app/flatpak-main.c:96 +#, fuzzy +msgid "Show information about a remote app or runtime" +msgstr "Mostra informações do aplicativo ou runtime instalado" + #. translators: please keep the leading newline and space -#: app/flatpak-main.c:92 +#: app/flatpak-main.c:99 msgid "" "\n" " Build applications" @@ -1618,506 +2005,285 @@ msgstr "" "\n" " Compilação de aplicativos" -#: app/flatpak-main.c:93 +#: app/flatpak-main.c:100 msgid "Initialize a directory for building" msgstr "Inicializa um diretório para compilação" -#: app/flatpak-main.c:94 +#: app/flatpak-main.c:101 msgid "Run a build command inside the build dir" msgstr "Executa um comando de compilar dentro do diretório de compilação" -#: app/flatpak-main.c:95 +#: app/flatpak-main.c:102 msgid "Finish a build dir for export" msgstr "Finaliza um diretório de compilação para exportar" -#: app/flatpak-main.c:96 +#: app/flatpak-main.c:103 msgid "Export a build dir to a repository" msgstr "Exporta um diretório de compilação para um repositório" -#: app/flatpak-main.c:97 -msgid "Create a bundle file from a build directory" +#: app/flatpak-main.c:104 +#, fuzzy +msgid "Create a bundle file from a ref in a local repository" msgstr "Cria um arquivo de pacote a partir de um diretório de compilação" -#: app/flatpak-main.c:98 +#: app/flatpak-main.c:105 msgid "Import a bundle file" msgstr "Importa um arquivo de pacote" -#: app/flatpak-main.c:99 +#: app/flatpak-main.c:106 msgid "Sign an application or runtime" msgstr "Assina um aplicativo ou runtime" -#: app/flatpak-main.c:100 +#: app/flatpak-main.c:107 msgid "Update the summary file in a repository" msgstr "Atualiza o arquivo de sumário num repositório" -#: app/flatpak-main.c:101 +#: app/flatpak-main.c:108 msgid "Create new commit based on existing ref" msgstr "Cria um novo commit baseado numa referência existente" -#: app/flatpak-main.c:102 +#: app/flatpak-main.c:109 msgid "Print information about a repo" msgstr "Mostra informações sobre um repo" -#: app/flatpak-main.c:119 +#: app/flatpak-main.c:126 #, fuzzy msgid "Print debug information during command processing, -vv for more detail" msgstr "Exibe informações de depuração durante o processamento de comandos" -#: app/flatpak-main.c:120 +#: app/flatpak-main.c:127 msgid "Print OSTree debug information during command processing" msgstr "" "Exibe a informações de depuração da árvore do sistema durante o " "processamento de comandos" -#: app/flatpak-main.c:121 +#: app/flatpak-main.c:128 msgid "Show help options" msgstr "Mostra opções de ajuda" -#: app/flatpak-main.c:126 +#: app/flatpak-main.c:133 msgid "Print version information and exit" msgstr "Exibe informações sobre a versão e sai" -#: app/flatpak-main.c:127 +#: app/flatpak-main.c:134 msgid "Print default arch and exit" msgstr "Exibe a arquitetura padrão e sai" -#: app/flatpak-main.c:128 +#: app/flatpak-main.c:135 msgid "Print supported arches and exit" msgstr "Exibe arquiteturas para as quais há suporte e sai" -#: app/flatpak-main.c:129 +#: app/flatpak-main.c:136 msgid "Print active gl drivers and exit" msgstr "Exibe drivers gl ativos e sai" -#: app/flatpak-main.c:134 +#: app/flatpak-main.c:141 msgid "Work on user installations" msgstr "Trabalha em instalações do usuário" -#: app/flatpak-main.c:135 +#: app/flatpak-main.c:142 msgid "Work on system-wide installations (default)" msgstr "Trabalha em instalações do sistema (padrão)" -#: app/flatpak-main.c:136 -msgid "Work on a specific system-wide installation" +#: app/flatpak-main.c:143 +#, fuzzy +msgid "Work on specific system-wide installation(s)" msgstr "Trabalha instalações específicas do sistema" -#: app/flatpak-main.c:136 +#: app/flatpak-main.c:143 msgid "NAME" msgstr "NOME" -#: app/flatpak-main.c:162 +#: app/flatpak-main.c:169 msgid "Builtin Commands:" msgstr "Comandos embutidos:" -#: app/flatpak-main.c:388 +#: app/flatpak-main.c:370 +msgid "" +"The --installation option was used multiple times for a command that works " +"on one installation" +msgstr "" + +#: app/flatpak-main.c:489 #, c-format msgid "Unknown command '%s'" msgstr "Comando desconhecido “%s”" -#: app/flatpak-main.c:396 +#: app/flatpak-main.c:497 msgid "No command specified" msgstr "Nenhum comando especificado" -#: app/flatpak-main.c:514 +#: app/flatpak-main.c:615 msgid "error:" msgstr "erro:" -#: app/flatpak-transaction.c:302 +#: app/flatpak-transaction.c:313 +#, fuzzy, c-format +msgid "Found in remote %s\n" +msgstr "Localizado em diversos remotos:\n" + +#: app/flatpak-transaction.c:317 #, c-format msgid "Found in remote %s, do you want to install it?" msgstr "Localizado no remoto %s, você deseja instalá-lo?" -#: app/flatpak-transaction.c:307 +#: app/flatpak-transaction.c:322 msgid "Found in several remotes:\n" msgstr "Localizado em diversos remotos:\n" -#: app/flatpak-transaction.c:312 +#: app/flatpak-transaction.c:327 msgid "Which do you want to install (0 to abort)?" msgstr "Qual você deseja instalar (0 para abortar)?" -#: app/flatpak-transaction.c:402 +#: app/flatpak-transaction.c:417 #, c-format msgid "Required runtime for %s (%s) is not installed, searching...\n" msgstr "Runtime exigido para %s (%s) não está instalado, pesquisando…\n" -#: app/flatpak-transaction.c:408 +#: app/flatpak-transaction.c:423 #, c-format msgid "The required runtime %s was not found in a configured remote.\n" msgstr "O runtime exigido %s não foi localizado em um remoto configurado.\n" -#: app/flatpak-transaction.c:469 common/flatpak-dir.c:1127 -#: common/flatpak-dir.c:1433 common/flatpak-dir.c:1456 -#: common/flatpak-dir.c:1478 common/flatpak-dir.c:10136 -#: common/flatpak-utils.c:1272 common/flatpak-utils.c:1366 +#: app/flatpak-transaction.c:506 common/flatpak-dir.c:1160 +#: common/flatpak-dir.c:1479 common/flatpak-dir.c:1502 +#: common/flatpak-dir.c:1524 common/flatpak-dir.c:10655 +#: common/flatpak-utils.c:1312 common/flatpak-utils.c:1406 #, c-format msgid "%s not installed" msgstr "%s não instalado" -#: app/flatpak-transaction.c:475 +#: app/flatpak-transaction.c:512 #, c-format msgid "Remote %s disabled, ignoring %s update" msgstr "Remoto %s desabilitado, ignorando atualização de %s" -#: app/flatpak-transaction.c:485 +#: app/flatpak-transaction.c:525 #, c-format msgid "%s already installed, skipping\n" msgstr "%s já instalado, ignorando\n" -#: app/flatpak-transaction.c:529 +#: app/flatpak-transaction.c:531 +#, fuzzy, c-format +msgid "%s is already installed from other remote (%s)" +msgstr "%s commit %s já está instalado" + +#: app/flatpak-transaction.c:543 +#, c-format +msgid "Warning: Can't find dependencies: %s\n" +msgstr "" + +#: app/flatpak-transaction.c:570 +#, c-format +msgid "Invalid require-flatpak argument %s\n" +msgstr "" + +#: app/flatpak-transaction.c:576 #, c-format msgid "%s needs a later flatpak version (%s)" msgstr "%s precisa de uma versão posterior do flatpak (%s)" -#: app/flatpak-transaction.c:704 +#: app/flatpak-transaction.c:688 +#, fuzzy, c-format +msgid "Error updating remote metadata for '%s': %s\n" +msgstr "Erro ao atualizar metadados extras para “%s”: %s\n" + +#: app/flatpak-transaction.c:744 msgid "install" msgstr "instalar" -#: app/flatpak-transaction.c:705 +#: app/flatpak-transaction.c:746 +#, fuzzy, c-format +msgid "Installing for user: %s from %s\n" +msgstr "Instalando: %s de %s\n" + +#: app/flatpak-transaction.c:748 #, c-format msgid "Installing: %s from %s\n" msgstr "Instalando: %s de %s\n" -#: app/flatpak-transaction.c:721 +#: app/flatpak-transaction.c:765 msgid "update" msgstr "atualizar" -#: app/flatpak-transaction.c:729 +#: app/flatpak-transaction.c:774 +#, fuzzy, c-format +msgid "Updating for user: %s from %s\n" +msgstr "Atualizando: %s de %s\n" + +#: app/flatpak-transaction.c:776 #, c-format msgid "Updating: %s from %s\n" msgstr "Atualizando: %s de %s\n" -#: app/flatpak-transaction.c:749 +#: app/flatpak-transaction.c:796 #, c-format msgid "Now at %s.\n" msgstr "Agora em %s.\n" -#: app/flatpak-transaction.c:755 +#: app/flatpak-transaction.c:802 msgid "No updates.\n" msgstr "Nenhuma atualização.\n" -#: app/flatpak-transaction.c:773 +#: app/flatpak-transaction.c:820 msgid "install bundle" msgstr "instala pacote" -#: app/flatpak-transaction.c:774 +#: app/flatpak-transaction.c:822 +#, fuzzy, c-format +msgid "Installing for user: %s from bundle %s\n" +msgstr "Instalando: %s do pacote %s\n" + +#: app/flatpak-transaction.c:824 #, c-format msgid "Installing: %s from bundle %s\n" msgstr "Instalando: %s do pacote %s\n" -#: app/flatpak-transaction.c:786 +#: app/flatpak-transaction.c:836 #, c-format msgid "Warning: Failed to %s %s: %s\n" msgstr "Aviso: Falha ao %s %s: %s\n" -#: app/flatpak-transaction.c:791 +#: app/flatpak-transaction.c:841 #, c-format msgid "Error: Failed to %s %s: %s\n" msgstr "Erro: Falha ao %s %s: %s\n" -#: app/flatpak-transaction.c:796 +#: app/flatpak-transaction.c:846 msgid "One or more operations failed" msgstr "Uma ou mais operações falharam" -#: common/flatpak-dir.c:1015 -#, c-format -msgid "No overrides found for %s" -msgstr "Nenhuma substituição localizada para %s" - -#: common/flatpak-dir.c:1611 -#, c-format -msgid "While opening repository %s: " -msgstr "Ao abrir o repositório %s: " - -#: common/flatpak-dir.c:1770 common/flatpak-dir.c:5109 -msgid "Can't create deploy directory" -msgstr "Não foi possível criar um diretório de deploy" - -#: common/flatpak-dir.c:2450 -#, c-format -msgid "Invalid sha256 for extra data uri %s" -msgstr "sha256 inválido para uri de dados extras %s" - -#: common/flatpak-dir.c:2455 -#, c-format -msgid "Empty name for extra data uri %s" -msgstr "Nome vazio para uri de dados extras %s" - -#: common/flatpak-dir.c:2462 -#, c-format -msgid "Unsupported extra data uri %s" -msgstr "Sem suporte à uri de dados extras %s" - -#: common/flatpak-dir.c:2476 -#, c-format -msgid "Failed to load local extra-data %s: %s" -msgstr "Falha ao carregar extra-data local %s: %s" - -#: common/flatpak-dir.c:2479 -#, c-format -msgid "Wrong size for extra-data %s" -msgstr "Tamanho inválido para extra-data %s" - -#: common/flatpak-dir.c:2494 -#, c-format -msgid "While downloading %s: " -msgstr "Enquanto baixava %s: " - -#: common/flatpak-dir.c:2501 -#, c-format -msgid "Wrong size for extra data %s" -msgstr "Tamanho inválido para dados extras %s" - -#: common/flatpak-dir.c:2512 -#, c-format -msgid "Invalid checksum for extra data %s" -msgstr "Soma de verificação inválida para dados extras %s" - -#: common/flatpak-dir.c:2768 -#, c-format -msgid "%s commit %s already installed" -msgstr "%s commit %s já está instalado" - -#: common/flatpak-dir.c:3097 common/flatpak-dir.c:3411 -#, c-format -msgid "While pulling %s from remote %s: " -msgstr "Enquanto executava pull de %s a partir do remoto %s: " - -#: common/flatpak-dir.c:3296 -#, c-format -msgid "Can't find %s in remote %s" -msgstr "Não foi possível localizar %s no remoto %s" - -#: common/flatpak-dir.c:3969 -msgid "Not enough memory" -msgstr "Memória insuficiente" - -#: common/flatpak-dir.c:3988 -msgid "Failed to read from exported file" -msgstr "Falha ao ler do arquivo exportado" - -#: common/flatpak-dir.c:4179 -msgid "Error reading mimetype xml file" -msgstr "Erro ao ler o arquivo xml de tipo mime" - -#: common/flatpak-dir.c:4184 -msgid "Invalid mimetype xml file" -msgstr "Arquivo inválido de xml de tipo mim" - -#: common/flatpak-dir.c:4726 -msgid "While getting detached metadata: " -msgstr "Enquanto obtinha metadados destacados: " - -#: common/flatpak-dir.c:4744 -msgid "While creating extradir: " -msgstr "Enquanto criava extradir: " - -#: common/flatpak-dir.c:4765 -msgid "Invalid sha256 for extra data" -msgstr "sha256 inválido para dados extras" - -#: common/flatpak-dir.c:4794 -msgid "Wrong size for extra data" -msgstr "Tamanho inválido para dados extras" - -#: common/flatpak-dir.c:4798 -msgid "Invalid checksum for extra data" -msgstr "Soma de verificação inválida para dados extras" - -#: common/flatpak-dir.c:4807 -#, c-format -msgid "While writing extra data file '%s': " -msgstr "Enquanto escrevia o arquivo de dados extras “%s”: " - -#: common/flatpak-dir.c:4991 -#, c-format -msgid "apply_extra script failed, exit status %d" -msgstr "script apply_extra falhou, status de saída %d" - -#: common/flatpak-dir.c:5068 -#, c-format -msgid "While trying to resolve ref %s: " -msgstr "Enquanto tentava resolver ref %s: " - -#: common/flatpak-dir.c:5083 -#, c-format -msgid "%s is not available" -msgstr "%s não está disponível" - -#: common/flatpak-dir.c:5098 common/flatpak-dir.c:5436 -#: common/flatpak-dir.c:6204 common/flatpak-dir.c:6217 -#: common/flatpak-dir.c:6293 -#, c-format -msgid "%s branch %s already installed" -msgstr "%s ramo %s já está instalado" - -#: common/flatpak-dir.c:5117 -#, c-format -msgid "Failed to read commit %s: " -msgstr "Falha ao ler commit %s: " - -#: common/flatpak-dir.c:5137 -#, c-format -msgid "While trying to checkout %s into %s: " -msgstr "Enquanto tentava fazer checkout de %s para %s: " - -#: common/flatpak-dir.c:5162 common/flatpak-dir.c:5193 -msgid "While trying to checkout metadata subpath: " -msgstr "Enquanto tentava fazer checkout do subcaminho de metadados: " - -#: common/flatpak-dir.c:5203 -msgid "While trying to remove existing extra dir: " -msgstr "Enquanto tentava remover diretório extra existente: " - -#: common/flatpak-dir.c:5214 -msgid "While trying to apply extra data: " -msgstr "Enquanto tentava aplicar dados extras: " - -#: common/flatpak-dir.c:5241 -#, fuzzy, c-format -msgid "Invalid deployed ref %s: " -msgstr "Pid inválido %s" - -#: common/flatpak-dir.c:5248 -#, fuzzy, c-format -msgid "Invalid commit ref %s: " -msgstr "Pid inválido %s" - -#: common/flatpak-dir.c:5256 -#, fuzzy, c-format -msgid "Deployed ref %s kind does not match commit (%s)" -msgstr "Ref implementado %s não coincide com o commit (%s)" - -#: common/flatpak-dir.c:5264 -#, fuzzy, c-format -msgid "Deployed ref %s name does not match commit (%s)" -msgstr "Ref implementado %s não coincide com o commit (%s)" - -#: common/flatpak-dir.c:5272 -#, fuzzy, c-format -msgid "Deployed ref %s arch does not match commit (%s)" -msgstr "Ref implementado %s não coincide com o commit (%s)" - -#: common/flatpak-dir.c:5278 -#, fuzzy, c-format -msgid "Deployed ref %s branch does not match commit (%s)" -msgstr "Ref implementado %s não coincide com o commit (%s)" - -#: common/flatpak-dir.c:5284 -#, c-format -msgid "Deployed ref %s does not match commit (%s)" -msgstr "Ref implementado %s não coincide com o commit (%s)" - -#: common/flatpak-dir.c:5303 -msgid "Deployed metadata does not match commit" -msgstr "Metadados implementados não coincidem com o commit" - -#: common/flatpak-dir.c:6065 -#, c-format -msgid "This version of %s is already installed" -msgstr "Essa versão de %s já está instalada" - -#: common/flatpak-dir.c:6072 -msgid "Can't change remote during bundle install" -msgstr "Não é possível alterar remoto durante instalação de pacote" - -#: common/flatpak-dir.c:6615 -#, c-format -msgid "%s branch %s is not installed" -msgstr "%s ramo %s não está instalado" - -#: common/flatpak-dir.c:6859 -#, c-format -msgid "%s branch %s not installed" -msgstr "%s ramo %s não está instalado" - -#: common/flatpak-dir.c:7818 -#, c-format -msgid "Nothing matches %s" -msgstr "Sem combinações com %s" - -#: common/flatpak-dir.c:7900 -#, fuzzy, c-format -msgid "Can't find ref %s%s%s%s%s" -msgstr "Não foi possível localizar %s%s%s%s%s no remoto %s" - -#: common/flatpak-dir.c:7942 -#, fuzzy, c-format -msgid "Error searching remote %s: %s" -msgstr "Erro: Falha ao %s %s: %s\n" - -#: common/flatpak-dir.c:7987 -#, fuzzy, c-format -msgid "Error searching local repository: %s" -msgstr "Mantém referência no repositório local" - -#: common/flatpak-dir.c:8113 -#, c-format -msgid "%s %s not installed" -msgstr "%s %s não instalado" - -#: common/flatpak-dir.c:8280 -#, c-format -msgid "Could not find installation %s" -msgstr "Não foi possível localizar instalação de %s" - -#: common/flatpak-dir.c:8809 -#, c-format -msgid "Runtime %s, branch %s is already installed" -msgstr "Runtime %s, ramo %s já está instalado" - -#: common/flatpak-dir.c:8810 -#, c-format -msgid "App %s, branch %s is already installed" -msgstr "Aplicativo %s, ramo %s já está instalado" - -#: common/flatpak-dir.c:9269 -msgid "Remote title not set" -msgstr "Título remoto não definido" - -#: common/flatpak-dir.c:9291 -msgid "Remote default-branch not set" -msgstr "Ramo padrão remoto não definido" - -#: common/flatpak-dir.c:9785 -msgid "No flatpak cache in remote summary" -msgstr "Nenhum cache de flatpak no sumário remoto" - -#: common/flatpak-dir.c:9795 -#, c-format -msgid "No entry for %s in remote summary flatpak cache " -msgstr "Nenhuma entrada para %s no cache de flatpak de sumário remoto " - -#: common/flatpak-run.c:258 +#: common/flatpak-context.c:175 #, c-format msgid "Unknown share type %s, valid types are: %s" msgstr "Tipo de compartilhamento desconhecido %s, tipos válidos são: %s" -#: common/flatpak-run.c:293 +#: common/flatpak-context.c:210 #, c-format msgid "Unknown policy type %s, valid types are: %s" msgstr "Tipo de política desconhecida %s, tipos válidos são: %s" -#: common/flatpak-run.c:331 +#: common/flatpak-context.c:248 #, c-format msgid "Invalid dbus name %s\n" msgstr "Nome de dbus inválido %s\n" -#: common/flatpak-run.c:344 +#: common/flatpak-context.c:261 #, c-format msgid "Unknown socket type %s, valid types are: %s" msgstr "Tipo de soquete desconhecido %s, tipos válidos são: %s" -#: common/flatpak-run.c:373 +#: common/flatpak-context.c:290 #, c-format msgid "Unknown device type %s, valid types are: %s" msgstr "Tipo de dispositivo desconhecido %s, tipos válidos são: %s" -#: common/flatpak-run.c:401 +#: common/flatpak-context.c:318 #, c-format msgid "Unknown feature type %s, valid types are: %s" msgstr "Tipo de recurso desconhecido %s, tipos válidos são: %s" -#: common/flatpak-run.c:774 +#: common/flatpak-context.c:691 #, c-format msgid "" "Unknown filesystem location %s, valid locations are: host, home, xdg-" @@ -2126,162 +2292,480 @@ msgstr "" "Localização de sistema de arquivos desconhecida %s, localizações válidas " "são: host, home, xdg-*[/…], ~/dir, /dir" -#: common/flatpak-run.c:1040 +#: common/flatpak-context.c:963 #, c-format msgid "Invalid env format %s" msgstr "Formato de env inválido %s" -#: common/flatpak-run.c:1180 +#: common/flatpak-context.c:1103 msgid "Share with host" msgstr "Compartilha com o host" -#: common/flatpak-run.c:1180 common/flatpak-run.c:1181 +#: common/flatpak-context.c:1103 common/flatpak-context.c:1104 msgid "SHARE" msgstr "COMPARTILHAR" -#: common/flatpak-run.c:1181 +#: common/flatpak-context.c:1104 msgid "Unshare with host" msgstr "Desfaz compartilhamento com o host" -#: common/flatpak-run.c:1182 +#: common/flatpak-context.c:1105 msgid "Expose socket to app" msgstr "Expõe o soquete para o aplicativo" -#: common/flatpak-run.c:1182 common/flatpak-run.c:1183 +#: common/flatpak-context.c:1105 common/flatpak-context.c:1106 msgid "SOCKET" msgstr "SOQUETE" -#: common/flatpak-run.c:1183 +#: common/flatpak-context.c:1106 msgid "Don't expose socket to app" msgstr "Não expõe o soquete para o aplicativo" -#: common/flatpak-run.c:1184 +#: common/flatpak-context.c:1107 msgid "Expose device to app" msgstr "Expõe o dispositivo para o aplicativo" -#: common/flatpak-run.c:1184 common/flatpak-run.c:1185 +#: common/flatpak-context.c:1107 common/flatpak-context.c:1108 msgid "DEVICE" msgstr "DISPOSITIVO" -#: common/flatpak-run.c:1185 +#: common/flatpak-context.c:1108 msgid "Don't expose device to app" msgstr "Não expõe o dispositivo para o aplicativo" -#: common/flatpak-run.c:1186 +#: common/flatpak-context.c:1109 msgid "Allow feature" msgstr "Permiti a funcionalidade" -#: common/flatpak-run.c:1186 common/flatpak-run.c:1187 +#: common/flatpak-context.c:1109 common/flatpak-context.c:1110 msgid "FEATURE" msgstr "FUNCIONALIDADE" -#: common/flatpak-run.c:1187 +#: common/flatpak-context.c:1110 msgid "Don't allow feature" msgstr "Não permite funcionalidade" -#: common/flatpak-run.c:1188 +#: common/flatpak-context.c:1111 msgid "Expose filesystem to app (:ro for read-only)" msgstr "" "Expõe o sistema de arquivos para o aplicativo (:ro para somente leitura)" -#: common/flatpak-run.c:1188 +#: common/flatpak-context.c:1111 msgid "FILESYSTEM[:ro]" msgstr "SISTEMA_DE_ARQUIVOS[:ro]" -#: common/flatpak-run.c:1189 +#: common/flatpak-context.c:1112 msgid "Don't expose filesystem to app" msgstr "Não expõe o sistema de arquivos para o aplicativo" -#: common/flatpak-run.c:1189 +#: common/flatpak-context.c:1112 msgid "FILESYSTEM" msgstr "SISTEMA_DE_ARQUIVOS" -#: common/flatpak-run.c:1190 +#: common/flatpak-context.c:1113 msgid "Set environment variable" msgstr "Define uma variável de ambiente" -#: common/flatpak-run.c:1190 +#: common/flatpak-context.c:1113 msgid "VAR=VALUE" msgstr "VAR=VALOR" -#: common/flatpak-run.c:1191 +#: common/flatpak-context.c:1114 msgid "Allow app to own name on the session bus" msgstr "Permite o aplicativo ter um nome no barramento de sessão" -#: common/flatpak-run.c:1191 common/flatpak-run.c:1192 -#: common/flatpak-run.c:1193 common/flatpak-run.c:1194 +#: common/flatpak-context.c:1114 common/flatpak-context.c:1115 +#: common/flatpak-context.c:1116 common/flatpak-context.c:1117 msgid "DBUS_NAME" msgstr "NOME_DBUS" -#: common/flatpak-run.c:1192 +#: common/flatpak-context.c:1115 msgid "Allow app to talk to name on the session bus" msgstr "Permite o aplicativo falar com um nome no barramento de sessão" -#: common/flatpak-run.c:1193 +#: common/flatpak-context.c:1116 msgid "Allow app to own name on the system bus" msgstr "Permite o aplicativo ter um nome no barramento de sistema" -#: common/flatpak-run.c:1194 +#: common/flatpak-context.c:1117 msgid "Allow app to talk to name on the system bus" msgstr "Permite o aplicativo falar com um nome no barramento de sistema" -#: common/flatpak-run.c:1195 +#: common/flatpak-context.c:1118 msgid "Add generic policy option" msgstr "Adiciona uma opção de política genérica" -#: common/flatpak-run.c:1195 common/flatpak-run.c:1196 +#: common/flatpak-context.c:1118 common/flatpak-context.c:1119 msgid "SUBSYSTEM.KEY=VALUE" msgstr "SUBSISTEMA.CHAVE=VALOR" -#: common/flatpak-run.c:1196 +#: common/flatpak-context.c:1119 msgid "Remove generic policy option" msgstr "Remove uma opção de política genérica" -#: common/flatpak-run.c:1197 +#: common/flatpak-context.c:1120 msgid "Persist home directory" msgstr "Persiste o diretório pessoal" -#: common/flatpak-run.c:1197 +#: common/flatpak-context.c:1120 msgid "FILENAME" msgstr "ARQUIVO" #. This is not needed/used anymore, so hidden, but we accept it for backwards compat -#: common/flatpak-run.c:1199 +#: common/flatpak-context.c:1122 msgid "Don't require a running session (no cgroups creation)" msgstr "Não exige uma sessão em execução (sem criação de cgroups)" -#: common/flatpak-run.c:3830 +#: common/flatpak-dir.c:1044 +#, c-format +msgid "No overrides found for %s" +msgstr "Nenhuma substituição localizada para %s" + +#: common/flatpak-dir.c:1674 +#, c-format +msgid "While opening repository %s: " +msgstr "Ao abrir o repositório %s: " + +#: common/flatpak-dir.c:1908 common/flatpak-dir.c:5460 +msgid "Can't create deploy directory" +msgstr "Não foi possível criar um diretório de deploy" + +#: common/flatpak-dir.c:2122 common/flatpak-dir.c:2125 +#, c-format +msgid "Failed to find latest revision for ref %s from remote %s: %s\n" +msgstr "" + +#: common/flatpak-dir.c:2761 +#, c-format +msgid "Invalid sha256 for extra data uri %s" +msgstr "sha256 inválido para uri de dados extras %s" + +#: common/flatpak-dir.c:2766 +#, c-format +msgid "Empty name for extra data uri %s" +msgstr "Nome vazio para uri de dados extras %s" + +#: common/flatpak-dir.c:2773 +#, c-format +msgid "Unsupported extra data uri %s" +msgstr "Sem suporte à uri de dados extras %s" + +#: common/flatpak-dir.c:2787 +#, c-format +msgid "Failed to load local extra-data %s: %s" +msgstr "Falha ao carregar extra-data local %s: %s" + +#: common/flatpak-dir.c:2790 +#, c-format +msgid "Wrong size for extra-data %s" +msgstr "Tamanho inválido para extra-data %s" + +#: common/flatpak-dir.c:2805 +#, c-format +msgid "While downloading %s: " +msgstr "Enquanto baixava %s: " + +#: common/flatpak-dir.c:2812 +#, c-format +msgid "Wrong size for extra data %s" +msgstr "Tamanho inválido para dados extras %s" + +#: common/flatpak-dir.c:2823 +#, c-format +msgid "Invalid checksum for extra data %s" +msgstr "Soma de verificação inválida para dados extras %s" + +#: common/flatpak-dir.c:2882 +msgid "Remote OCI index has no registry uri" +msgstr "" + +#: common/flatpak-dir.c:3100 +#, c-format +msgid "%s commit %s already installed" +msgstr "%s commit %s já está instalado" + +#: common/flatpak-dir.c:3442 common/flatpak-dir.c:3773 +#, c-format +msgid "While pulling %s from remote %s: " +msgstr "Enquanto executava pull de %s a partir do remoto %s: " + +#: common/flatpak-dir.c:3658 +#, c-format +msgid "Can't find %s in remote %s" +msgstr "Não foi possível localizar %s no remoto %s" + +#: common/flatpak-dir.c:4331 +msgid "Not enough memory" +msgstr "Memória insuficiente" + +#: common/flatpak-dir.c:4350 +msgid "Failed to read from exported file" +msgstr "Falha ao ler do arquivo exportado" + +#: common/flatpak-dir.c:4541 +msgid "Error reading mimetype xml file" +msgstr "Erro ao ler o arquivo xml de tipo mime" + +#: common/flatpak-dir.c:4546 +msgid "Invalid mimetype xml file" +msgstr "Arquivo inválido de xml de tipo mim" + +#: common/flatpak-dir.c:5089 +msgid "While getting detached metadata: " +msgstr "Enquanto obtinha metadados destacados: " + +#: common/flatpak-dir.c:5107 +msgid "While creating extradir: " +msgstr "Enquanto criava extradir: " + +#: common/flatpak-dir.c:5128 +msgid "Invalid sha256 for extra data" +msgstr "sha256 inválido para dados extras" + +#: common/flatpak-dir.c:5157 +msgid "Wrong size for extra data" +msgstr "Tamanho inválido para dados extras" + +#: common/flatpak-dir.c:5161 +msgid "Invalid checksum for extra data" +msgstr "Soma de verificação inválida para dados extras" + +#: common/flatpak-dir.c:5170 +#, c-format +msgid "While writing extra data file '%s': " +msgstr "Enquanto escrevia o arquivo de dados extras “%s”: " + +#: common/flatpak-dir.c:5340 +#, c-format +msgid "apply_extra script failed, exit status %d" +msgstr "script apply_extra falhou, status de saída %d" + +#: common/flatpak-dir.c:5419 +#, c-format +msgid "While trying to resolve ref %s: " +msgstr "Enquanto tentava resolver ref %s: " + +#: common/flatpak-dir.c:5434 +#, c-format +msgid "%s is not available" +msgstr "%s não está disponível" + +#: common/flatpak-dir.c:5449 common/flatpak-dir.c:5881 +#: common/flatpak-dir.c:6671 common/flatpak-dir.c:6681 +#: common/flatpak-dir.c:6713 +#, c-format +msgid "%s branch %s already installed" +msgstr "%s ramo %s já está instalado" + +#: common/flatpak-dir.c:5468 +#, c-format +msgid "Failed to read commit %s: " +msgstr "Falha ao ler commit %s: " + +#: common/flatpak-dir.c:5488 +#, c-format +msgid "While trying to checkout %s into %s: " +msgstr "Enquanto tentava fazer checkout de %s para %s: " + +#: common/flatpak-dir.c:5513 common/flatpak-dir.c:5544 +msgid "While trying to checkout metadata subpath: " +msgstr "Enquanto tentava fazer checkout do subcaminho de metadados: " + +#: common/flatpak-dir.c:5554 +msgid "While trying to remove existing extra dir: " +msgstr "Enquanto tentava remover diretório extra existente: " + +#: common/flatpak-dir.c:5565 +msgid "While trying to apply extra data: " +msgstr "Enquanto tentava aplicar dados extras: " + +#: common/flatpak-dir.c:5592 +#, fuzzy, c-format +msgid "Invalid deployed ref %s: " +msgstr "Pid inválido %s" + +#: common/flatpak-dir.c:5599 +#, fuzzy, c-format +msgid "Invalid commit ref %s: " +msgstr "Pid inválido %s" + +#: common/flatpak-dir.c:5607 +#, fuzzy, c-format +msgid "Deployed ref %s kind does not match commit (%s)" +msgstr "Ref implementado %s não coincide com o commit (%s)" + +#: common/flatpak-dir.c:5615 +#, fuzzy, c-format +msgid "Deployed ref %s name does not match commit (%s)" +msgstr "Ref implementado %s não coincide com o commit (%s)" + +#: common/flatpak-dir.c:5623 +#, fuzzy, c-format +msgid "Deployed ref %s arch does not match commit (%s)" +msgstr "Ref implementado %s não coincide com o commit (%s)" + +#: common/flatpak-dir.c:5629 +#, fuzzy, c-format +msgid "Deployed ref %s branch does not match commit (%s)" +msgstr "Ref implementado %s não coincide com o commit (%s)" + +#: common/flatpak-dir.c:5635 +#, c-format +msgid "Deployed ref %s does not match commit (%s)" +msgstr "Ref implementado %s não coincide com o commit (%s)" + +#: common/flatpak-dir.c:5654 +msgid "Deployed metadata does not match commit" +msgstr "Metadados implementados não coincidem com o commit" + +#: common/flatpak-dir.c:6533 +#, c-format +msgid "This version of %s is already installed" +msgstr "Essa versão de %s já está instalada" + +#: common/flatpak-dir.c:6540 +msgid "Can't change remote during bundle install" +msgstr "Não é possível alterar remoto durante instalação de pacote" + +#: common/flatpak-dir.c:7059 +#, c-format +msgid "%s branch %s is not installed" +msgstr "%s ramo %s não está instalado" + +#: common/flatpak-dir.c:7304 +#, c-format +msgid "%s branch %s not installed" +msgstr "%s ramo %s não está instalado" + +#: common/flatpak-dir.c:7628 +#, c-format +msgid "Pruning repo failed: %s" +msgstr "" + +#: common/flatpak-dir.c:8155 +#, c-format +msgid "Multiple branches available for %s, you must specify one of: " +msgstr "" + +#: common/flatpak-dir.c:8176 +#, c-format +msgid "Nothing matches %s" +msgstr "Sem combinações com %s" + +#: common/flatpak-dir.c:8258 +#, fuzzy, c-format +msgid "Can't find ref %s%s%s%s%s" +msgstr "Não foi possível localizar %s%s%s%s%s no remoto %s" + +#: common/flatpak-dir.c:8300 +#, fuzzy, c-format +msgid "Error searching remote %s: %s" +msgstr "Erro: Falha ao %s %s: %s\n" + +#: common/flatpak-dir.c:8345 +#, fuzzy, c-format +msgid "Error searching local repository: %s" +msgstr "Mantém referência no repositório local" + +#: common/flatpak-dir.c:8471 +#, c-format +msgid "%s %s not installed" +msgstr "%s %s não instalado" + +#: common/flatpak-dir.c:8638 +#, c-format +msgid "Could not find installation %s" +msgstr "Não foi possível localizar instalação de %s" + +#: common/flatpak-dir.c:9236 +#, c-format +msgid "Runtime %s, branch %s is already installed" +msgstr "Runtime %s, ramo %s já está instalado" + +#: common/flatpak-dir.c:9237 +#, c-format +msgid "App %s, branch %s is already installed" +msgstr "Aplicativo %s, ramo %s já está instalado" + +#: common/flatpak-dir.c:9717 +msgid "Remote title not set" +msgstr "Título remoto não definido" + +#: common/flatpak-dir.c:9739 +msgid "Remote default-branch not set" +msgstr "Ramo padrão remoto não definido" + +#: common/flatpak-dir.c:10332 +msgid "No flatpak cache in remote summary" +msgstr "Nenhum cache de flatpak no sumário remoto" + +#: common/flatpak-dir.c:10342 +#, c-format +msgid "No entry for %s in remote summary flatpak cache " +msgstr "Nenhuma entrada para %s no cache de flatpak de sumário remoto " + +#: common/flatpak-run.c:1456 #, c-format msgid "Failed to open flatpak-info temp file: %s" msgstr "Falha ao abrir arquivo temporário de flatpak-info: %s" -#: common/flatpak-run.c:3904 common/flatpak-run.c:3914 +#: common/flatpak-run.c:1530 common/flatpak-run.c:1540 #, c-format msgid "Failed to open temp file: %s" msgstr "Falha ao abrir arquivo temporário: %s" -#: common/flatpak-run.c:4253 +#: common/flatpak-run.c:1883 msgid "Unable to create sync pipe" msgstr "Não foi possível criar um pipe de sincronização" -#: common/flatpak-run.c:4280 +#: common/flatpak-run.c:1910 #, c-format msgid "Failed to open app info file: %s" msgstr "Falha ao abrir arquivo informação do aplicativo: %s" -#: common/flatpak-run.c:4310 +#: common/flatpak-run.c:1940 msgid "Failed to sync with dbus proxy" msgstr "Falha ao sincronizar com proxy de dbus" -#: common/flatpak-run.c:5069 +#: common/flatpak-run.c:2700 #, fuzzy, c-format msgid "ldconfig failed, exit status %d" msgstr "script apply_extra falhou, status de saída %d" -#: common/flatpak-utils.c:2900 +#: common/flatpak-utils.c:624 +#, fuzzy, c-format +msgid "Migrating %s to %s\n" +msgstr "Atualizando: %s de %s\n" + +#: common/flatpak-utils.c:630 +#, fuzzy, c-format +msgid "Error during migration: %s\n" +msgstr "Erro: Falha ao %s %s: %s\n" + +#: common/flatpak-utils.c:2988 msgid "No extra data sources" msgstr "Nenhuma fonte de dados extras" +#: common/flatpak-utils.c:6576 +#, c-format +msgid "Downloading metadata: %u/(estimating) %s" +msgstr "" + +#: common/flatpak-utils.c:6600 +#, fuzzy, c-format +msgid "Downloading: %s/%s" +msgstr "Mostra tamanho" + +#: common/flatpak-utils.c:6620 +#, fuzzy, c-format +msgid "Downloading extra data: %s/%s" +msgstr "Mostra tamanho" + +#: common/flatpak-utils.c:6625 +#, fuzzy, c-format +msgid "Downloading files: %d/%d %s" +msgstr "Mostra tamanho" + #. SECURITY: #. - Normal users do not need authentication to install signed applications #. from signed repositories, as this cannot exploit a system. @@ -2318,7 +2802,7 @@ msgstr "Atualizar aplicativo assinado" #: system-helper/org.freedesktop.Flatpak.policy.in:59 #: system-helper/org.freedesktop.Flatpak.policy.in:77 -#: system-helper/org.freedesktop.Flatpak.policy.in:169 +#: system-helper/org.freedesktop.Flatpak.policy.in:180 msgid "Authentication is required to update software" msgstr "Autenticação é necessária para atualizar software" @@ -2381,16 +2865,41 @@ msgstr "Configurar remoto" msgid "Authentication is required to configure software repositories" msgstr "Autenticação é necessária para configurar os repositórios de software" +#: system-helper/org.freedesktop.Flatpak.policy.in:161 +#, fuzzy +msgid "Configure" +msgstr "Configurar remoto" + +#: system-helper/org.freedesktop.Flatpak.policy.in:162 +#, fuzzy +msgid "Authentication is required to configure software installation" +msgstr "Autenticação é necessária para configurar os repositórios de software" + #. SECURITY: #. - Normal users do not require admin authentication to update #. appstream data as it will be signed, and the action is required #. to update the system when unattended. #. - Changing this to anything other than 'yes' will break unattended #. updates. -#: system-helper/org.freedesktop.Flatpak.policy.in:168 +#: system-helper/org.freedesktop.Flatpak.policy.in:179 msgid "Update appstream" msgstr "Atualizar appstream" +#~ msgid "No remote %s" +#~ msgstr "Nenhum remoto %s" + +#, fuzzy +#~ msgid "Search only user installations" +#~ msgstr "Mostra instalações do usuário" + +#, fuzzy +#~ msgid "Search only system-wide installations" +#~ msgstr "Mostra instalações do sistema" + +#, fuzzy +#~ msgid "Search specific system-wide installations" +#~ msgstr "Mostra instalações específicas do sistema" + #~ msgid "Failed to create temporary file" #~ msgstr "Falha ao criar arquivo temporário" @@ -2400,13 +2909,6 @@ msgstr "Atualizar appstream" #~ msgid "Failed to write to temporary file" #~ msgstr "Falha ao escrever para arquivo temporário" -#~ msgid "REMOTE must be specified" -#~ msgstr "REMOTO deve ser especificado" - -#, fuzzy -#~ msgid "Downloading %s" -#~ msgstr "Mostra tamanho" - #, fuzzy #~ msgid "Installing %s" #~ msgstr "Instalando: %s\n" @@ -2414,11 +2916,3 @@ msgstr "Atualizar appstream" #, fuzzy #~ msgid "Post-Install %s" #~ msgstr "Instalando: %s\n" - -#, fuzzy -#~ msgid "Updating %s" -#~ msgstr "Atualizando resumo\n" - -#, fuzzy -#~ msgid "Metadata:" -#~ msgstr "Mostra metadados" diff --git a/po/ru.po b/po/ru.po index 28f5e7ba..1bc4847d 100644 --- a/po/ru.po +++ b/po/ru.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: flatpak master\n" "Report-Msgid-Bugs-To: https://github.com/flatpak/flatpak/issues\n" -"POT-Creation-Date: 2017-10-09 12:40+0200\n" +"POT-Creation-Date: 2018-02-19 14:20+0100\n" "PO-Revision-Date: 2017-02-10 11:59+0300\n" "Last-Translator: Roman Kharin \n" "Language-Team: romiq.kh@gmail.com\n" @@ -44,10 +44,9 @@ msgstr "" msgid "Set a new url" msgstr "Указать новый адрес url" -#: app/flatpak-builtins-add-remote.c:66 app/flatpak-builtins-build-bundle.c:57 -#: app/flatpak-builtins-build-bundle.c:58 -#: app/flatpak-builtins-list-remotes.c:109 -#: app/flatpak-builtins-repo-update.c:52 +#: app/flatpak-builtins-add-remote.c:66 app/flatpak-builtins-build-bundle.c:58 +#: app/flatpak-builtins-build-bundle.c:59 +#: app/flatpak-builtins-list-remotes.c:70 app/flatpak-builtins-repo-update.c:52 msgid "URL" msgstr "АДРЕС" @@ -111,9 +110,9 @@ msgstr "" msgid "Import GPG key from FILE (- for stdin)" msgstr "Импортировать ключ GPG из ФАЙЛА (- из стандартного потока ввода)" -#: app/flatpak-builtins-add-remote.c:82 app/flatpak-builtins-build-bundle.c:59 -#: app/flatpak-builtins-build.c:50 app/flatpak-builtins-build-export.c:60 -#: app/flatpak-builtins-install.c:66 app/flatpak-builtins-repo-update.c:59 +#: app/flatpak-builtins-add-remote.c:82 app/flatpak-builtins-build-bundle.c:60 +#: app/flatpak-builtins-build.c:54 app/flatpak-builtins-build-export.c:60 +#: app/flatpak-builtins-install.c:67 app/flatpak-builtins-repo-update.c:59 msgid "FILE" msgstr "ФАЙЛ" @@ -125,132 +124,152 @@ msgstr "Отключить удалённый репозиторий" msgid "Add OCI registry" msgstr "" -#: app/flatpak-builtins-add-remote.c:312 +#: app/flatpak-builtins-add-remote.c:218 app/flatpak-builtins-add-remote.c:225 +#, c-format +msgid "Can't load uri %s: %s\n" +msgstr "" + +#: app/flatpak-builtins-add-remote.c:233 +#, fuzzy, c-format +msgid "Can't load file %s: %s\n" +msgstr "Невозможно открыть пространство имён %s: %s" + +#: app/flatpak-builtins-add-remote.c:241 +#, fuzzy +msgid "Invalid file format" +msgstr "Неверный формат переменной окружения %s" + +#: app/flatpak-builtins-add-remote.c:249 +#, fuzzy, c-format +msgid "Invalid version %s, only 1 supported" +msgstr "Некорректный тип uri %s, поддерживается только http/https" + +#: app/flatpak-builtins-add-remote.c:293 +#, fuzzy +msgid "Invalid gpg key" +msgstr "Неверный pid %s" + +#: app/flatpak-builtins-add-remote.c:320 msgid "NAME LOCATION - Add a remote repository" msgstr "ИМЯ ПУТЬ - Добавить удалённый репозиторий" -#: app/flatpak-builtins-add-remote.c:321 -#: app/flatpak-builtins-delete-remote.c:58 app/flatpak-builtins-info.c:104 +#: app/flatpak-builtins-add-remote.c:333 +#: app/flatpak-builtins-delete-remote.c:61 app/flatpak-builtins-info.c:125 msgid "NAME must be specified" msgstr "Должно быть указано ИМЯ" -#: app/flatpak-builtins-add-remote.c:324 app/flatpak-builtins-build-sign.c:71 -#: app/flatpak-builtins-repo.c:174 app/flatpak-builtins-repo-update.c:429 +#: app/flatpak-builtins-add-remote.c:336 app/flatpak-builtins-build-sign.c:71 +#: app/flatpak-builtins-repo.c:175 app/flatpak-builtins-repo-update.c:429 msgid "LOCATION must be specified" msgstr "Должен быть указан ПУТЬ" -#: app/flatpak-builtins-add-remote.c:327 -#: app/flatpak-builtins-build-bundle.c:479 +#: app/flatpak-builtins-add-remote.c:339 +#: app/flatpak-builtins-build-bundle.c:461 #: app/flatpak-builtins-build-export.c:676 #: app/flatpak-builtins-build-import-bundle.c:182 #: app/flatpak-builtins-build-init.c:181 app/flatpak-builtins-build-sign.c:74 -#: app/flatpak-builtins-delete-remote.c:63 +#: app/flatpak-builtins-delete-remote.c:66 #: app/flatpak-builtins-document-export.c:102 #: app/flatpak-builtins-document-info.c:75 #: app/flatpak-builtins-document-list.c:70 -#: app/flatpak-builtins-document-unexport.c:67 app/flatpak-builtins-info.c:111 -#: app/flatpak-builtins-install.c:265 app/flatpak-builtins-install.c:399 -#: app/flatpak-builtins-list.c:382 app/flatpak-builtins-list-remotes.c:66 -#: app/flatpak-builtins-ls-remote.c:84 app/flatpak-builtins-make-current.c:67 -#: app/flatpak-builtins-override.c:66 +#: app/flatpak-builtins-document-unexport.c:67 app/flatpak-builtins-info.c:132 +#: app/flatpak-builtins-install.c:267 app/flatpak-builtins-install.c:401 +#: app/flatpak-builtins-list.c:314 app/flatpak-builtins-list-remotes.c:61 +#: app/flatpak-builtins-ls-remote.c:107 app/flatpak-builtins-make-current.c:72 +#: app/flatpak-builtins-override.c:68 msgid "Too many arguments" msgstr "Слишком много аргументов" -#: app/flatpak-builtins-add-remote.c:332 +#: app/flatpak-builtins-add-remote.c:344 #: app/flatpak-builtins-build-export.c:692 #, fuzzy, c-format msgid "‘%s’ is not a valid collection ID: %s" msgstr "'%s' не является корректным именем приложения: %s" -#: app/flatpak-builtins-add-remote.c:336 +#: app/flatpak-builtins-add-remote.c:348 msgid "GPG verification is required if collections are enabled" msgstr "" #. Do nothing -#: app/flatpak-builtins-add-remote.c:351 +#: app/flatpak-builtins-add-remote.c:363 #, c-format msgid "Remote %s already exists" msgstr "Удалённый репозиторий %s уже существует" -#: app/flatpak-builtins-add-remote.c:359 +#: app/flatpak-builtins-add-remote.c:371 msgid "No url specified in flatpakrepo file" msgstr "Не указан адрес в файле flatpakrepo" -#: app/flatpak-builtins-add-remote.c:403 +#: app/flatpak-builtins-add-remote.c:415 #, fuzzy, c-format msgid "Warning: Could not update extra metadata for '%s': %s\n" msgstr "Невозможно обновить метаданные дополнительных данных для %s" -#: app/flatpak-builtins-add-remote.c:451 +#: app/flatpak-builtins-add-remote.c:464 msgid "NAME - Modify a remote repository" msgstr "ИМЯ - Изменить удалённый репозиторий" -#: app/flatpak-builtins-add-remote.c:460 +#: app/flatpak-builtins-add-remote.c:474 msgid "Remote NAME must be specified" msgstr "Должно быть указано ИМЯ для удалённого репозитория" -#: app/flatpak-builtins-add-remote.c:465 -#, c-format -msgid "No remote %s" -msgstr "Нет удалённого репозитория %s" - -#: app/flatpak-builtins-add-remote.c:471 +#: app/flatpak-builtins-add-remote.c:485 #, c-format msgid "Updating extra metadata from remote summary for %s\n" msgstr "" "Обновление метаданных дополнительных данных из файла со сводной информацией " "в удалённом репозитории для %s\n" -#: app/flatpak-builtins-add-remote.c:474 +#: app/flatpak-builtins-add-remote.c:488 #, c-format msgid "Error updating extra metadata for '%s': %s\n" msgstr "Ошибка при обновлении метаданных дополнительных данных для '%s': %s\n" -#: app/flatpak-builtins-add-remote.c:475 +#: app/flatpak-builtins-add-remote.c:489 #, c-format msgid "Could not update extra metadata for %s" msgstr "Невозможно обновить метаданные дополнительных данных для %s" -#: app/flatpak-builtins-build-bundle.c:55 +#: app/flatpak-builtins-build-bundle.c:56 msgid "Export runtime instead of app" msgstr "Экспортировать среду исполнения вместо приложения" -#: app/flatpak-builtins-build-bundle.c:56 +#: app/flatpak-builtins-build-bundle.c:57 msgid "Arch to bundle for" msgstr "Архитектура для пакета" -#: app/flatpak-builtins-build-bundle.c:56 +#: app/flatpak-builtins-build-bundle.c:57 #: app/flatpak-builtins-build-export.c:55 app/flatpak-builtins-build-init.c:49 -#: app/flatpak-builtins-build-sign.c:41 app/flatpak-builtins-info.c:48 -#: app/flatpak-builtins-install.c:56 app/flatpak-builtins-list.c:52 -#: app/flatpak-builtins-ls-remote.c:48 app/flatpak-builtins-make-current.c:38 -#: app/flatpak-builtins-run.c:52 app/flatpak-builtins-uninstall.c:44 -#: app/flatpak-builtins-update.c:53 +#: app/flatpak-builtins-build-sign.c:41 app/flatpak-builtins-info.c:51 +#: app/flatpak-builtins-info-remote.c:48 app/flatpak-builtins-install.c:57 +#: app/flatpak-builtins-list.c:46 app/flatpak-builtins-ls-remote.c:49 +#: app/flatpak-builtins-make-current.c:38 app/flatpak-builtins-run.c:52 +#: app/flatpak-builtins-uninstall.c:44 app/flatpak-builtins-update.c:53 msgid "ARCH" msgstr "АРХ" -#: app/flatpak-builtins-build-bundle.c:57 +#: app/flatpak-builtins-build-bundle.c:58 msgid "Url for repo" msgstr "Адрес url для репозитория" -#: app/flatpak-builtins-build-bundle.c:58 +#: app/flatpak-builtins-build-bundle.c:59 msgid "Url for runtime flatpakrepo file" msgstr "Адрес среды исполнения файла flatpakrepo" -#: app/flatpak-builtins-build-bundle.c:59 +#: app/flatpak-builtins-build-bundle.c:60 msgid "Add GPG key from FILE (- for stdin)" msgstr "Добавить ключ GPG из ФАЙЛА (- из стандартного потока ввода)" -#: app/flatpak-builtins-build-bundle.c:60 +#: app/flatpak-builtins-build-bundle.c:61 msgid "Export oci image instead of flatpak bundle" msgstr "Экспортировать образ oci вместо пакета flatpak" -#: app/flatpak-builtins-build-bundle.c:61 +#: app/flatpak-builtins-build-bundle.c:62 #, fuzzy msgid "GPG Key ID to sign the OCI image with" msgstr "ID Ключа GPG для подписи сводной информации" -#: app/flatpak-builtins-build-bundle.c:61 +#: app/flatpak-builtins-build-bundle.c:62 #: app/flatpak-builtins-build-commit-from.c:55 #: app/flatpak-builtins-build-export.c:61 #: app/flatpak-builtins-build-import-bundle.c:46 @@ -258,7 +277,7 @@ msgstr "ID Ключа GPG для подписи сводной информац msgid "KEY-ID" msgstr "КЛЮЧ-ID" -#: app/flatpak-builtins-build-bundle.c:62 +#: app/flatpak-builtins-build-bundle.c:63 #: app/flatpak-builtins-build-commit-from.c:56 #: app/flatpak-builtins-build-export.c:64 #: app/flatpak-builtins-build-import-bundle.c:47 @@ -266,7 +285,7 @@ msgstr "КЛЮЧ-ID" msgid "GPG Homedir to use when looking for keyrings" msgstr "Домашний каталог GPG для поиска связок ключей" -#: app/flatpak-builtins-build-bundle.c:62 +#: app/flatpak-builtins-build-bundle.c:63 #: app/flatpak-builtins-build-commit-from.c:56 #: app/flatpak-builtins-build-export.c:64 #: app/flatpak-builtins-build-import-bundle.c:47 @@ -274,7 +293,16 @@ msgstr "Домашний каталог GPG для поиска связок к msgid "HOMEDIR" msgstr "ДОМАШНИЙ_КАТАЛОГ" -#: app/flatpak-builtins-build-bundle.c:469 +#: app/flatpak-builtins-build-bundle.c:64 +msgid "OSTree commit to create a delta bundle from" +msgstr "" + +#: app/flatpak-builtins-build-bundle.c:64 app/flatpak-builtins-info-remote.c:49 +#: app/flatpak-builtins-update.c:54 +msgid "COMMIT" +msgstr "ИЗМЕНЕНИЕ" + +#: app/flatpak-builtins-build-bundle.c:451 msgid "" "LOCATION FILENAME NAME [BRANCH] - Create a single file bundle from a local " "repository" @@ -282,96 +310,108 @@ msgstr "" "ПУТЬ ИМЯ_ФАЙЛА ИМЯ [ВЕТКА] - создать один файл с пакетом из локального " "репозитория" -#: app/flatpak-builtins-build-bundle.c:476 +#: app/flatpak-builtins-build-bundle.c:458 msgid "LOCATION, FILENAME and NAME must be specified" msgstr "Должны быть указаны ПУТЬ, ИМЯ_ФАЙЛА и ИМЯ" -#: app/flatpak-builtins-build-bundle.c:494 -#: app/flatpak-builtins-build-commit-from.c:103 -#: app/flatpak-builtins-build-commit-from.c:113 +#: app/flatpak-builtins-build-bundle.c:476 +#: app/flatpak-builtins-build-commit-from.c:253 +#: app/flatpak-builtins-build-commit-from.c:263 #: app/flatpak-builtins-build-import-bundle.c:191 #, c-format msgid "'%s' is not a valid repository" msgstr "'%s' не является корректным репозиторием" -#: app/flatpak-builtins-build-bundle.c:506 app/flatpak-builtins-build-sign.c:86 +#: app/flatpak-builtins-build-bundle.c:488 app/flatpak-builtins-build-sign.c:86 #, c-format msgid "'%s' is not a valid name: %s" msgstr "'%s' не является корректным именем: %s" -#: app/flatpak-builtins-build-bundle.c:509 +#: app/flatpak-builtins-build-bundle.c:491 #: app/flatpak-builtins-build-export.c:699 app/flatpak-builtins-build-sign.c:89 #, c-format msgid "'%s' is not a valid branch name: %s" msgstr "'%s' не является корректным именем ветки: %s" -#: app/flatpak-builtins-build.c:46 +#: app/flatpak-builtins-build.c:49 msgid "Use Platform runtime rather than Sdk" msgstr "Использовать обычную среду исполнения вместо отладочной" -#: app/flatpak-builtins-build.c:47 +#: app/flatpak-builtins-build.c:50 +msgid "Make destination readonly" +msgstr "" + +#: app/flatpak-builtins-build.c:51 msgid "Add bind mount" msgstr "Добавить связанную точку монтирования" -#: app/flatpak-builtins-build.c:47 +#: app/flatpak-builtins-build.c:51 msgid "DEST=SRC" msgstr "НАЗНАЧЕНИЕ=ИСТОЧНИК" -#: app/flatpak-builtins-build.c:48 +#: app/flatpak-builtins-build.c:52 msgid "Start build in this directory" msgstr "Начать сборку в указанном каталоге" -#: app/flatpak-builtins-build.c:48 app/flatpak-builtins-build.c:49 +#: app/flatpak-builtins-build.c:52 app/flatpak-builtins-build.c:53 #: app/flatpak-builtins-build-init.c:58 msgid "DIR" msgstr "КАТАЛОГ" -#: app/flatpak-builtins-build.c:49 +#: app/flatpak-builtins-build.c:53 msgid "Where to look for custom sdk dir (defaults to 'usr')" msgstr "Каталог для поиска других sdk (по умолчанию 'usr')" -#: app/flatpak-builtins-build.c:50 app/flatpak-builtins-build-export.c:60 +#: app/flatpak-builtins-build.c:54 app/flatpak-builtins-build-export.c:60 msgid "Use alternative file for the metadata" msgstr "Использовать другой файл метаданных" -#: app/flatpak-builtins-build.c:51 +#: app/flatpak-builtins-build.c:55 msgid "Kill processes when the parent process dies" msgstr "" -#: app/flatpak-builtins-build.c:52 +#: app/flatpak-builtins-build.c:56 msgid "Export application homedir directory to build" msgstr "" -#: app/flatpak-builtins-build.c:139 +#: app/flatpak-builtins-build.c:57 app/flatpak-builtins-run.c:58 +msgid "Log session bus calls" +msgstr "Журналировать вызовы пользовательской шины" + +#: app/flatpak-builtins-build.c:58 app/flatpak-builtins-run.c:59 +msgid "Log system bus calls" +msgstr "Журналировать вызовы системной шины" + +#: app/flatpak-builtins-build.c:126 msgid "DIRECTORY [COMMAND [args...]] - Build in directory" msgstr "КАТАЛОГ [КОМАНДА [параметры...]] - Сборка в каталоге" -#: app/flatpak-builtins-build.c:162 app/flatpak-builtins-build-finish.c:533 +#: app/flatpak-builtins-build.c:149 app/flatpak-builtins-build-finish.c:533 msgid "DIRECTORY must be specified" msgstr "Должен быть указан КАТАЛОГ" -#: app/flatpak-builtins-build.c:173 app/flatpak-builtins-build-export.c:721 +#: app/flatpak-builtins-build.c:160 app/flatpak-builtins-build-export.c:721 #, c-format msgid "Build directory %s not initialized, use flatpak build-init" msgstr "" "Каталог сборки %s не инициализирован, воспользуйтесь flatpak build-init" -#: app/flatpak-builtins-build.c:192 +#: app/flatpak-builtins-build.c:179 msgid "metadata invalid, not application or runtime" msgstr "" "некорректные метаданные, не является ни приложением, ни средой выполнения" -#: app/flatpak-builtins-build.c:292 +#: app/flatpak-builtins-build.c:283 #, c-format msgid "No extension point matching %s in %s" msgstr "Не найдена точка расширения подходящая для %s в %s" -#: app/flatpak-builtins-build.c:432 +#: app/flatpak-builtins-build.c:433 #, c-format msgid "Missing '=' in bind mount option '%s'" msgstr "Отсутствует '=' в параметре связанного монтирования '%s'" -#: app/flatpak-builtins-build.c:460 common/flatpak-run.c:5406 +#: app/flatpak-builtins-build.c:462 common/flatpak-run.c:3038 msgid "Unable to start app" msgstr "Невозможно запустить приложение" @@ -430,36 +470,41 @@ msgstr "Не обновлять сводную информацию" msgid "GPG Key ID to sign the commit with" msgstr "ID ключа GPG для подписи изменения" -#: app/flatpak-builtins-build-commit-from.c:78 +#: app/flatpak-builtins-build-commit-from.c:228 msgid "DST-REPO [DST-REF]... - Make a new commit based on existing commit(s)" msgstr "" "НАЗН-РЕПО [НАЗН-ССЫЛКА]... - Зафиксировать изменение на основе существующего " "изменения (или изменений)" -#: app/flatpak-builtins-build-commit-from.c:85 +#: app/flatpak-builtins-build-commit-from.c:235 msgid "DST-REPO must be specified" msgstr "Должен быть указан НАЗН-РЕПО" -#: app/flatpak-builtins-build-commit-from.c:93 +#: app/flatpak-builtins-build-commit-from.c:243 msgid "" "If --src-repo is not specified, exactly one destination ref must be specified" msgstr "" "Если --src-repo не задана, должна быть указана ровно одна ссылка назначения" -#: app/flatpak-builtins-build-commit-from.c:96 +#: app/flatpak-builtins-build-commit-from.c:246 msgid "" "If --src-ref is specified, exactly one destination ref must be specified" msgstr "" "Если --src-ref задана, должна быть указана ровно одна ссылка назначения" -#: app/flatpak-builtins-build-commit-from.c:99 +#: app/flatpak-builtins-build-commit-from.c:249 msgid "Either --src-repo or --src-ref must be specified." msgstr "Должны быть задана --src-repo либо --src-ref." -#: app/flatpak-builtins-build-commit-from.c:251 +#: app/flatpak-builtins-build-commit-from.c:402 msgid "Can't commit from partial source commit." msgstr "Невозможно зафиксировать частичное изменение источника" +#: app/flatpak-builtins-build-commit-from.c:407 +#, c-format +msgid "%s: no change\n" +msgstr "" + #: app/flatpak-builtins-build-export.c:55 msgid "Architecture to export for (must be host compatible)" msgstr "Имя архитектуры для экспорта (должна быть совместима с хостом)" @@ -497,6 +542,42 @@ msgstr "" msgid "ISO-8601-TIMESTAMP" msgstr "" +#: app/flatpak-builtins-build-export.c:341 +#, c-format +msgid "WARNING: Error running desktop-file-validate: %s\n" +msgstr "" + +#: app/flatpak-builtins-build-export.c:349 +#, c-format +msgid "WARNING: Error reading from desktop-file-validate: %s\n" +msgstr "" + +#: app/flatpak-builtins-build-export.c:355 +#, fuzzy, c-format +msgid "WARNING: Failed to validate desktop file %s: %s\n" +msgstr "Ошибка при открытии временного файла: %s" + +#: app/flatpak-builtins-build-export.c:370 +#, c-format +msgid "WARNING: Can't find Exec key in %s: %s\n" +msgstr "" + +#: app/flatpak-builtins-build-export.c:378 +#: app/flatpak-builtins-build-export.c:475 +#, c-format +msgid "WARNING: Binary not found for Exec line in %s: %s\n" +msgstr "" + +#: app/flatpak-builtins-build-export.c:385 +#, c-format +msgid "WARNING: Icon not matching app id in %s: %s\n" +msgstr "" + +#: app/flatpak-builtins-build-export.c:413 +#, c-format +msgid "WARNING: Icon referenced in desktop file but not exported: %s\n" +msgstr "" + #: app/flatpak-builtins-build-export.c:551 #, c-format msgid "Invalid uri type %s, only http/https supported" @@ -535,12 +616,41 @@ msgstr "Должны быть указаны ПУТЬ и КАТАЛОГ" msgid "No name specified in the metadata" msgstr "Не указано имя в метаданных" +#: app/flatpak-builtins-build-export.c:976 +#, c-format +msgid "Commit: %s\n" +msgstr "" + +#: app/flatpak-builtins-build-export.c:977 +#, fuzzy, c-format +msgid "Metadata Total: %u\n" +msgstr "Показать подробности про удалённый репозиторий" + +#: app/flatpak-builtins-build-export.c:978 +#, fuzzy, c-format +msgid "Metadata Written: %u\n" +msgstr "Показать подробности про удалённый репозиторий" + +#: app/flatpak-builtins-build-export.c:979 +#, c-format +msgid "Content Total: %u\n" +msgstr "" + +#: app/flatpak-builtins-build-export.c:980 +#, c-format +msgid "Content Written: %u\n" +msgstr "" + +#: app/flatpak-builtins-build-export.c:981 +msgid "Content Bytes Written:" +msgstr "" + #: app/flatpak-builtins-build-finish.c:48 msgid "Command to set" msgstr "Указать команду" #: app/flatpak-builtins-build-finish.c:48 app/flatpak-builtins-run.c:53 -#: app/flatpak-main.c:159 +#: app/flatpak-main.c:166 msgid "COMMAND" msgstr "КОМАНДА" @@ -602,6 +712,29 @@ msgstr "Удалить параметр обобщенной политики" msgid "GROUP=KEY[=VALUE]" msgstr "" +#: app/flatpak-builtins-build-finish.c:139 +#, c-format +msgid "Not exporting %s, wrong prefix\n" +msgstr "" + +#: app/flatpak-builtins-build-finish.c:143 +#, fuzzy, c-format +msgid "Exporting %s\n" +msgstr "Обновление сводной информации\n" + +#: app/flatpak-builtins-build-finish.c:384 +msgid "More than one executable found\n" +msgstr "" + +#: app/flatpak-builtins-build-finish.c:395 +#, c-format +msgid "Using %s as command\n" +msgstr "" + +#: app/flatpak-builtins-build-finish.c:400 +msgid "No executable found\n" +msgstr "" + #: app/flatpak-builtins-build-finish.c:433 #, c-format msgid "Too few elements in --extra-data argument %s" @@ -664,6 +797,12 @@ msgstr "'%s' не является корректным репозиторием msgid "Multiple images in registry, specify a ref with --ref" msgstr "" +#: app/flatpak-builtins-build-import-bundle.c:123 +#: app/flatpak-builtins-build-import-bundle.c:151 +#, fuzzy, c-format +msgid "Importing %s (%s)\n" +msgstr "Обновление: %s из %s\n" + #: app/flatpak-builtins-build-import-bundle.c:172 msgid "LOCATION FILENAME - Import a file bundle into a local repository" msgstr "ПУТЬ ИМЯ_ФАЙЛА - Импортировать файл с пакетом в локальный репозиторий" @@ -672,7 +811,7 @@ msgstr "ПУТЬ ИМЯ_ФАЙЛА - Импортировать файл с па msgid "LOCATION and FILENAME must be specified" msgstr "Должны быть указаны ПУТЬ и ИМЯ_ФАЙЛА" -#: app/flatpak-builtins-build-init.c:49 app/flatpak-builtins-info.c:48 +#: app/flatpak-builtins-build-init.c:49 app/flatpak-builtins-info.c:51 #: app/flatpak-builtins-run.c:52 msgid "Arch to use" msgstr "Использовать архитектуру" @@ -765,7 +904,7 @@ msgstr "" "'%s' не является корректным именем для типа сборки, укажите app, runtime или " "extension" -#: app/flatpak-builtins-build-init.c:205 app/flatpak-builtins-override.c:71 +#: app/flatpak-builtins-build-init.c:205 app/flatpak-builtins-override.c:74 #, c-format msgid "'%s' is not a valid application name: %s" msgstr "'%s' не является корректным именем приложения: %s" @@ -775,12 +914,14 @@ msgstr "'%s' не является корректным именем прило msgid "Build directory %s already initialized" msgstr "Каталог сборки %s уже инициализирован" -#: app/flatpak-builtins-build-sign.c:41 app/flatpak-builtins-install.c:56 +#: app/flatpak-builtins-build-sign.c:41 app/flatpak-builtins-info-remote.c:48 +#: app/flatpak-builtins-install.c:57 msgid "Arch to install for" msgstr "Архитектура для установки" -#: app/flatpak-builtins-build-sign.c:42 app/flatpak-builtins-install.c:62 -#: app/flatpak-builtins-uninstall.c:48 app/flatpak-builtins-update.c:61 +#: app/flatpak-builtins-build-sign.c:42 app/flatpak-builtins-info-remote.c:50 +#: app/flatpak-builtins-install.c:63 app/flatpak-builtins-uninstall.c:48 +#: app/flatpak-builtins-update.c:61 msgid "Look for runtime with the specified name" msgstr "Искать среду исполнения с указанным именем" @@ -792,11 +933,49 @@ msgstr "ПУТЬ [ID [ВЕТКА]] - Подписать приложение и msgid "No gpg key ids specified" msgstr "Ключ/кличи GPG не указаны" -#: app/flatpak-builtins-delete-remote.c:37 +#: app/flatpak-builtins-config.c:41 +msgid "List configuration keys and values" +msgstr "" + +#: app/flatpak-builtins-config.c:42 +msgid "Get configuration for KEY" +msgstr "" + +#: app/flatpak-builtins-config.c:43 +msgid "Set configuration for KEY to VALUE" +msgstr "" + +#: app/flatpak-builtins-config.c:44 +msgid "Unset configuration for KEY" +msgstr "" + +#: app/flatpak-builtins-config.c:95 +#, fuzzy, c-format +msgid "Unknown configure key '%s'" +msgstr "Неизвестная команда '%s'" + +#: app/flatpak-builtins-config.c:144 app/flatpak-builtins-config.c:185 +#, fuzzy +msgid "You must specify key" +msgstr "Должно быть указано ПРИЛОЖЕНИЕ" + +#: app/flatpak-builtins-config.c:166 +msgid "You must specify both key and value" +msgstr "" + +#: app/flatpak-builtins-config.c:204 +msgid "[KEY [VALUE]] - Manage configuration" +msgstr "" + +#: app/flatpak-builtins-config.c:223 +msgid "Must specify one of --list, --get, --set or --unset" +msgstr "" + +#: app/flatpak-builtins-delete-remote.c:38 msgid "Remove remote even if in use" msgstr "Удалить удаленный репозиторий даже если он используется" -#: app/flatpak-builtins-delete-remote.c:49 +#: app/flatpak-builtins-delete-remote.c:51 msgid "NAME - Delete a remote repository" msgstr "ИМЯ - Удалить удалённый репозиторий" @@ -948,172 +1127,260 @@ msgstr "Невозможно изменить группу пользовате msgid "Can't switch uid" msgstr "Невозможно сменить пользователя" -#: app/flatpak-builtins-info.c:49 app/flatpak-builtins-list.c:46 -#: app/flatpak-builtins-list-remotes.c:43 +#: app/flatpak-builtins-info.c:52 msgid "Show user installations" msgstr "Показать установленное только для пользователя" -#: app/flatpak-builtins-info.c:50 app/flatpak-builtins-list.c:47 -#: app/flatpak-builtins-list-remotes.c:44 +#: app/flatpak-builtins-info.c:53 msgid "Show system-wide installations" msgstr "Показать установленное для всех пользователей" -#: app/flatpak-builtins-info.c:51 app/flatpak-builtins-list.c:48 -#: app/flatpak-builtins-list-remotes.c:45 +#: app/flatpak-builtins-info.c:54 msgid "Show specific system-wide installations" msgstr "Показать установленное в указанном каталоге" -#: app/flatpak-builtins-info.c:52 +#: app/flatpak-builtins-info.c:55 app/flatpak-builtins-info-remote.c:53 msgid "Show ref" msgstr "Показать ссылки" -#: app/flatpak-builtins-info.c:53 +#: app/flatpak-builtins-info.c:56 app/flatpak-builtins-info-remote.c:54 msgid "Show commit" msgstr "Показать зафиксированные изменения" -#: app/flatpak-builtins-info.c:54 +#: app/flatpak-builtins-info.c:57 msgid "Show origin" msgstr "Показать происхождение" -#: app/flatpak-builtins-info.c:55 +#: app/flatpak-builtins-info.c:58 #, fuzzy msgid "Show size" msgstr "Показать ссылки" -#: app/flatpak-builtins-info.c:56 +#: app/flatpak-builtins-info.c:59 app/flatpak-builtins-info-remote.c:56 #, fuzzy msgid "Show metadata" msgstr "Показать подробности про удалённый репозиторий" -#: app/flatpak-builtins-info.c:57 +#: app/flatpak-builtins-info.c:60 +#, fuzzy +msgid "Show permissions" +msgstr "Показать параметры справки" + +#: app/flatpak-builtins-info.c:61 +#, fuzzy +msgid "Query file access" +msgstr "" +"\n" +" Управление доступом к файлам" + +#: app/flatpak-builtins-info.c:61 app/flatpak-builtins-install.c:68 +#: app/flatpak-builtins-update.c:64 +msgid "PATH" +msgstr "ПУТЬ" + +#: app/flatpak-builtins-info.c:62 #, fuzzy msgid "Show extensions" msgstr "Показать параметры справки" -#: app/flatpak-builtins-info.c:97 +#: app/flatpak-builtins-info.c:118 msgid "NAME [BRANCH] - Get info about installed app and/or runtime" msgstr "" "ИМЯ [ВЕТКА] - Получить информацию об установленных приложениях и/или средах " "исполнения" -#: app/flatpak-builtins-info.c:157 +#: app/flatpak-builtins-info.c:189 msgid "ref not present in origin" msgstr "" -#: app/flatpak-builtins-info.c:159 +#: app/flatpak-builtins-info.c:202 app/flatpak-builtins-info-remote.c:177 +msgid "Warning: Commit has no flatpak metadata\n" +msgstr "" + +#: app/flatpak-builtins-info.c:209 app/flatpak-builtins-info-remote.c:200 msgid "Ref:" msgstr "" -#: app/flatpak-builtins-info.c:160 app/flatpak-builtins-info.c:270 +#: app/flatpak-builtins-info.c:210 app/flatpak-builtins-info.c:364 +#: app/flatpak-builtins-info-remote.c:201 msgid "ID:" msgstr "" -#: app/flatpak-builtins-info.c:161 +#: app/flatpak-builtins-info.c:211 app/flatpak-builtins-info-remote.c:202 msgid "Arch:" msgstr "" -#: app/flatpak-builtins-info.c:162 +#: app/flatpak-builtins-info.c:212 app/flatpak-builtins-info-remote.c:203 #, fuzzy msgid "Branch:" msgstr "Используемая ветка" -#: app/flatpak-builtins-info.c:163 app/flatpak-builtins-info.c:271 +#: app/flatpak-builtins-info.c:213 app/flatpak-builtins-info.c:365 msgid "Origin:" msgstr "" -#: app/flatpak-builtins-info.c:166 +#: app/flatpak-builtins-info.c:215 app/flatpak-builtins-info-remote.c:205 +#, fuzzy +msgid "Collection ID:" +msgstr "Запустить приложение" + +#: app/flatpak-builtins-info.c:217 app/flatpak-builtins-info-remote.c:206 +msgid "Date:" +msgstr "" + +#: app/flatpak-builtins-info.c:219 app/flatpak-builtins-info-remote.c:207 +msgid "Subject:" +msgstr "" + +#: app/flatpak-builtins-info.c:223 msgid "Active commit:" msgstr "" -#: app/flatpak-builtins-info.c:167 +#: app/flatpak-builtins-info.c:224 msgid "Latest commit:" msgstr "" -#: app/flatpak-builtins-info.c:170 app/flatpak-builtins-info.c:272 +#: app/flatpak-builtins-info.c:227 app/flatpak-builtins-info.c:366 +#: app/flatpak-builtins-info-remote.c:208 msgid "Commit:" msgstr "" -#: app/flatpak-builtins-info.c:172 +#: app/flatpak-builtins-info.c:229 msgid "alt-id:" msgstr "" -#: app/flatpak-builtins-info.c:173 +#: app/flatpak-builtins-info.c:230 app/flatpak-builtins-info-remote.c:209 +msgid "Parent:" +msgstr "" + +#: app/flatpak-builtins-info.c:231 msgid "Location:" msgstr "" -#: app/flatpak-builtins-info.c:174 app/flatpak-builtins-info.c:273 +#: app/flatpak-builtins-info.c:232 app/flatpak-builtins-info.c:367 +#: app/flatpak-builtins-info-remote.c:211 #, fuzzy msgid "Installed size:" msgstr "Установка: %s\n" -#: app/flatpak-builtins-info.c:179 +#: app/flatpak-builtins-info.c:237 app/flatpak-builtins-info-remote.c:216 #, fuzzy msgid "Runtime:" msgstr "Используемая среда исполнения" -#: app/flatpak-builtins-info.c:184 +#: app/flatpak-builtins-info.c:242 msgid "Installed subdirectories:" msgstr "" -#: app/flatpak-builtins-info.c:269 +#: app/flatpak-builtins-info.c:363 #, fuzzy msgid "Extension:" msgstr "Показать параметры справки" -#: app/flatpak-builtins-info.c:280 +#: app/flatpak-builtins-info.c:374 msgid "Subpaths:" msgstr "" -#: app/flatpak-builtins-install.c:57 -msgid "Don't pull, only install from local cache" -msgstr "Не обращаться к репозиторию, устанавливать из локального кеша" - -#: app/flatpak-builtins-install.c:58 app/flatpak-builtins-update.c:57 -msgid "Don't deploy, only download to local cache" -msgstr "Не начинать установку, только скачать в кеш" - -#: app/flatpak-builtins-install.c:59 -msgid "Don't install related refs" -msgstr "Не устанавливать связанные ссылки" - -#: app/flatpak-builtins-install.c:60 app/flatpak-builtins-update.c:59 -msgid "Don't verify/install runtime dependencies" -msgstr "Не проверять и не устанавливать зависимости среды исполнения" - -#: app/flatpak-builtins-install.c:61 app/flatpak-builtins-update.c:60 -msgid "Don't use static deltas" +#: app/flatpak-builtins-info-remote.c:49 +msgid "Commit to show info for" msgstr "" -#: app/flatpak-builtins-install.c:63 app/flatpak-builtins-uninstall.c:49 -#: app/flatpak-builtins-update.c:62 +#: app/flatpak-builtins-info-remote.c:51 app/flatpak-builtins-install.c:64 +#: app/flatpak-builtins-uninstall.c:49 app/flatpak-builtins-update.c:62 msgid "Look for app with the specified name" msgstr "Искать приложение с указанным именем" -#: app/flatpak-builtins-install.c:64 +#: app/flatpak-builtins-info-remote.c:52 +msgid "Display log" +msgstr "" + +#: app/flatpak-builtins-info-remote.c:55 +#, fuzzy +msgid "Show parent" +msgstr "Показать ссылки" + +#: app/flatpak-builtins-info-remote.c:122 +msgid "" +" REMOTE REF - Show information about an application or runtime in a remote" +msgstr "" + +#: app/flatpak-builtins-info-remote.c:133 app/flatpak-builtins-install.c:499 +msgid "REMOTE and REF must be specified" +msgstr "Должны быть указаны УДАЛЁННЫЙ_РЕПО и ССЫЛКА" + +#: app/flatpak-builtins-info-remote.c:210 +#, fuzzy +msgid "Download size:" +msgstr "Показать ссылки" + +#: app/flatpak-builtins-info-remote.c:223 +msgid "History:\n" +msgstr "" + +#: app/flatpak-builtins-info-remote.c:244 +msgid " Subject:" +msgstr "" + +#: app/flatpak-builtins-info-remote.c:245 +msgid " Date:" +msgstr "" + +#: app/flatpak-builtins-info-remote.c:246 +#, fuzzy +msgid " Commit:" +msgstr "Показать зафиксированные изменения" + +#: app/flatpak-builtins-info-remote.c:292 +#, c-format +msgid "Warning: Commit %s has no flatpak metadata\n" +msgstr "" + +#: app/flatpak-builtins-install.c:58 +msgid "Don't pull, only install from local cache" +msgstr "Не обращаться к репозиторию, устанавливать из локального кеша" + +#: app/flatpak-builtins-install.c:59 app/flatpak-builtins-update.c:57 +msgid "Don't deploy, only download to local cache" +msgstr "Не начинать установку, только скачать в кеш" + +#: app/flatpak-builtins-install.c:60 +msgid "Don't install related refs" +msgstr "Не устанавливать связанные ссылки" + +#: app/flatpak-builtins-install.c:61 app/flatpak-builtins-update.c:59 +msgid "Don't verify/install runtime dependencies" +msgstr "Не проверять и не устанавливать зависимости среды исполнения" + +#: app/flatpak-builtins-install.c:62 app/flatpak-builtins-update.c:60 +msgid "Don't use static deltas" +msgstr "" + +#: app/flatpak-builtins-install.c:65 msgid "Assume LOCATION is a .flatpak single-file bundle" msgstr "ПУТЬ является файлом с пакетом" -#: app/flatpak-builtins-install.c:65 +#: app/flatpak-builtins-install.c:66 msgid "Assume LOCATION is a .flatpakref application description" msgstr "ПУТЬ является описанием приложения в формате .flatpakref" -#: app/flatpak-builtins-install.c:66 +#: app/flatpak-builtins-install.c:67 msgid "Check bundle signatures with GPG key from FILE (- for stdin)" msgstr "Проверять подписи пакета ключом GPG из ФАЙЛА (- из стандартного ввода)" -#: app/flatpak-builtins-install.c:67 +#: app/flatpak-builtins-install.c:68 msgid "Only install this subpath" msgstr "Устанавливать только указанный подкаталог" -#: app/flatpak-builtins-install.c:67 app/flatpak-builtins-update.c:64 -msgid "PATH" -msgstr "ПУТЬ" - -#: app/flatpak-builtins-install.c:68 app/flatpak-builtins-update.c:65 +#: app/flatpak-builtins-install.c:69 app/flatpak-builtins-update.c:65 msgid "Automatically answer yes for all questions" msgstr "Автоматически отвечать да на все вопросы" -#: app/flatpak-builtins-install.c:210 +#: app/flatpak-builtins-install.c:70 +#, fuzzy +msgid "Uninstall first if already installed" +msgstr "%s ветка %s уже установлено" + +#: app/flatpak-builtins-install.c:212 #, c-format msgid "" "This application depends on runtimes from:\n" @@ -1124,152 +1391,149 @@ msgstr "" " %s\n" "Добавить его как новый удалённый репозиторий '%s'" -#: app/flatpak-builtins-install.c:214 app/flatpak-builtins-install.c:340 +#: app/flatpak-builtins-install.c:216 app/flatpak-builtins-install.c:342 #, c-format msgid "Configuring %s as new remote '%s'" msgstr "Настройка %s как новый удаленный репозиторий '%s'" -#: app/flatpak-builtins-install.c:262 +#: app/flatpak-builtins-install.c:264 msgid "Bundle filename must be specified" msgstr "Должно быть указано имя файла с пакетом" -#: app/flatpak-builtins-install.c:272 +#: app/flatpak-builtins-install.c:274 msgid "Remote bundles are not supported" msgstr "Пакеты из удалённых репозиториев не поддерживаются" -#: app/flatpak-builtins-install.c:336 +#: app/flatpak-builtins-install.c:338 #, c-format msgid "" "The remote '%s', at location %s contains additional applications.\n" -"Do you want to install other applications from here?" +"Should the remote be kept for future installations?" msgstr "" -#: app/flatpak-builtins-install.c:396 +#: app/flatpak-builtins-install.c:398 msgid "Filename or uri must be specified" msgstr "Должно быть указано имя файла или адрес" -#: app/flatpak-builtins-install.c:440 +#: app/flatpak-builtins-install.c:442 #, c-format msgid "Installing: %s\n" msgstr "Установка: %s\n" -#: app/flatpak-builtins-install.c:470 +#: app/flatpak-builtins-install.c:474 msgid "LOCATION/REMOTE [REF...] - Install applications or runtimes" msgstr "" "ПУТЬ/УДАЛЁННЫЙ_РЕПО [ССЫЛКА] - Установить приложения или среды исполнения" -#: app/flatpak-builtins-install.c:491 -msgid "REMOTE and REF must be specified" -msgstr "Должны быть указаны УДАЛЁННЫЙ_РЕПО и ССЫЛКА" - -#: app/flatpak-builtins-list.c:49 +#: app/flatpak-builtins-list.c:43 msgid "Show extra information" msgstr "Показать дополнительную информацию" -#: app/flatpak-builtins-list.c:50 +#: app/flatpak-builtins-list.c:44 msgid "List installed runtimes" msgstr "Показать установленные среды исполнения" -#: app/flatpak-builtins-list.c:51 +#: app/flatpak-builtins-list.c:45 msgid "List installed applications" msgstr "Показать установленные приложения" -#: app/flatpak-builtins-list.c:52 +#: app/flatpak-builtins-list.c:46 msgid "Arch to show" msgstr "Показать архитектуры" -#: app/flatpak-builtins-list.c:53 app/flatpak-builtins-ls-remote.c:49 +#: app/flatpak-builtins-list.c:47 app/flatpak-builtins-ls-remote.c:50 msgid "List all refs (including locale/debug)" msgstr "" -#: app/flatpak-builtins-list.c:131 app/flatpak-builtins-ls-remote.c:129 +#: app/flatpak-builtins-list.c:125 app/flatpak-builtins-ls-remote.c:174 #: app/flatpak-builtins-repo.c:98 msgid "Ref" msgstr "" -#: app/flatpak-builtins-list.c:134 app/flatpak-builtins-ls-remote.c:131 +#: app/flatpak-builtins-list.c:128 app/flatpak-builtins-ls-remote.c:176 msgid "Origin" msgstr "" -#: app/flatpak-builtins-list.c:135 +#: app/flatpak-builtins-list.c:129 msgid "Active commit" msgstr "" -#: app/flatpak-builtins-list.c:136 +#: app/flatpak-builtins-list.c:130 msgid "Latest commit" msgstr "" -#: app/flatpak-builtins-list.c:137 app/flatpak-builtins-ls-remote.c:133 +#: app/flatpak-builtins-list.c:131 app/flatpak-builtins-ls-remote.c:178 #, fuzzy msgid "Installed size" msgstr "Установка: %s\n" -#: app/flatpak-builtins-list.c:139 app/flatpak-builtins-list-remotes.c:112 +#: app/flatpak-builtins-list.c:133 app/flatpak-builtins-list-remotes.c:73 msgid "Options" msgstr "" -#: app/flatpak-builtins-list.c:375 +#: app/flatpak-builtins-list.c:305 msgid " - List installed apps and/or runtimes" msgstr " - Показать список установленных приложений и/или сред исполнения" -#: app/flatpak-builtins-list-remotes.c:46 +#: app/flatpak-builtins-list-remotes.c:40 msgid "Show remote details" msgstr "Показать подробности про удалённый репозиторий" -#: app/flatpak-builtins-list-remotes.c:47 +#: app/flatpak-builtins-list-remotes.c:41 msgid "Show disabled remotes" msgstr "Показать отключённые удалённые репозитории" -#: app/flatpak-builtins-list-remotes.c:59 +#: app/flatpak-builtins-list-remotes.c:53 msgid " - List remote repositories" msgstr " - Показать удалённые репозитории" -#: app/flatpak-builtins-list-remotes.c:105 +#: app/flatpak-builtins-list-remotes.c:66 msgid "Name" msgstr "" -#: app/flatpak-builtins-list-remotes.c:108 +#: app/flatpak-builtins-list-remotes.c:69 msgid "Title" msgstr "" -#: app/flatpak-builtins-list-remotes.c:110 +#: app/flatpak-builtins-list-remotes.c:71 msgid "Priority" msgstr "" -#: app/flatpak-builtins-ls-remote.c:44 +#: app/flatpak-builtins-ls-remote.c:45 msgid "Show arches and branches" msgstr "Показать архитектуры и ветки" -#: app/flatpak-builtins-ls-remote.c:45 +#: app/flatpak-builtins-ls-remote.c:46 msgid "Show only runtimes" msgstr "Показать только среды исполнения" -#: app/flatpak-builtins-ls-remote.c:46 +#: app/flatpak-builtins-ls-remote.c:47 msgid "Show only apps" msgstr "Показать только приложения" -#: app/flatpak-builtins-ls-remote.c:47 +#: app/flatpak-builtins-ls-remote.c:48 msgid "Show only those where updates are available" msgstr "Показать элементы с доступными обновлениями" -#: app/flatpak-builtins-ls-remote.c:48 +#: app/flatpak-builtins-ls-remote.c:49 msgid "Limit to this arch (* for all)" msgstr "Показать только указанные архитектуры (* для всех)" -#: app/flatpak-builtins-ls-remote.c:74 -msgid " REMOTE - Show available runtimes and applications" +#: app/flatpak-builtins-ls-remote.c:96 +#, fuzzy +msgid " [REMOTE] - Show available runtimes and applications" msgstr " УДАЛЁННЫЙ_РЕПО - Показать доступные среды исполнения и приложения" -#: app/flatpak-builtins-ls-remote.c:132 +#: app/flatpak-builtins-ls-remote.c:177 msgid "Commit" msgstr "" -#: app/flatpak-builtins-ls-remote.c:134 +#: app/flatpak-builtins-ls-remote.c:179 #, fuzzy msgid "Download size" msgstr "Показать ссылки" -#: app/flatpak-builtins-ls-remote.c:245 +#: app/flatpak-builtins-ls-remote.c:304 #, fuzzy msgid "No ref information available in repository" msgstr "ФАЙЛ - Получить информацию об экспортированном файле" @@ -1278,28 +1542,63 @@ msgstr "ФАЙЛ - Получить информацию об экспортир msgid "Arch to make current for" msgstr "Архитектура, которая станет текущей" -#: app/flatpak-builtins-make-current.c:57 +#: app/flatpak-builtins-make-current.c:58 msgid "APP BRANCH - Make branch of application current" msgstr "ПРИЛОЖЕНИЕ ВЕТКА - Сделать ветку текущей для приложения" -#: app/flatpak-builtins-make-current.c:64 app/flatpak-builtins-override.c:63 -#: app/flatpak-builtins-run.c:105 +#: app/flatpak-builtins-make-current.c:69 app/flatpak-builtins-run.c:105 msgid "APP must be specified" msgstr "Должно быть указано ПРИЛОЖЕНИЕ" -#: app/flatpak-builtins-make-current.c:79 +#: app/flatpak-builtins-make-current.c:84 msgid "BRANCH must be specified" msgstr "Должна быть указана ВЕТКА" -#: app/flatpak-builtins-make-current.c:92 +#: app/flatpak-builtins-make-current.c:97 #, c-format msgid "App %s branch %s is not installed" msgstr "Приложение %s ветка %s не установлено" -#: app/flatpak-builtins-override.c:53 -msgid "APP - Override settings for application" +#: app/flatpak-builtins-override.c:54 +#, fuzzy +msgid "[APP] - Override settings [for application]" msgstr "ПРИЛОЖЕНИЕ - Переопределить настройки для приложения" +#: app/flatpak-builtins-repo.c:48 +#, c-format +msgid "Title: %s\n" +msgstr "" + +#: app/flatpak-builtins-repo.c:51 +#, c-format +msgid "Collection ID: %s\n" +msgstr "" + +#: app/flatpak-builtins-repo.c:54 +#, c-format +msgid "Default branch: %s\n" +msgstr "" + +#: app/flatpak-builtins-repo.c:57 +#, c-format +msgid "Redirect URL: %s\n" +msgstr "" + +#: app/flatpak-builtins-repo.c:60 +#, c-format +msgid "Redirect collection ID: %s\n" +msgstr "" + +#: app/flatpak-builtins-repo.c:68 +#, c-format +msgid "GPG key hash: %s\n" +msgstr "" + +#: app/flatpak-builtins-repo.c:77 +#, c-format +msgid "%zd branches\n" +msgstr "" + #: app/flatpak-builtins-repo.c:99 #, fuzzy msgid "Installed" @@ -1323,7 +1622,7 @@ msgstr "Ветка по умолчанию для репозитория" msgid "Print metadata for a branch" msgstr "" -#: app/flatpak-builtins-repo.c:167 +#: app/flatpak-builtins-repo.c:168 #, fuzzy msgid "LOCATION - Repository maintenance" msgstr "ПУТЬ - Обновить метаданные репозитория" @@ -1436,14 +1735,6 @@ msgstr "Используемая среда исполнения" msgid "Runtime version to use" msgstr "Версия среды исполнения" -#: app/flatpak-builtins-run.c:58 -msgid "Log session bus calls" -msgstr "Журналировать вызовы пользовательской шины" - -#: app/flatpak-builtins-run.c:59 -msgid "Log system bus calls" -msgstr "Журналировать вызовы системной шины" - #: app/flatpak-builtins-run.c:60 #, fuzzy msgid "Log accessibility bus calls" @@ -1457,6 +1748,44 @@ msgstr "" msgid "APP [args...] - Run an app" msgstr "ПРИЛОЖЕНИЕ [параметры...] - Запустить приложение" +#: app/flatpak-builtins-search.c:239 +msgid "TEXT - Search remote apps/runtimes for text" +msgstr "" + +#: app/flatpak-builtins-search.c:249 +#, fuzzy +msgid "TEXT must be specified" +msgstr "Должен быть указан УДАЛЕННЫЙ_РЕПО" + +#: app/flatpak-builtins-search.c:305 +#, fuzzy +msgid "Application ID" +msgstr "Запустить приложение" + +#: app/flatpak-builtins-search.c:306 +msgid "Version" +msgstr "" + +#: app/flatpak-builtins-search.c:308 +#, fuzzy +msgid "Branch" +msgstr "Используемая ветка" + +#: app/flatpak-builtins-search.c:310 +#, fuzzy +msgid "Remotes" +msgstr "Нет удалённого репозитория %s" + +#: app/flatpak-builtins-search.c:311 +#, fuzzy +msgid "Description" +msgstr "Полное описание" + +#: app/flatpak-builtins-search.c:320 +#, fuzzy +msgid "No matches found" +msgstr "Совпадений не обнаружено %s" + #: app/flatpak-builtins-uninstall.c:44 msgid "Arch to uninstall" msgstr "Удаляемая архитектура" @@ -1473,19 +1802,24 @@ msgstr "Не удалять связанные ссылки" msgid "Remove files even if running" msgstr "Удалять файлы даже если запущено" -#: app/flatpak-builtins-uninstall.c:69 +#: app/flatpak-builtins-uninstall.c:70 msgid "REF... - Uninstall an application" msgstr "ССЫЛКА... - Удалить приложение" -#: app/flatpak-builtins-uninstall.c:76 +#: app/flatpak-builtins-uninstall.c:81 msgid "Must specify at least one REF" msgstr "Должна быть указана как минимум одна ССЫЛКА" -#: app/flatpak-builtins-uninstall.c:129 app/flatpak-transaction.c:340 +#: app/flatpak-builtins-uninstall.c:134 app/flatpak-transaction.c:355 #, c-format msgid "Warning: Problem looking for related refs: %s\n" msgstr "Предупреждение: Проблема при поиске связанных ссылок: %s\n" +#: app/flatpak-builtins-uninstall.c:164 +#, fuzzy, c-format +msgid "Uninstalling: %s\n" +msgstr "Установка: %s\n" + #: app/flatpak-builtins-update.c:53 msgid "Arch to update for" msgstr "Обновляемая архитектура" @@ -1494,10 +1828,6 @@ msgstr "Обновляемая архитектура" msgid "Commit to deploy" msgstr "Зафиксировать изменения для развёртывания" -#: app/flatpak-builtins-update.c:54 -msgid "COMMIT" -msgstr "ИЗМЕНЕНИЕ" - #: app/flatpak-builtins-update.c:55 msgid "Remove old files even if running" msgstr "Удалять старые файлы даже если запущено" @@ -1518,42 +1848,94 @@ msgstr "Обновить ветку appstream для удалённого реп msgid "Only update this subpath" msgstr "Обновлять только указанный подкаталог" -#: app/flatpak-builtins-update.c:95 -#, c-format -msgid "Updating appstream for remote %s\n" -msgstr "Обновление ветки appstream для удалённого репозитория %s\n" - -#: app/flatpak-builtins-update.c:133 +#: app/flatpak-builtins-update.c:83 msgid "[REF...] - Update applications or runtimes" msgstr "[ССЫЛКА...] - Обновить приложения или среды исполнения" +#: app/flatpak-builtins-update.c:119 +#, fuzzy +msgid "Looking for updates...\n" +msgstr "Нет обновлений\n" + +#: app/flatpak-builtins-utils.c:365 +#, c-format +msgid "Remote ‘%s’ found in multiple installations:\n" +msgstr "" + +#: app/flatpak-builtins-utils.c:372 +#, fuzzy +msgid "Which do you want to use (0 to abort)?" +msgstr "Которую версию установить (0 - отмена)?" + +#: app/flatpak-builtins-utils.c:374 +#, c-format +msgid "No remote chosen to resolve ‘%s’ which exists in multiple installations" +msgstr "" + +#: app/flatpak-builtins-utils.c:479 app/flatpak-builtins-utils.c:481 +#, fuzzy, c-format +msgid "Updating appstream data for user remote %s\n" +msgstr "Обновление ветки appstream для удалённого репозитория %s\n" + +#: app/flatpak-builtins-utils.c:486 app/flatpak-builtins-utils.c:488 +#, fuzzy, c-format +msgid "Updating appstream data for remote %s\n" +msgstr "Обновление ветки appstream для удалённого репозитория %s\n" + +#: app/flatpak-builtins-utils.c:493 +#, fuzzy, c-format +msgid "Error updating: %s\n" +msgstr "Обновление сводной информации\n" + +#: app/flatpak-builtins-utils.c:526 +#, c-format +msgid "Remote \"%s\" not found" +msgstr "" + #. translators: please keep the leading space -#: app/flatpak-main.c:61 +#: app/flatpak-main.c:62 msgid " Manage installed apps and runtimes" msgstr " Управление установленными приложениями и средами исполнения" -#: app/flatpak-main.c:62 +#: app/flatpak-main.c:63 msgid "Install an application or runtime" msgstr "Установить приложение или среду исполнения" -#: app/flatpak-main.c:63 +#: app/flatpak-main.c:64 msgid "Update an installed application or runtime" msgstr "Обновить установленное приложение или среду исполнения" -#: app/flatpak-main.c:64 +#: app/flatpak-main.c:65 msgid "Uninstall an installed application or runtime" msgstr "Удалить установленное приложение или среду исполнения" -#: app/flatpak-main.c:65 +#: app/flatpak-main.c:66 msgid "List installed apps and/or runtimes" msgstr "Показать список установленных приложений и/или сред исполнения" -#: app/flatpak-main.c:66 +#: app/flatpak-main.c:67 msgid "Show info for installed app or runtime" msgstr "Показать информацию об установленных приложениях или средах исполнения" +#: app/flatpak-main.c:68 +#, fuzzy +msgid "Configure flatpak" +msgstr "Удалить настроенный удалённый репозиторий" + #. translators: please keep the leading newline and space -#: app/flatpak-main.c:69 +#: app/flatpak-main.c:71 +#, fuzzy +msgid "" +"\n" +" Finding applications and runtimes" +msgstr "Подписать приложение или среду исполнения" + +#: app/flatpak-main.c:72 +msgid "Search for remote apps/runtimes" +msgstr "" + +#. translators: please keep the leading newline and space +#: app/flatpak-main.c:75 msgid "" "\n" " Running applications" @@ -1561,24 +1943,24 @@ msgstr "" "\n" " Запуск приложений" -#: app/flatpak-main.c:70 +#: app/flatpak-main.c:76 msgid "Run an application" msgstr "Запустить приложение" -#: app/flatpak-main.c:71 +#: app/flatpak-main.c:77 msgid "Override permissions for an application" msgstr "Переопределить разрешения для приложения" -#: app/flatpak-main.c:72 +#: app/flatpak-main.c:78 msgid "Specify default version to run" msgstr "Указать версию по умолчанию для запуска" -#: app/flatpak-main.c:73 +#: app/flatpak-main.c:79 msgid "Enter the namespace of a running application" msgstr "Войти в пространство имён запущенного приложения" #. translators: please keep the leading newline and space -#: app/flatpak-main.c:76 +#: app/flatpak-main.c:82 msgid "" "\n" " Manage file access" @@ -1586,24 +1968,24 @@ msgstr "" "\n" " Управление доступом к файлам" -#: app/flatpak-main.c:77 +#: app/flatpak-main.c:83 msgid "Grant an application access to a specific file" msgstr "Разрешить доступ приложения к указанному файлу" -#: app/flatpak-main.c:78 +#: app/flatpak-main.c:84 msgid "Revoke access to a specific file" msgstr "Отозвать разрешение на доступ к указанному файлу" -#: app/flatpak-main.c:79 +#: app/flatpak-main.c:85 msgid "Show information about a specific file" msgstr "Показать информацию об указанном файле" -#: app/flatpak-main.c:80 +#: app/flatpak-main.c:86 msgid "List exported files" msgstr "Список экспортированных файлов" #. translators: please keep the leading newline and space -#: app/flatpak-main.c:83 +#: app/flatpak-main.c:89 msgid "" "\n" " Manage remote repositories" @@ -1611,28 +1993,33 @@ msgstr "" "\n" " Управление удалёнными репозиториями" -#: app/flatpak-main.c:84 +#: app/flatpak-main.c:90 msgid "List all configured remotes" msgstr "Список всех настроенных удалённых репозиториев" -#: app/flatpak-main.c:85 +#: app/flatpak-main.c:91 msgid "Add a new remote repository (by URL)" msgstr "Добавить новый удалённый репозиторий (по АДРЕСУ)" -#: app/flatpak-main.c:86 +#: app/flatpak-main.c:92 msgid "Modify properties of a configured remote" msgstr "Изменить свойства настроенного удалённого репозитория" -#: app/flatpak-main.c:87 +#: app/flatpak-main.c:93 msgid "Delete a configured remote" msgstr "Удалить настроенный удалённый репозиторий" -#: app/flatpak-main.c:89 +#: app/flatpak-main.c:95 msgid "List contents of a configured remote" msgstr "Список содержимого удалённого репозитория" +#: app/flatpak-main.c:96 +#, fuzzy +msgid "Show information about a remote app or runtime" +msgstr "Показать информацию об установленных приложениях или средах исполнения" + #. translators: please keep the leading newline and space -#: app/flatpak-main.c:92 +#: app/flatpak-main.c:99 msgid "" "\n" " Build applications" @@ -1640,508 +2027,287 @@ msgstr "" "\n" " Сборка приложений" -#: app/flatpak-main.c:93 +#: app/flatpak-main.c:100 msgid "Initialize a directory for building" msgstr "Инициализировать каталог для сборки" -#: app/flatpak-main.c:94 +#: app/flatpak-main.c:101 msgid "Run a build command inside the build dir" msgstr "Запустить команду сборки в каталоге сборки" -#: app/flatpak-main.c:95 +#: app/flatpak-main.c:102 msgid "Finish a build dir for export" msgstr "Финализировать каталог сборки для экспорта" -#: app/flatpak-main.c:96 +#: app/flatpak-main.c:103 msgid "Export a build dir to a repository" msgstr "Экспортировать из каталога сборки в репозиторий" -#: app/flatpak-main.c:97 -msgid "Create a bundle file from a build directory" +#: app/flatpak-main.c:104 +#, fuzzy +msgid "Create a bundle file from a ref in a local repository" msgstr "Создать файл с пакетом из каталога сборки" -#: app/flatpak-main.c:98 +#: app/flatpak-main.c:105 msgid "Import a bundle file" msgstr "Импортировать файл с пакетом" -#: app/flatpak-main.c:99 +#: app/flatpak-main.c:106 msgid "Sign an application or runtime" msgstr "Подписать приложение или среду исполнения" -#: app/flatpak-main.c:100 +#: app/flatpak-main.c:107 msgid "Update the summary file in a repository" msgstr "Обновить файл со сводной информацией в репозитории" -#: app/flatpak-main.c:101 +#: app/flatpak-main.c:108 msgid "Create new commit based on existing ref" msgstr "Создать новое изменение на базе существующей ссылки" -#: app/flatpak-main.c:102 +#: app/flatpak-main.c:109 #, fuzzy msgid "Print information about a repo" msgstr "ФАЙЛ - Получить информацию об экспортированном файле" -#: app/flatpak-main.c:119 +#: app/flatpak-main.c:126 #, fuzzy msgid "Print debug information during command processing, -vv for more detail" msgstr "Печатать отладочную информацию во время обработки команд" -#: app/flatpak-main.c:120 +#: app/flatpak-main.c:127 msgid "Print OSTree debug information during command processing" msgstr "Печатать отладочную информацию OSTree во время обработки команд" -#: app/flatpak-main.c:121 +#: app/flatpak-main.c:128 msgid "Show help options" msgstr "Показать параметры справки" -#: app/flatpak-main.c:126 +#: app/flatpak-main.c:133 msgid "Print version information and exit" msgstr "Напечатать информацию о версии и выйти" -#: app/flatpak-main.c:127 +#: app/flatpak-main.c:134 msgid "Print default arch and exit" msgstr "Напечатать архитектуру по умолчанию и выйти" -#: app/flatpak-main.c:128 +#: app/flatpak-main.c:135 msgid "Print supported arches and exit" msgstr "Напечатать поддерживаемые архитектуры и выйти" -#: app/flatpak-main.c:129 +#: app/flatpak-main.c:136 msgid "Print active gl drivers and exit" msgstr "Показать версию gl драйверов и выйти" -#: app/flatpak-main.c:134 +#: app/flatpak-main.c:141 msgid "Work on user installations" msgstr "Работать с установленным только для пользователя" -#: app/flatpak-main.c:135 +#: app/flatpak-main.c:142 msgid "Work on system-wide installations (default)" msgstr "Работать с установленным для всех пользователей (по умолчанию)" -#: app/flatpak-main.c:136 -msgid "Work on a specific system-wide installation" +#: app/flatpak-main.c:143 +#, fuzzy +msgid "Work on specific system-wide installation(s)" msgstr "Работать с установленным в указанном каталоге" -#: app/flatpak-main.c:136 +#: app/flatpak-main.c:143 #, fuzzy msgid "NAME" msgstr "ИМЯ_ФАЙЛА" -#: app/flatpak-main.c:162 +#: app/flatpak-main.c:169 msgid "Builtin Commands:" msgstr "Встроенные команды:" -#: app/flatpak-main.c:388 +#: app/flatpak-main.c:370 +msgid "" +"The --installation option was used multiple times for a command that works " +"on one installation" +msgstr "" + +#: app/flatpak-main.c:489 #, c-format msgid "Unknown command '%s'" msgstr "Неизвестная команда '%s'" -#: app/flatpak-main.c:396 +#: app/flatpak-main.c:497 msgid "No command specified" msgstr "Команда не указана" -#: app/flatpak-main.c:514 +#: app/flatpak-main.c:615 msgid "error:" msgstr "ошибка:" -#: app/flatpak-transaction.c:302 +#: app/flatpak-transaction.c:313 +#, fuzzy, c-format +msgid "Found in remote %s\n" +msgstr "Обнаружено несколько удалённых репозиториев:\n" + +#: app/flatpak-transaction.c:317 #, c-format msgid "Found in remote %s, do you want to install it?" msgstr "Обнаружен удалённый репозиторий %s, установить?" -#: app/flatpak-transaction.c:307 +#: app/flatpak-transaction.c:322 msgid "Found in several remotes:\n" msgstr "Обнаружено несколько удалённых репозиториев:\n" -#: app/flatpak-transaction.c:312 +#: app/flatpak-transaction.c:327 msgid "Which do you want to install (0 to abort)?" msgstr "Которую версию установить (0 - отмена)?" -#: app/flatpak-transaction.c:402 +#: app/flatpak-transaction.c:417 #, c-format msgid "Required runtime for %s (%s) is not installed, searching...\n" msgstr "Требуемая среда исполнения для %s (%s) не установлена, поиск...\n" -#: app/flatpak-transaction.c:408 +#: app/flatpak-transaction.c:423 #, c-format msgid "The required runtime %s was not found in a configured remote.\n" msgstr "" "Требуемая среда исполнения %s не найдена в настроенных удалённых " "репозиториях.\n" -#: app/flatpak-transaction.c:469 common/flatpak-dir.c:1127 -#: common/flatpak-dir.c:1433 common/flatpak-dir.c:1456 -#: common/flatpak-dir.c:1478 common/flatpak-dir.c:10136 -#: common/flatpak-utils.c:1272 common/flatpak-utils.c:1366 +#: app/flatpak-transaction.c:506 common/flatpak-dir.c:1160 +#: common/flatpak-dir.c:1479 common/flatpak-dir.c:1502 +#: common/flatpak-dir.c:1524 common/flatpak-dir.c:10655 +#: common/flatpak-utils.c:1312 common/flatpak-utils.c:1406 #, c-format msgid "%s not installed" msgstr "%s не установлено" -#: app/flatpak-transaction.c:475 +#: app/flatpak-transaction.c:512 #, c-format msgid "Remote %s disabled, ignoring %s update" msgstr "Удалённый репозиторий %s отключен, обновление %s пропущено" -#: app/flatpak-transaction.c:485 +#: app/flatpak-transaction.c:525 #, fuzzy, c-format msgid "%s already installed, skipping\n" msgstr "%s уже установлено" -#: app/flatpak-transaction.c:529 +#: app/flatpak-transaction.c:531 +#, fuzzy, c-format +msgid "%s is already installed from other remote (%s)" +msgstr "%s ветка %s уже установлено" + +#: app/flatpak-transaction.c:543 +#, c-format +msgid "Warning: Can't find dependencies: %s\n" +msgstr "" + +#: app/flatpak-transaction.c:570 +#, c-format +msgid "Invalid require-flatpak argument %s\n" +msgstr "" + +#: app/flatpak-transaction.c:576 #, c-format msgid "%s needs a later flatpak version (%s)" msgstr "%s требует более новую версию flatpak (%s)" -#: app/flatpak-transaction.c:704 +#: app/flatpak-transaction.c:688 +#, fuzzy, c-format +msgid "Error updating remote metadata for '%s': %s\n" +msgstr "Ошибка при обновлении метаданных дополнительных данных для '%s': %s\n" + +#: app/flatpak-transaction.c:744 msgid "install" msgstr "установить" -#: app/flatpak-transaction.c:705 +#: app/flatpak-transaction.c:746 +#, fuzzy, c-format +msgid "Installing for user: %s from %s\n" +msgstr "Установка: %s из %s\n" + +#: app/flatpak-transaction.c:748 #, c-format msgid "Installing: %s from %s\n" msgstr "Установка: %s из %s\n" -#: app/flatpak-transaction.c:721 +#: app/flatpak-transaction.c:765 msgid "update" msgstr "обновить" -#: app/flatpak-transaction.c:729 +#: app/flatpak-transaction.c:774 +#, fuzzy, c-format +msgid "Updating for user: %s from %s\n" +msgstr "Обновление: %s из %s\n" + +#: app/flatpak-transaction.c:776 #, c-format msgid "Updating: %s from %s\n" msgstr "Обновление: %s из %s\n" -#: app/flatpak-transaction.c:749 +#: app/flatpak-transaction.c:796 #, c-format msgid "Now at %s.\n" msgstr "В настоящее время на %s.\n" -#: app/flatpak-transaction.c:755 +#: app/flatpak-transaction.c:802 msgid "No updates.\n" msgstr "Нет обновлений\n" -#: app/flatpak-transaction.c:773 +#: app/flatpak-transaction.c:820 msgid "install bundle" msgstr "установить пакет" -#: app/flatpak-transaction.c:774 +#: app/flatpak-transaction.c:822 +#, fuzzy, c-format +msgid "Installing for user: %s from bundle %s\n" +msgstr "Установка: %s из пакета %s\n" + +#: app/flatpak-transaction.c:824 #, c-format msgid "Installing: %s from bundle %s\n" msgstr "Установка: %s из пакета %s\n" -#: app/flatpak-transaction.c:786 +#: app/flatpak-transaction.c:836 #, c-format msgid "Warning: Failed to %s %s: %s\n" msgstr "Предупреждение: Не удалось %s %s: %s\n" -#: app/flatpak-transaction.c:791 +#: app/flatpak-transaction.c:841 #, c-format msgid "Error: Failed to %s %s: %s\n" msgstr "Ошибка: Не удалось %s %s: %s\n" -#: app/flatpak-transaction.c:796 +#: app/flatpak-transaction.c:846 msgid "One or more operations failed" msgstr "Одна или более операций закончилась с ошибкой" -#: common/flatpak-dir.c:1015 -#, c-format -msgid "No overrides found for %s" -msgstr "Не найдено переопределений для %s" - -#: common/flatpak-dir.c:1611 -#, c-format -msgid "While opening repository %s: " -msgstr "Во время открытия репозитория %s:" - -#: common/flatpak-dir.c:1770 common/flatpak-dir.c:5109 -msgid "Can't create deploy directory" -msgstr "Невозможно создать каталог для развёртывания" - -#: common/flatpak-dir.c:2450 -#, c-format -msgid "Invalid sha256 for extra data uri %s" -msgstr "Некорректная сумма sha256 для дополнительных данных по адресу %s" - -#: common/flatpak-dir.c:2455 -#, c-format -msgid "Empty name for extra data uri %s" -msgstr "Пустое имя для дополнительных данных по адресу %s" - -#: common/flatpak-dir.c:2462 -#, c-format -msgid "Unsupported extra data uri %s" -msgstr "Не поддерживаемые дополнительные данные по адресу %s" - -#: common/flatpak-dir.c:2476 -#, fuzzy, c-format -msgid "Failed to load local extra-data %s: %s" -msgstr "Ошибка чтения зафиксированного изменения %s: " - -#: common/flatpak-dir.c:2479 -#, fuzzy, c-format -msgid "Wrong size for extra-data %s" -msgstr "Неправильный размер дополнительных данных по адресу %s" - -#: common/flatpak-dir.c:2494 -#, c-format -msgid "While downloading %s: " -msgstr "Во время загрузки %s: " - -#: common/flatpak-dir.c:2501 -#, c-format -msgid "Wrong size for extra data %s" -msgstr "Неправильный размер дополнительных данных по адресу %s" - -#: common/flatpak-dir.c:2512 -#, c-format -msgid "Invalid checksum for extra data %s" -msgstr "Некорректная контрольная сумма дополнительных данных по адресу %s" - -#: common/flatpak-dir.c:2768 -#, fuzzy, c-format -msgid "%s commit %s already installed" -msgstr "%s ветка %s уже установлено" - -#: common/flatpak-dir.c:3097 common/flatpak-dir.c:3411 -#, c-format -msgid "While pulling %s from remote %s: " -msgstr "Во время получения %s из удалённого репозитория %s: " - -#: common/flatpak-dir.c:3296 -#, c-format -msgid "Can't find %s in remote %s" -msgstr "Не найден %s в удалённом репозитории %s" - -#: common/flatpak-dir.c:3969 -msgid "Not enough memory" -msgstr "Не достаточно памяти" - -#: common/flatpak-dir.c:3988 -msgid "Failed to read from exported file" -msgstr "Ошибка чтения из экспортированного файла" - -#: common/flatpak-dir.c:4179 -msgid "Error reading mimetype xml file" -msgstr "" - -#: common/flatpak-dir.c:4184 -msgid "Invalid mimetype xml file" -msgstr "" - -#: common/flatpak-dir.c:4726 -msgid "While getting detached metadata: " -msgstr "Во время получения отсоединённых метаданных:" - -#: common/flatpak-dir.c:4744 -msgid "While creating extradir: " -msgstr "Во время создания каталога с дополнительными данными:" - -#: common/flatpak-dir.c:4765 -msgid "Invalid sha256 for extra data" -msgstr "Некорректная контрольная сумма sha256 для дополнительных данных" - -#: common/flatpak-dir.c:4794 -msgid "Wrong size for extra data" -msgstr "Некорректный размер дополнительных данных" - -#: common/flatpak-dir.c:4798 -msgid "Invalid checksum for extra data" -msgstr "Некорректная контрольная сумма для дополнительных данных" - -#: common/flatpak-dir.c:4807 -#, c-format -msgid "While writing extra data file '%s': " -msgstr "Во время записи в файл дополнительных данных '%s': " - -#: common/flatpak-dir.c:4991 -#, fuzzy, c-format -msgid "apply_extra script failed, exit status %d" -msgstr "скрипт apply_extra закончился с ошибкой" - -#: common/flatpak-dir.c:5068 -#, c-format -msgid "While trying to resolve ref %s: " -msgstr "Во время поиска назначения ссылки %s: " - -#: common/flatpak-dir.c:5083 -#, c-format -msgid "%s is not available" -msgstr "%s не доступно" - -#: common/flatpak-dir.c:5098 common/flatpak-dir.c:5436 -#: common/flatpak-dir.c:6204 common/flatpak-dir.c:6217 -#: common/flatpak-dir.c:6293 -#, c-format -msgid "%s branch %s already installed" -msgstr "%s ветка %s уже установлено" - -#: common/flatpak-dir.c:5117 -#, c-format -msgid "Failed to read commit %s: " -msgstr "Ошибка чтения зафиксированного изменения %s: " - -#: common/flatpak-dir.c:5137 -#, c-format -msgid "While trying to checkout %s into %s: " -msgstr "Во время получения %s в %s: " - -#: common/flatpak-dir.c:5162 common/flatpak-dir.c:5193 -msgid "While trying to checkout metadata subpath: " -msgstr "Во время получения метаданных подкаталога " - -#: common/flatpak-dir.c:5203 -msgid "While trying to remove existing extra dir: " -msgstr "Во время удаления существующего каталога с дополнительными данными: " - -#: common/flatpak-dir.c:5214 -msgid "While trying to apply extra data: " -msgstr "Во время применения дополнительных данных: " - -#: common/flatpak-dir.c:5241 -#, fuzzy, c-format -msgid "Invalid deployed ref %s: " -msgstr "Неверный pid %s" - -#: common/flatpak-dir.c:5248 -#, fuzzy, c-format -msgid "Invalid commit ref %s: " -msgstr "Неверный pid %s" - -#: common/flatpak-dir.c:5256 -#, c-format -msgid "Deployed ref %s kind does not match commit (%s)" -msgstr "" - -#: common/flatpak-dir.c:5264 -#, c-format -msgid "Deployed ref %s name does not match commit (%s)" -msgstr "" - -#: common/flatpak-dir.c:5272 -#, c-format -msgid "Deployed ref %s arch does not match commit (%s)" -msgstr "" - -#: common/flatpak-dir.c:5278 -#, c-format -msgid "Deployed ref %s branch does not match commit (%s)" -msgstr "" - -#: common/flatpak-dir.c:5284 -#, c-format -msgid "Deployed ref %s does not match commit (%s)" -msgstr "" - -#: common/flatpak-dir.c:5303 -msgid "Deployed metadata does not match commit" -msgstr "" - -#: common/flatpak-dir.c:6065 -#, c-format -msgid "This version of %s is already installed" -msgstr "Указанная версия %s уже установлена" - -#: common/flatpak-dir.c:6072 -msgid "Can't change remote during bundle install" -msgstr "Невозможно изменить удалённый репозиторий во время установки пакета" - -#: common/flatpak-dir.c:6615 -#, c-format -msgid "%s branch %s is not installed" -msgstr "%s ветка %s не установлено" - -#: common/flatpak-dir.c:6859 -#, c-format -msgid "%s branch %s not installed" -msgstr "%s ветка %s не установлена" - -#: common/flatpak-dir.c:7818 -#, c-format -msgid "Nothing matches %s" -msgstr "Совпадений не обнаружено %s" - -#: common/flatpak-dir.c:7900 -#, fuzzy, c-format -msgid "Can't find ref %s%s%s%s%s" -msgstr "Невозможно найти %s%s%s%s%s в удалённом репозитории %s" - -#: common/flatpak-dir.c:7942 -#, fuzzy, c-format -msgid "Error searching remote %s: %s" -msgstr "Ошибка: Не удалось %s %s: %s\n" - -#: common/flatpak-dir.c:7987 -#, fuzzy, c-format -msgid "Error searching local repository: %s" -msgstr "Сохранить ссылку в локальном репозитории" - -#: common/flatpak-dir.c:8113 -#, c-format -msgid "%s %s not installed" -msgstr "%s %s не установлено" - -#: common/flatpak-dir.c:8280 -#, c-format -msgid "Could not find installation %s" -msgstr "Не возможно найти %s в установленных" - -#: common/flatpak-dir.c:8809 -#, c-format -msgid "Runtime %s, branch %s is already installed" -msgstr "Среда исполнения %s, ветка %s уже установлена" - -#: common/flatpak-dir.c:8810 -#, c-format -msgid "App %s, branch %s is already installed" -msgstr "Приложение %s, ветка %s уже установлено" - -#: common/flatpak-dir.c:9269 -msgid "Remote title not set" -msgstr "Заголовок удаленного репозитория не установлен" - -#: common/flatpak-dir.c:9291 -msgid "Remote default-branch not set" -msgstr "Ветка по умолчанию в удалённом репозитории не установлена" - -#: common/flatpak-dir.c:9785 -msgid "No flatpak cache in remote summary" -msgstr "Отсутствует путь к кэшу в сводной информации удалённого репозитория" - -#: common/flatpak-dir.c:9795 -#, c-format -msgid "No entry for %s in remote summary flatpak cache " -msgstr "Нет записи для %s в сводной информации кэша flatpak" - -#: common/flatpak-run.c:258 +#: common/flatpak-context.c:175 #, c-format msgid "Unknown share type %s, valid types are: %s" msgstr "Неизвестный тип общего каталога %s, доступные типы: %s" -#: common/flatpak-run.c:293 +#: common/flatpak-context.c:210 #, c-format msgid "Unknown policy type %s, valid types are: %s" msgstr "Неизвестный тип политики %s, доступные типы: %s" -#: common/flatpak-run.c:331 +#: common/flatpak-context.c:248 #, c-format msgid "Invalid dbus name %s\n" msgstr "Некорректное имя dbus %s\n" -#: common/flatpak-run.c:344 +#: common/flatpak-context.c:261 #, c-format msgid "Unknown socket type %s, valid types are: %s" msgstr "Неизвестный тип сокета %s, доступные типы: %s" -#: common/flatpak-run.c:373 +#: common/flatpak-context.c:290 #, c-format msgid "Unknown device type %s, valid types are: %s" msgstr "Неизвестный тип устройства %s, доступные типы: %s" -#: common/flatpak-run.c:401 +#: common/flatpak-context.c:318 #, c-format msgid "Unknown feature type %s, valid types are: %s" msgstr "Неизвестный тип функционала %s, доступные типы: %s" -#: common/flatpak-run.c:774 +#: common/flatpak-context.c:691 #, fuzzy, c-format msgid "" "Unknown filesystem location %s, valid locations are: host, home, xdg-" @@ -2150,161 +2316,480 @@ msgstr "" "Неизвестный путь файловой системы %s, доступные типы: host, home, xdg-" "*[/...], ~/dir, /dir" -#: common/flatpak-run.c:1040 +#: common/flatpak-context.c:963 #, c-format msgid "Invalid env format %s" msgstr "Неверный формат переменной окружения %s" -#: common/flatpak-run.c:1180 +#: common/flatpak-context.c:1103 msgid "Share with host" msgstr "Добавить общий каталог с хостом" -#: common/flatpak-run.c:1180 common/flatpak-run.c:1181 +#: common/flatpak-context.c:1103 common/flatpak-context.c:1104 msgid "SHARE" msgstr "ОБЩ_КАТАЛОГ" -#: common/flatpak-run.c:1181 +#: common/flatpak-context.c:1104 msgid "Unshare with host" msgstr "Убрать общий каталог с хостом" -#: common/flatpak-run.c:1182 +#: common/flatpak-context.c:1105 msgid "Expose socket to app" msgstr "Пробросить сокет приложению" -#: common/flatpak-run.c:1182 common/flatpak-run.c:1183 +#: common/flatpak-context.c:1105 common/flatpak-context.c:1106 msgid "SOCKET" msgstr "СОКЕТ" -#: common/flatpak-run.c:1183 +#: common/flatpak-context.c:1106 msgid "Don't expose socket to app" msgstr "Убрать проброс сокета приложению" -#: common/flatpak-run.c:1184 +#: common/flatpak-context.c:1107 msgid "Expose device to app" msgstr "Пробросить устройство приложению" -#: common/flatpak-run.c:1184 common/flatpak-run.c:1185 +#: common/flatpak-context.c:1107 common/flatpak-context.c:1108 msgid "DEVICE" msgstr "УСТРОЙСТВО" -#: common/flatpak-run.c:1185 +#: common/flatpak-context.c:1108 msgid "Don't expose device to app" msgstr "Убрать проброс устройства приложению" -#: common/flatpak-run.c:1186 +#: common/flatpak-context.c:1109 msgid "Allow feature" msgstr "Разрешить функционал" -#: common/flatpak-run.c:1186 common/flatpak-run.c:1187 +#: common/flatpak-context.c:1109 common/flatpak-context.c:1110 msgid "FEATURE" msgstr "ФУНКЦИОНАЛ" -#: common/flatpak-run.c:1187 +#: common/flatpak-context.c:1110 msgid "Don't allow feature" msgstr "Запретить функционал" -#: common/flatpak-run.c:1188 +#: common/flatpak-context.c:1111 msgid "Expose filesystem to app (:ro for read-only)" msgstr "Пробросить файловую систему приложению (:ro только для чтения)" -#: common/flatpak-run.c:1188 +#: common/flatpak-context.c:1111 msgid "FILESYSTEM[:ro]" msgstr "ФАЙЛ_СИСТЕМА[:ro]" -#: common/flatpak-run.c:1189 +#: common/flatpak-context.c:1112 msgid "Don't expose filesystem to app" msgstr "Не пробрасывать файловую систему для приложения" -#: common/flatpak-run.c:1189 +#: common/flatpak-context.c:1112 msgid "FILESYSTEM" msgstr "ФАЙЛ_СИСТЕМА" -#: common/flatpak-run.c:1190 +#: common/flatpak-context.c:1113 msgid "Set environment variable" msgstr "Установить переменную окружения" -#: common/flatpak-run.c:1190 +#: common/flatpak-context.c:1113 msgid "VAR=VALUE" msgstr "ПЕРЕМЕННАЯ=ЗНАЧЕНИЕ" -#: common/flatpak-run.c:1191 +#: common/flatpak-context.c:1114 msgid "Allow app to own name on the session bus" msgstr "Разрешить приложению владеть именем на сессионной шине" -#: common/flatpak-run.c:1191 common/flatpak-run.c:1192 -#: common/flatpak-run.c:1193 common/flatpak-run.c:1194 +#: common/flatpak-context.c:1114 common/flatpak-context.c:1115 +#: common/flatpak-context.c:1116 common/flatpak-context.c:1117 msgid "DBUS_NAME" msgstr "" -#: common/flatpak-run.c:1192 +#: common/flatpak-context.c:1115 msgid "Allow app to talk to name on the session bus" msgstr "Разрешить приложению обмениваться с именем на сессионной шине" -#: common/flatpak-run.c:1193 +#: common/flatpak-context.c:1116 msgid "Allow app to own name on the system bus" msgstr "Разрешить приложению владеть именем на системной шине" -#: common/flatpak-run.c:1194 +#: common/flatpak-context.c:1117 msgid "Allow app to talk to name on the system bus" msgstr "Разрешить приложению обмениваться с именем на системной шине" -#: common/flatpak-run.c:1195 +#: common/flatpak-context.c:1118 msgid "Add generic policy option" msgstr "Добавить параметр обобщенной политики" -#: common/flatpak-run.c:1195 common/flatpak-run.c:1196 +#: common/flatpak-context.c:1118 common/flatpak-context.c:1119 msgid "SUBSYSTEM.KEY=VALUE" msgstr "ПОДСИСТЕМА.КЛЮЧ=ЗНАЧЕНИЕ" -#: common/flatpak-run.c:1196 +#: common/flatpak-context.c:1119 msgid "Remove generic policy option" msgstr "Удалить параметр обобщенной политики" -#: common/flatpak-run.c:1197 +#: common/flatpak-context.c:1120 msgid "Persist home directory" msgstr "Сохранять домашний каталог" -#: common/flatpak-run.c:1197 +#: common/flatpak-context.c:1120 msgid "FILENAME" msgstr "ИМЯ_ФАЙЛА" #. This is not needed/used anymore, so hidden, but we accept it for backwards compat -#: common/flatpak-run.c:1199 +#: common/flatpak-context.c:1122 msgid "Don't require a running session (no cgroups creation)" msgstr "" -#: common/flatpak-run.c:3830 +#: common/flatpak-dir.c:1044 +#, c-format +msgid "No overrides found for %s" +msgstr "Не найдено переопределений для %s" + +#: common/flatpak-dir.c:1674 +#, c-format +msgid "While opening repository %s: " +msgstr "Во время открытия репозитория %s:" + +#: common/flatpak-dir.c:1908 common/flatpak-dir.c:5460 +msgid "Can't create deploy directory" +msgstr "Невозможно создать каталог для развёртывания" + +#: common/flatpak-dir.c:2122 common/flatpak-dir.c:2125 +#, c-format +msgid "Failed to find latest revision for ref %s from remote %s: %s\n" +msgstr "" + +#: common/flatpak-dir.c:2761 +#, c-format +msgid "Invalid sha256 for extra data uri %s" +msgstr "Некорректная сумма sha256 для дополнительных данных по адресу %s" + +#: common/flatpak-dir.c:2766 +#, c-format +msgid "Empty name for extra data uri %s" +msgstr "Пустое имя для дополнительных данных по адресу %s" + +#: common/flatpak-dir.c:2773 +#, c-format +msgid "Unsupported extra data uri %s" +msgstr "Не поддерживаемые дополнительные данные по адресу %s" + +#: common/flatpak-dir.c:2787 +#, fuzzy, c-format +msgid "Failed to load local extra-data %s: %s" +msgstr "Ошибка чтения зафиксированного изменения %s: " + +#: common/flatpak-dir.c:2790 +#, fuzzy, c-format +msgid "Wrong size for extra-data %s" +msgstr "Неправильный размер дополнительных данных по адресу %s" + +#: common/flatpak-dir.c:2805 +#, c-format +msgid "While downloading %s: " +msgstr "Во время загрузки %s: " + +#: common/flatpak-dir.c:2812 +#, c-format +msgid "Wrong size for extra data %s" +msgstr "Неправильный размер дополнительных данных по адресу %s" + +#: common/flatpak-dir.c:2823 +#, c-format +msgid "Invalid checksum for extra data %s" +msgstr "Некорректная контрольная сумма дополнительных данных по адресу %s" + +#: common/flatpak-dir.c:2882 +#, fuzzy +msgid "Remote OCI index has no registry uri" +msgstr "ПУТЬ является реестром oci" + +#: common/flatpak-dir.c:3100 +#, fuzzy, c-format +msgid "%s commit %s already installed" +msgstr "%s ветка %s уже установлено" + +#: common/flatpak-dir.c:3442 common/flatpak-dir.c:3773 +#, c-format +msgid "While pulling %s from remote %s: " +msgstr "Во время получения %s из удалённого репозитория %s: " + +#: common/flatpak-dir.c:3658 +#, c-format +msgid "Can't find %s in remote %s" +msgstr "Не найден %s в удалённом репозитории %s" + +#: common/flatpak-dir.c:4331 +msgid "Not enough memory" +msgstr "Не достаточно памяти" + +#: common/flatpak-dir.c:4350 +msgid "Failed to read from exported file" +msgstr "Ошибка чтения из экспортированного файла" + +#: common/flatpak-dir.c:4541 +msgid "Error reading mimetype xml file" +msgstr "" + +#: common/flatpak-dir.c:4546 +msgid "Invalid mimetype xml file" +msgstr "" + +#: common/flatpak-dir.c:5089 +msgid "While getting detached metadata: " +msgstr "Во время получения отсоединённых метаданных:" + +#: common/flatpak-dir.c:5107 +msgid "While creating extradir: " +msgstr "Во время создания каталога с дополнительными данными:" + +#: common/flatpak-dir.c:5128 +msgid "Invalid sha256 for extra data" +msgstr "Некорректная контрольная сумма sha256 для дополнительных данных" + +#: common/flatpak-dir.c:5157 +msgid "Wrong size for extra data" +msgstr "Некорректный размер дополнительных данных" + +#: common/flatpak-dir.c:5161 +msgid "Invalid checksum for extra data" +msgstr "Некорректная контрольная сумма для дополнительных данных" + +#: common/flatpak-dir.c:5170 +#, c-format +msgid "While writing extra data file '%s': " +msgstr "Во время записи в файл дополнительных данных '%s': " + +#: common/flatpak-dir.c:5340 +#, fuzzy, c-format +msgid "apply_extra script failed, exit status %d" +msgstr "скрипт apply_extra закончился с ошибкой" + +#: common/flatpak-dir.c:5419 +#, c-format +msgid "While trying to resolve ref %s: " +msgstr "Во время поиска назначения ссылки %s: " + +#: common/flatpak-dir.c:5434 +#, c-format +msgid "%s is not available" +msgstr "%s не доступно" + +#: common/flatpak-dir.c:5449 common/flatpak-dir.c:5881 +#: common/flatpak-dir.c:6671 common/flatpak-dir.c:6681 +#: common/flatpak-dir.c:6713 +#, c-format +msgid "%s branch %s already installed" +msgstr "%s ветка %s уже установлено" + +#: common/flatpak-dir.c:5468 +#, c-format +msgid "Failed to read commit %s: " +msgstr "Ошибка чтения зафиксированного изменения %s: " + +#: common/flatpak-dir.c:5488 +#, c-format +msgid "While trying to checkout %s into %s: " +msgstr "Во время получения %s в %s: " + +#: common/flatpak-dir.c:5513 common/flatpak-dir.c:5544 +msgid "While trying to checkout metadata subpath: " +msgstr "Во время получения метаданных подкаталога " + +#: common/flatpak-dir.c:5554 +msgid "While trying to remove existing extra dir: " +msgstr "Во время удаления существующего каталога с дополнительными данными: " + +#: common/flatpak-dir.c:5565 +msgid "While trying to apply extra data: " +msgstr "Во время применения дополнительных данных: " + +#: common/flatpak-dir.c:5592 +#, fuzzy, c-format +msgid "Invalid deployed ref %s: " +msgstr "Неверный pid %s" + +#: common/flatpak-dir.c:5599 +#, fuzzy, c-format +msgid "Invalid commit ref %s: " +msgstr "Неверный pid %s" + +#: common/flatpak-dir.c:5607 +#, c-format +msgid "Deployed ref %s kind does not match commit (%s)" +msgstr "" + +#: common/flatpak-dir.c:5615 +#, c-format +msgid "Deployed ref %s name does not match commit (%s)" +msgstr "" + +#: common/flatpak-dir.c:5623 +#, c-format +msgid "Deployed ref %s arch does not match commit (%s)" +msgstr "" + +#: common/flatpak-dir.c:5629 +#, c-format +msgid "Deployed ref %s branch does not match commit (%s)" +msgstr "" + +#: common/flatpak-dir.c:5635 +#, c-format +msgid "Deployed ref %s does not match commit (%s)" +msgstr "" + +#: common/flatpak-dir.c:5654 +msgid "Deployed metadata does not match commit" +msgstr "" + +#: common/flatpak-dir.c:6533 +#, c-format +msgid "This version of %s is already installed" +msgstr "Указанная версия %s уже установлена" + +#: common/flatpak-dir.c:6540 +msgid "Can't change remote during bundle install" +msgstr "Невозможно изменить удалённый репозиторий во время установки пакета" + +#: common/flatpak-dir.c:7059 +#, c-format +msgid "%s branch %s is not installed" +msgstr "%s ветка %s не установлено" + +#: common/flatpak-dir.c:7304 +#, c-format +msgid "%s branch %s not installed" +msgstr "%s ветка %s не установлена" + +#: common/flatpak-dir.c:7628 +#, c-format +msgid "Pruning repo failed: %s" +msgstr "" + +#: common/flatpak-dir.c:8155 +#, c-format +msgid "Multiple branches available for %s, you must specify one of: " +msgstr "" + +#: common/flatpak-dir.c:8176 +#, c-format +msgid "Nothing matches %s" +msgstr "Совпадений не обнаружено %s" + +#: common/flatpak-dir.c:8258 +#, fuzzy, c-format +msgid "Can't find ref %s%s%s%s%s" +msgstr "Невозможно найти %s%s%s%s%s в удалённом репозитории %s" + +#: common/flatpak-dir.c:8300 +#, fuzzy, c-format +msgid "Error searching remote %s: %s" +msgstr "Ошибка: Не удалось %s %s: %s\n" + +#: common/flatpak-dir.c:8345 +#, fuzzy, c-format +msgid "Error searching local repository: %s" +msgstr "Сохранить ссылку в локальном репозитории" + +#: common/flatpak-dir.c:8471 +#, c-format +msgid "%s %s not installed" +msgstr "%s %s не установлено" + +#: common/flatpak-dir.c:8638 +#, c-format +msgid "Could not find installation %s" +msgstr "Не возможно найти %s в установленных" + +#: common/flatpak-dir.c:9236 +#, c-format +msgid "Runtime %s, branch %s is already installed" +msgstr "Среда исполнения %s, ветка %s уже установлена" + +#: common/flatpak-dir.c:9237 +#, c-format +msgid "App %s, branch %s is already installed" +msgstr "Приложение %s, ветка %s уже установлено" + +#: common/flatpak-dir.c:9717 +msgid "Remote title not set" +msgstr "Заголовок удаленного репозитория не установлен" + +#: common/flatpak-dir.c:9739 +msgid "Remote default-branch not set" +msgstr "Ветка по умолчанию в удалённом репозитории не установлена" + +#: common/flatpak-dir.c:10332 +msgid "No flatpak cache in remote summary" +msgstr "Отсутствует путь к кэшу в сводной информации удалённого репозитория" + +#: common/flatpak-dir.c:10342 +#, c-format +msgid "No entry for %s in remote summary flatpak cache " +msgstr "Нет записи для %s в сводной информации кэша flatpak" + +#: common/flatpak-run.c:1456 #, c-format msgid "Failed to open flatpak-info temp file: %s" msgstr "Ошибка при открытии временного файла flatpak-info: %s" -#: common/flatpak-run.c:3904 common/flatpak-run.c:3914 +#: common/flatpak-run.c:1530 common/flatpak-run.c:1540 #, c-format msgid "Failed to open temp file: %s" msgstr "Ошибка при открытии временного файла: %s" -#: common/flatpak-run.c:4253 +#: common/flatpak-run.c:1883 msgid "Unable to create sync pipe" msgstr "Невозможно создать канал синхронизации" -#: common/flatpak-run.c:4280 +#: common/flatpak-run.c:1910 #, c-format msgid "Failed to open app info file: %s" msgstr "Ошибка при открытии файла с информацией о приложении: %s" -#: common/flatpak-run.c:4310 +#: common/flatpak-run.c:1940 msgid "Failed to sync with dbus proxy" msgstr "Ошибка при синхронизации с прокси dbus" -#: common/flatpak-run.c:5069 +#: common/flatpak-run.c:2700 #, fuzzy, c-format msgid "ldconfig failed, exit status %d" msgstr "скрипт apply_extra закончился с ошибкой" -#: common/flatpak-utils.c:2900 +#: common/flatpak-utils.c:624 +#, fuzzy, c-format +msgid "Migrating %s to %s\n" +msgstr "Обновление: %s из %s\n" + +#: common/flatpak-utils.c:630 +#, fuzzy, c-format +msgid "Error during migration: %s\n" +msgstr "Ошибка: Не удалось %s %s: %s\n" + +#: common/flatpak-utils.c:2988 msgid "No extra data sources" msgstr "Нет источников дополнительных данных" +#: common/flatpak-utils.c:6576 +#, c-format +msgid "Downloading metadata: %u/(estimating) %s" +msgstr "" + +#: common/flatpak-utils.c:6600 +#, fuzzy, c-format +msgid "Downloading: %s/%s" +msgstr "Показать ссылки" + +#: common/flatpak-utils.c:6620 +#, fuzzy, c-format +msgid "Downloading extra data: %s/%s" +msgstr "Показать ссылки" + +#: common/flatpak-utils.c:6625 +#, fuzzy, c-format +msgid "Downloading files: %d/%d %s" +msgstr "Показать ссылки" + #. SECURITY: #. - Normal users do not need authentication to install signed applications #. from signed repositories, as this cannot exploit a system. @@ -2344,7 +2829,7 @@ msgstr "Показать установленные приложения" #: system-helper/org.freedesktop.Flatpak.policy.in:59 #: system-helper/org.freedesktop.Flatpak.policy.in:77 -#: system-helper/org.freedesktop.Flatpak.policy.in:169 +#: system-helper/org.freedesktop.Flatpak.policy.in:180 msgid "Authentication is required to update software" msgstr "" @@ -2412,17 +2897,41 @@ msgstr "Удалить настроенный удалённый репозит msgid "Authentication is required to configure software repositories" msgstr "" +#: system-helper/org.freedesktop.Flatpak.policy.in:161 +#, fuzzy +msgid "Configure" +msgstr "Удалить настроенный удалённый репозиторий" + +#: system-helper/org.freedesktop.Flatpak.policy.in:162 +msgid "Authentication is required to configure software installation" +msgstr "" + #. SECURITY: #. - Normal users do not require admin authentication to update #. appstream data as it will be signed, and the action is required #. to update the system when unattended. #. - Changing this to anything other than 'yes' will break unattended #. updates. -#: system-helper/org.freedesktop.Flatpak.policy.in:168 +#: system-helper/org.freedesktop.Flatpak.policy.in:179 #, fuzzy msgid "Update appstream" msgstr "Обновить ветку appstream для удалённого репозитория" +#~ msgid "No remote %s" +#~ msgstr "Нет удалённого репозитория %s" + +#, fuzzy +#~ msgid "Search only user installations" +#~ msgstr "Показать установленное только для пользователя" + +#, fuzzy +#~ msgid "Search only system-wide installations" +#~ msgstr "Показать установленное для всех пользователей" + +#, fuzzy +#~ msgid "Search specific system-wide installations" +#~ msgstr "Показать установленное в указанном каталоге" + #~ msgid "Failed to create temporary file" #~ msgstr "Ошибка при создании временного файла" @@ -2432,13 +2941,6 @@ msgstr "Обновить ветку appstream для удалённого реп #~ msgid "Failed to write to temporary file" #~ msgstr "Ошибка записи во временный файла" -#~ msgid "REMOTE must be specified" -#~ msgstr "Должен быть указан УДАЛЕННЫЙ_РЕПО" - -#, fuzzy -#~ msgid "Downloading %s" -#~ msgstr "Показать ссылки" - #, fuzzy #~ msgid "Installing %s" #~ msgstr "Установка: %s\n" @@ -2447,17 +2949,6 @@ msgstr "Обновить ветку appstream для удалённого реп #~ msgid "Post-Install %s" #~ msgstr "Установка: %s\n" -#, fuzzy -#~ msgid "Updating %s" -#~ msgstr "Обновление сводной информации\n" - -#, fuzzy -#~ msgid "Metadata:" -#~ msgstr "Показать подробности про удалённый репозиторий" - -#~ msgid "Assume LOCATION is an oci registry" -#~ msgstr "ПУТЬ является реестром oci" - #~ msgid "OCI repo Filename or uri must be specified" #~ msgstr "Должно быть указано имя файла репозитория OCI или его адрес" diff --git a/po/sk.po b/po/sk.po index a5536189..f40906b4 100644 --- a/po/sk.po +++ b/po/sk.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: flatpak master\n" "Report-Msgid-Bugs-To: https://github.com/flatpak/flatpak/issues\n" -"POT-Creation-Date: 2017-10-09 12:40+0200\n" +"POT-Creation-Date: 2018-02-19 14:20+0100\n" "PO-Revision-Date: 2017-01-23 18:19+0100\n" "Last-Translator: Dušan Kazik \n" "Language-Team: Slovak \n" @@ -42,10 +42,9 @@ msgstr "" msgid "Set a new url" msgstr "Nastaví novú url" -#: app/flatpak-builtins-add-remote.c:66 app/flatpak-builtins-build-bundle.c:57 -#: app/flatpak-builtins-build-bundle.c:58 -#: app/flatpak-builtins-list-remotes.c:109 -#: app/flatpak-builtins-repo-update.c:52 +#: app/flatpak-builtins-add-remote.c:66 app/flatpak-builtins-build-bundle.c:58 +#: app/flatpak-builtins-build-bundle.c:59 +#: app/flatpak-builtins-list-remotes.c:70 app/flatpak-builtins-repo-update.c:52 msgid "URL" msgstr "URL" @@ -109,9 +108,9 @@ msgstr "" msgid "Import GPG key from FILE (- for stdin)" msgstr "Importuje kľúč GPG zo SÚBORU (- pre štandardný vstup)" -#: app/flatpak-builtins-add-remote.c:82 app/flatpak-builtins-build-bundle.c:59 -#: app/flatpak-builtins-build.c:50 app/flatpak-builtins-build-export.c:60 -#: app/flatpak-builtins-install.c:66 app/flatpak-builtins-repo-update.c:59 +#: app/flatpak-builtins-add-remote.c:82 app/flatpak-builtins-build-bundle.c:60 +#: app/flatpak-builtins-build.c:54 app/flatpak-builtins-build-export.c:60 +#: app/flatpak-builtins-install.c:67 app/flatpak-builtins-repo-update.c:59 msgid "FILE" msgstr "SÚBOR" @@ -123,132 +122,152 @@ msgstr "Zakáže vzdialený repozitár" msgid "Add OCI registry" msgstr "" -#: app/flatpak-builtins-add-remote.c:312 +#: app/flatpak-builtins-add-remote.c:218 app/flatpak-builtins-add-remote.c:225 +#, c-format +msgid "Can't load uri %s: %s\n" +msgstr "" + +#: app/flatpak-builtins-add-remote.c:233 +#, c-format +msgid "Can't load file %s: %s\n" +msgstr "" + +#: app/flatpak-builtins-add-remote.c:241 +#, fuzzy +msgid "Invalid file format" +msgstr "Neplatný identifikátor pid %s" + +#: app/flatpak-builtins-add-remote.c:249 +#, c-format +msgid "Invalid version %s, only 1 supported" +msgstr "" + +#: app/flatpak-builtins-add-remote.c:293 +#, fuzzy +msgid "Invalid gpg key" +msgstr "Neplatný identifikátor pid %s" + +#: app/flatpak-builtins-add-remote.c:320 #, fuzzy msgid "NAME LOCATION - Add a remote repository" msgstr "NÁZOV [UMIESTNENIE] - Pridanie vzdialeného repozitára" -#: app/flatpak-builtins-add-remote.c:321 -#: app/flatpak-builtins-delete-remote.c:58 app/flatpak-builtins-info.c:104 +#: app/flatpak-builtins-add-remote.c:333 +#: app/flatpak-builtins-delete-remote.c:61 app/flatpak-builtins-info.c:125 msgid "NAME must be specified" msgstr "NÁZOV musí byť určený" -#: app/flatpak-builtins-add-remote.c:324 app/flatpak-builtins-build-sign.c:71 -#: app/flatpak-builtins-repo.c:174 app/flatpak-builtins-repo-update.c:429 +#: app/flatpak-builtins-add-remote.c:336 app/flatpak-builtins-build-sign.c:71 +#: app/flatpak-builtins-repo.c:175 app/flatpak-builtins-repo-update.c:429 msgid "LOCATION must be specified" msgstr "UMIESTNENIE musí byť určené" -#: app/flatpak-builtins-add-remote.c:327 -#: app/flatpak-builtins-build-bundle.c:479 +#: app/flatpak-builtins-add-remote.c:339 +#: app/flatpak-builtins-build-bundle.c:461 #: app/flatpak-builtins-build-export.c:676 #: app/flatpak-builtins-build-import-bundle.c:182 #: app/flatpak-builtins-build-init.c:181 app/flatpak-builtins-build-sign.c:74 -#: app/flatpak-builtins-delete-remote.c:63 +#: app/flatpak-builtins-delete-remote.c:66 #: app/flatpak-builtins-document-export.c:102 #: app/flatpak-builtins-document-info.c:75 #: app/flatpak-builtins-document-list.c:70 -#: app/flatpak-builtins-document-unexport.c:67 app/flatpak-builtins-info.c:111 -#: app/flatpak-builtins-install.c:265 app/flatpak-builtins-install.c:399 -#: app/flatpak-builtins-list.c:382 app/flatpak-builtins-list-remotes.c:66 -#: app/flatpak-builtins-ls-remote.c:84 app/flatpak-builtins-make-current.c:67 -#: app/flatpak-builtins-override.c:66 +#: app/flatpak-builtins-document-unexport.c:67 app/flatpak-builtins-info.c:132 +#: app/flatpak-builtins-install.c:267 app/flatpak-builtins-install.c:401 +#: app/flatpak-builtins-list.c:314 app/flatpak-builtins-list-remotes.c:61 +#: app/flatpak-builtins-ls-remote.c:107 app/flatpak-builtins-make-current.c:72 +#: app/flatpak-builtins-override.c:68 msgid "Too many arguments" msgstr "Príliš veľa parametrov" -#: app/flatpak-builtins-add-remote.c:332 +#: app/flatpak-builtins-add-remote.c:344 #: app/flatpak-builtins-build-export.c:692 #, fuzzy, c-format msgid "‘%s’ is not a valid collection ID: %s" msgstr "„%s“ nie je platným názvom aplikácie: %s" -#: app/flatpak-builtins-add-remote.c:336 +#: app/flatpak-builtins-add-remote.c:348 msgid "GPG verification is required if collections are enabled" msgstr "" #. Do nothing -#: app/flatpak-builtins-add-remote.c:351 +#: app/flatpak-builtins-add-remote.c:363 #, c-format msgid "Remote %s already exists" msgstr "Vzdialený repozitár %s už existuje" -#: app/flatpak-builtins-add-remote.c:359 +#: app/flatpak-builtins-add-remote.c:371 msgid "No url specified in flatpakrepo file" msgstr "" -#: app/flatpak-builtins-add-remote.c:403 +#: app/flatpak-builtins-add-remote.c:415 #, fuzzy, c-format msgid "Warning: Could not update extra metadata for '%s': %s\n" msgstr "Nepodarilo sa aktualizovať metaúdaje navyše pre %s" -#: app/flatpak-builtins-add-remote.c:451 +#: app/flatpak-builtins-add-remote.c:464 msgid "NAME - Modify a remote repository" msgstr "NÁZOV - Upraví vzdialený repozitár" -#: app/flatpak-builtins-add-remote.c:460 +#: app/flatpak-builtins-add-remote.c:474 msgid "Remote NAME must be specified" msgstr "Musí byť určený NÁZOV vzdialeného repozitára" -#: app/flatpak-builtins-add-remote.c:465 -#, c-format -msgid "No remote %s" -msgstr "Žiadny vzdialený repozitár %s" - -#: app/flatpak-builtins-add-remote.c:471 +#: app/flatpak-builtins-add-remote.c:485 #, c-format msgid "Updating extra metadata from remote summary for %s\n" msgstr "" -#: app/flatpak-builtins-add-remote.c:474 +#: app/flatpak-builtins-add-remote.c:488 #, c-format msgid "Error updating extra metadata for '%s': %s\n" msgstr "" "Chyba počas aktualizácie metaúdajov navyše pre „%s“: %s\n" "\n" -#: app/flatpak-builtins-add-remote.c:475 +#: app/flatpak-builtins-add-remote.c:489 #, c-format msgid "Could not update extra metadata for %s" msgstr "Nepodarilo sa aktualizovať metaúdaje navyše pre %s" -#: app/flatpak-builtins-build-bundle.c:55 +#: app/flatpak-builtins-build-bundle.c:56 msgid "Export runtime instead of app" msgstr "Exportuje prostredie namiesto aplikácie" -#: app/flatpak-builtins-build-bundle.c:56 +#: app/flatpak-builtins-build-bundle.c:57 msgid "Arch to bundle for" msgstr "" -#: app/flatpak-builtins-build-bundle.c:56 +#: app/flatpak-builtins-build-bundle.c:57 #: app/flatpak-builtins-build-export.c:55 app/flatpak-builtins-build-init.c:49 -#: app/flatpak-builtins-build-sign.c:41 app/flatpak-builtins-info.c:48 -#: app/flatpak-builtins-install.c:56 app/flatpak-builtins-list.c:52 -#: app/flatpak-builtins-ls-remote.c:48 app/flatpak-builtins-make-current.c:38 -#: app/flatpak-builtins-run.c:52 app/flatpak-builtins-uninstall.c:44 -#: app/flatpak-builtins-update.c:53 +#: app/flatpak-builtins-build-sign.c:41 app/flatpak-builtins-info.c:51 +#: app/flatpak-builtins-info-remote.c:48 app/flatpak-builtins-install.c:57 +#: app/flatpak-builtins-list.c:46 app/flatpak-builtins-ls-remote.c:49 +#: app/flatpak-builtins-make-current.c:38 app/flatpak-builtins-run.c:52 +#: app/flatpak-builtins-uninstall.c:44 app/flatpak-builtins-update.c:53 msgid "ARCH" msgstr "ARCHITEKTÚRA" -#: app/flatpak-builtins-build-bundle.c:57 +#: app/flatpak-builtins-build-bundle.c:58 msgid "Url for repo" msgstr "Url pre repozitár" -#: app/flatpak-builtins-build-bundle.c:58 +#: app/flatpak-builtins-build-bundle.c:59 msgid "Url for runtime flatpakrepo file" msgstr "" -#: app/flatpak-builtins-build-bundle.c:59 +#: app/flatpak-builtins-build-bundle.c:60 msgid "Add GPG key from FILE (- for stdin)" msgstr "Pridá kľúč GPG zo SÚBORU (- pre štandardný vstup)" -#: app/flatpak-builtins-build-bundle.c:60 +#: app/flatpak-builtins-build-bundle.c:61 msgid "Export oci image instead of flatpak bundle" msgstr "" -#: app/flatpak-builtins-build-bundle.c:61 +#: app/flatpak-builtins-build-bundle.c:62 msgid "GPG Key ID to sign the OCI image with" msgstr "" -#: app/flatpak-builtins-build-bundle.c:61 +#: app/flatpak-builtins-build-bundle.c:62 #: app/flatpak-builtins-build-commit-from.c:55 #: app/flatpak-builtins-build-export.c:61 #: app/flatpak-builtins-build-import-bundle.c:46 @@ -256,7 +275,7 @@ msgstr "" msgid "KEY-ID" msgstr "" -#: app/flatpak-builtins-build-bundle.c:62 +#: app/flatpak-builtins-build-bundle.c:63 #: app/flatpak-builtins-build-commit-from.c:56 #: app/flatpak-builtins-build-export.c:64 #: app/flatpak-builtins-build-import-bundle.c:47 @@ -264,7 +283,7 @@ msgstr "" msgid "GPG Homedir to use when looking for keyrings" msgstr "" -#: app/flatpak-builtins-build-bundle.c:62 +#: app/flatpak-builtins-build-bundle.c:63 #: app/flatpak-builtins-build-commit-from.c:56 #: app/flatpak-builtins-build-export.c:64 #: app/flatpak-builtins-build-import-bundle.c:47 @@ -272,101 +291,122 @@ msgstr "" msgid "HOMEDIR" msgstr "" -#: app/flatpak-builtins-build-bundle.c:469 +#: app/flatpak-builtins-build-bundle.c:64 +msgid "OSTree commit to create a delta bundle from" +msgstr "" + +#: app/flatpak-builtins-build-bundle.c:64 app/flatpak-builtins-info-remote.c:49 +#: app/flatpak-builtins-update.c:54 +msgid "COMMIT" +msgstr "ZAČLENENIE" + +#: app/flatpak-builtins-build-bundle.c:451 msgid "" "LOCATION FILENAME NAME [BRANCH] - Create a single file bundle from a local " "repository" msgstr "" -#: app/flatpak-builtins-build-bundle.c:476 +#: app/flatpak-builtins-build-bundle.c:458 msgid "LOCATION, FILENAME and NAME must be specified" msgstr "" -#: app/flatpak-builtins-build-bundle.c:494 -#: app/flatpak-builtins-build-commit-from.c:103 -#: app/flatpak-builtins-build-commit-from.c:113 +#: app/flatpak-builtins-build-bundle.c:476 +#: app/flatpak-builtins-build-commit-from.c:253 +#: app/flatpak-builtins-build-commit-from.c:263 #: app/flatpak-builtins-build-import-bundle.c:191 #, c-format msgid "'%s' is not a valid repository" msgstr "„%s“ nie je platným repozitárom" -#: app/flatpak-builtins-build-bundle.c:506 app/flatpak-builtins-build-sign.c:86 +#: app/flatpak-builtins-build-bundle.c:488 app/flatpak-builtins-build-sign.c:86 #, c-format msgid "'%s' is not a valid name: %s" msgstr "„%s“ nie je platným názvom: %s" -#: app/flatpak-builtins-build-bundle.c:509 +#: app/flatpak-builtins-build-bundle.c:491 #: app/flatpak-builtins-build-export.c:699 app/flatpak-builtins-build-sign.c:89 #, c-format msgid "'%s' is not a valid branch name: %s" msgstr "„%s“ nie je platným názvom vetvy: %s" -#: app/flatpak-builtins-build.c:46 +#: app/flatpak-builtins-build.c:49 msgid "Use Platform runtime rather than Sdk" msgstr "" -#: app/flatpak-builtins-build.c:47 +#: app/flatpak-builtins-build.c:50 +msgid "Make destination readonly" +msgstr "" + +#: app/flatpak-builtins-build.c:51 msgid "Add bind mount" msgstr "Pridá viazané pripojenie" -#: app/flatpak-builtins-build.c:47 +#: app/flatpak-builtins-build.c:51 msgid "DEST=SRC" msgstr "CIEĽ=ZDROJ" -#: app/flatpak-builtins-build.c:48 +#: app/flatpak-builtins-build.c:52 msgid "Start build in this directory" msgstr "Spustí zostavenie v tomto adresári" -#: app/flatpak-builtins-build.c:48 app/flatpak-builtins-build.c:49 +#: app/flatpak-builtins-build.c:52 app/flatpak-builtins-build.c:53 #: app/flatpak-builtins-build-init.c:58 msgid "DIR" msgstr "ADRESÁR" -#: app/flatpak-builtins-build.c:49 +#: app/flatpak-builtins-build.c:53 msgid "Where to look for custom sdk dir (defaults to 'usr')" msgstr "" -#: app/flatpak-builtins-build.c:50 app/flatpak-builtins-build-export.c:60 +#: app/flatpak-builtins-build.c:54 app/flatpak-builtins-build-export.c:60 msgid "Use alternative file for the metadata" msgstr "Použije alternatívny súbor pre metaúdaje" -#: app/flatpak-builtins-build.c:51 +#: app/flatpak-builtins-build.c:55 msgid "Kill processes when the parent process dies" msgstr "" -#: app/flatpak-builtins-build.c:52 +#: app/flatpak-builtins-build.c:56 msgid "Export application homedir directory to build" msgstr "" -#: app/flatpak-builtins-build.c:139 +#: app/flatpak-builtins-build.c:57 app/flatpak-builtins-run.c:58 +msgid "Log session bus calls" +msgstr "" + +#: app/flatpak-builtins-build.c:58 app/flatpak-builtins-run.c:59 +msgid "Log system bus calls" +msgstr "" + +#: app/flatpak-builtins-build.c:126 msgid "DIRECTORY [COMMAND [args...]] - Build in directory" msgstr "ADRESÁR [PRÍKAZ [parametre...]] - Zostavenie v adresári" -#: app/flatpak-builtins-build.c:162 app/flatpak-builtins-build-finish.c:533 +#: app/flatpak-builtins-build.c:149 app/flatpak-builtins-build-finish.c:533 msgid "DIRECTORY must be specified" msgstr "ADRESÁR musí byť určený" -#: app/flatpak-builtins-build.c:173 app/flatpak-builtins-build-export.c:721 +#: app/flatpak-builtins-build.c:160 app/flatpak-builtins-build-export.c:721 #, c-format msgid "Build directory %s not initialized, use flatpak build-init" msgstr "" -#: app/flatpak-builtins-build.c:192 +#: app/flatpak-builtins-build.c:179 #, fuzzy msgid "metadata invalid, not application or runtime" msgstr "Podpíše aplikáciu alebo prostredie" -#: app/flatpak-builtins-build.c:292 +#: app/flatpak-builtins-build.c:283 #, c-format msgid "No extension point matching %s in %s" msgstr "" -#: app/flatpak-builtins-build.c:432 +#: app/flatpak-builtins-build.c:433 #, c-format msgid "Missing '=' in bind mount option '%s'" msgstr "" -#: app/flatpak-builtins-build.c:460 common/flatpak-run.c:5406 +#: app/flatpak-builtins-build.c:462 common/flatpak-run.c:3038 msgid "Unable to start app" msgstr "Nie je možné spustiť aplikáciu" @@ -425,32 +465,37 @@ msgstr "" msgid "GPG Key ID to sign the commit with" msgstr "" -#: app/flatpak-builtins-build-commit-from.c:78 +#: app/flatpak-builtins-build-commit-from.c:228 msgid "DST-REPO [DST-REF]... - Make a new commit based on existing commit(s)" msgstr "" -#: app/flatpak-builtins-build-commit-from.c:85 +#: app/flatpak-builtins-build-commit-from.c:235 msgid "DST-REPO must be specified" msgstr "" -#: app/flatpak-builtins-build-commit-from.c:93 +#: app/flatpak-builtins-build-commit-from.c:243 msgid "" "If --src-repo is not specified, exactly one destination ref must be specified" msgstr "" -#: app/flatpak-builtins-build-commit-from.c:96 +#: app/flatpak-builtins-build-commit-from.c:246 msgid "" "If --src-ref is specified, exactly one destination ref must be specified" msgstr "" -#: app/flatpak-builtins-build-commit-from.c:99 +#: app/flatpak-builtins-build-commit-from.c:249 msgid "Either --src-repo or --src-ref must be specified." msgstr "" -#: app/flatpak-builtins-build-commit-from.c:251 +#: app/flatpak-builtins-build-commit-from.c:402 msgid "Can't commit from partial source commit." msgstr "" +#: app/flatpak-builtins-build-commit-from.c:407 +#, c-format +msgid "%s: no change\n" +msgstr "" + #: app/flatpak-builtins-build-export.c:55 msgid "Architecture to export for (must be host compatible)" msgstr "" @@ -488,6 +533,42 @@ msgstr "" msgid "ISO-8601-TIMESTAMP" msgstr "" +#: app/flatpak-builtins-build-export.c:341 +#, c-format +msgid "WARNING: Error running desktop-file-validate: %s\n" +msgstr "" + +#: app/flatpak-builtins-build-export.c:349 +#, c-format +msgid "WARNING: Error reading from desktop-file-validate: %s\n" +msgstr "" + +#: app/flatpak-builtins-build-export.c:355 +#, fuzzy, c-format +msgid "WARNING: Failed to validate desktop file %s: %s\n" +msgstr "Zlyhalo otvorenie súboru temp" + +#: app/flatpak-builtins-build-export.c:370 +#, c-format +msgid "WARNING: Can't find Exec key in %s: %s\n" +msgstr "" + +#: app/flatpak-builtins-build-export.c:378 +#: app/flatpak-builtins-build-export.c:475 +#, c-format +msgid "WARNING: Binary not found for Exec line in %s: %s\n" +msgstr "" + +#: app/flatpak-builtins-build-export.c:385 +#, c-format +msgid "WARNING: Icon not matching app id in %s: %s\n" +msgstr "" + +#: app/flatpak-builtins-build-export.c:413 +#, c-format +msgid "WARNING: Icon referenced in desktop file but not exported: %s\n" +msgstr "" + #: app/flatpak-builtins-build-export.c:551 #, c-format msgid "Invalid uri type %s, only http/https supported" @@ -525,12 +606,41 @@ msgstr "" msgid "No name specified in the metadata" msgstr "Nie je určený žiadny názov v metaúdajoch" +#: app/flatpak-builtins-build-export.c:976 +#, c-format +msgid "Commit: %s\n" +msgstr "" + +#: app/flatpak-builtins-build-export.c:977 +#, c-format +msgid "Metadata Total: %u\n" +msgstr "" + +#: app/flatpak-builtins-build-export.c:978 +#, c-format +msgid "Metadata Written: %u\n" +msgstr "" + +#: app/flatpak-builtins-build-export.c:979 +#, c-format +msgid "Content Total: %u\n" +msgstr "" + +#: app/flatpak-builtins-build-export.c:980 +#, c-format +msgid "Content Written: %u\n" +msgstr "" + +#: app/flatpak-builtins-build-export.c:981 +msgid "Content Bytes Written:" +msgstr "" + #: app/flatpak-builtins-build-finish.c:48 msgid "Command to set" msgstr "Príkaz, ktorý sa má nastaviť" #: app/flatpak-builtins-build-finish.c:48 app/flatpak-builtins-run.c:53 -#: app/flatpak-main.c:159 +#: app/flatpak-main.c:166 msgid "COMMAND" msgstr "PRÍKAZ" @@ -591,6 +701,29 @@ msgstr "" msgid "GROUP=KEY[=VALUE]" msgstr "" +#: app/flatpak-builtins-build-finish.c:139 +#, c-format +msgid "Not exporting %s, wrong prefix\n" +msgstr "" + +#: app/flatpak-builtins-build-finish.c:143 +#, fuzzy, c-format +msgid "Exporting %s\n" +msgstr "Aktualizovanie zhrnutia\n" + +#: app/flatpak-builtins-build-finish.c:384 +msgid "More than one executable found\n" +msgstr "" + +#: app/flatpak-builtins-build-finish.c:395 +#, c-format +msgid "Using %s as command\n" +msgstr "" + +#: app/flatpak-builtins-build-finish.c:400 +msgid "No executable found\n" +msgstr "" + #: app/flatpak-builtins-build-finish.c:433 #, c-format msgid "Too few elements in --extra-data argument %s" @@ -650,6 +783,12 @@ msgstr "„%s“ nie je platným repozitárom" msgid "Multiple images in registry, specify a ref with --ref" msgstr "" +#: app/flatpak-builtins-build-import-bundle.c:123 +#: app/flatpak-builtins-build-import-bundle.c:151 +#, fuzzy, c-format +msgid "Importing %s (%s)\n" +msgstr "Aktualizovanie: %s z %s\n" + #: app/flatpak-builtins-build-import-bundle.c:172 msgid "LOCATION FILENAME - Import a file bundle into a local repository" msgstr "" @@ -658,7 +797,7 @@ msgstr "" msgid "LOCATION and FILENAME must be specified" msgstr "" -#: app/flatpak-builtins-build-init.c:49 app/flatpak-builtins-info.c:48 +#: app/flatpak-builtins-build-init.c:49 app/flatpak-builtins-info.c:51 #: app/flatpak-builtins-run.c:52 msgid "Arch to use" msgstr "Architektúra , ktorá sa má použiť" @@ -747,7 +886,7 @@ msgstr "PROSTREDIE musí byť určené" msgid "'%s' is not a valid build type name, use app, runtime or extension" msgstr "" -#: app/flatpak-builtins-build-init.c:205 app/flatpak-builtins-override.c:71 +#: app/flatpak-builtins-build-init.c:205 app/flatpak-builtins-override.c:74 #, c-format msgid "'%s' is not a valid application name: %s" msgstr "„%s“ nie je platným názvom aplikácie: %s" @@ -757,12 +896,14 @@ msgstr "„%s“ nie je platným názvom aplikácie: %s" msgid "Build directory %s already initialized" msgstr "Adresár zostavenia %s je už inicializovaný" -#: app/flatpak-builtins-build-sign.c:41 app/flatpak-builtins-install.c:56 +#: app/flatpak-builtins-build-sign.c:41 app/flatpak-builtins-info-remote.c:48 +#: app/flatpak-builtins-install.c:57 msgid "Arch to install for" msgstr "Architektúra, pre ktorú sa má inštalovať" -#: app/flatpak-builtins-build-sign.c:42 app/flatpak-builtins-install.c:62 -#: app/flatpak-builtins-uninstall.c:48 app/flatpak-builtins-update.c:61 +#: app/flatpak-builtins-build-sign.c:42 app/flatpak-builtins-info-remote.c:50 +#: app/flatpak-builtins-install.c:63 app/flatpak-builtins-uninstall.c:48 +#: app/flatpak-builtins-update.c:61 msgid "Look for runtime with the specified name" msgstr "" @@ -775,11 +916,49 @@ msgstr "Podpíše aplikáciu alebo rozhranie" msgid "No gpg key ids specified" msgstr "" -#: app/flatpak-builtins-delete-remote.c:37 +#: app/flatpak-builtins-config.c:41 +msgid "List configuration keys and values" +msgstr "" + +#: app/flatpak-builtins-config.c:42 +msgid "Get configuration for KEY" +msgstr "" + +#: app/flatpak-builtins-config.c:43 +msgid "Set configuration for KEY to VALUE" +msgstr "" + +#: app/flatpak-builtins-config.c:44 +msgid "Unset configuration for KEY" +msgstr "" + +#: app/flatpak-builtins-config.c:95 +#, fuzzy, c-format +msgid "Unknown configure key '%s'" +msgstr "Neznámy príkaz „%s“" + +#: app/flatpak-builtins-config.c:144 app/flatpak-builtins-config.c:185 +#, fuzzy +msgid "You must specify key" +msgstr "NÁZOV musí byť určený" + +#: app/flatpak-builtins-config.c:166 +msgid "You must specify both key and value" +msgstr "" + +#: app/flatpak-builtins-config.c:204 +msgid "[KEY [VALUE]] - Manage configuration" +msgstr "" + +#: app/flatpak-builtins-config.c:223 +msgid "Must specify one of --list, --get, --set or --unset" +msgstr "" + +#: app/flatpak-builtins-delete-remote.c:38 msgid "Remove remote even if in use" msgstr "Odstráni vzdialený repozitár, aj keď sa používa" -#: app/flatpak-builtins-delete-remote.c:49 +#: app/flatpak-builtins-delete-remote.c:51 msgid "NAME - Delete a remote repository" msgstr "" @@ -930,169 +1109,258 @@ msgstr "" msgid "Can't switch uid" msgstr "" -#: app/flatpak-builtins-info.c:49 app/flatpak-builtins-list.c:46 -#: app/flatpak-builtins-list-remotes.c:43 +#: app/flatpak-builtins-info.c:52 msgid "Show user installations" msgstr "" -#: app/flatpak-builtins-info.c:50 app/flatpak-builtins-list.c:47 -#: app/flatpak-builtins-list-remotes.c:44 +#: app/flatpak-builtins-info.c:53 msgid "Show system-wide installations" msgstr "" -#: app/flatpak-builtins-info.c:51 app/flatpak-builtins-list.c:48 -#: app/flatpak-builtins-list-remotes.c:45 +#: app/flatpak-builtins-info.c:54 msgid "Show specific system-wide installations" msgstr "" -#: app/flatpak-builtins-info.c:52 +#: app/flatpak-builtins-info.c:55 app/flatpak-builtins-info-remote.c:53 msgid "Show ref" msgstr "Zobrazí referenciu" -#: app/flatpak-builtins-info.c:53 +#: app/flatpak-builtins-info.c:56 app/flatpak-builtins-info-remote.c:54 msgid "Show commit" msgstr "Zobrazí začlenenie" -#: app/flatpak-builtins-info.c:54 +#: app/flatpak-builtins-info.c:57 msgid "Show origin" msgstr "Zobrazí pôvod" -#: app/flatpak-builtins-info.c:55 +#: app/flatpak-builtins-info.c:58 #, fuzzy msgid "Show size" msgstr "Zobrazí referenciu" -#: app/flatpak-builtins-info.c:56 +#: app/flatpak-builtins-info.c:59 app/flatpak-builtins-info-remote.c:56 msgid "Show metadata" msgstr "" -#: app/flatpak-builtins-info.c:57 +#: app/flatpak-builtins-info.c:60 +#, fuzzy +msgid "Show permissions" +msgstr "Zobrazí voľby pomocníka" + +#: app/flatpak-builtins-info.c:61 +#, fuzzy +msgid "Query file access" +msgstr "" +"\n" +"Správa prístupu k súborom" + +#: app/flatpak-builtins-info.c:61 app/flatpak-builtins-install.c:68 +#: app/flatpak-builtins-update.c:64 +msgid "PATH" +msgstr "CESTA" + +#: app/flatpak-builtins-info.c:62 #, fuzzy msgid "Show extensions" msgstr "Zobrazí voľby pomocníka" -#: app/flatpak-builtins-info.c:97 +#: app/flatpak-builtins-info.c:118 msgid "NAME [BRANCH] - Get info about installed app and/or runtime" msgstr "" -#: app/flatpak-builtins-info.c:157 +#: app/flatpak-builtins-info.c:189 msgid "ref not present in origin" msgstr "" -#: app/flatpak-builtins-info.c:159 +#: app/flatpak-builtins-info.c:202 app/flatpak-builtins-info-remote.c:177 +msgid "Warning: Commit has no flatpak metadata\n" +msgstr "" + +#: app/flatpak-builtins-info.c:209 app/flatpak-builtins-info-remote.c:200 msgid "Ref:" msgstr "" -#: app/flatpak-builtins-info.c:160 app/flatpak-builtins-info.c:270 +#: app/flatpak-builtins-info.c:210 app/flatpak-builtins-info.c:364 +#: app/flatpak-builtins-info-remote.c:201 msgid "ID:" msgstr "" -#: app/flatpak-builtins-info.c:161 +#: app/flatpak-builtins-info.c:211 app/flatpak-builtins-info-remote.c:202 msgid "Arch:" msgstr "" -#: app/flatpak-builtins-info.c:162 +#: app/flatpak-builtins-info.c:212 app/flatpak-builtins-info-remote.c:203 #, fuzzy msgid "Branch:" msgstr "Vetva, ktorá sa má použiť" -#: app/flatpak-builtins-info.c:163 app/flatpak-builtins-info.c:271 +#: app/flatpak-builtins-info.c:213 app/flatpak-builtins-info.c:365 msgid "Origin:" msgstr "" -#: app/flatpak-builtins-info.c:166 +#: app/flatpak-builtins-info.c:215 app/flatpak-builtins-info-remote.c:205 +#, fuzzy +msgid "Collection ID:" +msgstr "Spustí aplikáciu" + +#: app/flatpak-builtins-info.c:217 app/flatpak-builtins-info-remote.c:206 +msgid "Date:" +msgstr "" + +#: app/flatpak-builtins-info.c:219 app/flatpak-builtins-info-remote.c:207 +msgid "Subject:" +msgstr "" + +#: app/flatpak-builtins-info.c:223 msgid "Active commit:" msgstr "" -#: app/flatpak-builtins-info.c:167 +#: app/flatpak-builtins-info.c:224 msgid "Latest commit:" msgstr "" -#: app/flatpak-builtins-info.c:170 app/flatpak-builtins-info.c:272 +#: app/flatpak-builtins-info.c:227 app/flatpak-builtins-info.c:366 +#: app/flatpak-builtins-info-remote.c:208 msgid "Commit:" msgstr "" -#: app/flatpak-builtins-info.c:172 +#: app/flatpak-builtins-info.c:229 msgid "alt-id:" msgstr "" -#: app/flatpak-builtins-info.c:173 +#: app/flatpak-builtins-info.c:230 app/flatpak-builtins-info-remote.c:209 +msgid "Parent:" +msgstr "" + +#: app/flatpak-builtins-info.c:231 msgid "Location:" msgstr "" -#: app/flatpak-builtins-info.c:174 app/flatpak-builtins-info.c:273 +#: app/flatpak-builtins-info.c:232 app/flatpak-builtins-info.c:367 +#: app/flatpak-builtins-info-remote.c:211 #, fuzzy msgid "Installed size:" msgstr "Nainštalovanie podpísaného prostredia" -#: app/flatpak-builtins-info.c:179 +#: app/flatpak-builtins-info.c:237 app/flatpak-builtins-info-remote.c:216 #, fuzzy msgid "Runtime:" msgstr "Prostredie. ktoré sa má použiť" -#: app/flatpak-builtins-info.c:184 +#: app/flatpak-builtins-info.c:242 msgid "Installed subdirectories:" msgstr "" -#: app/flatpak-builtins-info.c:269 +#: app/flatpak-builtins-info.c:363 #, fuzzy msgid "Extension:" msgstr "Zobrazí voľby pomocníka" -#: app/flatpak-builtins-info.c:280 +#: app/flatpak-builtins-info.c:374 msgid "Subpaths:" msgstr "" -#: app/flatpak-builtins-install.c:57 -msgid "Don't pull, only install from local cache" +#: app/flatpak-builtins-info-remote.c:49 +msgid "Commit to show info for" msgstr "" -#: app/flatpak-builtins-install.c:58 app/flatpak-builtins-update.c:57 -msgid "Don't deploy, only download to local cache" -msgstr "" - -#: app/flatpak-builtins-install.c:59 -msgid "Don't install related refs" -msgstr "" - -#: app/flatpak-builtins-install.c:60 app/flatpak-builtins-update.c:59 -msgid "Don't verify/install runtime dependencies" -msgstr "" - -#: app/flatpak-builtins-install.c:61 app/flatpak-builtins-update.c:60 -msgid "Don't use static deltas" -msgstr "" - -#: app/flatpak-builtins-install.c:63 app/flatpak-builtins-uninstall.c:49 -#: app/flatpak-builtins-update.c:62 +#: app/flatpak-builtins-info-remote.c:51 app/flatpak-builtins-install.c:64 +#: app/flatpak-builtins-uninstall.c:49 app/flatpak-builtins-update.c:62 msgid "Look for app with the specified name" msgstr "" -#: app/flatpak-builtins-install.c:64 -msgid "Assume LOCATION is a .flatpak single-file bundle" +#: app/flatpak-builtins-info-remote.c:52 +msgid "Display log" +msgstr "" + +#: app/flatpak-builtins-info-remote.c:55 +#, fuzzy +msgid "Show parent" +msgstr "Zobrazí referenciu" + +#: app/flatpak-builtins-info-remote.c:122 +msgid "" +" REMOTE REF - Show information about an application or runtime in a remote" +msgstr "" + +#: app/flatpak-builtins-info-remote.c:133 app/flatpak-builtins-install.c:499 +#, fuzzy +msgid "REMOTE and REF must be specified" +msgstr "ADRESÁR musí byť určený" + +#: app/flatpak-builtins-info-remote.c:210 +#, fuzzy +msgid "Download size:" +msgstr "Zobrazí referenciu" + +#: app/flatpak-builtins-info-remote.c:223 +msgid "History:\n" +msgstr "" + +#: app/flatpak-builtins-info-remote.c:244 +msgid " Subject:" +msgstr "" + +#: app/flatpak-builtins-info-remote.c:245 +msgid " Date:" +msgstr "" + +#: app/flatpak-builtins-info-remote.c:246 +#, fuzzy +msgid " Commit:" +msgstr "Zobrazí začlenenie" + +#: app/flatpak-builtins-info-remote.c:292 +#, c-format +msgid "Warning: Commit %s has no flatpak metadata\n" +msgstr "" + +#: app/flatpak-builtins-install.c:58 +msgid "Don't pull, only install from local cache" +msgstr "" + +#: app/flatpak-builtins-install.c:59 app/flatpak-builtins-update.c:57 +msgid "Don't deploy, only download to local cache" +msgstr "" + +#: app/flatpak-builtins-install.c:60 +msgid "Don't install related refs" +msgstr "" + +#: app/flatpak-builtins-install.c:61 app/flatpak-builtins-update.c:59 +msgid "Don't verify/install runtime dependencies" +msgstr "" + +#: app/flatpak-builtins-install.c:62 app/flatpak-builtins-update.c:60 +msgid "Don't use static deltas" msgstr "" #: app/flatpak-builtins-install.c:65 -msgid "Assume LOCATION is a .flatpakref application description" +msgid "Assume LOCATION is a .flatpak single-file bundle" msgstr "" #: app/flatpak-builtins-install.c:66 -msgid "Check bundle signatures with GPG key from FILE (- for stdin)" +msgid "Assume LOCATION is a .flatpakref application description" msgstr "" #: app/flatpak-builtins-install.c:67 +msgid "Check bundle signatures with GPG key from FILE (- for stdin)" +msgstr "" + +#: app/flatpak-builtins-install.c:68 msgid "Only install this subpath" msgstr "" -#: app/flatpak-builtins-install.c:67 app/flatpak-builtins-update.c:64 -msgid "PATH" -msgstr "CESTA" - -#: app/flatpak-builtins-install.c:68 app/flatpak-builtins-update.c:65 +#: app/flatpak-builtins-install.c:69 app/flatpak-builtins-update.c:65 msgid "Automatically answer yes for all questions" msgstr "" -#: app/flatpak-builtins-install.c:210 +#: app/flatpak-builtins-install.c:70 +#, fuzzy +msgid "Uninstall first if already installed" +msgstr "Aplikácia %s vetva %s je už nainštalovaná" + +#: app/flatpak-builtins-install.c:212 #, c-format msgid "" "This application depends on runtimes from:\n" @@ -1103,155 +1371,150 @@ msgstr "" " %s\n" "Konfigurovať ju ako nový vzdialený repozitár „%s“" -#: app/flatpak-builtins-install.c:214 app/flatpak-builtins-install.c:340 +#: app/flatpak-builtins-install.c:216 app/flatpak-builtins-install.c:342 #, c-format msgid "Configuring %s as new remote '%s'" msgstr "" -#: app/flatpak-builtins-install.c:262 +#: app/flatpak-builtins-install.c:264 msgid "Bundle filename must be specified" msgstr "Názov súboru balíka musí byť určený" -#: app/flatpak-builtins-install.c:272 +#: app/flatpak-builtins-install.c:274 msgid "Remote bundles are not supported" msgstr "Vzdialené balíky nie sú podporované" -#: app/flatpak-builtins-install.c:336 +#: app/flatpak-builtins-install.c:338 #, c-format msgid "" "The remote '%s', at location %s contains additional applications.\n" -"Do you want to install other applications from here?" +"Should the remote be kept for future installations?" msgstr "" -#: app/flatpak-builtins-install.c:396 +#: app/flatpak-builtins-install.c:398 #, fuzzy msgid "Filename or uri must be specified" msgstr "Musí byť určený NÁZOV vzdialeného repozitára" -#: app/flatpak-builtins-install.c:440 +#: app/flatpak-builtins-install.c:442 #, c-format msgid "Installing: %s\n" msgstr "Inštalovanie: %s\n" -#: app/flatpak-builtins-install.c:470 +#: app/flatpak-builtins-install.c:474 #, fuzzy msgid "LOCATION/REMOTE [REF...] - Install applications or runtimes" msgstr "Podpíše aplikáciu alebo rozhranie" -#: app/flatpak-builtins-install.c:491 -#, fuzzy -msgid "REMOTE and REF must be specified" -msgstr "ADRESÁR musí byť určený" - -#: app/flatpak-builtins-list.c:49 +#: app/flatpak-builtins-list.c:43 #, fuzzy msgid "Show extra information" msgstr "Zobrazí voľby pomocníka" -#: app/flatpak-builtins-list.c:50 +#: app/flatpak-builtins-list.c:44 msgid "List installed runtimes" msgstr "Vypíše zoznam nainštalovaných prostredí" -#: app/flatpak-builtins-list.c:51 +#: app/flatpak-builtins-list.c:45 msgid "List installed applications" msgstr "Vypíše zoznam nainštalovaných aplikácií" -#: app/flatpak-builtins-list.c:52 +#: app/flatpak-builtins-list.c:46 msgid "Arch to show" msgstr "Architektúra. ktorá sa má zobraziť" -#: app/flatpak-builtins-list.c:53 app/flatpak-builtins-ls-remote.c:49 +#: app/flatpak-builtins-list.c:47 app/flatpak-builtins-ls-remote.c:50 msgid "List all refs (including locale/debug)" msgstr "" -#: app/flatpak-builtins-list.c:131 app/flatpak-builtins-ls-remote.c:129 +#: app/flatpak-builtins-list.c:125 app/flatpak-builtins-ls-remote.c:174 #: app/flatpak-builtins-repo.c:98 msgid "Ref" msgstr "" -#: app/flatpak-builtins-list.c:134 app/flatpak-builtins-ls-remote.c:131 +#: app/flatpak-builtins-list.c:128 app/flatpak-builtins-ls-remote.c:176 msgid "Origin" msgstr "" -#: app/flatpak-builtins-list.c:135 +#: app/flatpak-builtins-list.c:129 msgid "Active commit" msgstr "" -#: app/flatpak-builtins-list.c:136 +#: app/flatpak-builtins-list.c:130 msgid "Latest commit" msgstr "" -#: app/flatpak-builtins-list.c:137 app/flatpak-builtins-ls-remote.c:133 +#: app/flatpak-builtins-list.c:131 app/flatpak-builtins-ls-remote.c:178 #, fuzzy msgid "Installed size" msgstr "Nainštalovanie podpísaného prostredia" -#: app/flatpak-builtins-list.c:139 app/flatpak-builtins-list-remotes.c:112 +#: app/flatpak-builtins-list.c:133 app/flatpak-builtins-list-remotes.c:73 msgid "Options" msgstr "" -#: app/flatpak-builtins-list.c:375 +#: app/flatpak-builtins-list.c:305 msgid " - List installed apps and/or runtimes" msgstr "" -#: app/flatpak-builtins-list-remotes.c:46 +#: app/flatpak-builtins-list-remotes.c:40 msgid "Show remote details" msgstr "" -#: app/flatpak-builtins-list-remotes.c:47 +#: app/flatpak-builtins-list-remotes.c:41 msgid "Show disabled remotes" msgstr "" -#: app/flatpak-builtins-list-remotes.c:59 +#: app/flatpak-builtins-list-remotes.c:53 msgid " - List remote repositories" msgstr "" -#: app/flatpak-builtins-list-remotes.c:105 +#: app/flatpak-builtins-list-remotes.c:66 msgid "Name" msgstr "" -#: app/flatpak-builtins-list-remotes.c:108 +#: app/flatpak-builtins-list-remotes.c:69 msgid "Title" msgstr "" -#: app/flatpak-builtins-list-remotes.c:110 +#: app/flatpak-builtins-list-remotes.c:71 msgid "Priority" msgstr "" -#: app/flatpak-builtins-ls-remote.c:44 +#: app/flatpak-builtins-ls-remote.c:45 msgid "Show arches and branches" msgstr "" -#: app/flatpak-builtins-ls-remote.c:45 +#: app/flatpak-builtins-ls-remote.c:46 msgid "Show only runtimes" msgstr "" -#: app/flatpak-builtins-ls-remote.c:46 +#: app/flatpak-builtins-ls-remote.c:47 msgid "Show only apps" msgstr "" -#: app/flatpak-builtins-ls-remote.c:47 +#: app/flatpak-builtins-ls-remote.c:48 msgid "Show only those where updates are available" msgstr "" -#: app/flatpak-builtins-ls-remote.c:48 +#: app/flatpak-builtins-ls-remote.c:49 msgid "Limit to this arch (* for all)" msgstr "" -#: app/flatpak-builtins-ls-remote.c:74 -msgid " REMOTE - Show available runtimes and applications" +#: app/flatpak-builtins-ls-remote.c:96 +msgid " [REMOTE] - Show available runtimes and applications" msgstr "" -#: app/flatpak-builtins-ls-remote.c:132 +#: app/flatpak-builtins-ls-remote.c:177 msgid "Commit" msgstr "" -#: app/flatpak-builtins-ls-remote.c:134 +#: app/flatpak-builtins-ls-remote.c:179 #, fuzzy msgid "Download size" msgstr "Zobrazí referenciu" -#: app/flatpak-builtins-ls-remote.c:245 +#: app/flatpak-builtins-ls-remote.c:304 #, fuzzy msgid "No ref information available in repository" msgstr "Vypíše informácie o verzii a skončí" @@ -1260,26 +1523,60 @@ msgstr "Vypíše informácie o verzii a skončí" msgid "Arch to make current for" msgstr "" -#: app/flatpak-builtins-make-current.c:57 +#: app/flatpak-builtins-make-current.c:58 msgid "APP BRANCH - Make branch of application current" msgstr "" -#: app/flatpak-builtins-make-current.c:64 app/flatpak-builtins-override.c:63 -#: app/flatpak-builtins-run.c:105 +#: app/flatpak-builtins-make-current.c:69 app/flatpak-builtins-run.c:105 msgid "APP must be specified" msgstr "" -#: app/flatpak-builtins-make-current.c:79 +#: app/flatpak-builtins-make-current.c:84 msgid "BRANCH must be specified" msgstr "VETVA musí byť určená" -#: app/flatpak-builtins-make-current.c:92 +#: app/flatpak-builtins-make-current.c:97 #, c-format msgid "App %s branch %s is not installed" msgstr "" -#: app/flatpak-builtins-override.c:53 -msgid "APP - Override settings for application" +#: app/flatpak-builtins-override.c:54 +msgid "[APP] - Override settings [for application]" +msgstr "" + +#: app/flatpak-builtins-repo.c:48 +#, c-format +msgid "Title: %s\n" +msgstr "" + +#: app/flatpak-builtins-repo.c:51 +#, c-format +msgid "Collection ID: %s\n" +msgstr "" + +#: app/flatpak-builtins-repo.c:54 +#, c-format +msgid "Default branch: %s\n" +msgstr "" + +#: app/flatpak-builtins-repo.c:57 +#, c-format +msgid "Redirect URL: %s\n" +msgstr "" + +#: app/flatpak-builtins-repo.c:60 +#, c-format +msgid "Redirect collection ID: %s\n" +msgstr "" + +#: app/flatpak-builtins-repo.c:68 +#, c-format +msgid "GPG key hash: %s\n" +msgstr "" + +#: app/flatpak-builtins-repo.c:77 +#, c-format +msgid "%zd branches\n" msgstr "" #: app/flatpak-builtins-repo.c:99 @@ -1305,7 +1602,7 @@ msgstr "Aktualizuje súbor zhrnutia v repozitári" msgid "Print metadata for a branch" msgstr "" -#: app/flatpak-builtins-repo.c:167 +#: app/flatpak-builtins-repo.c:168 msgid "LOCATION - Repository maintenance" msgstr "" @@ -1415,14 +1712,6 @@ msgstr "Prostredie. ktoré sa má použiť" msgid "Runtime version to use" msgstr "Verzia prostredia, ktoré sa má použiť" -#: app/flatpak-builtins-run.c:58 -msgid "Log session bus calls" -msgstr "" - -#: app/flatpak-builtins-run.c:59 -msgid "Log system bus calls" -msgstr "" - #: app/flatpak-builtins-run.c:60 msgid "Log accessibility bus calls" msgstr "" @@ -1435,6 +1724,44 @@ msgstr "" msgid "APP [args...] - Run an app" msgstr "" +#: app/flatpak-builtins-search.c:239 +msgid "TEXT - Search remote apps/runtimes for text" +msgstr "" + +#: app/flatpak-builtins-search.c:249 +#, fuzzy +msgid "TEXT must be specified" +msgstr "NÁZOV musí byť určený" + +#: app/flatpak-builtins-search.c:305 +#, fuzzy +msgid "Application ID" +msgstr "Spustí aplikáciu" + +#: app/flatpak-builtins-search.c:306 +msgid "Version" +msgstr "" + +#: app/flatpak-builtins-search.c:308 +#, fuzzy +msgid "Branch" +msgstr "Vetva, ktorá sa má použiť" + +#: app/flatpak-builtins-search.c:310 +#, fuzzy +msgid "Remotes" +msgstr "Žiadny vzdialený repozitár %s" + +#: app/flatpak-builtins-search.c:311 +#, fuzzy +msgid "Description" +msgstr "Úplný popis" + +#: app/flatpak-builtins-search.c:320 +#, fuzzy +msgid "No matches found" +msgstr "Nič nevyhovuje názvu %s" + #: app/flatpak-builtins-uninstall.c:44 msgid "Arch to uninstall" msgstr "" @@ -1451,20 +1778,25 @@ msgstr "" msgid "Remove files even if running" msgstr "" -#: app/flatpak-builtins-uninstall.c:69 +#: app/flatpak-builtins-uninstall.c:70 #, fuzzy msgid "REF... - Uninstall an application" msgstr "Inštalácia podpísanej aplikácie" -#: app/flatpak-builtins-uninstall.c:76 +#: app/flatpak-builtins-uninstall.c:81 msgid "Must specify at least one REF" msgstr "" -#: app/flatpak-builtins-uninstall.c:129 app/flatpak-transaction.c:340 +#: app/flatpak-builtins-uninstall.c:134 app/flatpak-transaction.c:355 #, c-format msgid "Warning: Problem looking for related refs: %s\n" msgstr "" +#: app/flatpak-builtins-uninstall.c:164 +#, fuzzy, c-format +msgid "Uninstalling: %s\n" +msgstr "Inštalovanie: %s\n" + #: app/flatpak-builtins-update.c:53 msgid "Arch to update for" msgstr "" @@ -1473,10 +1805,6 @@ msgstr "" msgid "Commit to deploy" msgstr "" -#: app/flatpak-builtins-update.c:54 -msgid "COMMIT" -msgstr "ZAČLENENIE" - #: app/flatpak-builtins-update.c:55 msgid "Remove old files even if running" msgstr "" @@ -1497,44 +1825,99 @@ msgstr "" msgid "Only update this subpath" msgstr "" -#: app/flatpak-builtins-update.c:95 -#, c-format -msgid "Updating appstream for remote %s\n" -msgstr "" - -#: app/flatpak-builtins-update.c:133 +#: app/flatpak-builtins-update.c:83 #, fuzzy msgid "[REF...] - Update applications or runtimes" msgstr "Podpíše aplikáciu alebo rozhranie" +#: app/flatpak-builtins-update.c:119 +#, fuzzy +msgid "Looking for updates...\n" +msgstr "Žiadne aktualizácie.\n" + +#: app/flatpak-builtins-utils.c:365 +#, c-format +msgid "Remote ‘%s’ found in multiple installations:\n" +msgstr "" + +#: app/flatpak-builtins-utils.c:372 +msgid "Which do you want to use (0 to abort)?" +msgstr "" + +#: app/flatpak-builtins-utils.c:374 +#, c-format +msgid "No remote chosen to resolve ‘%s’ which exists in multiple installations" +msgstr "" + +#: app/flatpak-builtins-utils.c:479 app/flatpak-builtins-utils.c:481 +#, fuzzy, c-format +msgid "Updating appstream data for user remote %s\n" +msgstr "" +"Chyba počas aktualizácie metaúdajov navyše pre „%s“: %s\n" +"\n" + +#: app/flatpak-builtins-utils.c:486 app/flatpak-builtins-utils.c:488 +#, fuzzy, c-format +msgid "Updating appstream data for remote %s\n" +msgstr "" +"Chyba počas aktualizácie metaúdajov navyše pre „%s“: %s\n" +"\n" + +#: app/flatpak-builtins-utils.c:493 +#, fuzzy, c-format +msgid "Error updating: %s\n" +msgstr "Aktualizovanie zhrnutia\n" + +#: app/flatpak-builtins-utils.c:526 +#, c-format +msgid "Remote \"%s\" not found" +msgstr "" + #. translators: please keep the leading space -#: app/flatpak-main.c:61 +#: app/flatpak-main.c:62 msgid " Manage installed apps and runtimes" msgstr " Správa nainštalovaných aplikácií a prostredí" -#: app/flatpak-main.c:62 +#: app/flatpak-main.c:63 #, fuzzy msgid "Install an application or runtime" msgstr "Podpíše aplikáciu alebo rozhranie" -#: app/flatpak-main.c:63 +#: app/flatpak-main.c:64 msgid "Update an installed application or runtime" msgstr "" -#: app/flatpak-main.c:64 +#: app/flatpak-main.c:65 msgid "Uninstall an installed application or runtime" msgstr "" -#: app/flatpak-main.c:65 +#: app/flatpak-main.c:66 msgid "List installed apps and/or runtimes" msgstr "" -#: app/flatpak-main.c:66 +#: app/flatpak-main.c:67 msgid "Show info for installed app or runtime" msgstr "" +#: app/flatpak-main.c:68 +#, fuzzy +msgid "Configure flatpak" +msgstr "Konfigurácia vzdialeného repozitára" + #. translators: please keep the leading newline and space -#: app/flatpak-main.c:69 +#: app/flatpak-main.c:71 +#, fuzzy +msgid "" +"\n" +" Finding applications and runtimes" +msgstr "Podpíše aplikáciu alebo prostredie" + +#: app/flatpak-main.c:72 +msgid "Search for remote apps/runtimes" +msgstr "" + +#. translators: please keep the leading newline and space +#: app/flatpak-main.c:75 msgid "" "\n" " Running applications" @@ -1542,24 +1925,24 @@ msgstr "" "\n" "Spúšťanie aplikácií" -#: app/flatpak-main.c:70 +#: app/flatpak-main.c:76 msgid "Run an application" msgstr "Spustí aplikáciu" -#: app/flatpak-main.c:71 +#: app/flatpak-main.c:77 msgid "Override permissions for an application" msgstr "" -#: app/flatpak-main.c:72 +#: app/flatpak-main.c:78 msgid "Specify default version to run" msgstr "" -#: app/flatpak-main.c:73 +#: app/flatpak-main.c:79 msgid "Enter the namespace of a running application" msgstr "" #. translators: please keep the leading newline and space -#: app/flatpak-main.c:76 +#: app/flatpak-main.c:82 msgid "" "\n" " Manage file access" @@ -1567,24 +1950,24 @@ msgstr "" "\n" "Správa prístupu k súborom" -#: app/flatpak-main.c:77 +#: app/flatpak-main.c:83 msgid "Grant an application access to a specific file" msgstr "Udelí aplikácii prístup k určenému súboru" -#: app/flatpak-main.c:78 +#: app/flatpak-main.c:84 msgid "Revoke access to a specific file" msgstr "" -#: app/flatpak-main.c:79 +#: app/flatpak-main.c:85 msgid "Show information about a specific file" msgstr "" -#: app/flatpak-main.c:80 +#: app/flatpak-main.c:86 msgid "List exported files" msgstr "" #. translators: please keep the leading newline and space -#: app/flatpak-main.c:83 +#: app/flatpak-main.c:89 msgid "" "\n" " Manage remote repositories" @@ -1592,28 +1975,33 @@ msgstr "" "\n" "Správa vzdialených repozitárov" -#: app/flatpak-main.c:84 +#: app/flatpak-main.c:90 msgid "List all configured remotes" msgstr "Zoznam všetkých konfigurovaných vzdialených repozitárov" -#: app/flatpak-main.c:85 +#: app/flatpak-main.c:91 msgid "Add a new remote repository (by URL)" msgstr "" -#: app/flatpak-main.c:86 +#: app/flatpak-main.c:92 msgid "Modify properties of a configured remote" msgstr "" -#: app/flatpak-main.c:87 +#: app/flatpak-main.c:93 msgid "Delete a configured remote" msgstr "" -#: app/flatpak-main.c:89 +#: app/flatpak-main.c:95 msgid "List contents of a configured remote" msgstr "" +#: app/flatpak-main.c:96 +#, fuzzy +msgid "Show information about a remote app or runtime" +msgstr "Vypíše informácie o verzii a skončí" + #. translators: please keep the leading newline and space -#: app/flatpak-main.c:92 +#: app/flatpak-main.c:99 msgid "" "\n" " Build applications" @@ -1621,673 +2009,772 @@ msgstr "" "\n" "Zostavenie aplikácií" -#: app/flatpak-main.c:93 +#: app/flatpak-main.c:100 msgid "Initialize a directory for building" msgstr "" -#: app/flatpak-main.c:94 +#: app/flatpak-main.c:101 msgid "Run a build command inside the build dir" msgstr "" -#: app/flatpak-main.c:95 +#: app/flatpak-main.c:102 msgid "Finish a build dir for export" msgstr "" -#: app/flatpak-main.c:96 +#: app/flatpak-main.c:103 msgid "Export a build dir to a repository" msgstr "Exportuje adresár zostavenia do repozitára" -#: app/flatpak-main.c:97 -msgid "Create a bundle file from a build directory" +#: app/flatpak-main.c:104 +#, fuzzy +msgid "Create a bundle file from a ref in a local repository" msgstr "Vytvorí balík z adresára zostavenia" -#: app/flatpak-main.c:98 +#: app/flatpak-main.c:105 msgid "Import a bundle file" msgstr "Importuje súbor balíka" -#: app/flatpak-main.c:99 +#: app/flatpak-main.c:106 msgid "Sign an application or runtime" msgstr "Podpíše aplikáciu alebo prostredie" -#: app/flatpak-main.c:100 +#: app/flatpak-main.c:107 msgid "Update the summary file in a repository" msgstr "Aktualizuje súbor zhrnutia v repozitári" -#: app/flatpak-main.c:101 +#: app/flatpak-main.c:108 msgid "Create new commit based on existing ref" msgstr "" -#: app/flatpak-main.c:102 +#: app/flatpak-main.c:109 #, fuzzy msgid "Print information about a repo" msgstr "Vypíše informácie o verzii a skončí" -#: app/flatpak-main.c:119 +#: app/flatpak-main.c:126 #, fuzzy msgid "Print debug information during command processing, -vv for more detail" msgstr "Vypíše ladiace informácie počas spracovávania príkazu" -#: app/flatpak-main.c:120 +#: app/flatpak-main.c:127 #, fuzzy msgid "Print OSTree debug information during command processing" msgstr "Vypíše ladiace informácie počas spracovávania príkazu" -#: app/flatpak-main.c:121 +#: app/flatpak-main.c:128 msgid "Show help options" msgstr "Zobrazí voľby pomocníka" -#: app/flatpak-main.c:126 +#: app/flatpak-main.c:133 msgid "Print version information and exit" msgstr "Vypíše informácie o verzii a skončí" -#: app/flatpak-main.c:127 +#: app/flatpak-main.c:134 msgid "Print default arch and exit" msgstr "Vypíše predvolenú architektúru a skončí" -#: app/flatpak-main.c:128 +#: app/flatpak-main.c:135 msgid "Print supported arches and exit" msgstr "Vypíše podporované architektúry a skončí" -#: app/flatpak-main.c:129 +#: app/flatpak-main.c:136 #, fuzzy msgid "Print active gl drivers and exit" msgstr "Vypíše podporované architektúry a skončí" -#: app/flatpak-main.c:134 +#: app/flatpak-main.c:141 msgid "Work on user installations" msgstr "" -#: app/flatpak-main.c:135 +#: app/flatpak-main.c:142 msgid "Work on system-wide installations (default)" msgstr "" -#: app/flatpak-main.c:136 -msgid "Work on a specific system-wide installation" +#: app/flatpak-main.c:143 +msgid "Work on specific system-wide installation(s)" msgstr "" -#: app/flatpak-main.c:136 +#: app/flatpak-main.c:143 #, fuzzy msgid "NAME" msgstr "NÁZOV_SÚBORU" -#: app/flatpak-main.c:162 +#: app/flatpak-main.c:169 msgid "Builtin Commands:" msgstr "Vstavané príkazy:" -#: app/flatpak-main.c:388 +#: app/flatpak-main.c:370 +msgid "" +"The --installation option was used multiple times for a command that works " +"on one installation" +msgstr "" + +#: app/flatpak-main.c:489 #, c-format msgid "Unknown command '%s'" msgstr "Neznámy príkaz „%s“" -#: app/flatpak-main.c:396 +#: app/flatpak-main.c:497 msgid "No command specified" msgstr "Nebol určený žiadny príkaz" -#: app/flatpak-main.c:514 +#: app/flatpak-main.c:615 msgid "error:" msgstr "chyba:" -#: app/flatpak-transaction.c:302 +#: app/flatpak-transaction.c:313 +#, fuzzy, c-format +msgid "Found in remote %s\n" +msgstr "Nájdené v niekoľkých vzdialených repozitároch:\n" + +#: app/flatpak-transaction.c:317 #, c-format msgid "Found in remote %s, do you want to install it?" msgstr "Nájdené vo vzdialenom repozitári %s. Chcete vykonať inštaláciu?" -#: app/flatpak-transaction.c:307 +#: app/flatpak-transaction.c:322 msgid "Found in several remotes:\n" msgstr "Nájdené v niekoľkých vzdialených repozitároch:\n" -#: app/flatpak-transaction.c:312 +#: app/flatpak-transaction.c:327 msgid "Which do you want to install (0 to abort)?" msgstr "" -#: app/flatpak-transaction.c:402 +#: app/flatpak-transaction.c:417 #, c-format msgid "Required runtime for %s (%s) is not installed, searching...\n" msgstr "" "Požadované prostredie pre %s (%s) nie je nainštalované. Vyhľadáva sa...\n" -#: app/flatpak-transaction.c:408 +#: app/flatpak-transaction.c:423 #, c-format msgid "The required runtime %s was not found in a configured remote.\n" msgstr "" -#: app/flatpak-transaction.c:469 common/flatpak-dir.c:1127 -#: common/flatpak-dir.c:1433 common/flatpak-dir.c:1456 -#: common/flatpak-dir.c:1478 common/flatpak-dir.c:10136 -#: common/flatpak-utils.c:1272 common/flatpak-utils.c:1366 +#: app/flatpak-transaction.c:506 common/flatpak-dir.c:1160 +#: common/flatpak-dir.c:1479 common/flatpak-dir.c:1502 +#: common/flatpak-dir.c:1524 common/flatpak-dir.c:10655 +#: common/flatpak-utils.c:1312 common/flatpak-utils.c:1406 #, c-format msgid "%s not installed" msgstr "" -#: app/flatpak-transaction.c:475 +#: app/flatpak-transaction.c:512 #, c-format msgid "Remote %s disabled, ignoring %s update" msgstr "" -#: app/flatpak-transaction.c:485 +#: app/flatpak-transaction.c:525 #, fuzzy, c-format msgid "%s already installed, skipping\n" msgstr "Aplikácia %s vetva %s je už nainštalovaná" -#: app/flatpak-transaction.c:529 +#: app/flatpak-transaction.c:531 +#, fuzzy, c-format +msgid "%s is already installed from other remote (%s)" +msgstr "Aplikácia %s vetva %s je už nainštalovaná" + +#: app/flatpak-transaction.c:543 +#, c-format +msgid "Warning: Can't find dependencies: %s\n" +msgstr "" + +#: app/flatpak-transaction.c:570 +#, c-format +msgid "Invalid require-flatpak argument %s\n" +msgstr "" + +#: app/flatpak-transaction.c:576 #, c-format msgid "%s needs a later flatpak version (%s)" msgstr "" -#: app/flatpak-transaction.c:704 +#: app/flatpak-transaction.c:688 +#, fuzzy, c-format +msgid "Error updating remote metadata for '%s': %s\n" +msgstr "" +"Chyba počas aktualizácie metaúdajov navyše pre „%s“: %s\n" +"\n" + +#: app/flatpak-transaction.c:744 msgid "install" msgstr "" -#: app/flatpak-transaction.c:705 +#: app/flatpak-transaction.c:746 +#, fuzzy, c-format +msgid "Installing for user: %s from %s\n" +msgstr "Inštalovanie: %s z %s\n" + +#: app/flatpak-transaction.c:748 #, c-format msgid "Installing: %s from %s\n" msgstr "Inštalovanie: %s z %s\n" -#: app/flatpak-transaction.c:721 +#: app/flatpak-transaction.c:765 #, fuzzy msgid "update" msgstr "Žiadne aktualizácie.\n" -#: app/flatpak-transaction.c:729 +#: app/flatpak-transaction.c:774 +#, fuzzy, c-format +msgid "Updating for user: %s from %s\n" +msgstr "Aktualizovanie: %s z %s\n" + +#: app/flatpak-transaction.c:776 #, c-format msgid "Updating: %s from %s\n" msgstr "Aktualizovanie: %s z %s\n" -#: app/flatpak-transaction.c:749 +#: app/flatpak-transaction.c:796 #, c-format msgid "Now at %s.\n" msgstr "Teraz na začlenení %s.\n" -#: app/flatpak-transaction.c:755 +#: app/flatpak-transaction.c:802 msgid "No updates.\n" msgstr "Žiadne aktualizácie.\n" -#: app/flatpak-transaction.c:773 +#: app/flatpak-transaction.c:820 msgid "install bundle" msgstr "" -#: app/flatpak-transaction.c:774 +#: app/flatpak-transaction.c:822 +#, fuzzy, c-format +msgid "Installing for user: %s from bundle %s\n" +msgstr "Inštalovanie: %s z balíka %s\n" + +#: app/flatpak-transaction.c:824 #, c-format msgid "Installing: %s from bundle %s\n" msgstr "Inštalovanie: %s z balíka %s\n" -#: app/flatpak-transaction.c:786 +#: app/flatpak-transaction.c:836 #, c-format msgid "Warning: Failed to %s %s: %s\n" msgstr "" -#: app/flatpak-transaction.c:791 +#: app/flatpak-transaction.c:841 #, c-format msgid "Error: Failed to %s %s: %s\n" msgstr "" -#: app/flatpak-transaction.c:796 +#: app/flatpak-transaction.c:846 #, fuzzy msgid "One or more operations failed" msgstr "Jedna alebo viacero aktualizácií zlyhali" -#: common/flatpak-dir.c:1015 -#, c-format -msgid "No overrides found for %s" -msgstr "" - -#: common/flatpak-dir.c:1611 -#, c-format -msgid "While opening repository %s: " -msgstr "Počas otvárania repozitára %s: " - -#: common/flatpak-dir.c:1770 common/flatpak-dir.c:5109 -msgid "Can't create deploy directory" -msgstr "" - -#: common/flatpak-dir.c:2450 -#, c-format -msgid "Invalid sha256 for extra data uri %s" -msgstr "" - -#: common/flatpak-dir.c:2455 -#, c-format -msgid "Empty name for extra data uri %s" -msgstr "" - -#: common/flatpak-dir.c:2462 -#, c-format -msgid "Unsupported extra data uri %s" -msgstr "" - -#: common/flatpak-dir.c:2476 -#, fuzzy, c-format -msgid "Failed to load local extra-data %s: %s" -msgstr "Zlyhalo čítanie začlenenia %s: " - -#: common/flatpak-dir.c:2479 -#, fuzzy, c-format -msgid "Wrong size for extra-data %s" -msgstr "Nesprávna veľkosť pre údaje navyše %s" - -#: common/flatpak-dir.c:2494 -#, fuzzy, c-format -msgid "While downloading %s: " -msgstr "Počas otvárania repozitára %s: " - -#: common/flatpak-dir.c:2501 -#, c-format -msgid "Wrong size for extra data %s" -msgstr "Nesprávna veľkosť pre údaje navyše %s" - -#: common/flatpak-dir.c:2512 -#, c-format -msgid "Invalid checksum for extra data %s" -msgstr "" - -#: common/flatpak-dir.c:2768 -#, fuzzy, c-format -msgid "%s commit %s already installed" -msgstr "Aplikácia %s vetva %s je už nainštalovaná" - -#: common/flatpak-dir.c:3097 common/flatpak-dir.c:3411 -#, c-format -msgid "While pulling %s from remote %s: " -msgstr "" - -#: common/flatpak-dir.c:3296 -#, c-format -msgid "Can't find %s in remote %s" -msgstr "Nedá sa nájsť %s vo vzdialenom repozitári %s" - -#: common/flatpak-dir.c:3969 -msgid "Not enough memory" -msgstr "Nedostatok pamäte" - -#: common/flatpak-dir.c:3988 -msgid "Failed to read from exported file" -msgstr "Zlyhalo čítanie z exportovaného súboru" - -#: common/flatpak-dir.c:4179 -msgid "Error reading mimetype xml file" -msgstr "" - -#: common/flatpak-dir.c:4184 -msgid "Invalid mimetype xml file" -msgstr "" - -#: common/flatpak-dir.c:4726 -msgid "While getting detached metadata: " -msgstr "" - -#: common/flatpak-dir.c:4744 -msgid "While creating extradir: " -msgstr "" - -#: common/flatpak-dir.c:4765 -msgid "Invalid sha256 for extra data" -msgstr "" - -#: common/flatpak-dir.c:4794 -msgid "Wrong size for extra data" -msgstr "" - -#: common/flatpak-dir.c:4798 -msgid "Invalid checksum for extra data" -msgstr "" - -#: common/flatpak-dir.c:4807 -#, c-format -msgid "While writing extra data file '%s': " -msgstr "" - -#: common/flatpak-dir.c:4991 -#, c-format -msgid "apply_extra script failed, exit status %d" -msgstr "" - -#: common/flatpak-dir.c:5068 -#, c-format -msgid "While trying to resolve ref %s: " -msgstr "" - -#: common/flatpak-dir.c:5083 -#, c-format -msgid "%s is not available" -msgstr "Aplikácia %s nie je dostupná" - -#: common/flatpak-dir.c:5098 common/flatpak-dir.c:5436 -#: common/flatpak-dir.c:6204 common/flatpak-dir.c:6217 -#: common/flatpak-dir.c:6293 -#, c-format -msgid "%s branch %s already installed" -msgstr "Aplikácia %s vetva %s je už nainštalovaná" - -#: common/flatpak-dir.c:5117 -#, c-format -msgid "Failed to read commit %s: " -msgstr "Zlyhalo čítanie začlenenia %s: " - -#: common/flatpak-dir.c:5137 -#, c-format -msgid "While trying to checkout %s into %s: " -msgstr "" - -#: common/flatpak-dir.c:5162 common/flatpak-dir.c:5193 -msgid "While trying to checkout metadata subpath: " -msgstr "" - -#: common/flatpak-dir.c:5203 -msgid "While trying to remove existing extra dir: " -msgstr "Počas pokusu o odstránenie existujúceho adresára navyše: " - -#: common/flatpak-dir.c:5214 -msgid "While trying to apply extra data: " -msgstr "Počas pokusu o aplikáciu údajov navyše: " - -#: common/flatpak-dir.c:5241 -#, fuzzy, c-format -msgid "Invalid deployed ref %s: " -msgstr "Neplatný identifikátor pid %s" - -#: common/flatpak-dir.c:5248 -#, fuzzy, c-format -msgid "Invalid commit ref %s: " -msgstr "Neplatný identifikátor pid %s" - -#: common/flatpak-dir.c:5256 -#, c-format -msgid "Deployed ref %s kind does not match commit (%s)" -msgstr "" - -#: common/flatpak-dir.c:5264 -#, c-format -msgid "Deployed ref %s name does not match commit (%s)" -msgstr "" - -#: common/flatpak-dir.c:5272 -#, c-format -msgid "Deployed ref %s arch does not match commit (%s)" -msgstr "" - -#: common/flatpak-dir.c:5278 -#, c-format -msgid "Deployed ref %s branch does not match commit (%s)" -msgstr "" - -#: common/flatpak-dir.c:5284 -#, c-format -msgid "Deployed ref %s does not match commit (%s)" -msgstr "" - -#: common/flatpak-dir.c:5303 -msgid "Deployed metadata does not match commit" -msgstr "" - -#: common/flatpak-dir.c:6065 -#, c-format -msgid "This version of %s is already installed" -msgstr "Táto verzia aplikácie %s je už nainštalovaná" - -#: common/flatpak-dir.c:6072 -msgid "Can't change remote during bundle install" -msgstr "" - -#: common/flatpak-dir.c:6615 -#, c-format -msgid "%s branch %s is not installed" -msgstr "Aplikácia %s vetva %s nie je nainštalovaná" - -#: common/flatpak-dir.c:6859 -#, c-format -msgid "%s branch %s not installed" -msgstr "Aplikácia %s vetva %s nie je nainštalovaná" - -#: common/flatpak-dir.c:7818 -#, c-format -msgid "Nothing matches %s" -msgstr "Nič nevyhovuje názvu %s" - -#: common/flatpak-dir.c:7900 -#, fuzzy, c-format -msgid "Can't find ref %s%s%s%s%s" -msgstr "Nedá sa nájsť %s%s%s%s%s vo vzdialenom repozitári %s" - -#: common/flatpak-dir.c:7942 -#, c-format -msgid "Error searching remote %s: %s" -msgstr "" - -#: common/flatpak-dir.c:7987 -#, c-format -msgid "Error searching local repository: %s" -msgstr "" - -#: common/flatpak-dir.c:8113 -#, c-format -msgid "%s %s not installed" -msgstr "Aplikácia %s %s nie je nainštalovaná" - -#: common/flatpak-dir.c:8280 -#, c-format -msgid "Could not find installation %s" -msgstr "Nepodarilo sa nájsť inštaláciu %s" - -#: common/flatpak-dir.c:8809 -#, c-format -msgid "Runtime %s, branch %s is already installed" -msgstr "Prostredie %s, vetva %s je už nainštalovaná" - -#: common/flatpak-dir.c:8810 -#, c-format -msgid "App %s, branch %s is already installed" -msgstr "Aplikácia %s, vetva %s je už nainštalovaná" - -#: common/flatpak-dir.c:9269 -msgid "Remote title not set" -msgstr "" - -#: common/flatpak-dir.c:9291 -#, fuzzy -msgid "Remote default-branch not set" -msgstr "Vypíše predvolenú architektúru a skončí" - -#: common/flatpak-dir.c:9785 -msgid "No flatpak cache in remote summary" -msgstr "" - -#: common/flatpak-dir.c:9795 -#, c-format -msgid "No entry for %s in remote summary flatpak cache " -msgstr "" - -#: common/flatpak-run.c:258 +#: common/flatpak-context.c:175 #, c-format msgid "Unknown share type %s, valid types are: %s" msgstr "" -#: common/flatpak-run.c:293 +#: common/flatpak-context.c:210 #, c-format msgid "Unknown policy type %s, valid types are: %s" msgstr "" -#: common/flatpak-run.c:331 +#: common/flatpak-context.c:248 #, c-format msgid "Invalid dbus name %s\n" msgstr "" -#: common/flatpak-run.c:344 +#: common/flatpak-context.c:261 #, c-format msgid "Unknown socket type %s, valid types are: %s" msgstr "" -#: common/flatpak-run.c:373 +#: common/flatpak-context.c:290 #, c-format msgid "Unknown device type %s, valid types are: %s" msgstr "" -#: common/flatpak-run.c:401 +#: common/flatpak-context.c:318 #, c-format msgid "Unknown feature type %s, valid types are: %s" msgstr "" -#: common/flatpak-run.c:774 +#: common/flatpak-context.c:691 #, c-format msgid "" "Unknown filesystem location %s, valid locations are: host, home, xdg-" "*[/...], ~/dir, /dir" msgstr "" -#: common/flatpak-run.c:1040 +#: common/flatpak-context.c:963 #, c-format msgid "Invalid env format %s" msgstr "" -#: common/flatpak-run.c:1180 +#: common/flatpak-context.c:1103 msgid "Share with host" msgstr "Zdieľa s hostiteľom" -#: common/flatpak-run.c:1180 common/flatpak-run.c:1181 +#: common/flatpak-context.c:1103 common/flatpak-context.c:1104 msgid "SHARE" msgstr "" -#: common/flatpak-run.c:1181 +#: common/flatpak-context.c:1104 msgid "Unshare with host" msgstr "" -#: common/flatpak-run.c:1182 +#: common/flatpak-context.c:1105 msgid "Expose socket to app" msgstr "" -#: common/flatpak-run.c:1182 common/flatpak-run.c:1183 +#: common/flatpak-context.c:1105 common/flatpak-context.c:1106 msgid "SOCKET" msgstr "SOKET" -#: common/flatpak-run.c:1183 +#: common/flatpak-context.c:1106 msgid "Don't expose socket to app" msgstr "" -#: common/flatpak-run.c:1184 +#: common/flatpak-context.c:1107 msgid "Expose device to app" msgstr "" -#: common/flatpak-run.c:1184 common/flatpak-run.c:1185 +#: common/flatpak-context.c:1107 common/flatpak-context.c:1108 msgid "DEVICE" msgstr "ZARIADENIE" -#: common/flatpak-run.c:1185 +#: common/flatpak-context.c:1108 msgid "Don't expose device to app" msgstr "" -#: common/flatpak-run.c:1186 +#: common/flatpak-context.c:1109 msgid "Allow feature" msgstr "Umožní funkciu" -#: common/flatpak-run.c:1186 common/flatpak-run.c:1187 +#: common/flatpak-context.c:1109 common/flatpak-context.c:1110 msgid "FEATURE" msgstr "FUNKCIA" -#: common/flatpak-run.c:1187 +#: common/flatpak-context.c:1110 msgid "Don't allow feature" msgstr "Neumožní funkciu" -#: common/flatpak-run.c:1188 +#: common/flatpak-context.c:1111 msgid "Expose filesystem to app (:ro for read-only)" msgstr "" -#: common/flatpak-run.c:1188 +#: common/flatpak-context.c:1111 msgid "FILESYSTEM[:ro]" msgstr "" -#: common/flatpak-run.c:1189 +#: common/flatpak-context.c:1112 msgid "Don't expose filesystem to app" msgstr "" -#: common/flatpak-run.c:1189 +#: common/flatpak-context.c:1112 msgid "FILESYSTEM" msgstr "SYSTÉM_SÚBOROV" -#: common/flatpak-run.c:1190 +#: common/flatpak-context.c:1113 msgid "Set environment variable" msgstr "" -#: common/flatpak-run.c:1190 +#: common/flatpak-context.c:1113 msgid "VAR=VALUE" msgstr "" -#: common/flatpak-run.c:1191 +#: common/flatpak-context.c:1114 msgid "Allow app to own name on the session bus" msgstr "" -#: common/flatpak-run.c:1191 common/flatpak-run.c:1192 -#: common/flatpak-run.c:1193 common/flatpak-run.c:1194 +#: common/flatpak-context.c:1114 common/flatpak-context.c:1115 +#: common/flatpak-context.c:1116 common/flatpak-context.c:1117 msgid "DBUS_NAME" msgstr "NÁZOV_DBUS" -#: common/flatpak-run.c:1192 +#: common/flatpak-context.c:1115 msgid "Allow app to talk to name on the session bus" msgstr "" -#: common/flatpak-run.c:1193 +#: common/flatpak-context.c:1116 msgid "Allow app to own name on the system bus" msgstr "" -#: common/flatpak-run.c:1194 +#: common/flatpak-context.c:1117 msgid "Allow app to talk to name on the system bus" msgstr "" -#: common/flatpak-run.c:1195 +#: common/flatpak-context.c:1118 msgid "Add generic policy option" msgstr "" -#: common/flatpak-run.c:1195 common/flatpak-run.c:1196 +#: common/flatpak-context.c:1118 common/flatpak-context.c:1119 msgid "SUBSYSTEM.KEY=VALUE" msgstr "" -#: common/flatpak-run.c:1196 +#: common/flatpak-context.c:1119 msgid "Remove generic policy option" msgstr "" -#: common/flatpak-run.c:1197 +#: common/flatpak-context.c:1120 msgid "Persist home directory" msgstr "" -#: common/flatpak-run.c:1197 +#: common/flatpak-context.c:1120 msgid "FILENAME" msgstr "NÁZOV_SÚBORU" #. This is not needed/used anymore, so hidden, but we accept it for backwards compat -#: common/flatpak-run.c:1199 +#: common/flatpak-context.c:1122 msgid "Don't require a running session (no cgroups creation)" msgstr "" -#: common/flatpak-run.c:3830 +#: common/flatpak-dir.c:1044 +#, c-format +msgid "No overrides found for %s" +msgstr "" + +#: common/flatpak-dir.c:1674 +#, c-format +msgid "While opening repository %s: " +msgstr "Počas otvárania repozitára %s: " + +#: common/flatpak-dir.c:1908 common/flatpak-dir.c:5460 +msgid "Can't create deploy directory" +msgstr "" + +#: common/flatpak-dir.c:2122 common/flatpak-dir.c:2125 +#, c-format +msgid "Failed to find latest revision for ref %s from remote %s: %s\n" +msgstr "" + +#: common/flatpak-dir.c:2761 +#, c-format +msgid "Invalid sha256 for extra data uri %s" +msgstr "" + +#: common/flatpak-dir.c:2766 +#, c-format +msgid "Empty name for extra data uri %s" +msgstr "" + +#: common/flatpak-dir.c:2773 +#, c-format +msgid "Unsupported extra data uri %s" +msgstr "" + +#: common/flatpak-dir.c:2787 +#, fuzzy, c-format +msgid "Failed to load local extra-data %s: %s" +msgstr "Zlyhalo čítanie začlenenia %s: " + +#: common/flatpak-dir.c:2790 +#, fuzzy, c-format +msgid "Wrong size for extra-data %s" +msgstr "Nesprávna veľkosť pre údaje navyše %s" + +#: common/flatpak-dir.c:2805 +#, fuzzy, c-format +msgid "While downloading %s: " +msgstr "Počas otvárania repozitára %s: " + +#: common/flatpak-dir.c:2812 +#, c-format +msgid "Wrong size for extra data %s" +msgstr "Nesprávna veľkosť pre údaje navyše %s" + +#: common/flatpak-dir.c:2823 +#, c-format +msgid "Invalid checksum for extra data %s" +msgstr "" + +#: common/flatpak-dir.c:2882 +#, fuzzy +msgid "Remote OCI index has no registry uri" +msgstr "NÁZOV [UMIESTNENIE] - Pridanie vzdialeného repozitára" + +#: common/flatpak-dir.c:3100 +#, fuzzy, c-format +msgid "%s commit %s already installed" +msgstr "Aplikácia %s vetva %s je už nainštalovaná" + +#: common/flatpak-dir.c:3442 common/flatpak-dir.c:3773 +#, c-format +msgid "While pulling %s from remote %s: " +msgstr "" + +#: common/flatpak-dir.c:3658 +#, c-format +msgid "Can't find %s in remote %s" +msgstr "Nedá sa nájsť %s vo vzdialenom repozitári %s" + +#: common/flatpak-dir.c:4331 +msgid "Not enough memory" +msgstr "Nedostatok pamäte" + +#: common/flatpak-dir.c:4350 +msgid "Failed to read from exported file" +msgstr "Zlyhalo čítanie z exportovaného súboru" + +#: common/flatpak-dir.c:4541 +msgid "Error reading mimetype xml file" +msgstr "" + +#: common/flatpak-dir.c:4546 +msgid "Invalid mimetype xml file" +msgstr "" + +#: common/flatpak-dir.c:5089 +msgid "While getting detached metadata: " +msgstr "" + +#: common/flatpak-dir.c:5107 +msgid "While creating extradir: " +msgstr "" + +#: common/flatpak-dir.c:5128 +msgid "Invalid sha256 for extra data" +msgstr "" + +#: common/flatpak-dir.c:5157 +msgid "Wrong size for extra data" +msgstr "" + +#: common/flatpak-dir.c:5161 +msgid "Invalid checksum for extra data" +msgstr "" + +#: common/flatpak-dir.c:5170 +#, c-format +msgid "While writing extra data file '%s': " +msgstr "" + +#: common/flatpak-dir.c:5340 +#, c-format +msgid "apply_extra script failed, exit status %d" +msgstr "" + +#: common/flatpak-dir.c:5419 +#, c-format +msgid "While trying to resolve ref %s: " +msgstr "" + +#: common/flatpak-dir.c:5434 +#, c-format +msgid "%s is not available" +msgstr "Aplikácia %s nie je dostupná" + +#: common/flatpak-dir.c:5449 common/flatpak-dir.c:5881 +#: common/flatpak-dir.c:6671 common/flatpak-dir.c:6681 +#: common/flatpak-dir.c:6713 +#, c-format +msgid "%s branch %s already installed" +msgstr "Aplikácia %s vetva %s je už nainštalovaná" + +#: common/flatpak-dir.c:5468 +#, c-format +msgid "Failed to read commit %s: " +msgstr "Zlyhalo čítanie začlenenia %s: " + +#: common/flatpak-dir.c:5488 +#, c-format +msgid "While trying to checkout %s into %s: " +msgstr "" + +#: common/flatpak-dir.c:5513 common/flatpak-dir.c:5544 +msgid "While trying to checkout metadata subpath: " +msgstr "" + +#: common/flatpak-dir.c:5554 +msgid "While trying to remove existing extra dir: " +msgstr "Počas pokusu o odstránenie existujúceho adresára navyše: " + +#: common/flatpak-dir.c:5565 +msgid "While trying to apply extra data: " +msgstr "Počas pokusu o aplikáciu údajov navyše: " + +#: common/flatpak-dir.c:5592 +#, fuzzy, c-format +msgid "Invalid deployed ref %s: " +msgstr "Neplatný identifikátor pid %s" + +#: common/flatpak-dir.c:5599 +#, fuzzy, c-format +msgid "Invalid commit ref %s: " +msgstr "Neplatný identifikátor pid %s" + +#: common/flatpak-dir.c:5607 +#, c-format +msgid "Deployed ref %s kind does not match commit (%s)" +msgstr "" + +#: common/flatpak-dir.c:5615 +#, c-format +msgid "Deployed ref %s name does not match commit (%s)" +msgstr "" + +#: common/flatpak-dir.c:5623 +#, c-format +msgid "Deployed ref %s arch does not match commit (%s)" +msgstr "" + +#: common/flatpak-dir.c:5629 +#, c-format +msgid "Deployed ref %s branch does not match commit (%s)" +msgstr "" + +#: common/flatpak-dir.c:5635 +#, c-format +msgid "Deployed ref %s does not match commit (%s)" +msgstr "" + +#: common/flatpak-dir.c:5654 +msgid "Deployed metadata does not match commit" +msgstr "" + +#: common/flatpak-dir.c:6533 +#, c-format +msgid "This version of %s is already installed" +msgstr "Táto verzia aplikácie %s je už nainštalovaná" + +#: common/flatpak-dir.c:6540 +msgid "Can't change remote during bundle install" +msgstr "" + +#: common/flatpak-dir.c:7059 +#, c-format +msgid "%s branch %s is not installed" +msgstr "Aplikácia %s vetva %s nie je nainštalovaná" + +#: common/flatpak-dir.c:7304 +#, c-format +msgid "%s branch %s not installed" +msgstr "Aplikácia %s vetva %s nie je nainštalovaná" + +#: common/flatpak-dir.c:7628 +#, c-format +msgid "Pruning repo failed: %s" +msgstr "" + +#: common/flatpak-dir.c:8155 +#, c-format +msgid "Multiple branches available for %s, you must specify one of: " +msgstr "" + +#: common/flatpak-dir.c:8176 +#, c-format +msgid "Nothing matches %s" +msgstr "Nič nevyhovuje názvu %s" + +#: common/flatpak-dir.c:8258 +#, fuzzy, c-format +msgid "Can't find ref %s%s%s%s%s" +msgstr "Nedá sa nájsť %s%s%s%s%s vo vzdialenom repozitári %s" + +#: common/flatpak-dir.c:8300 +#, c-format +msgid "Error searching remote %s: %s" +msgstr "" + +#: common/flatpak-dir.c:8345 +#, c-format +msgid "Error searching local repository: %s" +msgstr "" + +#: common/flatpak-dir.c:8471 +#, c-format +msgid "%s %s not installed" +msgstr "Aplikácia %s %s nie je nainštalovaná" + +#: common/flatpak-dir.c:8638 +#, c-format +msgid "Could not find installation %s" +msgstr "Nepodarilo sa nájsť inštaláciu %s" + +#: common/flatpak-dir.c:9236 +#, c-format +msgid "Runtime %s, branch %s is already installed" +msgstr "Prostredie %s, vetva %s je už nainštalovaná" + +#: common/flatpak-dir.c:9237 +#, c-format +msgid "App %s, branch %s is already installed" +msgstr "Aplikácia %s, vetva %s je už nainštalovaná" + +#: common/flatpak-dir.c:9717 +msgid "Remote title not set" +msgstr "" + +#: common/flatpak-dir.c:9739 +#, fuzzy +msgid "Remote default-branch not set" +msgstr "Vypíše predvolenú architektúru a skončí" + +#: common/flatpak-dir.c:10332 +msgid "No flatpak cache in remote summary" +msgstr "" + +#: common/flatpak-dir.c:10342 +#, c-format +msgid "No entry for %s in remote summary flatpak cache " +msgstr "" + +#: common/flatpak-run.c:1456 #, fuzzy, c-format msgid "Failed to open flatpak-info temp file: %s" msgstr "Zlyhalo otvorenie dočasného súboru flatpak-info" -#: common/flatpak-run.c:3904 common/flatpak-run.c:3914 +#: common/flatpak-run.c:1530 common/flatpak-run.c:1540 #, fuzzy, c-format msgid "Failed to open temp file: %s" msgstr "Zlyhalo otvorenie súboru temp" -#: common/flatpak-run.c:4253 +#: common/flatpak-run.c:1883 msgid "Unable to create sync pipe" msgstr "" -#: common/flatpak-run.c:4280 +#: common/flatpak-run.c:1910 #, c-format msgid "Failed to open app info file: %s" msgstr "Zlyhalo otvorenie súboru s informáciami o aplikácii: %s" -#: common/flatpak-run.c:4310 +#: common/flatpak-run.c:1940 msgid "Failed to sync with dbus proxy" msgstr "" -#: common/flatpak-run.c:5069 +#: common/flatpak-run.c:2700 #, c-format msgid "ldconfig failed, exit status %d" msgstr "" -#: common/flatpak-utils.c:2900 +#: common/flatpak-utils.c:624 +#, fuzzy, c-format +msgid "Migrating %s to %s\n" +msgstr "Aktualizovanie: %s z %s\n" + +#: common/flatpak-utils.c:630 +#, c-format +msgid "Error during migration: %s\n" +msgstr "" + +#: common/flatpak-utils.c:2988 msgid "No extra data sources" msgstr "Žiadne zdroje údajov navyše" +#: common/flatpak-utils.c:6576 +#, c-format +msgid "Downloading metadata: %u/(estimating) %s" +msgstr "" + +#: common/flatpak-utils.c:6600 +#, fuzzy, c-format +msgid "Downloading: %s/%s" +msgstr "Zobrazí referenciu" + +#: common/flatpak-utils.c:6620 +#, fuzzy, c-format +msgid "Downloading extra data: %s/%s" +msgstr "Zobrazí referenciu" + +#: common/flatpak-utils.c:6625 +#, fuzzy, c-format +msgid "Downloading files: %d/%d %s" +msgstr "Zobrazí referenciu" + #. SECURITY: #. - Normal users do not need authentication to install signed applications #. from signed repositories, as this cannot exploit a system. @@ -2324,7 +2811,7 @@ msgstr "Aktualizovanie podpísanej aplikácie" #: system-helper/org.freedesktop.Flatpak.policy.in:59 #: system-helper/org.freedesktop.Flatpak.policy.in:77 -#: system-helper/org.freedesktop.Flatpak.policy.in:169 +#: system-helper/org.freedesktop.Flatpak.policy.in:180 msgid "Authentication is required to update software" msgstr "Na aktualizáciu softvéru sa vyžaduje overenie totožnosti" @@ -2391,26 +2878,36 @@ msgid "Authentication is required to configure software repositories" msgstr "" "Na konfiguráciu softvérových repozitárov sa vyžaduje overenie totožnosti" +#: system-helper/org.freedesktop.Flatpak.policy.in:161 +#, fuzzy +msgid "Configure" +msgstr "Konfigurácia vzdialeného repozitára" + +#: system-helper/org.freedesktop.Flatpak.policy.in:162 +#, fuzzy +msgid "Authentication is required to configure software installation" +msgstr "" +"Na konfiguráciu softvérových repozitárov sa vyžaduje overenie totožnosti" + #. SECURITY: #. - Normal users do not require admin authentication to update #. appstream data as it will be signed, and the action is required #. to update the system when unattended. #. - Changing this to anything other than 'yes' will break unattended #. updates. -#: system-helper/org.freedesktop.Flatpak.policy.in:168 +#: system-helper/org.freedesktop.Flatpak.policy.in:179 msgid "Update appstream" msgstr "" +#~ msgid "No remote %s" +#~ msgstr "Žiadny vzdialený repozitár %s" + #~ msgid "Failed to create temporary file" #~ msgstr "Zlyhalo vytvorenie dočasného súboru" #~ msgid "Failed to write to temporary file" #~ msgstr "Zlyhal zápis dočasného súboru" -#, fuzzy -#~ msgid "Downloading %s" -#~ msgstr "Zobrazí referenciu" - #, fuzzy #~ msgid "Installing %s" #~ msgstr "Inštalovanie: %s\n" @@ -2419,10 +2916,6 @@ msgstr "" #~ msgid "Post-Install %s" #~ msgstr "Inštalovanie: %s\n" -#, fuzzy -#~ msgid "Updating %s" -#~ msgstr "Aktualizovanie zhrnutia\n" - #~ msgid "'%s' is not a valid runtime name: %s" #~ msgstr "„%s“ nie je platným názvom prostredia: %s" @@ -2430,10 +2923,6 @@ msgstr "" #~ msgid "'%s' is not a valid sdk name: %s" #~ msgstr "„%s“ nie je platným názvom" -#, fuzzy -#~ msgid "Assume LOCATION is an oci registry" -#~ msgstr "NÁZOV [UMIESTNENIE] - Pridanie vzdialeného repozitára" - #, fuzzy #~ msgid "OCI repo Filename or uri must be specified" #~ msgstr "Musí byť určený NÁZOV vzdialeného repozitára" diff --git a/po/sv.po b/po/sv.po index e9ccb7de..89d51d86 100644 --- a/po/sv.po +++ b/po/sv.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: 2017-10-09 12:40+0200\n" -"PO-Revision-Date: 2017-09-02 23:47+0200\n" +"POT-Creation-Date: 2018-02-19 14:20+0100\n" +"PO-Revision-Date: 2017-12-01 03:20+0100\n" "Last-Translator: Josef Andersson \n" "Language-Team: Swedish \n" "Language: sv\n" @@ -16,7 +16,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: Poedit 2.0.1\n" +"X-Generator: Poedit 2.0.4\n" #: app/flatpak-builtins-add-remote.c:57 msgid "Do nothing if the provided remote exists" @@ -42,10 +42,9 @@ msgstr "Markera fjärrförrådet med att det används för beroenden" msgid "Set a new url" msgstr "Ställ in en ny URL" -#: app/flatpak-builtins-add-remote.c:66 app/flatpak-builtins-build-bundle.c:57 -#: app/flatpak-builtins-build-bundle.c:58 -#: app/flatpak-builtins-list-remotes.c:109 -#: app/flatpak-builtins-repo-update.c:52 +#: app/flatpak-builtins-add-remote.c:66 app/flatpak-builtins-build-bundle.c:58 +#: app/flatpak-builtins-build-bundle.c:59 +#: app/flatpak-builtins-list-remotes.c:70 app/flatpak-builtins-repo-update.c:52 msgid "URL" msgstr "URL" @@ -107,9 +106,9 @@ msgstr "SAMLINGS-ID" msgid "Import GPG key from FILE (- for stdin)" msgstr "Importera GPG-nyckel från FIL (- för standard in)" -#: app/flatpak-builtins-add-remote.c:82 app/flatpak-builtins-build-bundle.c:59 -#: app/flatpak-builtins-build.c:50 app/flatpak-builtins-build-export.c:60 -#: app/flatpak-builtins-install.c:66 app/flatpak-builtins-repo-update.c:59 +#: app/flatpak-builtins-add-remote.c:82 app/flatpak-builtins-build-bundle.c:60 +#: app/flatpak-builtins-build.c:54 app/flatpak-builtins-build-export.c:60 +#: app/flatpak-builtins-install.c:67 app/flatpak-builtins-repo-update.c:59 msgid "FILE" msgstr "FIL" @@ -121,129 +120,147 @@ msgstr "Inaktivera fjärrförrådet" msgid "Add OCI registry" msgstr "Lägg till OCI-register" -#: app/flatpak-builtins-add-remote.c:312 +#: app/flatpak-builtins-add-remote.c:218 app/flatpak-builtins-add-remote.c:225 +#, c-format +msgid "Can't load uri %s: %s\n" +msgstr "Det går inte att läsa in uri %s: %s\n" + +#: app/flatpak-builtins-add-remote.c:233 +#, c-format +msgid "Can't load file %s: %s\n" +msgstr "Det går inte att läsa in filen %s: %s\n" + +#: app/flatpak-builtins-add-remote.c:241 +msgid "Invalid file format" +msgstr "Ogiltigt filformat" + +#: app/flatpak-builtins-add-remote.c:249 +#, c-format +msgid "Invalid version %s, only 1 supported" +msgstr "Ogiltig version %s, endast 1 stöds" + +#: app/flatpak-builtins-add-remote.c:293 +msgid "Invalid gpg key" +msgstr "Ogiltig gpg-nyckel" + +#: app/flatpak-builtins-add-remote.c:320 msgid "NAME LOCATION - Add a remote repository" msgstr "NAMN PLATS - Lägg till ett fjärrförråd" -#: app/flatpak-builtins-add-remote.c:321 -#: app/flatpak-builtins-delete-remote.c:58 app/flatpak-builtins-info.c:104 +#: app/flatpak-builtins-add-remote.c:333 +#: app/flatpak-builtins-delete-remote.c:61 app/flatpak-builtins-info.c:125 msgid "NAME must be specified" msgstr "NAMN måste anges" -#: app/flatpak-builtins-add-remote.c:324 app/flatpak-builtins-build-sign.c:71 -#: app/flatpak-builtins-repo.c:174 app/flatpak-builtins-repo-update.c:429 +#: app/flatpak-builtins-add-remote.c:336 app/flatpak-builtins-build-sign.c:71 +#: app/flatpak-builtins-repo.c:175 app/flatpak-builtins-repo-update.c:429 msgid "LOCATION must be specified" msgstr "PLATS måste anges" -#: app/flatpak-builtins-add-remote.c:327 -#: app/flatpak-builtins-build-bundle.c:479 +#: app/flatpak-builtins-add-remote.c:339 +#: app/flatpak-builtins-build-bundle.c:461 #: app/flatpak-builtins-build-export.c:676 #: app/flatpak-builtins-build-import-bundle.c:182 #: app/flatpak-builtins-build-init.c:181 app/flatpak-builtins-build-sign.c:74 -#: app/flatpak-builtins-delete-remote.c:63 +#: app/flatpak-builtins-delete-remote.c:66 #: app/flatpak-builtins-document-export.c:102 #: app/flatpak-builtins-document-info.c:75 #: app/flatpak-builtins-document-list.c:70 -#: app/flatpak-builtins-document-unexport.c:67 app/flatpak-builtins-info.c:111 -#: app/flatpak-builtins-install.c:265 app/flatpak-builtins-install.c:399 -#: app/flatpak-builtins-list.c:382 app/flatpak-builtins-list-remotes.c:66 -#: app/flatpak-builtins-ls-remote.c:84 app/flatpak-builtins-make-current.c:67 -#: app/flatpak-builtins-override.c:66 +#: app/flatpak-builtins-document-unexport.c:67 app/flatpak-builtins-info.c:132 +#: app/flatpak-builtins-install.c:267 app/flatpak-builtins-install.c:401 +#: app/flatpak-builtins-list.c:314 app/flatpak-builtins-list-remotes.c:61 +#: app/flatpak-builtins-ls-remote.c:107 app/flatpak-builtins-make-current.c:72 +#: app/flatpak-builtins-override.c:68 msgid "Too many arguments" msgstr "För många argument" -#: app/flatpak-builtins-add-remote.c:332 +#: app/flatpak-builtins-add-remote.c:344 #: app/flatpak-builtins-build-export.c:692 #, c-format msgid "‘%s’ is not a valid collection ID: %s" msgstr "”%s” är inte ett giltigt samlings-ID: %s" -#: app/flatpak-builtins-add-remote.c:336 +#: app/flatpak-builtins-add-remote.c:348 msgid "GPG verification is required if collections are enabled" msgstr "GPG-verifiering krävs om samlingar är aktiverat" #. Do nothing -#: app/flatpak-builtins-add-remote.c:351 +#: app/flatpak-builtins-add-remote.c:363 #, c-format msgid "Remote %s already exists" msgstr "Fjärrförrådet %s existerar redan" -#: app/flatpak-builtins-add-remote.c:359 +#: app/flatpak-builtins-add-remote.c:371 msgid "No url specified in flatpakrepo file" msgstr "Ingen url angiven i flatpakrepo-fil" -#: app/flatpak-builtins-add-remote.c:403 +#: app/flatpak-builtins-add-remote.c:415 #, c-format msgid "Warning: Could not update extra metadata for '%s': %s\n" msgstr "Varning: Det gick inte att uppdatera extra metadata för ”%s”: %s\n" -#: app/flatpak-builtins-add-remote.c:451 +#: app/flatpak-builtins-add-remote.c:464 msgid "NAME - Modify a remote repository" msgstr "NAMN - Modifiera ett fjärrförråd" -#: app/flatpak-builtins-add-remote.c:460 +#: app/flatpak-builtins-add-remote.c:474 msgid "Remote NAME must be specified" msgstr "Fjärrförråd-NAMN måste anges" -#: app/flatpak-builtins-add-remote.c:465 -#, c-format -msgid "No remote %s" -msgstr "Inget fjärrförråd %s" - -#: app/flatpak-builtins-add-remote.c:471 +#: app/flatpak-builtins-add-remote.c:485 #, c-format msgid "Updating extra metadata from remote summary for %s\n" msgstr "Uppdaterar extra metadata från sammanfattning av fjärrförråd för %s\n" -#: app/flatpak-builtins-add-remote.c:474 +#: app/flatpak-builtins-add-remote.c:488 #, c-format msgid "Error updating extra metadata for '%s': %s\n" msgstr "Fel vid uppdatering av extra metadata för ”%s”: %s\n" -#: app/flatpak-builtins-add-remote.c:475 +#: app/flatpak-builtins-add-remote.c:489 #, c-format msgid "Could not update extra metadata for %s" msgstr "Det gick inte att uppdatera extra metadata för %s" -#: app/flatpak-builtins-build-bundle.c:55 +#: app/flatpak-builtins-build-bundle.c:56 msgid "Export runtime instead of app" msgstr "Exportera exekveringsmiljö istället för program" -#: app/flatpak-builtins-build-bundle.c:56 +#: app/flatpak-builtins-build-bundle.c:57 msgid "Arch to bundle for" msgstr "Arkitektur att skapa bunt för" -#: app/flatpak-builtins-build-bundle.c:56 +#: app/flatpak-builtins-build-bundle.c:57 #: app/flatpak-builtins-build-export.c:55 app/flatpak-builtins-build-init.c:49 -#: app/flatpak-builtins-build-sign.c:41 app/flatpak-builtins-info.c:48 -#: app/flatpak-builtins-install.c:56 app/flatpak-builtins-list.c:52 -#: app/flatpak-builtins-ls-remote.c:48 app/flatpak-builtins-make-current.c:38 -#: app/flatpak-builtins-run.c:52 app/flatpak-builtins-uninstall.c:44 -#: app/flatpak-builtins-update.c:53 +#: app/flatpak-builtins-build-sign.c:41 app/flatpak-builtins-info.c:51 +#: app/flatpak-builtins-info-remote.c:48 app/flatpak-builtins-install.c:57 +#: app/flatpak-builtins-list.c:46 app/flatpak-builtins-ls-remote.c:49 +#: app/flatpak-builtins-make-current.c:38 app/flatpak-builtins-run.c:52 +#: app/flatpak-builtins-uninstall.c:44 app/flatpak-builtins-update.c:53 msgid "ARCH" msgstr "ARK" -#: app/flatpak-builtins-build-bundle.c:57 +#: app/flatpak-builtins-build-bundle.c:58 msgid "Url for repo" msgstr "URL till arkiv" -#: app/flatpak-builtins-build-bundle.c:58 +#: app/flatpak-builtins-build-bundle.c:59 msgid "Url for runtime flatpakrepo file" msgstr "Url för flatpakrepo-fil i exekveringsmiljö" -#: app/flatpak-builtins-build-bundle.c:59 +#: app/flatpak-builtins-build-bundle.c:60 msgid "Add GPG key from FILE (- for stdin)" msgstr "Lägg till GPG-nyckel från FIL (- för standard in)" -#: app/flatpak-builtins-build-bundle.c:60 +#: app/flatpak-builtins-build-bundle.c:61 msgid "Export oci image instead of flatpak bundle" msgstr "Exportera oci-avbild istället för flatpak-bunt" -#: app/flatpak-builtins-build-bundle.c:61 +#: app/flatpak-builtins-build-bundle.c:62 msgid "GPG Key ID to sign the OCI image with" msgstr "GPG-nyckel-ID att signera OCI-avbilden med" -#: app/flatpak-builtins-build-bundle.c:61 +#: app/flatpak-builtins-build-bundle.c:62 #: app/flatpak-builtins-build-commit-from.c:55 #: app/flatpak-builtins-build-export.c:61 #: app/flatpak-builtins-build-import-bundle.c:46 @@ -251,7 +268,7 @@ msgstr "GPG-nyckel-ID att signera OCI-avbilden med" msgid "KEY-ID" msgstr "NYCKEL-ID" -#: app/flatpak-builtins-build-bundle.c:62 +#: app/flatpak-builtins-build-bundle.c:63 #: app/flatpak-builtins-build-commit-from.c:56 #: app/flatpak-builtins-build-export.c:64 #: app/flatpak-builtins-build-import-bundle.c:47 @@ -259,7 +276,7 @@ msgstr "NYCKEL-ID" msgid "GPG Homedir to use when looking for keyrings" msgstr "GPG-hemkatalog att använda vid sökning efter nyckelringar" -#: app/flatpak-builtins-build-bundle.c:62 +#: app/flatpak-builtins-build-bundle.c:63 #: app/flatpak-builtins-build-commit-from.c:56 #: app/flatpak-builtins-build-export.c:64 #: app/flatpak-builtins-build-import-bundle.c:47 @@ -267,103 +284,124 @@ msgstr "GPG-hemkatalog att använda vid sökning efter nyckelringar" msgid "HOMEDIR" msgstr "HEMKAT" -#: app/flatpak-builtins-build-bundle.c:469 +#: app/flatpak-builtins-build-bundle.c:64 +msgid "OSTree commit to create a delta bundle from" +msgstr "" + +#: app/flatpak-builtins-build-bundle.c:64 app/flatpak-builtins-info-remote.c:49 +#: app/flatpak-builtins-update.c:54 +msgid "COMMIT" +msgstr "INCHECKNING" + +#: app/flatpak-builtins-build-bundle.c:451 msgid "" "LOCATION FILENAME NAME [BRANCH] - Create a single file bundle from a local " "repository" msgstr "" "PLATS FILNAMN NAMN [GREN] - Skapa en enstaka-fil-bunt från ett lokalt arkiv" -#: app/flatpak-builtins-build-bundle.c:476 +#: app/flatpak-builtins-build-bundle.c:458 msgid "LOCATION, FILENAME and NAME must be specified" msgstr "PLATS, FILNAMN och NAMN måste anges" -#: app/flatpak-builtins-build-bundle.c:494 -#: app/flatpak-builtins-build-commit-from.c:103 -#: app/flatpak-builtins-build-commit-from.c:113 +#: app/flatpak-builtins-build-bundle.c:476 +#: app/flatpak-builtins-build-commit-from.c:253 +#: app/flatpak-builtins-build-commit-from.c:263 #: app/flatpak-builtins-build-import-bundle.c:191 #, c-format msgid "'%s' is not a valid repository" msgstr "”%s” är inte ett giltigt arkiv" -#: app/flatpak-builtins-build-bundle.c:506 app/flatpak-builtins-build-sign.c:86 +#: app/flatpak-builtins-build-bundle.c:488 app/flatpak-builtins-build-sign.c:86 #, c-format msgid "'%s' is not a valid name: %s" msgstr "”%s” är inte ett giltigt namn: %s" -#: app/flatpak-builtins-build-bundle.c:509 +#: app/flatpak-builtins-build-bundle.c:491 #: app/flatpak-builtins-build-export.c:699 app/flatpak-builtins-build-sign.c:89 #, c-format msgid "'%s' is not a valid branch name: %s" msgstr "”%s” är inte ett giltigt grennamn: %s" -#: app/flatpak-builtins-build.c:46 +#: app/flatpak-builtins-build.c:49 msgid "Use Platform runtime rather than Sdk" msgstr "Använd plattformsexekveringsmiljö snarare än SDK" +#: app/flatpak-builtins-build.c:50 +msgid "Make destination readonly" +msgstr "Skrivskydda destinationen" + # sebras: how is this translated? -#: app/flatpak-builtins-build.c:47 +#: app/flatpak-builtins-build.c:51 msgid "Add bind mount" msgstr "Lägg till bindningsmontering" -#: app/flatpak-builtins-build.c:47 +#: app/flatpak-builtins-build.c:51 msgid "DEST=SRC" msgstr "DEST=KÄLLA" -#: app/flatpak-builtins-build.c:48 +#: app/flatpak-builtins-build.c:52 msgid "Start build in this directory" msgstr "Starta bygge i denna katalog" -#: app/flatpak-builtins-build.c:48 app/flatpak-builtins-build.c:49 +#: app/flatpak-builtins-build.c:52 app/flatpak-builtins-build.c:53 #: app/flatpak-builtins-build-init.c:58 msgid "DIR" msgstr "KAT" -#: app/flatpak-builtins-build.c:49 +#: app/flatpak-builtins-build.c:53 msgid "Where to look for custom sdk dir (defaults to 'usr')" msgstr "Var anpassad sdk-katalog ska eftersökas (standardvärdet är ”usr”)" -#: app/flatpak-builtins-build.c:50 app/flatpak-builtins-build-export.c:60 +#: app/flatpak-builtins-build.c:54 app/flatpak-builtins-build-export.c:60 msgid "Use alternative file for the metadata" msgstr "Använd alternativ fil för metadata" -#: app/flatpak-builtins-build.c:51 +#: app/flatpak-builtins-build.c:55 msgid "Kill processes when the parent process dies" msgstr "Döda processen när den överordnade processen dör" -#: app/flatpak-builtins-build.c:52 +#: app/flatpak-builtins-build.c:56 msgid "Export application homedir directory to build" -msgstr "" +msgstr "Exportera programmets hemkatalog till bygge" -#: app/flatpak-builtins-build.c:139 +#: app/flatpak-builtins-build.c:57 app/flatpak-builtins-run.c:58 +msgid "Log session bus calls" +msgstr "Logga sessionsbussanrop" + +#: app/flatpak-builtins-build.c:58 app/flatpak-builtins-run.c:59 +msgid "Log system bus calls" +msgstr "Logga systembussanrop" + +#: app/flatpak-builtins-build.c:126 msgid "DIRECTORY [COMMAND [args...]] - Build in directory" msgstr "KATALOG [KOMMANDO [argument…]] - Bygg i katalog" -#: app/flatpak-builtins-build.c:162 app/flatpak-builtins-build-finish.c:533 +#: app/flatpak-builtins-build.c:149 app/flatpak-builtins-build-finish.c:533 msgid "DIRECTORY must be specified" msgstr "KATALOG måste anges" -#: app/flatpak-builtins-build.c:173 app/flatpak-builtins-build-export.c:721 +#: app/flatpak-builtins-build.c:160 app/flatpak-builtins-build-export.c:721 #, c-format msgid "Build directory %s not initialized, use flatpak build-init" msgstr "Byggkatalog %s är inte initierad, använd flatpak build-init" -#: app/flatpak-builtins-build.c:192 +#: app/flatpak-builtins-build.c:179 msgid "metadata invalid, not application or runtime" msgstr "metadata ogiltigt, inte program eller exekveringsmiljö" -#: app/flatpak-builtins-build.c:292 +#: app/flatpak-builtins-build.c:283 #, c-format msgid "No extension point matching %s in %s" msgstr "Ingen utökningspunkt matchar %s i %s" # sebras: how is this translated? -#: app/flatpak-builtins-build.c:432 +#: app/flatpak-builtins-build.c:433 #, c-format msgid "Missing '=' in bind mount option '%s'" msgstr "Saknar ”=” i bindningsmonteringsargument ”%s”" -#: app/flatpak-builtins-build.c:460 common/flatpak-run.c:5406 +#: app/flatpak-builtins-build.c:462 common/flatpak-run.c:3038 msgid "Unable to start app" msgstr "Kunde inte starta program" @@ -422,34 +460,39 @@ msgstr "Uppdatera inte sammanfattningen" msgid "GPG Key ID to sign the commit with" msgstr "GPG-nyckel-ID att signera incheckning med" -#: app/flatpak-builtins-build-commit-from.c:78 +#: app/flatpak-builtins-build-commit-from.c:228 msgid "DST-REPO [DST-REF]... - Make a new commit based on existing commit(s)" msgstr "" "DST-ARKIV [DST-REF]… - Skapa en ny incheckning baserad på existerande " "incheckningar" -#: app/flatpak-builtins-build-commit-from.c:85 +#: app/flatpak-builtins-build-commit-from.c:235 msgid "DST-REPO must be specified" msgstr "DST-ARKIV måste anges" -#: app/flatpak-builtins-build-commit-from.c:93 +#: app/flatpak-builtins-build-commit-from.c:243 msgid "" "If --src-repo is not specified, exactly one destination ref must be specified" msgstr "Om --src-repo inte anges, måste exakt en destinationsref. anges" -#: app/flatpak-builtins-build-commit-from.c:96 +#: app/flatpak-builtins-build-commit-from.c:246 msgid "" "If --src-ref is specified, exactly one destination ref must be specified" msgstr "Om --src-ref anges måste exakt en destinationsref. anges" -#: app/flatpak-builtins-build-commit-from.c:99 +#: app/flatpak-builtins-build-commit-from.c:249 msgid "Either --src-repo or --src-ref must be specified." msgstr "Antingen måste --src-repo eller --src-ref anges." -#: app/flatpak-builtins-build-commit-from.c:251 +#: app/flatpak-builtins-build-commit-from.c:402 msgid "Can't commit from partial source commit." msgstr "Kan inte checka in från en partiell källkodsincheckning." +#: app/flatpak-builtins-build-commit-from.c:407 +#, c-format +msgid "%s: no change\n" +msgstr "%s: ingen förändring\n" + #: app/flatpak-builtins-build-export.c:55 msgid "Architecture to export for (must be host compatible)" msgstr "Arkitektur att exportera till (måste vara värdkompatibel)" @@ -487,6 +530,42 @@ msgstr "Åsidosätt tidsstämpel för incheckningen" msgid "ISO-8601-TIMESTAMP" msgstr "ISO-8601-TIDSSTÄMPEL" +#: app/flatpak-builtins-build-export.c:341 +#, c-format +msgid "WARNING: Error running desktop-file-validate: %s\n" +msgstr "VARNING: Fel vid körning av desktop-file-validate: %s\n" + +#: app/flatpak-builtins-build-export.c:349 +#, c-format +msgid "WARNING: Error reading from desktop-file-validate: %s\n" +msgstr "VARNING: Fel vid läsning av desktop-file-validate: %s\n" + +#: app/flatpak-builtins-build-export.c:355 +#, c-format +msgid "WARNING: Failed to validate desktop file %s: %s\n" +msgstr "VARNING: Misslyckades med att validera desktop-filen %s: %s\n" + +#: app/flatpak-builtins-build-export.c:370 +#, c-format +msgid "WARNING: Can't find Exec key in %s: %s\n" +msgstr "VARNING: Det går inte att hitta Exec-nyckeln i %s: %s\n" + +#: app/flatpak-builtins-build-export.c:378 +#: app/flatpak-builtins-build-export.c:475 +#, c-format +msgid "WARNING: Binary not found for Exec line in %s: %s\n" +msgstr "VARNING: Binär inte funnen för Exec-rad i %s: %s\n" + +#: app/flatpak-builtins-build-export.c:385 +#, c-format +msgid "WARNING: Icon not matching app id in %s: %s\n" +msgstr "VARNING: Ikon matchar inte appid i %s: %s\n" + +#: app/flatpak-builtins-build-export.c:413 +#, c-format +msgid "WARNING: Icon referenced in desktop file but not exported: %s\n" +msgstr "VARNING: Ikon hänvisad till i desktop-fil men inte exporterad: %s\n" + #: app/flatpak-builtins-build-export.c:551 #, c-format msgid "Invalid uri type %s, only http/https supported" @@ -524,12 +603,41 @@ msgstr "PLATS och KATALOG måste anges" msgid "No name specified in the metadata" msgstr "Inget namn angivet i metadata" +#: app/flatpak-builtins-build-export.c:976 +#, c-format +msgid "Commit: %s\n" +msgstr "Incheckning: %s\n" + +#: app/flatpak-builtins-build-export.c:977 +#, c-format +msgid "Metadata Total: %u\n" +msgstr "Total metadata: %u\n" + +#: app/flatpak-builtins-build-export.c:978 +#, c-format +msgid "Metadata Written: %u\n" +msgstr "Skriven metadata: %u\n" + +#: app/flatpak-builtins-build-export.c:979 +#, c-format +msgid "Content Total: %u\n" +msgstr "Totalt innehåll: %u\n" + +#: app/flatpak-builtins-build-export.c:980 +#, c-format +msgid "Content Written: %u\n" +msgstr "Skrivet innehåll: %u\n" + +#: app/flatpak-builtins-build-export.c:981 +msgid "Content Bytes Written:" +msgstr "Skrivna innehållsbyte:" + #: app/flatpak-builtins-build-finish.c:48 msgid "Command to set" msgstr "Kommando att ställa in" #: app/flatpak-builtins-build-finish.c:48 app/flatpak-builtins-run.c:53 -#: app/flatpak-main.c:159 +#: app/flatpak-main.c:166 msgid "COMMAND" msgstr "KOMMANDO" @@ -559,11 +667,11 @@ msgstr "NAMN=VARIABEL[=VÄRDE]" #: app/flatpak-builtins-build-finish.c:53 msgid "Set extension priority (only for extensions)" -msgstr "" +msgstr "Ställ in prioritet för tillägg (endast för tillägg)" #: app/flatpak-builtins-build-finish.c:53 msgid "0" -msgstr "" +msgstr "0" #: app/flatpak-builtins-build-finish.c:54 msgid "Change the sdk used for the app" @@ -590,6 +698,29 @@ msgstr "Ange alternativet generell metadata" msgid "GROUP=KEY[=VALUE]" msgstr "GRUPP=NYCKEL[=VÄRDE]" +#: app/flatpak-builtins-build-finish.c:139 +#, c-format +msgid "Not exporting %s, wrong prefix\n" +msgstr "Exporterar inte %s, fel prefix\n" + +#: app/flatpak-builtins-build-finish.c:143 +#, c-format +msgid "Exporting %s\n" +msgstr "Exporterar %s\n" + +#: app/flatpak-builtins-build-finish.c:384 +msgid "More than one executable found\n" +msgstr "Fler än en körbar fil funnen\n" + +#: app/flatpak-builtins-build-finish.c:395 +#, c-format +msgid "Using %s as command\n" +msgstr "Använder %s som ett kommando\n" + +#: app/flatpak-builtins-build-finish.c:400 +msgid "No executable found\n" +msgstr "Ingen körbar fil funnen\n" + #: app/flatpak-builtins-build-finish.c:433 #, c-format msgid "Too few elements in --extra-data argument %s" @@ -650,6 +781,12 @@ msgstr "Ref ”%s” hittades inte i registret" msgid "Multiple images in registry, specify a ref with --ref" msgstr "Flera bilder i registret, specificera en ref med --ref" +#: app/flatpak-builtins-build-import-bundle.c:123 +#: app/flatpak-builtins-build-import-bundle.c:151 +#, c-format +msgid "Importing %s (%s)\n" +msgstr "Importerar %s (%s)\n" + #: app/flatpak-builtins-build-import-bundle.c:172 msgid "LOCATION FILENAME - Import a file bundle into a local repository" msgstr "PLATS FILNAMN - Importera en filbunt in i ett lokalt arkiv" @@ -658,7 +795,7 @@ msgstr "PLATS FILNAMN - Importera en filbunt in i ett lokalt arkiv" msgid "LOCATION and FILENAME must be specified" msgstr "PLATS och FILNAMN måste anges" -#: app/flatpak-builtins-build-init.c:49 app/flatpak-builtins-info.c:48 +#: app/flatpak-builtins-build-init.c:49 app/flatpak-builtins-info.c:51 #: app/flatpak-builtins-run.c:52 msgid "Arch to use" msgstr "Ark att använda" @@ -749,7 +886,7 @@ msgid "'%s' is not a valid build type name, use app, runtime or extension" msgstr "" "”%s” är inte ett giltigt byggtypsnamn, använd app, runtime eller extension" -#: app/flatpak-builtins-build-init.c:205 app/flatpak-builtins-override.c:71 +#: app/flatpak-builtins-build-init.c:205 app/flatpak-builtins-override.c:74 #, c-format msgid "'%s' is not a valid application name: %s" msgstr "”%s” är inte ett giltigt programnamn: %s" @@ -759,12 +896,14 @@ msgstr "”%s” är inte ett giltigt programnamn: %s" msgid "Build directory %s already initialized" msgstr "Byggkatalog %s är redan initierad" -#: app/flatpak-builtins-build-sign.c:41 app/flatpak-builtins-install.c:56 +#: app/flatpak-builtins-build-sign.c:41 app/flatpak-builtins-info-remote.c:48 +#: app/flatpak-builtins-install.c:57 msgid "Arch to install for" msgstr "Ark att installera för" -#: app/flatpak-builtins-build-sign.c:42 app/flatpak-builtins-install.c:62 -#: app/flatpak-builtins-uninstall.c:48 app/flatpak-builtins-update.c:61 +#: app/flatpak-builtins-build-sign.c:42 app/flatpak-builtins-info-remote.c:50 +#: app/flatpak-builtins-install.c:63 app/flatpak-builtins-uninstall.c:48 +#: app/flatpak-builtins-update.c:61 msgid "Look for runtime with the specified name" msgstr "Leta efter exekveringsmiljö med angivet namn" @@ -776,11 +915,50 @@ msgstr "PLATS [ID [GREN]] - Signera ett program eller en exekveringsmiljö" msgid "No gpg key ids specified" msgstr "Inga GPG-nyckel-ID angivna" -#: app/flatpak-builtins-delete-remote.c:37 +#: app/flatpak-builtins-config.c:41 +msgid "List configuration keys and values" +msgstr "Lista konfigurationsnycklar och värden" + +#: app/flatpak-builtins-config.c:42 +msgid "Get configuration for KEY" +msgstr "Hämta konfiguration för NYCKEL" + +#: app/flatpak-builtins-config.c:43 +msgid "Set configuration for KEY to VALUE" +msgstr "Sätt konfiguration för NYCKEL till VÄRDE" + +#: app/flatpak-builtins-config.c:44 +msgid "Unset configuration for KEY" +msgstr "Ta bort konfiguration för NYCKEL" + +#: app/flatpak-builtins-config.c:95 +#, c-format +msgid "Unknown configure key '%s'" +msgstr "Okänd konfigurationsnyckel ”%s”" + +#: app/flatpak-builtins-config.c:144 app/flatpak-builtins-config.c:185 +msgid "You must specify key" +msgstr "Du måste ange nyckel" + +#: app/flatpak-builtins-config.c:166 +msgid "You must specify both key and value" +msgstr "Du måste ange både nyckel och värde" + +#: app/flatpak-builtins-config.c:204 +msgid "[KEY [VALUE]] - Manage configuration" +msgstr "[NYCKEL [VÄRDE]] - Hantera konfiguration" + +# TODO: one on -> one of ? +#: app/flatpak-builtins-config.c:223 +#, fuzzy +msgid "Must specify one of --list, --get, --set or --unset" +msgstr "Måste ange en av --list, --get, --set eller --unset" + +#: app/flatpak-builtins-delete-remote.c:38 msgid "Remove remote even if in use" msgstr "Ta bort fjärrförrådet även om det används" -#: app/flatpak-builtins-delete-remote.c:49 +#: app/flatpak-builtins-delete-remote.c:51 msgid "NAME - Delete a remote repository" msgstr "NAMN - Ta bort ett fjärrförråd" @@ -935,165 +1113,253 @@ msgstr "Det går inte att byta gid" msgid "Can't switch uid" msgstr "Det går inte att byta uid" -#: app/flatpak-builtins-info.c:49 app/flatpak-builtins-list.c:46 -#: app/flatpak-builtins-list-remotes.c:43 +#: app/flatpak-builtins-info.c:52 msgid "Show user installations" msgstr "Visa användarinstallationer" -#: app/flatpak-builtins-info.c:50 app/flatpak-builtins-list.c:47 -#: app/flatpak-builtins-list-remotes.c:44 +#: app/flatpak-builtins-info.c:53 msgid "Show system-wide installations" msgstr "Visa systeminstallationer" -#: app/flatpak-builtins-info.c:51 app/flatpak-builtins-list.c:48 -#: app/flatpak-builtins-list-remotes.c:45 +#: app/flatpak-builtins-info.c:54 msgid "Show specific system-wide installations" msgstr "Visa specifika systemomfattande installationer" -#: app/flatpak-builtins-info.c:52 +#: app/flatpak-builtins-info.c:55 app/flatpak-builtins-info-remote.c:53 msgid "Show ref" msgstr "Visa ref" -#: app/flatpak-builtins-info.c:53 +#: app/flatpak-builtins-info.c:56 app/flatpak-builtins-info-remote.c:54 msgid "Show commit" msgstr "Visa incheckning" -#: app/flatpak-builtins-info.c:54 +#: app/flatpak-builtins-info.c:57 msgid "Show origin" msgstr "Visa ursprung" -#: app/flatpak-builtins-info.c:55 +#: app/flatpak-builtins-info.c:58 msgid "Show size" msgstr "Visa storlek" -#: app/flatpak-builtins-info.c:56 +#: app/flatpak-builtins-info.c:59 app/flatpak-builtins-info-remote.c:56 msgid "Show metadata" msgstr "Visa metadata" -#: app/flatpak-builtins-info.c:57 +#: app/flatpak-builtins-info.c:60 +#, fuzzy +msgid "Show permissions" +msgstr "Visa tillägg" + +#: app/flatpak-builtins-info.c:61 +#, fuzzy +msgid "Query file access" +msgstr "" +"\n" +" Hantera filåtkomst" + +#: app/flatpak-builtins-info.c:61 app/flatpak-builtins-install.c:68 +#: app/flatpak-builtins-update.c:64 +msgid "PATH" +msgstr "SÖKVÄG" + +#: app/flatpak-builtins-info.c:62 msgid "Show extensions" msgstr "Visa tillägg" -#: app/flatpak-builtins-info.c:97 +#: app/flatpak-builtins-info.c:118 msgid "NAME [BRANCH] - Get info about installed app and/or runtime" msgstr "" "NAMN [GREN] - Hämta information om installerat program och/eller " "exekveringsmiljö" -#: app/flatpak-builtins-info.c:157 +#: app/flatpak-builtins-info.c:189 msgid "ref not present in origin" msgstr "ref fanns inte i källa" -#: app/flatpak-builtins-info.c:159 +#: app/flatpak-builtins-info.c:202 app/flatpak-builtins-info-remote.c:177 +msgid "Warning: Commit has no flatpak metadata\n" +msgstr "" + +#: app/flatpak-builtins-info.c:209 app/flatpak-builtins-info-remote.c:200 msgid "Ref:" msgstr "Ref:" -#: app/flatpak-builtins-info.c:160 app/flatpak-builtins-info.c:270 +#: app/flatpak-builtins-info.c:210 app/flatpak-builtins-info.c:364 +#: app/flatpak-builtins-info-remote.c:201 msgid "ID:" msgstr "ID:" -#: app/flatpak-builtins-info.c:161 +#: app/flatpak-builtins-info.c:211 app/flatpak-builtins-info-remote.c:202 msgid "Arch:" msgstr "Ark:" -#: app/flatpak-builtins-info.c:162 +#: app/flatpak-builtins-info.c:212 app/flatpak-builtins-info-remote.c:203 msgid "Branch:" msgstr "Gren:" -#: app/flatpak-builtins-info.c:163 app/flatpak-builtins-info.c:271 +#: app/flatpak-builtins-info.c:213 app/flatpak-builtins-info.c:365 msgid "Origin:" msgstr "Origin:" -#: app/flatpak-builtins-info.c:166 +#: app/flatpak-builtins-info.c:215 app/flatpak-builtins-info-remote.c:205 +#, fuzzy +msgid "Collection ID:" +msgstr "Samlings-ID" + +#: app/flatpak-builtins-info.c:217 app/flatpak-builtins-info-remote.c:206 +msgid "Date:" +msgstr "Datum:" + +#: app/flatpak-builtins-info.c:219 app/flatpak-builtins-info-remote.c:207 +msgid "Subject:" +msgstr "Ämne:" + +#: app/flatpak-builtins-info.c:223 msgid "Active commit:" msgstr "Aktiv incheckning:" -#: app/flatpak-builtins-info.c:167 +#: app/flatpak-builtins-info.c:224 msgid "Latest commit:" msgstr "Senaste incheckning:" -#: app/flatpak-builtins-info.c:170 app/flatpak-builtins-info.c:272 +#: app/flatpak-builtins-info.c:227 app/flatpak-builtins-info.c:366 +#: app/flatpak-builtins-info-remote.c:208 msgid "Commit:" msgstr "Incheckning:" -#: app/flatpak-builtins-info.c:172 +#: app/flatpak-builtins-info.c:229 msgid "alt-id:" -msgstr "alt-id" +msgstr "alt-id:" -#: app/flatpak-builtins-info.c:173 +#: app/flatpak-builtins-info.c:230 app/flatpak-builtins-info-remote.c:209 +msgid "Parent:" +msgstr "Överordnad:" + +#: app/flatpak-builtins-info.c:231 msgid "Location:" msgstr "Plats:" -#: app/flatpak-builtins-info.c:174 app/flatpak-builtins-info.c:273 +#: app/flatpak-builtins-info.c:232 app/flatpak-builtins-info.c:367 +#: app/flatpak-builtins-info-remote.c:211 msgid "Installed size:" msgstr "Installerad storlek:" -#: app/flatpak-builtins-info.c:179 +#: app/flatpak-builtins-info.c:237 app/flatpak-builtins-info-remote.c:216 msgid "Runtime:" msgstr "Exekvering:" -#: app/flatpak-builtins-info.c:184 +#: app/flatpak-builtins-info.c:242 msgid "Installed subdirectories:" msgstr "Installerade underkataloger:" -#: app/flatpak-builtins-info.c:269 +#: app/flatpak-builtins-info.c:363 msgid "Extension:" msgstr "Tillägg:" -#: app/flatpak-builtins-info.c:280 +#: app/flatpak-builtins-info.c:374 msgid "Subpaths:" msgstr "Undersökvägar:" -#: app/flatpak-builtins-install.c:57 -msgid "Don't pull, only install from local cache" -msgstr "Hämta inte, installera endast från lokal cache" +#: app/flatpak-builtins-info-remote.c:49 +msgid "Commit to show info for" +msgstr "Incheckning att visa information för" -#: app/flatpak-builtins-install.c:58 app/flatpak-builtins-update.c:57 -msgid "Don't deploy, only download to local cache" -msgstr "Distribuera inte, hämta bara ner till lokal cache" - -#: app/flatpak-builtins-install.c:59 -msgid "Don't install related refs" -msgstr "Installera inte relaterade ref:ar" - -#: app/flatpak-builtins-install.c:60 app/flatpak-builtins-update.c:59 -msgid "Don't verify/install runtime dependencies" -msgstr "Installera ej/verifiera ej exekveringsberoenden" - -#: app/flatpak-builtins-install.c:61 app/flatpak-builtins-update.c:60 -msgid "Don't use static deltas" -msgstr "Använd inte statiska delta" - -#: app/flatpak-builtins-install.c:63 app/flatpak-builtins-uninstall.c:49 -#: app/flatpak-builtins-update.c:62 +#: app/flatpak-builtins-info-remote.c:51 app/flatpak-builtins-install.c:64 +#: app/flatpak-builtins-uninstall.c:49 app/flatpak-builtins-update.c:62 msgid "Look for app with the specified name" msgstr "Sök efter program med det angivna namnet" -#: app/flatpak-builtins-install.c:64 +#: app/flatpak-builtins-info-remote.c:52 +msgid "Display log" +msgstr "Visa logg" + +#: app/flatpak-builtins-info-remote.c:55 +msgid "Show parent" +msgstr "Visa överordnad" + +#: app/flatpak-builtins-info-remote.c:122 +msgid "" +" REMOTE REF - Show information about an application or runtime in a remote" +msgstr "" +" REMOTE REF - visa information om ett program eller en exekveringsmiljö i " +"ett fjärrförråd" + +#: app/flatpak-builtins-info-remote.c:133 app/flatpak-builtins-install.c:499 +msgid "REMOTE and REF must be specified" +msgstr "FJÄRRFÖRRÅD och REF måste anges" + +#: app/flatpak-builtins-info-remote.c:210 +msgid "Download size:" +msgstr "Hämtningsstorlek:" + +#: app/flatpak-builtins-info-remote.c:223 +#, fuzzy +msgid "History:\n" +msgstr "Historik:" + +#: app/flatpak-builtins-info-remote.c:244 +msgid " Subject:" +msgstr " Ämne:" + +#: app/flatpak-builtins-info-remote.c:245 +msgid " Date:" +msgstr " Datum:" + +#: app/flatpak-builtins-info-remote.c:246 +msgid " Commit:" +msgstr " Incheckning:" + +#: app/flatpak-builtins-info-remote.c:292 +#, c-format +msgid "Warning: Commit %s has no flatpak metadata\n" +msgstr "" + +#: app/flatpak-builtins-install.c:58 +msgid "Don't pull, only install from local cache" +msgstr "Hämta inte, installera endast från lokal cache" + +#: app/flatpak-builtins-install.c:59 app/flatpak-builtins-update.c:57 +msgid "Don't deploy, only download to local cache" +msgstr "Distribuera inte, hämta bara ner till lokal cache" + +#: app/flatpak-builtins-install.c:60 +msgid "Don't install related refs" +msgstr "Installera inte relaterade ref:ar" + +#: app/flatpak-builtins-install.c:61 app/flatpak-builtins-update.c:59 +msgid "Don't verify/install runtime dependencies" +msgstr "Installera ej/verifiera ej exekveringsberoenden" + +#: app/flatpak-builtins-install.c:62 app/flatpak-builtins-update.c:60 +msgid "Don't use static deltas" +msgstr "Använd inte statiska delta" + +#: app/flatpak-builtins-install.c:65 msgid "Assume LOCATION is a .flatpak single-file bundle" msgstr "Anta att PLATS är en enfils .flatpak-bunt" -#: app/flatpak-builtins-install.c:65 +#: app/flatpak-builtins-install.c:66 msgid "Assume LOCATION is a .flatpakref application description" msgstr "Anta att PLATS är en programbeskrivning av typen .flatpakref" -#: app/flatpak-builtins-install.c:66 +#: app/flatpak-builtins-install.c:67 msgid "Check bundle signatures with GPG key from FILE (- for stdin)" msgstr "Kontrollera buntsignaturer med GPG-nyckel från FIL (- för standard in)" -#: app/flatpak-builtins-install.c:67 +#: app/flatpak-builtins-install.c:68 msgid "Only install this subpath" msgstr "Installera endast denna underkatalog" -#: app/flatpak-builtins-install.c:67 app/flatpak-builtins-update.c:64 -msgid "PATH" -msgstr "SÖKVÄG" - -#: app/flatpak-builtins-install.c:68 app/flatpak-builtins-update.c:65 +#: app/flatpak-builtins-install.c:69 app/flatpak-builtins-update.c:65 msgid "Automatically answer yes for all questions" msgstr "Svara automatiskt ja på alla frågor" -#: app/flatpak-builtins-install.c:210 +#: app/flatpak-builtins-install.c:70 +#, fuzzy +msgid "Uninstall first if already installed" +msgstr "%s incheckning %s redan installerat" + +#: app/flatpak-builtins-install.c:212 #, c-format msgid "" "This application depends on runtimes from:\n" @@ -1105,151 +1371,147 @@ msgstr "" "Konfigurera det som ett nytt fjärrförråd ”%s”" # sebras: how to translate in here? -#: app/flatpak-builtins-install.c:214 app/flatpak-builtins-install.c:340 +#: app/flatpak-builtins-install.c:216 app/flatpak-builtins-install.c:342 #, c-format msgid "Configuring %s as new remote '%s'" msgstr "Konfigurerar %s som ett nytt fjärrförråd ”%s”" -#: app/flatpak-builtins-install.c:262 +#: app/flatpak-builtins-install.c:264 msgid "Bundle filename must be specified" msgstr "Buntfilnamn måste anges" -#: app/flatpak-builtins-install.c:272 +#: app/flatpak-builtins-install.c:274 msgid "Remote bundles are not supported" msgstr "Fjärrbuntar stöds ej" -#: app/flatpak-builtins-install.c:336 +#: app/flatpak-builtins-install.c:338 #, c-format msgid "" "The remote '%s', at location %s contains additional applications.\n" -"Do you want to install other applications from here?" +"Should the remote be kept for future installations?" msgstr "" "Fjärrförråd ”%s” på plats %s innehåller ytterligare program.\n" -"Vill du installera andra program därifrån?" +"Vill du behålla fjärrförrådet för framtida installationer?" -#: app/flatpak-builtins-install.c:396 +#: app/flatpak-builtins-install.c:398 msgid "Filename or uri must be specified" msgstr "Filnamn eller uri måste anges" -#: app/flatpak-builtins-install.c:440 +#: app/flatpak-builtins-install.c:442 #, c-format msgid "Installing: %s\n" msgstr "Installerar: %s\n" -#: app/flatpak-builtins-install.c:470 +#: app/flatpak-builtins-install.c:474 msgid "LOCATION/REMOTE [REF...] - Install applications or runtimes" msgstr "PLATS/FJÄRRFÖRRÅD [REF…] - Installera program eller exekveringsmiljöer" -#: app/flatpak-builtins-install.c:491 -msgid "REMOTE and REF must be specified" -msgstr "FJÄRRFÖRRÅD och REF måste anges" - -#: app/flatpak-builtins-list.c:49 +#: app/flatpak-builtins-list.c:43 msgid "Show extra information" msgstr "Visa extra information" -#: app/flatpak-builtins-list.c:50 +#: app/flatpak-builtins-list.c:44 msgid "List installed runtimes" msgstr "Lista installerade exekveringsmiljöer" -#: app/flatpak-builtins-list.c:51 +#: app/flatpak-builtins-list.c:45 msgid "List installed applications" msgstr "Lista installera program" -#: app/flatpak-builtins-list.c:52 +#: app/flatpak-builtins-list.c:46 msgid "Arch to show" msgstr "Ark att visa" -#: app/flatpak-builtins-list.c:53 app/flatpak-builtins-ls-remote.c:49 +#: app/flatpak-builtins-list.c:47 app/flatpak-builtins-ls-remote.c:50 msgid "List all refs (including locale/debug)" msgstr "Lista alla referenser (inklusive locale/debug)" -#: app/flatpak-builtins-list.c:131 app/flatpak-builtins-ls-remote.c:129 +#: app/flatpak-builtins-list.c:125 app/flatpak-builtins-ls-remote.c:174 #: app/flatpak-builtins-repo.c:98 msgid "Ref" msgstr "Ref" -#: app/flatpak-builtins-list.c:134 app/flatpak-builtins-ls-remote.c:131 +#: app/flatpak-builtins-list.c:128 app/flatpak-builtins-ls-remote.c:176 msgid "Origin" msgstr "Origin" -#: app/flatpak-builtins-list.c:135 +#: app/flatpak-builtins-list.c:129 msgid "Active commit" msgstr "Aktiv incheckning" -#: app/flatpak-builtins-list.c:136 +#: app/flatpak-builtins-list.c:130 msgid "Latest commit" msgstr "Senaste incheckning" -#: app/flatpak-builtins-list.c:137 app/flatpak-builtins-ls-remote.c:133 +#: app/flatpak-builtins-list.c:131 app/flatpak-builtins-ls-remote.c:178 msgid "Installed size" msgstr "Installerad storlek" -#: app/flatpak-builtins-list.c:139 app/flatpak-builtins-list-remotes.c:112 +#: app/flatpak-builtins-list.c:133 app/flatpak-builtins-list-remotes.c:73 msgid "Options" msgstr "Flaggor" -#: app/flatpak-builtins-list.c:375 +#: app/flatpak-builtins-list.c:305 msgid " - List installed apps and/or runtimes" msgstr " - Lista installerade program och/eller exekveringsmiljöer" -#: app/flatpak-builtins-list-remotes.c:46 +#: app/flatpak-builtins-list-remotes.c:40 msgid "Show remote details" msgstr "Visa detaljer för fjärrförrådet" -#: app/flatpak-builtins-list-remotes.c:47 +#: app/flatpak-builtins-list-remotes.c:41 msgid "Show disabled remotes" msgstr "Visa inaktiverade fjärrförråd" -#: app/flatpak-builtins-list-remotes.c:59 +#: app/flatpak-builtins-list-remotes.c:53 msgid " - List remote repositories" msgstr " - Lista fjärrförråd" -#: app/flatpak-builtins-list-remotes.c:105 +#: app/flatpak-builtins-list-remotes.c:66 msgid "Name" msgstr "Namn" -#: app/flatpak-builtins-list-remotes.c:108 +#: app/flatpak-builtins-list-remotes.c:69 msgid "Title" msgstr "Titel" -#: app/flatpak-builtins-list-remotes.c:110 +#: app/flatpak-builtins-list-remotes.c:71 msgid "Priority" msgstr "Prioritet" -#: app/flatpak-builtins-ls-remote.c:44 +#: app/flatpak-builtins-ls-remote.c:45 msgid "Show arches and branches" msgstr "Visa arkitekturer och grenar" -#: app/flatpak-builtins-ls-remote.c:45 +#: app/flatpak-builtins-ls-remote.c:46 msgid "Show only runtimes" msgstr "Visa endast exekveringsmiljöer" -#: app/flatpak-builtins-ls-remote.c:46 +#: app/flatpak-builtins-ls-remote.c:47 msgid "Show only apps" msgstr "Visa endast program" -#: app/flatpak-builtins-ls-remote.c:47 +#: app/flatpak-builtins-ls-remote.c:48 msgid "Show only those where updates are available" msgstr "Visa endast de där uppdateringar finns tillgängliga" -#: app/flatpak-builtins-ls-remote.c:48 +#: app/flatpak-builtins-ls-remote.c:49 msgid "Limit to this arch (* for all)" msgstr "Begränsa till denna ark (* för alla)" -#: app/flatpak-builtins-ls-remote.c:74 -msgid " REMOTE - Show available runtimes and applications" -msgstr " FJÄRRFÖRRÅD - Visa tillgängliga exekveringsmiljöer och program" +#: app/flatpak-builtins-ls-remote.c:96 +msgid " [REMOTE] - Show available runtimes and applications" +msgstr " [FJÄRRFÖRRÅD] - Visa tillgängliga exekveringsmiljöer och program" -#: app/flatpak-builtins-ls-remote.c:132 +#: app/flatpak-builtins-ls-remote.c:177 msgid "Commit" msgstr "Incheckning" -#: app/flatpak-builtins-ls-remote.c:134 +#: app/flatpak-builtins-ls-remote.c:179 msgid "Download size" msgstr "Hämtningsstorlek" -#: app/flatpak-builtins-ls-remote.c:245 +#: app/flatpak-builtins-ls-remote.c:304 msgid "No ref information available in repository" msgstr "Ingen ref-information tillgänglig i arkiv" @@ -1257,28 +1519,63 @@ msgstr "Ingen ref-information tillgänglig i arkiv" msgid "Arch to make current for" msgstr "Ark att göra aktuell för" -#: app/flatpak-builtins-make-current.c:57 +#: app/flatpak-builtins-make-current.c:58 msgid "APP BRANCH - Make branch of application current" msgstr "PROG GREN - Gör gren av program aktuell" -#: app/flatpak-builtins-make-current.c:64 app/flatpak-builtins-override.c:63 -#: app/flatpak-builtins-run.c:105 +#: app/flatpak-builtins-make-current.c:69 app/flatpak-builtins-run.c:105 msgid "APP must be specified" msgstr "PROG måste anges" -#: app/flatpak-builtins-make-current.c:79 +#: app/flatpak-builtins-make-current.c:84 msgid "BRANCH must be specified" msgstr "GREN måste anges" -#: app/flatpak-builtins-make-current.c:92 +#: app/flatpak-builtins-make-current.c:97 #, c-format msgid "App %s branch %s is not installed" msgstr "Program %s gren %s är inte installerad" -#: app/flatpak-builtins-override.c:53 -msgid "APP - Override settings for application" +#: app/flatpak-builtins-override.c:54 +#, fuzzy +msgid "[APP] - Override settings [for application]" msgstr "PROG - Åsidosätt inställningar för program" +#: app/flatpak-builtins-repo.c:48 +#, c-format +msgid "Title: %s\n" +msgstr "Titel: %s\n" + +#: app/flatpak-builtins-repo.c:51 +#, c-format +msgid "Collection ID: %s\n" +msgstr "Samlings-ID: %s\n" + +#: app/flatpak-builtins-repo.c:54 +#, c-format +msgid "Default branch: %s\n" +msgstr "Standardgren: %s\n" + +#: app/flatpak-builtins-repo.c:57 +#, c-format +msgid "Redirect URL: %s\n" +msgstr "Omflyttnings-URL: %s\n" + +#: app/flatpak-builtins-repo.c:60 +#, c-format +msgid "Redirect collection ID: %s\n" +msgstr "Dirigera om samlings-ID: %s\n" + +#: app/flatpak-builtins-repo.c:68 +#, c-format +msgid "GPG key hash: %s\n" +msgstr "GPG-nyckelhash: %s\n" + +#: app/flatpak-builtins-repo.c:77 +#, c-format +msgid "%zd branches\n" +msgstr "%zd grenar\n" + #: app/flatpak-builtins-repo.c:99 msgid "Installed" msgstr "Installerad" @@ -1299,7 +1596,7 @@ msgstr "Lista grenar i arkivet" msgid "Print metadata for a branch" msgstr "Skriv ut metadata för en gren" -#: app/flatpak-builtins-repo.c:167 +#: app/flatpak-builtins-repo.c:168 msgid "LOCATION - Repository maintenance" msgstr "PLATS - underhåll av arkiv" @@ -1412,14 +1709,6 @@ msgstr "Exekveringsmiljö att använda" msgid "Runtime version to use" msgstr "Version av exekveringsmiljö att använda" -#: app/flatpak-builtins-run.c:58 -msgid "Log session bus calls" -msgstr "Logga sessionsbussanrop" - -#: app/flatpak-builtins-run.c:59 -msgid "Log system bus calls" -msgstr "Logga systembussanrop" - #: app/flatpak-builtins-run.c:60 msgid "Log accessibility bus calls" msgstr "Logga hjälpmedelsbussanrop" @@ -1432,6 +1721,38 @@ msgstr "Aktivera filvidarebefordran" msgid "APP [args...] - Run an app" msgstr "PROG [argument…] - Kör ett program" +#: app/flatpak-builtins-search.c:239 +msgid "TEXT - Search remote apps/runtimes for text" +msgstr "TEXT - Sök i fjärrprogram/exekveringsmiljöer efter text" + +#: app/flatpak-builtins-search.c:249 +msgid "TEXT must be specified" +msgstr "TEXT måste anges" + +#: app/flatpak-builtins-search.c:305 +msgid "Application ID" +msgstr "Program-ID" + +#: app/flatpak-builtins-search.c:306 +msgid "Version" +msgstr "Version" + +#: app/flatpak-builtins-search.c:308 +msgid "Branch" +msgstr "Gren" + +#: app/flatpak-builtins-search.c:310 +msgid "Remotes" +msgstr "Fjärrförråd" + +#: app/flatpak-builtins-search.c:311 +msgid "Description" +msgstr "Beskrivning" + +#: app/flatpak-builtins-search.c:320 +msgid "No matches found" +msgstr "Inga träffar" + #: app/flatpak-builtins-uninstall.c:44 msgid "Arch to uninstall" msgstr "Ark att avinstallera" @@ -1448,19 +1769,24 @@ msgstr "Avinstallera inte relaterade ref:ar" msgid "Remove files even if running" msgstr "Ta bort filer även om de kör" -#: app/flatpak-builtins-uninstall.c:69 +#: app/flatpak-builtins-uninstall.c:70 msgid "REF... - Uninstall an application" msgstr "REF… - Avinstallera ett program" -#: app/flatpak-builtins-uninstall.c:76 +#: app/flatpak-builtins-uninstall.c:81 msgid "Must specify at least one REF" msgstr "Måste specificera åtminstone en REF" -#: app/flatpak-builtins-uninstall.c:129 app/flatpak-transaction.c:340 +#: app/flatpak-builtins-uninstall.c:134 app/flatpak-transaction.c:355 #, c-format msgid "Warning: Problem looking for related refs: %s\n" msgstr "Varning: Problem vid sökning efter relaterade ref:ar: %s\n" +#: app/flatpak-builtins-uninstall.c:164 +#, c-format +msgid "Uninstalling: %s\n" +msgstr "Avinstallerar: %s\n" + #: app/flatpak-builtins-update.c:53 msgid "Arch to update for" msgstr "Ark att uppdatera för" @@ -1469,10 +1795,6 @@ msgstr "Ark att uppdatera för" msgid "Commit to deploy" msgstr "Incheckning att distribuera" -#: app/flatpak-builtins-update.c:54 -msgid "COMMIT" -msgstr "INCHECKNING" - #: app/flatpak-builtins-update.c:55 msgid "Remove old files even if running" msgstr "Ta bort gamla filer även om de kör" @@ -1493,42 +1815,93 @@ msgstr "Uppdatera appstream för fjärrförråd" msgid "Only update this subpath" msgstr "Uppdatera endast denna undersökväg" -#: app/flatpak-builtins-update.c:95 -#, c-format -msgid "Updating appstream for remote %s\n" -msgstr "Uppdatera appstream för fjärrförrådet %s\n" - -#: app/flatpak-builtins-update.c:133 +#: app/flatpak-builtins-update.c:83 msgid "[REF...] - Update applications or runtimes" msgstr "[REF…]] - Uppdatera ett program eller exekveringsmiljö" +#: app/flatpak-builtins-update.c:119 +msgid "Looking for updates...\n" +msgstr "Söker efter uppdateringar...\n" + +#: app/flatpak-builtins-utils.c:365 +#, c-format +msgid "Remote ‘%s’ found in multiple installations:\n" +msgstr "" + +#: app/flatpak-builtins-utils.c:372 +#, fuzzy +msgid "Which do you want to use (0 to abort)?" +msgstr "Vilka vill du installera (0 för att avbryta)?" + +#: app/flatpak-builtins-utils.c:374 +#, c-format +msgid "No remote chosen to resolve ‘%s’ which exists in multiple installations" +msgstr "" + +#: app/flatpak-builtins-utils.c:479 app/flatpak-builtins-utils.c:481 +#, fuzzy, c-format +msgid "Updating appstream data for user remote %s\n" +msgstr "Uppdatera appstream för fjärrförrådet %s\n" + +#: app/flatpak-builtins-utils.c:486 app/flatpak-builtins-utils.c:488 +#, fuzzy, c-format +msgid "Updating appstream data for remote %s\n" +msgstr "Uppdatera appstream för fjärrförrådet %s\n" + +#: app/flatpak-builtins-utils.c:493 +#, c-format +msgid "Error updating: %s\n" +msgstr "Fel vid uppdatering: %s\n" + +#: app/flatpak-builtins-utils.c:526 +#, fuzzy, c-format +msgid "Remote \"%s\" not found" +msgstr "Data inte funnen" + #. translators: please keep the leading space -#: app/flatpak-main.c:61 +#: app/flatpak-main.c:62 msgid " Manage installed apps and runtimes" msgstr " Hantera installerade program och exekveringsmiljöer" -#: app/flatpak-main.c:62 +#: app/flatpak-main.c:63 msgid "Install an application or runtime" msgstr "Installera ett program eller en exekveringsmiljö" -#: app/flatpak-main.c:63 +#: app/flatpak-main.c:64 msgid "Update an installed application or runtime" msgstr "Uppdatera ett installerat program eller en exekveringsmiljö" -#: app/flatpak-main.c:64 +#: app/flatpak-main.c:65 msgid "Uninstall an installed application or runtime" msgstr "Avinstallera ett installerat program eller en exekveringsmiljö" -#: app/flatpak-main.c:65 +#: app/flatpak-main.c:66 msgid "List installed apps and/or runtimes" msgstr "Lista installerade program och/eller exekveringsmiljöer" -#: app/flatpak-main.c:66 +#: app/flatpak-main.c:67 msgid "Show info for installed app or runtime" msgstr "Visa information för installerade program eller exekveringsmiljöer" +#: app/flatpak-main.c:68 +msgid "Configure flatpak" +msgstr "Konfigurera flatpak" + #. translators: please keep the leading newline and space -#: app/flatpak-main.c:69 +#: app/flatpak-main.c:71 +msgid "" +"\n" +" Finding applications and runtimes" +msgstr "" +"\n" +"Hitta program eller exekveringsmiljöer" + +#: app/flatpak-main.c:72 +msgid "Search for remote apps/runtimes" +msgstr "Sök efter fjärrprogram/exekveringsmiljöer" + +#. translators: please keep the leading newline and space +#: app/flatpak-main.c:75 msgid "" "\n" " Running applications" @@ -1536,24 +1909,24 @@ msgstr "" "\n" " Körande program" -#: app/flatpak-main.c:70 +#: app/flatpak-main.c:76 msgid "Run an application" msgstr "Kör ett program" -#: app/flatpak-main.c:71 +#: app/flatpak-main.c:77 msgid "Override permissions for an application" msgstr "Åsidosätt rättigheter för ett program" -#: app/flatpak-main.c:72 +#: app/flatpak-main.c:78 msgid "Specify default version to run" msgstr "Ange standardversion att köra" -#: app/flatpak-main.c:73 +#: app/flatpak-main.c:79 msgid "Enter the namespace of a running application" msgstr "Ange namnrymden för ett körande program" #. translators: please keep the leading newline and space -#: app/flatpak-main.c:76 +#: app/flatpak-main.c:82 msgid "" "\n" " Manage file access" @@ -1561,24 +1934,24 @@ msgstr "" "\n" " Hantera filåtkomst" -#: app/flatpak-main.c:77 +#: app/flatpak-main.c:83 msgid "Grant an application access to a specific file" msgstr "Ge ett program tillgång till en specifik fil" -#: app/flatpak-main.c:78 +#: app/flatpak-main.c:84 msgid "Revoke access to a specific file" msgstr "Återkalla tillgång till en specifik fil" -#: app/flatpak-main.c:79 +#: app/flatpak-main.c:85 msgid "Show information about a specific file" msgstr "Visa information om en specifik fil" -#: app/flatpak-main.c:80 +#: app/flatpak-main.c:86 msgid "List exported files" msgstr "Lista exporterade filer" #. translators: please keep the leading newline and space -#: app/flatpak-main.c:83 +#: app/flatpak-main.c:89 msgid "" "\n" " Manage remote repositories" @@ -1586,28 +1959,32 @@ msgstr "" "\n" " Hantera fjärrförråd" -#: app/flatpak-main.c:84 +#: app/flatpak-main.c:90 msgid "List all configured remotes" msgstr "Lista alla konfigurerade fjärrförråd" -#: app/flatpak-main.c:85 +#: app/flatpak-main.c:91 msgid "Add a new remote repository (by URL)" msgstr "Lägg till ett nytt fjärrförråd (efter URL)" -#: app/flatpak-main.c:86 +#: app/flatpak-main.c:92 msgid "Modify properties of a configured remote" msgstr "Modifiera egenskaper för ett konfigurerat fjärrförråd" -#: app/flatpak-main.c:87 +#: app/flatpak-main.c:93 msgid "Delete a configured remote" msgstr "Ta bort ett konfigurerat fjärrförråd" -#: app/flatpak-main.c:89 +#: app/flatpak-main.c:95 msgid "List contents of a configured remote" msgstr "Lista innehåll för ett konfigurerat fjärrförrådet" +#: app/flatpak-main.c:96 +msgid "Show information about a remote app or runtime" +msgstr "Visa information om ett fjärrprogram eller en exekveringsmiljö" + #. translators: please keep the leading newline and space -#: app/flatpak-main.c:92 +#: app/flatpak-main.c:99 msgid "" "\n" " Build applications" @@ -1615,508 +1992,286 @@ msgstr "" "\n" " Bygg program" -#: app/flatpak-main.c:93 +#: app/flatpak-main.c:100 msgid "Initialize a directory for building" msgstr "Initiera en katalog för bygge" -#: app/flatpak-main.c:94 +#: app/flatpak-main.c:101 msgid "Run a build command inside the build dir" msgstr "Kör ett byggkommando inuti byggkatalogen" -#: app/flatpak-main.c:95 +#: app/flatpak-main.c:102 msgid "Finish a build dir for export" msgstr "Avsluta en byggkatalog för export" -#: app/flatpak-main.c:96 +#: app/flatpak-main.c:103 msgid "Export a build dir to a repository" msgstr "Exportera en byggkatalog till ett förråd" -#: app/flatpak-main.c:97 -msgid "Create a bundle file from a build directory" +#: app/flatpak-main.c:104 +#, fuzzy +msgid "Create a bundle file from a ref in a local repository" msgstr "Skapa en buntfil från en byggkatalog" -#: app/flatpak-main.c:98 +#: app/flatpak-main.c:105 msgid "Import a bundle file" msgstr "Importera en buntfil" -#: app/flatpak-main.c:99 +#: app/flatpak-main.c:106 msgid "Sign an application or runtime" msgstr "Signera ett program eller en exekveringsmiljö" -#: app/flatpak-main.c:100 +#: app/flatpak-main.c:107 msgid "Update the summary file in a repository" msgstr "Uppdatera sammanfattningsfilen i ett förråd" -#: app/flatpak-main.c:101 +#: app/flatpak-main.c:108 msgid "Create new commit based on existing ref" msgstr "Skapa ny incheckning baserad på existerande ref" -#: app/flatpak-main.c:102 +#: app/flatpak-main.c:109 msgid "Print information about a repo" msgstr "Skriv ut information om ett arkiv" -#: app/flatpak-main.c:119 -#, fuzzy +#: app/flatpak-main.c:126 msgid "Print debug information during command processing, -vv for more detail" -msgstr "Skriv ut felsökningsinformation under kommandohantering" +msgstr "" +"Skriv ut felsökningsinformation under kommandohantering, -vv för ytterligare " +"detaljer" -#: app/flatpak-main.c:120 +#: app/flatpak-main.c:127 msgid "Print OSTree debug information during command processing" msgstr "Skriv ut OSTree-felsökningsinformation under kommandohantering" -#: app/flatpak-main.c:121 +#: app/flatpak-main.c:128 msgid "Show help options" msgstr "Visa hjälpalternativ" -#: app/flatpak-main.c:126 +#: app/flatpak-main.c:133 msgid "Print version information and exit" msgstr "Skriv ut versionsinformation och avsluta" -#: app/flatpak-main.c:127 +#: app/flatpak-main.c:134 msgid "Print default arch and exit" msgstr "Skriv ut standardarkitektur och avsluta" -#: app/flatpak-main.c:128 +#: app/flatpak-main.c:135 msgid "Print supported arches and exit" msgstr "Skriv ut arkitekturer som stöds och avsluta" -#: app/flatpak-main.c:129 +#: app/flatpak-main.c:136 msgid "Print active gl drivers and exit" msgstr "Skriv ut aktiva gl-drivrutiner och avsluta" -#: app/flatpak-main.c:134 +#: app/flatpak-main.c:141 msgid "Work on user installations" msgstr "Arbeta på användarinstallationer" -#: app/flatpak-main.c:135 +#: app/flatpak-main.c:142 msgid "Work on system-wide installations (default)" msgstr "Arbeta på systeminstallationer (standard)" -#: app/flatpak-main.c:136 -msgid "Work on a specific system-wide installation" +#: app/flatpak-main.c:143 +#, fuzzy +msgid "Work on specific system-wide installation(s)" msgstr "Arbeta på en specifik systemomfattande installation" -#: app/flatpak-main.c:136 +#: app/flatpak-main.c:143 msgid "NAME" msgstr "NAMN" -#: app/flatpak-main.c:162 +#: app/flatpak-main.c:169 msgid "Builtin Commands:" msgstr "Inbyggda kommandon:" -#: app/flatpak-main.c:388 +#: app/flatpak-main.c:370 +msgid "" +"The --installation option was used multiple times for a command that works " +"on one installation" +msgstr "" + +#: app/flatpak-main.c:489 #, c-format msgid "Unknown command '%s'" msgstr "Okänt kommando ”%s”" -#: app/flatpak-main.c:396 +#: app/flatpak-main.c:497 msgid "No command specified" msgstr "Inget kommando angivet" -#: app/flatpak-main.c:514 +#: app/flatpak-main.c:615 msgid "error:" msgstr "fel:" -#: app/flatpak-transaction.c:302 +#: app/flatpak-transaction.c:313 +#, c-format +msgid "Found in remote %s\n" +msgstr "Hittad i fjärrförråd %s\n" + +#: app/flatpak-transaction.c:317 #, c-format msgid "Found in remote %s, do you want to install it?" msgstr "Hittades i fjärrförrådet %s, vill du installera den?" -#: app/flatpak-transaction.c:307 +#: app/flatpak-transaction.c:322 msgid "Found in several remotes:\n" msgstr "Hittades i flera fjärrförråd;\n" -#: app/flatpak-transaction.c:312 +#: app/flatpak-transaction.c:327 msgid "Which do you want to install (0 to abort)?" msgstr "Vilka vill du installera (0 för att avbryta)?" -#: app/flatpak-transaction.c:402 +#: app/flatpak-transaction.c:417 #, c-format msgid "Required runtime for %s (%s) is not installed, searching...\n" msgstr "Krävd exekveringsmiljö för %s (%s) inte installerad, söker…\n" -#: app/flatpak-transaction.c:408 +#: app/flatpak-transaction.c:423 #, c-format msgid "The required runtime %s was not found in a configured remote.\n" msgstr "" "Den krävda exekveringsmiljön %s hittades inte i konfigurerat fjärrförråd.\n" -#: app/flatpak-transaction.c:469 common/flatpak-dir.c:1127 -#: common/flatpak-dir.c:1433 common/flatpak-dir.c:1456 -#: common/flatpak-dir.c:1478 common/flatpak-dir.c:10136 -#: common/flatpak-utils.c:1272 common/flatpak-utils.c:1366 +#: app/flatpak-transaction.c:506 common/flatpak-dir.c:1160 +#: common/flatpak-dir.c:1479 common/flatpak-dir.c:1502 +#: common/flatpak-dir.c:1524 common/flatpak-dir.c:10655 +#: common/flatpak-utils.c:1312 common/flatpak-utils.c:1406 #, c-format msgid "%s not installed" msgstr "%s inte installerad" -#: app/flatpak-transaction.c:475 +#: app/flatpak-transaction.c:512 #, c-format msgid "Remote %s disabled, ignoring %s update" msgstr "Fjärrförråd %s inaktiverat, ignorerar %s uppdatering" -#: app/flatpak-transaction.c:485 +#: app/flatpak-transaction.c:525 #, c-format msgid "%s already installed, skipping\n" msgstr "%s redan installerad, ignorerar\n" -#: app/flatpak-transaction.c:529 +#: app/flatpak-transaction.c:531 +#, fuzzy, c-format +msgid "%s is already installed from other remote (%s)" +msgstr "%s incheckning %s redan installerat" + +#: app/flatpak-transaction.c:543 +#, c-format +msgid "Warning: Can't find dependencies: %s\n" +msgstr "Varning: Det går inte att finna beroenden: %s\n" + +#: app/flatpak-transaction.c:570 +#, c-format +msgid "Invalid require-flatpak argument %s\n" +msgstr "Ogiltigt argument för require-flatpak %s\n" + +#: app/flatpak-transaction.c:576 #, c-format msgid "%s needs a later flatpak version (%s)" msgstr "%s behöver en senare flatpak-version (%s)" -#: app/flatpak-transaction.c:704 +#: app/flatpak-transaction.c:688 +#, c-format +msgid "Error updating remote metadata for '%s': %s\n" +msgstr "Fel vid uppdatering av fjärrmetadata för ”%s”: %s\n" + +#: app/flatpak-transaction.c:744 msgid "install" msgstr "installera" -#: app/flatpak-transaction.c:705 +#: app/flatpak-transaction.c:746 +#, fuzzy, c-format +msgid "Installing for user: %s from %s\n" +msgstr "Installerar: %s från %s\n" + +#: app/flatpak-transaction.c:748 #, c-format msgid "Installing: %s from %s\n" msgstr "Installerar: %s från %s\n" -#: app/flatpak-transaction.c:721 +#: app/flatpak-transaction.c:765 msgid "update" msgstr "uppdatera" -#: app/flatpak-transaction.c:729 +#: app/flatpak-transaction.c:774 +#, fuzzy, c-format +msgid "Updating for user: %s from %s\n" +msgstr "Uppdaterar: %s från %s\n" + +#: app/flatpak-transaction.c:776 #, c-format msgid "Updating: %s from %s\n" msgstr "Uppdaterar: %s från %s\n" -#: app/flatpak-transaction.c:749 +#: app/flatpak-transaction.c:796 #, c-format msgid "Now at %s.\n" msgstr "Nu på %s.\n" -#: app/flatpak-transaction.c:755 +#: app/flatpak-transaction.c:802 msgid "No updates.\n" msgstr "Inga uppdateringar.\n" -#: app/flatpak-transaction.c:773 +#: app/flatpak-transaction.c:820 msgid "install bundle" -msgstr "Installera bunt" +msgstr "installera bunt" -#: app/flatpak-transaction.c:774 +#: app/flatpak-transaction.c:822 +#, fuzzy, c-format +msgid "Installing for user: %s from bundle %s\n" +msgstr "Installerar: %s från bunten %s\n" + +#: app/flatpak-transaction.c:824 #, c-format msgid "Installing: %s from bundle %s\n" msgstr "Installerar: %s från bunten %s\n" -#: app/flatpak-transaction.c:786 +#: app/flatpak-transaction.c:836 #, c-format msgid "Warning: Failed to %s %s: %s\n" msgstr "Varning: Misslyckades med %s %s: %s\n" -#: app/flatpak-transaction.c:791 +#: app/flatpak-transaction.c:841 #, c-format msgid "Error: Failed to %s %s: %s\n" msgstr "Fel: Misslyckades med %s %s: %s\n" -#: app/flatpak-transaction.c:796 +#: app/flatpak-transaction.c:846 msgid "One or more operations failed" msgstr "En eller flera åtgärder misslyckades" -#: common/flatpak-dir.c:1015 -#, c-format -msgid "No overrides found for %s" -msgstr "Inga åsidosättningar funna för %s" - -#: common/flatpak-dir.c:1611 -#, c-format -msgid "While opening repository %s: " -msgstr "Medan förråd %s öppnas: " - -#: common/flatpak-dir.c:1770 common/flatpak-dir.c:5109 -msgid "Can't create deploy directory" -msgstr "Kan inte skapa distributionskatalog" - -#: common/flatpak-dir.c:2450 -#, c-format -msgid "Invalid sha256 for extra data uri %s" -msgstr "Ogiltig sha256 för extra data-uri %s" - -#: common/flatpak-dir.c:2455 -#, c-format -msgid "Empty name for extra data uri %s" -msgstr "Tomt namn för extra data-uri %s" - -#: common/flatpak-dir.c:2462 -#, c-format -msgid "Unsupported extra data uri %s" -msgstr "Extra data-uri som ej stöds %s" - -#: common/flatpak-dir.c:2476 -#, c-format -msgid "Failed to load local extra-data %s: %s" -msgstr "Misslyckades med att läsa lokala extra data %s: %s" - -#: common/flatpak-dir.c:2479 -#, c-format -msgid "Wrong size for extra-data %s" -msgstr "Fel storlek för extra data %s" - -#: common/flatpak-dir.c:2494 -#, c-format -msgid "While downloading %s: " -msgstr "Medan %s hämtas: " - -#: common/flatpak-dir.c:2501 -#, c-format -msgid "Wrong size for extra data %s" -msgstr "Fel storlek för extra data %s" - -#: common/flatpak-dir.c:2512 -#, c-format -msgid "Invalid checksum for extra data %s" -msgstr "Ogiltig kontrollsumma för extra data %s" - -#: common/flatpak-dir.c:2768 -#, c-format -msgid "%s commit %s already installed" -msgstr "%s incheckning %s redan installerat" - -#: common/flatpak-dir.c:3097 common/flatpak-dir.c:3411 -#, c-format -msgid "While pulling %s from remote %s: " -msgstr "Medan %s hämtas från fjärrförrådet %s: " - -# sebras: how to translate in here? -#: common/flatpak-dir.c:3296 -#, c-format -msgid "Can't find %s in remote %s" -msgstr "Kan inte hitta %s i fjärrförrådet %s" - -#: common/flatpak-dir.c:3969 -msgid "Not enough memory" -msgstr "Inte tillräckligt med minne" - -#: common/flatpak-dir.c:3988 -msgid "Failed to read from exported file" -msgstr "Misslyckades med att läsa från exporterad fil" - -#: common/flatpak-dir.c:4179 -msgid "Error reading mimetype xml file" -msgstr "Fel vid läsning av xml-fil för mimetyp" - -#: common/flatpak-dir.c:4184 -msgid "Invalid mimetype xml file" -msgstr "Ogiltig xml-fil för mimetyp" - -#: common/flatpak-dir.c:4726 -msgid "While getting detached metadata: " -msgstr "Under hämtning av frånkopplad metadata: " - -#: common/flatpak-dir.c:4744 -msgid "While creating extradir: " -msgstr "Under tiden extrakatalog skapas: " - -#: common/flatpak-dir.c:4765 -msgid "Invalid sha256 for extra data" -msgstr "Ogiltigt sha256 för extradata" - -#: common/flatpak-dir.c:4794 -msgid "Wrong size for extra data" -msgstr "Fel storlek för extra data" - -#: common/flatpak-dir.c:4798 -msgid "Invalid checksum for extra data" -msgstr "Ogiltig kontrollsumma för extra data" - -#: common/flatpak-dir.c:4807 -#, c-format -msgid "While writing extra data file '%s': " -msgstr "Fel vid skrivning av extra data-filen ”%s”: " - -#: common/flatpak-dir.c:4991 -#, c-format -msgid "apply_extra script failed, exit status %d" -msgstr "misslyckades med skriptet apply_extra, avslutningsstatus %d" - -#: common/flatpak-dir.c:5068 -#, c-format -msgid "While trying to resolve ref %s: " -msgstr "Under upplösningsförsök för ref %s: " - -#: common/flatpak-dir.c:5083 -#, c-format -msgid "%s is not available" -msgstr "%s är inte tillgängligt" - -#: common/flatpak-dir.c:5098 common/flatpak-dir.c:5436 -#: common/flatpak-dir.c:6204 common/flatpak-dir.c:6217 -#: common/flatpak-dir.c:6293 -#, c-format -msgid "%s branch %s already installed" -msgstr "%s gren %s redan installerat" - -#: common/flatpak-dir.c:5117 -#, c-format -msgid "Failed to read commit %s: " -msgstr "Misslyckades läsa incheckning %s: " - -#: common/flatpak-dir.c:5137 -#, c-format -msgid "While trying to checkout %s into %s: " -msgstr "Medan utcheckningsförsök av %s i %s: " - -#: common/flatpak-dir.c:5162 common/flatpak-dir.c:5193 -msgid "While trying to checkout metadata subpath: " -msgstr "Under utcheckningsförsök av metadataundersökväg: " - -#: common/flatpak-dir.c:5203 -msgid "While trying to remove existing extra dir: " -msgstr "Under försök att ta bort extra existerande katalog: " - -#: common/flatpak-dir.c:5214 -msgid "While trying to apply extra data: " -msgstr "Under försök att tillämpa extra data: " - -#: common/flatpak-dir.c:5241 -#, fuzzy, c-format -msgid "Invalid deployed ref %s: " -msgstr "Ogiltig pid %s" - -#: common/flatpak-dir.c:5248 -#, fuzzy, c-format -msgid "Invalid commit ref %s: " -msgstr "Ogiltig pid %s" - -#: common/flatpak-dir.c:5256 -#, fuzzy, c-format -msgid "Deployed ref %s kind does not match commit (%s)" -msgstr "Distribuerad ref %s matchar inte incheckning (%s)" - -#: common/flatpak-dir.c:5264 -#, fuzzy, c-format -msgid "Deployed ref %s name does not match commit (%s)" -msgstr "Distribuerad ref %s matchar inte incheckning (%s)" - -#: common/flatpak-dir.c:5272 -#, fuzzy, c-format -msgid "Deployed ref %s arch does not match commit (%s)" -msgstr "Distribuerad ref %s matchar inte incheckning (%s)" - -#: common/flatpak-dir.c:5278 -#, fuzzy, c-format -msgid "Deployed ref %s branch does not match commit (%s)" -msgstr "Distribuerad ref %s matchar inte incheckning (%s)" - -#: common/flatpak-dir.c:5284 -#, c-format -msgid "Deployed ref %s does not match commit (%s)" -msgstr "Distribuerad ref %s matchar inte incheckning (%s)" - -#: common/flatpak-dir.c:5303 -msgid "Deployed metadata does not match commit" -msgstr "Distribuerad metadata matchar inte incheckning" - -#: common/flatpak-dir.c:6065 -#, c-format -msgid "This version of %s is already installed" -msgstr "Denna version av %s är redan installerad" - -#: common/flatpak-dir.c:6072 -msgid "Can't change remote during bundle install" -msgstr "Kan inte ändra fjärrförråd under buntinstallering" - -#: common/flatpak-dir.c:6615 -#, c-format -msgid "%s branch %s is not installed" -msgstr "%s gren %s är inte installerad" - -#: common/flatpak-dir.c:6859 -#, c-format -msgid "%s branch %s not installed" -msgstr "%s gren %s inte installerad" - -#: common/flatpak-dir.c:7818 -#, c-format -msgid "Nothing matches %s" -msgstr "Ingenting matchar %s" - -# sebras: how to translate in here? -#: common/flatpak-dir.c:7900 -#, fuzzy, c-format -msgid "Can't find ref %s%s%s%s%s" -msgstr "Kan inte hitta %s%s%s%s%s i fjärrförrådet %s" - -#: common/flatpak-dir.c:7942 -#, fuzzy, c-format -msgid "Error searching remote %s: %s" -msgstr "Fel: Misslyckades med %s %s: %s\n" - -#: common/flatpak-dir.c:7987 -#, fuzzy, c-format -msgid "Error searching local repository: %s" -msgstr "Behåll ref i lokalt förråd" - -#: common/flatpak-dir.c:8113 -#, c-format -msgid "%s %s not installed" -msgstr "%s %s inte installerad" - -#: common/flatpak-dir.c:8280 -#, c-format -msgid "Could not find installation %s" -msgstr "Kunde inte hitta installationen %s" - -#: common/flatpak-dir.c:8809 -#, c-format -msgid "Runtime %s, branch %s is already installed" -msgstr "Exekveringsmiljö %s, gren %s är redan installerad" - -#: common/flatpak-dir.c:8810 -#, c-format -msgid "App %s, branch %s is already installed" -msgstr "Program %s, gren %s är redan installerad" - -#: common/flatpak-dir.c:9269 -msgid "Remote title not set" -msgstr "Titel för fjärrförråd inte angett" - -#: common/flatpak-dir.c:9291 -msgid "Remote default-branch not set" -msgstr "Standardfjärrgren inte inställd" - -#: common/flatpak-dir.c:9785 -msgid "No flatpak cache in remote summary" -msgstr "Ingen flatpak-cache i fjärrförrådets sammanfattning" - -#: common/flatpak-dir.c:9795 -#, c-format -msgid "No entry for %s in remote summary flatpak cache " -msgstr "Ingen post för %s i sammanfattningen av fjärrförrådets flatpak-cache " - -#: common/flatpak-run.c:258 +#: common/flatpak-context.c:175 #, c-format msgid "Unknown share type %s, valid types are: %s" msgstr "Okänd delningstyp %s, giltiga typer är: %s" -#: common/flatpak-run.c:293 +#: common/flatpak-context.c:210 #, c-format msgid "Unknown policy type %s, valid types are: %s" msgstr "Okänd policytyp %s, giltiga typer är: %s" -#: common/flatpak-run.c:331 +#: common/flatpak-context.c:248 #, c-format msgid "Invalid dbus name %s\n" msgstr "Ogiltigt dbusnamn %s\n" -#: common/flatpak-run.c:344 +#: common/flatpak-context.c:261 #, c-format msgid "Unknown socket type %s, valid types are: %s" msgstr "Okänd uttagstyp %s, giltiga typer är %s" -#: common/flatpak-run.c:373 +#: common/flatpak-context.c:290 #, c-format msgid "Unknown device type %s, valid types are: %s" msgstr "Okänd enhetstyp %s, giltiga typer är: %s" -#: common/flatpak-run.c:401 +#: common/flatpak-context.c:318 #, c-format msgid "Unknown feature type %s, valid types are: %s" msgstr "Okänd funktionstyp %s, giltiga typer är: %s" # sebras: can host and home be translated? -#: common/flatpak-run.c:774 +#: common/flatpak-context.c:691 #, c-format msgid "" "Unknown filesystem location %s, valid locations are: host, home, xdg-" @@ -2125,165 +2280,485 @@ msgstr "" "Okänd filsystemsplats %s, giltiga platser är: host, home, xdg-*[/…], ~/kat, /" "kat" -#: common/flatpak-run.c:1040 +#: common/flatpak-context.c:963 #, c-format msgid "Invalid env format %s" msgstr "Ogiltigt miljöformat %s" -#: common/flatpak-run.c:1180 +#: common/flatpak-context.c:1103 msgid "Share with host" msgstr "Dela med värd" -#: common/flatpak-run.c:1180 common/flatpak-run.c:1181 +#: common/flatpak-context.c:1103 common/flatpak-context.c:1104 msgid "SHARE" msgstr "DELA" -#: common/flatpak-run.c:1181 +#: common/flatpak-context.c:1104 msgid "Unshare with host" msgstr "Avsluta delning med värd" -#: common/flatpak-run.c:1182 +#: common/flatpak-context.c:1105 msgid "Expose socket to app" msgstr "Exponera uttag för program" -#: common/flatpak-run.c:1182 common/flatpak-run.c:1183 +#: common/flatpak-context.c:1105 common/flatpak-context.c:1106 msgid "SOCKET" msgstr "UTTAG" -#: common/flatpak-run.c:1183 +#: common/flatpak-context.c:1106 msgid "Don't expose socket to app" msgstr "Exponera inte detta uttag för program" -#: common/flatpak-run.c:1184 +#: common/flatpak-context.c:1107 msgid "Expose device to app" msgstr "Exponera enhet för program" -#: common/flatpak-run.c:1184 common/flatpak-run.c:1185 +#: common/flatpak-context.c:1107 common/flatpak-context.c:1108 msgid "DEVICE" msgstr "ENHET" -#: common/flatpak-run.c:1185 +#: common/flatpak-context.c:1108 msgid "Don't expose device to app" msgstr "Exponera inte enhet till program" -#: common/flatpak-run.c:1186 +#: common/flatpak-context.c:1109 msgid "Allow feature" msgstr "Tillåt funktion" -#: common/flatpak-run.c:1186 common/flatpak-run.c:1187 +#: common/flatpak-context.c:1109 common/flatpak-context.c:1110 msgid "FEATURE" msgstr "FUNKTION" -#: common/flatpak-run.c:1187 +#: common/flatpak-context.c:1110 msgid "Don't allow feature" msgstr "Tillåt inte funktion" # sebras: can ro be translated? -#: common/flatpak-run.c:1188 +#: common/flatpak-context.c:1111 msgid "Expose filesystem to app (:ro for read-only)" msgstr "Exponera filsystem för program (:ro för skrivskyddat)" # sebras: can ro be translated? -#: common/flatpak-run.c:1188 +#: common/flatpak-context.c:1111 msgid "FILESYSTEM[:ro]" msgstr "FILSYSTEM[:ro]" -#: common/flatpak-run.c:1189 +#: common/flatpak-context.c:1112 msgid "Don't expose filesystem to app" msgstr "Exponera inte filsystem för program" -#: common/flatpak-run.c:1189 +#: common/flatpak-context.c:1112 msgid "FILESYSTEM" msgstr "FILSYSTEM" -#: common/flatpak-run.c:1190 +#: common/flatpak-context.c:1113 msgid "Set environment variable" msgstr "Ställ in miljövariabel" -#: common/flatpak-run.c:1190 +#: common/flatpak-context.c:1113 msgid "VAR=VALUE" msgstr "VAR=VÄRDE" -#: common/flatpak-run.c:1191 +#: common/flatpak-context.c:1114 msgid "Allow app to own name on the session bus" msgstr "Tillåt program att äga namn på sessionsbussen" -#: common/flatpak-run.c:1191 common/flatpak-run.c:1192 -#: common/flatpak-run.c:1193 common/flatpak-run.c:1194 +#: common/flatpak-context.c:1114 common/flatpak-context.c:1115 +#: common/flatpak-context.c:1116 common/flatpak-context.c:1117 msgid "DBUS_NAME" msgstr "DBUSNAMN" -#: common/flatpak-run.c:1192 +#: common/flatpak-context.c:1115 msgid "Allow app to talk to name on the session bus" msgstr "Tillåt program att prata med namn på sessionsbussen" -#: common/flatpak-run.c:1193 +#: common/flatpak-context.c:1116 msgid "Allow app to own name on the system bus" msgstr "Tillåt program att äga namn på systembussen" -#: common/flatpak-run.c:1194 +#: common/flatpak-context.c:1117 msgid "Allow app to talk to name on the system bus" msgstr "Tillåt program att prata med namn på systembussen" -#: common/flatpak-run.c:1195 +#: common/flatpak-context.c:1118 msgid "Add generic policy option" msgstr "Lägg till alternativ för generell policy" -#: common/flatpak-run.c:1195 common/flatpak-run.c:1196 +#: common/flatpak-context.c:1118 common/flatpak-context.c:1119 msgid "SUBSYSTEM.KEY=VALUE" msgstr "SUBSYSTEM.KEY=VALUE" -#: common/flatpak-run.c:1196 +#: common/flatpak-context.c:1119 msgid "Remove generic policy option" msgstr "Ta bort alternativet för generell policy" # sebras: persist or persistant? -#: common/flatpak-run.c:1197 +#: common/flatpak-context.c:1120 msgid "Persist home directory" msgstr "Beständig hemkatalog" -#: common/flatpak-run.c:1197 +#: common/flatpak-context.c:1120 msgid "FILENAME" msgstr "FILNAMN" #. This is not needed/used anymore, so hidden, but we accept it for backwards compat -#: common/flatpak-run.c:1199 +#: common/flatpak-context.c:1122 msgid "Don't require a running session (no cgroups creation)" msgstr "Kräv inte en körande session (inget cgroups-skapande)" -#: common/flatpak-run.c:3830 +#: common/flatpak-dir.c:1044 +#, c-format +msgid "No overrides found for %s" +msgstr "Inga åsidosättningar funna för %s" + +#: common/flatpak-dir.c:1674 +#, c-format +msgid "While opening repository %s: " +msgstr "Medan förråd %s öppnas: " + +#: common/flatpak-dir.c:1908 common/flatpak-dir.c:5460 +msgid "Can't create deploy directory" +msgstr "Kan inte skapa distributionskatalog" + +#: common/flatpak-dir.c:2122 common/flatpak-dir.c:2125 +#, c-format +msgid "Failed to find latest revision for ref %s from remote %s: %s\n" +msgstr "" + +#: common/flatpak-dir.c:2761 +#, c-format +msgid "Invalid sha256 for extra data uri %s" +msgstr "Ogiltig sha256 för extra data-uri %s" + +#: common/flatpak-dir.c:2766 +#, c-format +msgid "Empty name for extra data uri %s" +msgstr "Tomt namn för extra data-uri %s" + +#: common/flatpak-dir.c:2773 +#, c-format +msgid "Unsupported extra data uri %s" +msgstr "Extra data-uri som ej stöds %s" + +#: common/flatpak-dir.c:2787 +#, c-format +msgid "Failed to load local extra-data %s: %s" +msgstr "Misslyckades med att läsa lokala extra data %s: %s" + +#: common/flatpak-dir.c:2790 +#, c-format +msgid "Wrong size for extra-data %s" +msgstr "Fel storlek för extra data %s" + +#: common/flatpak-dir.c:2805 +#, c-format +msgid "While downloading %s: " +msgstr "Medan %s hämtas: " + +#: common/flatpak-dir.c:2812 +#, c-format +msgid "Wrong size for extra data %s" +msgstr "Fel storlek för extra data %s" + +#: common/flatpak-dir.c:2823 +#, c-format +msgid "Invalid checksum for extra data %s" +msgstr "Ogiltig kontrollsumma för extra data %s" + +#: common/flatpak-dir.c:2882 +msgid "Remote OCI index has no registry uri" +msgstr "OCI-index för fjärrförråd har ingen register-uri" + +#: common/flatpak-dir.c:3100 +#, c-format +msgid "%s commit %s already installed" +msgstr "%s incheckning %s redan installerat" + +#: common/flatpak-dir.c:3442 common/flatpak-dir.c:3773 +#, c-format +msgid "While pulling %s from remote %s: " +msgstr "Medan %s hämtas från fjärrförrådet %s: " + +# sebras: how to translate in here? +#: common/flatpak-dir.c:3658 +#, c-format +msgid "Can't find %s in remote %s" +msgstr "Kan inte hitta %s i fjärrförrådet %s" + +#: common/flatpak-dir.c:4331 +msgid "Not enough memory" +msgstr "Inte tillräckligt med minne" + +#: common/flatpak-dir.c:4350 +msgid "Failed to read from exported file" +msgstr "Misslyckades med att läsa från exporterad fil" + +#: common/flatpak-dir.c:4541 +msgid "Error reading mimetype xml file" +msgstr "Fel vid läsning av xml-fil för mimetyp" + +#: common/flatpak-dir.c:4546 +msgid "Invalid mimetype xml file" +msgstr "Ogiltig xml-fil för mimetyp" + +#: common/flatpak-dir.c:5089 +msgid "While getting detached metadata: " +msgstr "Under hämtning av frånkopplad metadata: " + +#: common/flatpak-dir.c:5107 +msgid "While creating extradir: " +msgstr "Under tiden extrakatalog skapas: " + +#: common/flatpak-dir.c:5128 +msgid "Invalid sha256 for extra data" +msgstr "Ogiltigt sha256 för extradata" + +#: common/flatpak-dir.c:5157 +msgid "Wrong size for extra data" +msgstr "Fel storlek för extra data" + +#: common/flatpak-dir.c:5161 +msgid "Invalid checksum for extra data" +msgstr "Ogiltig kontrollsumma för extra data" + +#: common/flatpak-dir.c:5170 +#, c-format +msgid "While writing extra data file '%s': " +msgstr "Fel vid skrivning av extra data-filen ”%s”: " + +#: common/flatpak-dir.c:5340 +#, c-format +msgid "apply_extra script failed, exit status %d" +msgstr "misslyckades med skriptet apply_extra, avslutningsstatus %d" + +#: common/flatpak-dir.c:5419 +#, c-format +msgid "While trying to resolve ref %s: " +msgstr "Under upplösningsförsök för ref %s: " + +#: common/flatpak-dir.c:5434 +#, c-format +msgid "%s is not available" +msgstr "%s är inte tillgängligt" + +#: common/flatpak-dir.c:5449 common/flatpak-dir.c:5881 +#: common/flatpak-dir.c:6671 common/flatpak-dir.c:6681 +#: common/flatpak-dir.c:6713 +#, c-format +msgid "%s branch %s already installed" +msgstr "%s gren %s redan installerat" + +#: common/flatpak-dir.c:5468 +#, c-format +msgid "Failed to read commit %s: " +msgstr "Misslyckades läsa incheckning %s: " + +#: common/flatpak-dir.c:5488 +#, c-format +msgid "While trying to checkout %s into %s: " +msgstr "Medan utcheckningsförsök av %s i %s: " + +#: common/flatpak-dir.c:5513 common/flatpak-dir.c:5544 +msgid "While trying to checkout metadata subpath: " +msgstr "Under utcheckningsförsök av metadataundersökväg: " + +#: common/flatpak-dir.c:5554 +msgid "While trying to remove existing extra dir: " +msgstr "Under försök att ta bort extra existerande katalog: " + +#: common/flatpak-dir.c:5565 +msgid "While trying to apply extra data: " +msgstr "Under försök att tillämpa extra data: " + +#: common/flatpak-dir.c:5592 +#, c-format +msgid "Invalid deployed ref %s: " +msgstr "Ogiltig distribuerad ref %s: " + +#: common/flatpak-dir.c:5599 +#, c-format +msgid "Invalid commit ref %s: " +msgstr "Ogiltig incheckningsref %s: " + +#: common/flatpak-dir.c:5607 +#, c-format +msgid "Deployed ref %s kind does not match commit (%s)" +msgstr "Distribuerad ref %s matchar inte incheckning (%s)" + +#: common/flatpak-dir.c:5615 +#, c-format +msgid "Deployed ref %s name does not match commit (%s)" +msgstr "Distribuerad ref %s matchar inte incheckning (%s)" + +#: common/flatpak-dir.c:5623 +#, c-format +msgid "Deployed ref %s arch does not match commit (%s)" +msgstr "Ark för distribuerad ref %s matchar inte incheckning (%s)" + +#: common/flatpak-dir.c:5629 +#, c-format +msgid "Deployed ref %s branch does not match commit (%s)" +msgstr "Distribuerad ref %s-gren matchar inte incheckning (%s)" + +#: common/flatpak-dir.c:5635 +#, c-format +msgid "Deployed ref %s does not match commit (%s)" +msgstr "Distribuerad ref %s matchar inte incheckning (%s)" + +#: common/flatpak-dir.c:5654 +msgid "Deployed metadata does not match commit" +msgstr "Distribuerad metadata matchar inte incheckning" + +#: common/flatpak-dir.c:6533 +#, c-format +msgid "This version of %s is already installed" +msgstr "Denna version av %s är redan installerad" + +#: common/flatpak-dir.c:6540 +msgid "Can't change remote during bundle install" +msgstr "Kan inte ändra fjärrförråd under buntinstallering" + +#: common/flatpak-dir.c:7059 +#, c-format +msgid "%s branch %s is not installed" +msgstr "%s gren %s är inte installerad" + +#: common/flatpak-dir.c:7304 +#, c-format +msgid "%s branch %s not installed" +msgstr "%s gren %s inte installerad" + +#: common/flatpak-dir.c:7628 +#, c-format +msgid "Pruning repo failed: %s" +msgstr "Rensning av förråd misslyckades: %s" + +#: common/flatpak-dir.c:8155 +#, c-format +msgid "Multiple branches available for %s, you must specify one of: " +msgstr "Flera grenar tillgängliga för %s, du måste ange en av: " + +#: common/flatpak-dir.c:8176 +#, c-format +msgid "Nothing matches %s" +msgstr "Ingenting matchar %s" + +# sebras: how to translate in here? +#: common/flatpak-dir.c:8258 +#, c-format +msgid "Can't find ref %s%s%s%s%s" +msgstr "Det går inte att hitta ref %s%s%s%s%s" + +#: common/flatpak-dir.c:8300 +#, c-format +msgid "Error searching remote %s: %s" +msgstr "Fel vid sökning av fjärrförråd %s: %s" + +#: common/flatpak-dir.c:8345 +#, c-format +msgid "Error searching local repository: %s" +msgstr "Fel vid sökning i lokalt förråd: %s" + +#: common/flatpak-dir.c:8471 +#, c-format +msgid "%s %s not installed" +msgstr "%s %s inte installerad" + +#: common/flatpak-dir.c:8638 +#, c-format +msgid "Could not find installation %s" +msgstr "Kunde inte hitta installationen %s" + +#: common/flatpak-dir.c:9236 +#, c-format +msgid "Runtime %s, branch %s is already installed" +msgstr "Exekveringsmiljö %s, gren %s är redan installerad" + +#: common/flatpak-dir.c:9237 +#, c-format +msgid "App %s, branch %s is already installed" +msgstr "Program %s, gren %s är redan installerad" + +#: common/flatpak-dir.c:9717 +msgid "Remote title not set" +msgstr "Titel för fjärrförråd inte angett" + +#: common/flatpak-dir.c:9739 +msgid "Remote default-branch not set" +msgstr "Standardfjärrgren inte inställd" + +#: common/flatpak-dir.c:10332 +msgid "No flatpak cache in remote summary" +msgstr "Ingen flatpak-cache i fjärrförrådets sammanfattning" + +#: common/flatpak-dir.c:10342 +#, c-format +msgid "No entry for %s in remote summary flatpak cache " +msgstr "Ingen post för %s i sammanfattningen av fjärrförrådets flatpak-cache " + +#: common/flatpak-run.c:1456 #, c-format msgid "Failed to open flatpak-info temp file: %s" msgstr "Misslyckades med att öppna temporär flatpak-info-fil: %s" -#: common/flatpak-run.c:3904 common/flatpak-run.c:3914 +#: common/flatpak-run.c:1530 common/flatpak-run.c:1540 #, c-format msgid "Failed to open temp file: %s" msgstr "Misslyckades med att öppna temporärfil: %s" # sebras: sync? -#: common/flatpak-run.c:4253 +#: common/flatpak-run.c:1883 msgid "Unable to create sync pipe" msgstr "Kan inte skapa sync-rör" -#: common/flatpak-run.c:4280 +#: common/flatpak-run.c:1910 #, c-format msgid "Failed to open app info file: %s" msgstr "Misslyckades med att öppna prog-info-fil: %s" -#: common/flatpak-run.c:4310 +#: common/flatpak-run.c:1940 msgid "Failed to sync with dbus proxy" msgstr "Misslyckades med att synkronisera med dbus-proxy" -#: common/flatpak-run.c:5069 -#, fuzzy, c-format +#: common/flatpak-run.c:2700 +#, c-format msgid "ldconfig failed, exit status %d" -msgstr "misslyckades med skriptet apply_extra, avslutningsstatus %d" +msgstr "misslyckades med ldconfig, avslutningsstatus %d" -#: common/flatpak-utils.c:2900 +#: common/flatpak-utils.c:624 +#, c-format +msgid "Migrating %s to %s\n" +msgstr "Migrerar %s till %s\n" + +#: common/flatpak-utils.c:630 +#, c-format +msgid "Error during migration: %s\n" +msgstr "Fel vid migrering: %s\n" + +#: common/flatpak-utils.c:2988 msgid "No extra data sources" msgstr "Inga extra data-källor" +#: common/flatpak-utils.c:6576 +#, c-format +msgid "Downloading metadata: %u/(estimating) %s" +msgstr "Hämtar ned metadata: %u/(beräknad) %s" + +#: common/flatpak-utils.c:6600 +#, c-format +msgid "Downloading: %s/%s" +msgstr "Hämtar: %s/%s" + +#: common/flatpak-utils.c:6620 +#, c-format +msgid "Downloading extra data: %s/%s" +msgstr "Hämtar extra data: %s/%s" + +#: common/flatpak-utils.c:6625 +#, c-format +msgid "Downloading files: %d/%d %s" +msgstr "Hämtar filer: %d/%d %s" + #. SECURITY: #. - Normal users do not need authentication to install signed applications #. from signed repositories, as this cannot exploit a system. @@ -2320,7 +2795,7 @@ msgstr "Uppdatera signerat program" #: system-helper/org.freedesktop.Flatpak.policy.in:59 #: system-helper/org.freedesktop.Flatpak.policy.in:77 -#: system-helper/org.freedesktop.Flatpak.policy.in:169 +#: system-helper/org.freedesktop.Flatpak.policy.in:180 msgid "Authentication is required to update software" msgstr "Autentisering krävs för att uppdatera program" @@ -2349,14 +2824,12 @@ msgstr "Autentisering krävs för att uppdatera fjärrförrådsinfo" #. - Normal users do not need authentication to modify the #. OSTree repository #: system-helper/org.freedesktop.Flatpak.policy.in:106 -#, fuzzy msgid "Update system repository" -msgstr "Uppdatera sammanfattningsfilen i ett förråd" +msgstr "Uppdaterar systemförråd" #: system-helper/org.freedesktop.Flatpak.policy.in:107 -#, fuzzy msgid "Authentication is required to update the system repository" -msgstr "Autentisering krävs för att uppdatera fjärrförrådsinfo" +msgstr "Autentisering krävs för att uppdatera systemförrådet" #: system-helper/org.freedesktop.Flatpak.policy.in:117 msgid "Install bundle" @@ -2383,16 +2856,36 @@ msgstr "Konfigurera fjärrförråd" msgid "Authentication is required to configure software repositories" msgstr "Autentisering krävs för att konfigurera programförråd" +#: system-helper/org.freedesktop.Flatpak.policy.in:161 +msgid "Configure" +msgstr "Konfigurera" + +#: system-helper/org.freedesktop.Flatpak.policy.in:162 +msgid "Authentication is required to configure software installation" +msgstr "Autentisering krävs för att konfigurera programinstallationen" + #. SECURITY: #. - Normal users do not require admin authentication to update #. appstream data as it will be signed, and the action is required #. to update the system when unattended. #. - Changing this to anything other than 'yes' will break unattended #. updates. -#: system-helper/org.freedesktop.Flatpak.policy.in:168 +#: system-helper/org.freedesktop.Flatpak.policy.in:179 msgid "Update appstream" msgstr "Uppdatera appstream" +#~ msgid "No remote %s" +#~ msgstr "Inget fjärrförråd %s" + +#~ msgid "Search only user installations" +#~ msgstr "Sök endast användarinstallationer" + +#~ msgid "Search only system-wide installations" +#~ msgstr "Sök endast systeminstallationer" + +#~ msgid "Search specific system-wide installations" +#~ msgstr "Sök endast specifika systemomfattande installationer" + #~ msgid "Failed to create temporary file" #~ msgstr "Misslyckades med att skapa temporärfil" @@ -2402,13 +2895,6 @@ msgstr "Uppdatera appstream" #~ msgid "Failed to write to temporary file" #~ msgstr "Misslyckades med att skriva till temporärfil" -#~ msgid "REMOTE must be specified" -#~ msgstr "FJÄRRFÖRRÅD måste anges" - -#, fuzzy -#~ msgid "Downloading %s" -#~ msgstr "Visa ref" - #, fuzzy #~ msgid "Installing %s" #~ msgstr "Installerar: %s\n" @@ -2417,17 +2903,6 @@ msgstr "Uppdatera appstream" #~ msgid "Post-Install %s" #~ msgstr "Installerar: %s\n" -#, fuzzy -#~ msgid "Updating %s" -#~ msgstr "Uppdaterar sammanfattning\n" - -#, fuzzy -#~ msgid "Metadata:" -#~ msgstr "Visa detaljer för fjärrförrådet" - -#~ msgid "Assume LOCATION is an oci registry" -#~ msgstr "Anta att PLATS är ett oci-register" - #~ msgid "OCI repo Filename or uri must be specified" #~ msgstr "OCI-förråd eller filnamn måste anges" @@ -2443,9 +2918,6 @@ msgstr "Uppdatera appstream" #~ msgid "'%s' is not a valid sdk name: %s" #~ msgstr "”%s” är inte ett giltigt SDK-namn: %s" -#~ msgid "Data not found" -#~ msgstr "Data inte funnen" - #~ msgid "Data not found for ref %s" #~ msgstr "Data inte funnen för ref %s" @@ -2456,13 +2928,6 @@ msgstr "Uppdatera appstream" #~ msgid "Load options from file or uri" #~ msgstr "Läs in inställningar från fil" -#~ msgid "Install an application or runtime from a remote" -#~ msgstr "Installera ett program eller exekveringsmiljö från en fjärr" - -#, fuzzy -#~ msgid "Invalid ref format" -#~ msgstr "Ogiltigt miljöformat %s" - #, fuzzy #~ msgid "Invalid ref, no digest" #~ msgstr "Ogiltigt miljöformat %s" @@ -2485,9 +2950,6 @@ msgstr "Uppdatera appstream" #~ msgid "This version of flatpak is not compiled with libarchive support" #~ msgstr "Denna version av flatpak är inte kompilerad med libarchive-stöd" -#~ msgid "Installing related: %s\n" -#~ msgstr "Installerar relaterade: %s\n" - #~ msgid "REPOSITORY and NAME must be specified" #~ msgstr "ARKIV och NAMN måste anges" @@ -2540,8 +3002,5 @@ msgstr "Uppdatera appstream" #~ "Varning: Kan inte hitta appstream-builder, kan inte uppdatera appstream-" #~ "gren\n" -#~ msgid "Looking for %s\n" -#~ msgstr "Letar efter %s\n" - #~ msgid "Generating from-parent delta for %s (%s)\n" #~ msgstr "Genererar från-förälder-delta för %s (%s)\n" diff --git a/po/tr.po b/po/tr.po index f67cf953..b74bce44 100644 --- a/po/tr.po +++ b/po/tr.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: flatpak master\n" "Report-Msgid-Bugs-To: https://github.com/flatpak/flatpak/issues\n" -"POT-Creation-Date: 2017-10-09 12:40+0200\n" +"POT-Creation-Date: 2018-02-19 14:20+0100\n" "PO-Revision-Date: 2017-05-20 08:19+0300\n" "Last-Translator: Muhammet Kara \n" "Language-Team: Türkçe \n" @@ -43,10 +43,9 @@ msgstr "Uzağı bağımlılık için olarak işaretle" msgid "Set a new url" msgstr "Yeni bir url belirle" -#: app/flatpak-builtins-add-remote.c:66 app/flatpak-builtins-build-bundle.c:57 -#: app/flatpak-builtins-build-bundle.c:58 -#: app/flatpak-builtins-list-remotes.c:109 -#: app/flatpak-builtins-repo-update.c:52 +#: app/flatpak-builtins-add-remote.c:66 app/flatpak-builtins-build-bundle.c:58 +#: app/flatpak-builtins-build-bundle.c:59 +#: app/flatpak-builtins-list-remotes.c:70 app/flatpak-builtins-repo-update.c:52 msgid "URL" msgstr "URL" @@ -108,9 +107,9 @@ msgstr "" msgid "Import GPG key from FILE (- for stdin)" msgstr "DOSYA'dan GPG anahtarı içe aktar (stdin için -)" -#: app/flatpak-builtins-add-remote.c:82 app/flatpak-builtins-build-bundle.c:59 -#: app/flatpak-builtins-build.c:50 app/flatpak-builtins-build-export.c:60 -#: app/flatpak-builtins-install.c:66 app/flatpak-builtins-repo-update.c:59 +#: app/flatpak-builtins-add-remote.c:82 app/flatpak-builtins-build-bundle.c:60 +#: app/flatpak-builtins-build.c:54 app/flatpak-builtins-build-export.c:60 +#: app/flatpak-builtins-install.c:67 app/flatpak-builtins-repo-update.c:59 msgid "FILE" msgstr "DOSYA" @@ -122,129 +121,149 @@ msgstr "Uzağı devredışı bırak" msgid "Add OCI registry" msgstr "OCI sicili ekle" -#: app/flatpak-builtins-add-remote.c:312 +#: app/flatpak-builtins-add-remote.c:218 app/flatpak-builtins-add-remote.c:225 +#, c-format +msgid "Can't load uri %s: %s\n" +msgstr "" + +#: app/flatpak-builtins-add-remote.c:233 +#, fuzzy, c-format +msgid "Can't load file %s: %s\n" +msgstr "%s ad alanı açılamadı: %s" + +#: app/flatpak-builtins-add-remote.c:241 +#, fuzzy +msgid "Invalid file format" +msgstr "Geçersiz env formatı %s" + +#: app/flatpak-builtins-add-remote.c:249 +#, fuzzy, c-format +msgid "Invalid version %s, only 1 supported" +msgstr "Geçersiz uri tipi %s, sadece http/https destekli" + +#: app/flatpak-builtins-add-remote.c:293 +#, fuzzy +msgid "Invalid gpg key" +msgstr "Geçersiz pid %s" + +#: app/flatpak-builtins-add-remote.c:320 msgid "NAME LOCATION - Add a remote repository" msgstr "İSİM KONUM - Uzak bir arşiv ekle" -#: app/flatpak-builtins-add-remote.c:321 -#: app/flatpak-builtins-delete-remote.c:58 app/flatpak-builtins-info.c:104 +#: app/flatpak-builtins-add-remote.c:333 +#: app/flatpak-builtins-delete-remote.c:61 app/flatpak-builtins-info.c:125 msgid "NAME must be specified" msgstr "İSİM belirtilmelidir" -#: app/flatpak-builtins-add-remote.c:324 app/flatpak-builtins-build-sign.c:71 -#: app/flatpak-builtins-repo.c:174 app/flatpak-builtins-repo-update.c:429 +#: app/flatpak-builtins-add-remote.c:336 app/flatpak-builtins-build-sign.c:71 +#: app/flatpak-builtins-repo.c:175 app/flatpak-builtins-repo-update.c:429 msgid "LOCATION must be specified" msgstr "KONUM belirtilmelidir" -#: app/flatpak-builtins-add-remote.c:327 -#: app/flatpak-builtins-build-bundle.c:479 +#: app/flatpak-builtins-add-remote.c:339 +#: app/flatpak-builtins-build-bundle.c:461 #: app/flatpak-builtins-build-export.c:676 #: app/flatpak-builtins-build-import-bundle.c:182 #: app/flatpak-builtins-build-init.c:181 app/flatpak-builtins-build-sign.c:74 -#: app/flatpak-builtins-delete-remote.c:63 +#: app/flatpak-builtins-delete-remote.c:66 #: app/flatpak-builtins-document-export.c:102 #: app/flatpak-builtins-document-info.c:75 #: app/flatpak-builtins-document-list.c:70 -#: app/flatpak-builtins-document-unexport.c:67 app/flatpak-builtins-info.c:111 -#: app/flatpak-builtins-install.c:265 app/flatpak-builtins-install.c:399 -#: app/flatpak-builtins-list.c:382 app/flatpak-builtins-list-remotes.c:66 -#: app/flatpak-builtins-ls-remote.c:84 app/flatpak-builtins-make-current.c:67 -#: app/flatpak-builtins-override.c:66 +#: app/flatpak-builtins-document-unexport.c:67 app/flatpak-builtins-info.c:132 +#: app/flatpak-builtins-install.c:267 app/flatpak-builtins-install.c:401 +#: app/flatpak-builtins-list.c:314 app/flatpak-builtins-list-remotes.c:61 +#: app/flatpak-builtins-ls-remote.c:107 app/flatpak-builtins-make-current.c:72 +#: app/flatpak-builtins-override.c:68 msgid "Too many arguments" msgstr "Çok fazla argüman" -#: app/flatpak-builtins-add-remote.c:332 +#: app/flatpak-builtins-add-remote.c:344 #: app/flatpak-builtins-build-export.c:692 #, fuzzy, c-format msgid "‘%s’ is not a valid collection ID: %s" msgstr "'%s' geçerli bir uygulama ismi değil: %s" -#: app/flatpak-builtins-add-remote.c:336 +#: app/flatpak-builtins-add-remote.c:348 msgid "GPG verification is required if collections are enabled" msgstr "" #. Do nothing -#: app/flatpak-builtins-add-remote.c:351 +#: app/flatpak-builtins-add-remote.c:363 #, c-format msgid "Remote %s already exists" msgstr "%s uzağı zaten var" -#: app/flatpak-builtins-add-remote.c:359 +#: app/flatpak-builtins-add-remote.c:371 msgid "No url specified in flatpakrepo file" msgstr "Flatpakrepo dosyasında url belirtilmemiş" -#: app/flatpak-builtins-add-remote.c:403 +#: app/flatpak-builtins-add-remote.c:415 #, fuzzy, c-format msgid "Warning: Could not update extra metadata for '%s': %s\n" msgstr "%s için ek üst veri güncellenemedi" -#: app/flatpak-builtins-add-remote.c:451 +#: app/flatpak-builtins-add-remote.c:464 msgid "NAME - Modify a remote repository" msgstr "İSİM - Uzak arşivi düzenle" -#: app/flatpak-builtins-add-remote.c:460 +#: app/flatpak-builtins-add-remote.c:474 msgid "Remote NAME must be specified" msgstr "Uzak İSİM belirtilmelidir" -#: app/flatpak-builtins-add-remote.c:465 -#, c-format -msgid "No remote %s" -msgstr "%s uzak yok" - -#: app/flatpak-builtins-add-remote.c:471 +#: app/flatpak-builtins-add-remote.c:485 #, c-format msgid "Updating extra metadata from remote summary for %s\n" msgstr "%s için uzak özetinden ek üst veri güncelleniyor\n" -#: app/flatpak-builtins-add-remote.c:474 +#: app/flatpak-builtins-add-remote.c:488 #, c-format msgid "Error updating extra metadata for '%s': %s\n" msgstr "'%s' için ek üst veri güncellenirken hata: %s\n" -#: app/flatpak-builtins-add-remote.c:475 +#: app/flatpak-builtins-add-remote.c:489 #, c-format msgid "Could not update extra metadata for %s" msgstr "%s için ek üst veri güncellenemedi" -#: app/flatpak-builtins-build-bundle.c:55 +#: app/flatpak-builtins-build-bundle.c:56 msgid "Export runtime instead of app" msgstr "Uygulama yerine çalışma ortamı dışa aktar" -#: app/flatpak-builtins-build-bundle.c:56 +#: app/flatpak-builtins-build-bundle.c:57 msgid "Arch to bundle for" msgstr "Paketleneceği mimari" -#: app/flatpak-builtins-build-bundle.c:56 +#: app/flatpak-builtins-build-bundle.c:57 #: app/flatpak-builtins-build-export.c:55 app/flatpak-builtins-build-init.c:49 -#: app/flatpak-builtins-build-sign.c:41 app/flatpak-builtins-info.c:48 -#: app/flatpak-builtins-install.c:56 app/flatpak-builtins-list.c:52 -#: app/flatpak-builtins-ls-remote.c:48 app/flatpak-builtins-make-current.c:38 -#: app/flatpak-builtins-run.c:52 app/flatpak-builtins-uninstall.c:44 -#: app/flatpak-builtins-update.c:53 +#: app/flatpak-builtins-build-sign.c:41 app/flatpak-builtins-info.c:51 +#: app/flatpak-builtins-info-remote.c:48 app/flatpak-builtins-install.c:57 +#: app/flatpak-builtins-list.c:46 app/flatpak-builtins-ls-remote.c:49 +#: app/flatpak-builtins-make-current.c:38 app/flatpak-builtins-run.c:52 +#: app/flatpak-builtins-uninstall.c:44 app/flatpak-builtins-update.c:53 msgid "ARCH" msgstr "MİMARİ" -#: app/flatpak-builtins-build-bundle.c:57 +#: app/flatpak-builtins-build-bundle.c:58 msgid "Url for repo" msgstr "Arşiv için url" -#: app/flatpak-builtins-build-bundle.c:58 +#: app/flatpak-builtins-build-bundle.c:59 msgid "Url for runtime flatpakrepo file" msgstr "Çalışma ortamı flatpakrepo dosyası için url" -#: app/flatpak-builtins-build-bundle.c:59 +#: app/flatpak-builtins-build-bundle.c:60 msgid "Add GPG key from FILE (- for stdin)" msgstr "DOSYA'dan GPG anahtarı ekle (stdin için -)" -#: app/flatpak-builtins-build-bundle.c:60 +#: app/flatpak-builtins-build-bundle.c:61 msgid "Export oci image instead of flatpak bundle" msgstr "Flatpak paketi yerine oci görüntüsü dışa aktar" -#: app/flatpak-builtins-build-bundle.c:61 +#: app/flatpak-builtins-build-bundle.c:62 msgid "GPG Key ID to sign the OCI image with" msgstr "OCI görüntüsünün imzalanacağı GPG Anahtar Kimliği" -#: app/flatpak-builtins-build-bundle.c:61 +#: app/flatpak-builtins-build-bundle.c:62 #: app/flatpak-builtins-build-commit-from.c:55 #: app/flatpak-builtins-build-export.c:61 #: app/flatpak-builtins-build-import-bundle.c:46 @@ -252,7 +271,7 @@ msgstr "OCI görüntüsünün imzalanacağı GPG Anahtar Kimliği" msgid "KEY-ID" msgstr "ANAHTAR-KİMLİK" -#: app/flatpak-builtins-build-bundle.c:62 +#: app/flatpak-builtins-build-bundle.c:63 #: app/flatpak-builtins-build-commit-from.c:56 #: app/flatpak-builtins-build-export.c:64 #: app/flatpak-builtins-build-import-bundle.c:47 @@ -260,7 +279,7 @@ msgstr "ANAHTAR-KİMLİK" msgid "GPG Homedir to use when looking for keyrings" msgstr "Anahtarlık aramak için GPG Evdizini" -#: app/flatpak-builtins-build-bundle.c:62 +#: app/flatpak-builtins-build-bundle.c:63 #: app/flatpak-builtins-build-commit-from.c:56 #: app/flatpak-builtins-build-export.c:64 #: app/flatpak-builtins-build-import-bundle.c:47 @@ -268,101 +287,122 @@ msgstr "Anahtarlık aramak için GPG Evdizini" msgid "HOMEDIR" msgstr "EVDİZİN" -#: app/flatpak-builtins-build-bundle.c:469 +#: app/flatpak-builtins-build-bundle.c:64 +msgid "OSTree commit to create a delta bundle from" +msgstr "" + +#: app/flatpak-builtins-build-bundle.c:64 app/flatpak-builtins-info-remote.c:49 +#: app/flatpak-builtins-update.c:54 +msgid "COMMIT" +msgstr "DEĞİŞİKLİK" + +#: app/flatpak-builtins-build-bundle.c:451 msgid "" "LOCATION FILENAME NAME [BRANCH] - Create a single file bundle from a local " "repository" msgstr "KONUM DOSYAADI İSİM [DAL] - Yerel arşivden bir tek dosya paket oluştur" -#: app/flatpak-builtins-build-bundle.c:476 +#: app/flatpak-builtins-build-bundle.c:458 msgid "LOCATION, FILENAME and NAME must be specified" msgstr "KONUM, DOSYAADI ve İSİM belirtilmelidir" -#: app/flatpak-builtins-build-bundle.c:494 -#: app/flatpak-builtins-build-commit-from.c:103 -#: app/flatpak-builtins-build-commit-from.c:113 +#: app/flatpak-builtins-build-bundle.c:476 +#: app/flatpak-builtins-build-commit-from.c:253 +#: app/flatpak-builtins-build-commit-from.c:263 #: app/flatpak-builtins-build-import-bundle.c:191 #, c-format msgid "'%s' is not a valid repository" msgstr "'%s' geçerli bir arşiv değil" -#: app/flatpak-builtins-build-bundle.c:506 app/flatpak-builtins-build-sign.c:86 +#: app/flatpak-builtins-build-bundle.c:488 app/flatpak-builtins-build-sign.c:86 #, c-format msgid "'%s' is not a valid name: %s" msgstr "'%s' geçerli bir isim değil: %s" -#: app/flatpak-builtins-build-bundle.c:509 +#: app/flatpak-builtins-build-bundle.c:491 #: app/flatpak-builtins-build-export.c:699 app/flatpak-builtins-build-sign.c:89 #, c-format msgid "'%s' is not a valid branch name: %s" msgstr "'%s' geçerli bir dal ismi değil: %s" -#: app/flatpak-builtins-build.c:46 +#: app/flatpak-builtins-build.c:49 msgid "Use Platform runtime rather than Sdk" msgstr "Sdk'dansa Platform çalışma ortamını kullan" -#: app/flatpak-builtins-build.c:47 +#: app/flatpak-builtins-build.c:50 +msgid "Make destination readonly" +msgstr "" + +#: app/flatpak-builtins-build.c:51 msgid "Add bind mount" msgstr "Bağlama noktası ekle" -#: app/flatpak-builtins-build.c:47 +#: app/flatpak-builtins-build.c:51 msgid "DEST=SRC" msgstr "HEDEF=KAYNAK" -#: app/flatpak-builtins-build.c:48 +#: app/flatpak-builtins-build.c:52 msgid "Start build in this directory" msgstr "İnşaya bu dizinde başla" -#: app/flatpak-builtins-build.c:48 app/flatpak-builtins-build.c:49 +#: app/flatpak-builtins-build.c:52 app/flatpak-builtins-build.c:53 #: app/flatpak-builtins-build-init.c:58 msgid "DIR" msgstr "DİZİN" -#: app/flatpak-builtins-build.c:49 +#: app/flatpak-builtins-build.c:53 msgid "Where to look for custom sdk dir (defaults to 'usr')" msgstr "" "Özel yazılım geliştirme kiti dizini için bakılacak yer ('usr'ye öntanımlar)" -#: app/flatpak-builtins-build.c:50 app/flatpak-builtins-build-export.c:60 +#: app/flatpak-builtins-build.c:54 app/flatpak-builtins-build-export.c:60 msgid "Use alternative file for the metadata" msgstr "Üst veri için alternatif dosya kullan" -#: app/flatpak-builtins-build.c:51 +#: app/flatpak-builtins-build.c:55 msgid "Kill processes when the parent process dies" msgstr "" -#: app/flatpak-builtins-build.c:52 +#: app/flatpak-builtins-build.c:56 msgid "Export application homedir directory to build" msgstr "" -#: app/flatpak-builtins-build.c:139 +#: app/flatpak-builtins-build.c:57 app/flatpak-builtins-run.c:58 +msgid "Log session bus calls" +msgstr "Oturum veri yolu çağrılarını günlükle" + +#: app/flatpak-builtins-build.c:58 app/flatpak-builtins-run.c:59 +msgid "Log system bus calls" +msgstr "Sistem veri yolu çağrılarını günlükle" + +#: app/flatpak-builtins-build.c:126 msgid "DIRECTORY [COMMAND [args...]] - Build in directory" msgstr "DİZİN [KOMUT [arg...]] - Dizinde inşa et" -#: app/flatpak-builtins-build.c:162 app/flatpak-builtins-build-finish.c:533 +#: app/flatpak-builtins-build.c:149 app/flatpak-builtins-build-finish.c:533 msgid "DIRECTORY must be specified" msgstr "DİZİN belirtilmelidir" -#: app/flatpak-builtins-build.c:173 app/flatpak-builtins-build-export.c:721 +#: app/flatpak-builtins-build.c:160 app/flatpak-builtins-build-export.c:721 #, c-format msgid "Build directory %s not initialized, use flatpak build-init" msgstr "İnşa dizini %s ilklenmedi, flatpak build-init'i kullanın" -#: app/flatpak-builtins-build.c:192 +#: app/flatpak-builtins-build.c:179 msgid "metadata invalid, not application or runtime" msgstr "Üst veriye geçersiz, uygulama veya çalışma ortamı değil" -#: app/flatpak-builtins-build.c:292 +#: app/flatpak-builtins-build.c:283 #, c-format msgid "No extension point matching %s in %s" msgstr "%s'e uyan eklenti noktası %s'te yok" -#: app/flatpak-builtins-build.c:432 +#: app/flatpak-builtins-build.c:433 #, c-format msgid "Missing '=' in bind mount option '%s'" msgstr "Bağlama noktası seçeneği '%s'te eksik '='" -#: app/flatpak-builtins-build.c:460 common/flatpak-run.c:5406 +#: app/flatpak-builtins-build.c:462 common/flatpak-run.c:3038 msgid "Unable to start app" msgstr "Uygulama başlatılamadı" @@ -421,35 +461,40 @@ msgstr "Özeti güncelleme" msgid "GPG Key ID to sign the commit with" msgstr "Değişikliği imzalamak için GPG Anahtar Kimliği" -#: app/flatpak-builtins-build-commit-from.c:78 +#: app/flatpak-builtins-build-commit-from.c:228 msgid "DST-REPO [DST-REF]... - Make a new commit based on existing commit(s)" msgstr "" "HEDEF-ARŞİV [HEDEF-REFERANS]... - Varolan değişikliklere dayalı yeni bir " "değişiklik yap" -#: app/flatpak-builtins-build-commit-from.c:85 +#: app/flatpak-builtins-build-commit-from.c:235 msgid "DST-REPO must be specified" msgstr "HEDEF-ARŞİV belirtilmelidir" -#: app/flatpak-builtins-build-commit-from.c:93 +#: app/flatpak-builtins-build-commit-from.c:243 msgid "" "If --src-repo is not specified, exactly one destination ref must be specified" msgstr "" "--src-repo belirtilmemişse sadece tek bir hedef referansı belirtilmelidir" -#: app/flatpak-builtins-build-commit-from.c:96 +#: app/flatpak-builtins-build-commit-from.c:246 msgid "" "If --src-ref is specified, exactly one destination ref must be specified" msgstr "--src-ref belirtilmişse, sadece tek bir hedef referans belirtilmelidir" -#: app/flatpak-builtins-build-commit-from.c:99 +#: app/flatpak-builtins-build-commit-from.c:249 msgid "Either --src-repo or --src-ref must be specified." msgstr "Ya --src-repo ya da --src-ref belirtilmelidir." -#: app/flatpak-builtins-build-commit-from.c:251 +#: app/flatpak-builtins-build-commit-from.c:402 msgid "Can't commit from partial source commit." msgstr "Kısmi kaynak değişikliğinden değişiklik yapılamaz" +#: app/flatpak-builtins-build-commit-from.c:407 +#, c-format +msgid "%s: no change\n" +msgstr "" + #: app/flatpak-builtins-build-export.c:55 msgid "Architecture to export for (must be host compatible)" msgstr "Dışa aktarılacağı mimari (makinayla uyumlu olmalıdır)" @@ -487,6 +532,42 @@ msgstr "" msgid "ISO-8601-TIMESTAMP" msgstr "" +#: app/flatpak-builtins-build-export.c:341 +#, c-format +msgid "WARNING: Error running desktop-file-validate: %s\n" +msgstr "" + +#: app/flatpak-builtins-build-export.c:349 +#, c-format +msgid "WARNING: Error reading from desktop-file-validate: %s\n" +msgstr "" + +#: app/flatpak-builtins-build-export.c:355 +#, fuzzy, c-format +msgid "WARNING: Failed to validate desktop file %s: %s\n" +msgstr "Geçici dosya açılamadı: %s" + +#: app/flatpak-builtins-build-export.c:370 +#, c-format +msgid "WARNING: Can't find Exec key in %s: %s\n" +msgstr "" + +#: app/flatpak-builtins-build-export.c:378 +#: app/flatpak-builtins-build-export.c:475 +#, c-format +msgid "WARNING: Binary not found for Exec line in %s: %s\n" +msgstr "" + +#: app/flatpak-builtins-build-export.c:385 +#, c-format +msgid "WARNING: Icon not matching app id in %s: %s\n" +msgstr "" + +#: app/flatpak-builtins-build-export.c:413 +#, c-format +msgid "WARNING: Icon referenced in desktop file but not exported: %s\n" +msgstr "" + #: app/flatpak-builtins-build-export.c:551 #, c-format msgid "Invalid uri type %s, only http/https supported" @@ -524,12 +605,41 @@ msgstr "KONUM ve DİZİN belirtilmelidir" msgid "No name specified in the metadata" msgstr "Üst veride isim belirtilmemiş" +#: app/flatpak-builtins-build-export.c:976 +#, c-format +msgid "Commit: %s\n" +msgstr "" + +#: app/flatpak-builtins-build-export.c:977 +#, fuzzy, c-format +msgid "Metadata Total: %u\n" +msgstr "Üst veri:" + +#: app/flatpak-builtins-build-export.c:978 +#, fuzzy, c-format +msgid "Metadata Written: %u\n" +msgstr "Üst veri:" + +#: app/flatpak-builtins-build-export.c:979 +#, c-format +msgid "Content Total: %u\n" +msgstr "" + +#: app/flatpak-builtins-build-export.c:980 +#, c-format +msgid "Content Written: %u\n" +msgstr "" + +#: app/flatpak-builtins-build-export.c:981 +msgid "Content Bytes Written:" +msgstr "" + #: app/flatpak-builtins-build-finish.c:48 msgid "Command to set" msgstr "Belirlenecek komut" #: app/flatpak-builtins-build-finish.c:48 app/flatpak-builtins-run.c:53 -#: app/flatpak-main.c:159 +#: app/flatpak-main.c:166 msgid "COMMAND" msgstr "KOMUT" @@ -590,6 +700,29 @@ msgstr "Genel üst veri seçeneğini belirle" msgid "GROUP=KEY[=VALUE]" msgstr "GRUP=ANAHTAR[=DEĞER]" +#: app/flatpak-builtins-build-finish.c:139 +#, c-format +msgid "Not exporting %s, wrong prefix\n" +msgstr "" + +#: app/flatpak-builtins-build-finish.c:143 +#, fuzzy, c-format +msgid "Exporting %s\n" +msgstr "Özet güncelleniyor\n" + +#: app/flatpak-builtins-build-finish.c:384 +msgid "More than one executable found\n" +msgstr "" + +#: app/flatpak-builtins-build-finish.c:395 +#, c-format +msgid "Using %s as command\n" +msgstr "" + +#: app/flatpak-builtins-build-finish.c:400 +msgid "No executable found\n" +msgstr "" + #: app/flatpak-builtins-build-finish.c:433 #, c-format msgid "Too few elements in --extra-data argument %s" @@ -651,6 +784,12 @@ msgstr "Referans '%s' sicilde bulunamadı" msgid "Multiple images in registry, specify a ref with --ref" msgstr "Sicilde birden fazla görüntü, --ref'le bir referans belirtin" +#: app/flatpak-builtins-build-import-bundle.c:123 +#: app/flatpak-builtins-build-import-bundle.c:151 +#, fuzzy, c-format +msgid "Importing %s (%s)\n" +msgstr "Güncelleniyor: %2$s'ten %1$s\n" + #: app/flatpak-builtins-build-import-bundle.c:172 msgid "LOCATION FILENAME - Import a file bundle into a local repository" msgstr "KONUM DOSYAADI - Bir yerel arşive dosya paketi içe aktar" @@ -659,7 +798,7 @@ msgstr "KONUM DOSYAADI - Bir yerel arşive dosya paketi içe aktar" msgid "LOCATION and FILENAME must be specified" msgstr "KONUM ve DOSYAADI belirtilmelidir" -#: app/flatpak-builtins-build-init.c:49 app/flatpak-builtins-info.c:48 +#: app/flatpak-builtins-build-init.c:49 app/flatpak-builtins-info.c:51 #: app/flatpak-builtins-run.c:52 msgid "Arch to use" msgstr "Kullanılacak mimari" @@ -752,7 +891,7 @@ msgstr "" "'%s' geçerli bir inşa tipi ismi değil, uygulama, çalışma ortamı veya " "eklentiyi kullanın" -#: app/flatpak-builtins-build-init.c:205 app/flatpak-builtins-override.c:71 +#: app/flatpak-builtins-build-init.c:205 app/flatpak-builtins-override.c:74 #, c-format msgid "'%s' is not a valid application name: %s" msgstr "'%s' geçerli bir uygulama ismi değil: %s" @@ -762,12 +901,14 @@ msgstr "'%s' geçerli bir uygulama ismi değil: %s" msgid "Build directory %s already initialized" msgstr "İnşa dizini %s zaten ilklendirilmiş" -#: app/flatpak-builtins-build-sign.c:41 app/flatpak-builtins-install.c:56 +#: app/flatpak-builtins-build-sign.c:41 app/flatpak-builtins-info-remote.c:48 +#: app/flatpak-builtins-install.c:57 msgid "Arch to install for" msgstr "Yükleneceği mimari" -#: app/flatpak-builtins-build-sign.c:42 app/flatpak-builtins-install.c:62 -#: app/flatpak-builtins-uninstall.c:48 app/flatpak-builtins-update.c:61 +#: app/flatpak-builtins-build-sign.c:42 app/flatpak-builtins-info-remote.c:50 +#: app/flatpak-builtins-install.c:63 app/flatpak-builtins-uninstall.c:48 +#: app/flatpak-builtins-update.c:61 msgid "Look for runtime with the specified name" msgstr "Belirtilmiş isimle çalışma ortamı ara" @@ -779,11 +920,49 @@ msgstr "KONUM [KİMLİK [DAL]] - Bir uygulamayı veya çalışma ortamını imza msgid "No gpg key ids specified" msgstr "Gpg anahtar kimliği belirtilmemiş" -#: app/flatpak-builtins-delete-remote.c:37 +#: app/flatpak-builtins-config.c:41 +msgid "List configuration keys and values" +msgstr "" + +#: app/flatpak-builtins-config.c:42 +msgid "Get configuration for KEY" +msgstr "" + +#: app/flatpak-builtins-config.c:43 +msgid "Set configuration for KEY to VALUE" +msgstr "" + +#: app/flatpak-builtins-config.c:44 +msgid "Unset configuration for KEY" +msgstr "" + +#: app/flatpak-builtins-config.c:95 +#, fuzzy, c-format +msgid "Unknown configure key '%s'" +msgstr "Bilinmeyen komut '%s'" + +#: app/flatpak-builtins-config.c:144 app/flatpak-builtins-config.c:185 +#, fuzzy +msgid "You must specify key" +msgstr "UYGULAMA belirtilmelidir" + +#: app/flatpak-builtins-config.c:166 +msgid "You must specify both key and value" +msgstr "" + +#: app/flatpak-builtins-config.c:204 +msgid "[KEY [VALUE]] - Manage configuration" +msgstr "" + +#: app/flatpak-builtins-config.c:223 +msgid "Must specify one of --list, --get, --set or --unset" +msgstr "" + +#: app/flatpak-builtins-delete-remote.c:38 msgid "Remove remote even if in use" msgstr "Uzağı kullanılıyor olsa da kaldır" -#: app/flatpak-builtins-delete-remote.c:49 +#: app/flatpak-builtins-delete-remote.c:51 msgid "NAME - Delete a remote repository" msgstr "İSİM - Bir uzak arşivi sil" @@ -933,164 +1112,252 @@ msgstr "gid değiştirilemedi" msgid "Can't switch uid" msgstr "uid değiştirilemedi" -#: app/flatpak-builtins-info.c:49 app/flatpak-builtins-list.c:46 -#: app/flatpak-builtins-list-remotes.c:43 +#: app/flatpak-builtins-info.c:52 msgid "Show user installations" msgstr "Kullanıcı yüklemelerini göster" -#: app/flatpak-builtins-info.c:50 app/flatpak-builtins-list.c:47 -#: app/flatpak-builtins-list-remotes.c:44 +#: app/flatpak-builtins-info.c:53 msgid "Show system-wide installations" msgstr "Sistem-geneli yüklemeleri göster" -#: app/flatpak-builtins-info.c:51 app/flatpak-builtins-list.c:48 -#: app/flatpak-builtins-list-remotes.c:45 +#: app/flatpak-builtins-info.c:54 msgid "Show specific system-wide installations" msgstr "Belirli sistem-geneli yüklemeleri göster" -#: app/flatpak-builtins-info.c:52 +#: app/flatpak-builtins-info.c:55 app/flatpak-builtins-info-remote.c:53 msgid "Show ref" msgstr "Referansı göster" -#: app/flatpak-builtins-info.c:53 +#: app/flatpak-builtins-info.c:56 app/flatpak-builtins-info-remote.c:54 msgid "Show commit" msgstr "Değişikliği göster" -#: app/flatpak-builtins-info.c:54 +#: app/flatpak-builtins-info.c:57 msgid "Show origin" msgstr "Kökeni göster" -#: app/flatpak-builtins-info.c:55 +#: app/flatpak-builtins-info.c:58 msgid "Show size" msgstr "Boyut göster" -#: app/flatpak-builtins-info.c:56 +#: app/flatpak-builtins-info.c:59 app/flatpak-builtins-info-remote.c:56 msgid "Show metadata" msgstr "Üst veri göster" -#: app/flatpak-builtins-info.c:57 +#: app/flatpak-builtins-info.c:60 +#, fuzzy +msgid "Show permissions" +msgstr "Eklentileri göster" + +#: app/flatpak-builtins-info.c:61 +#, fuzzy +msgid "Query file access" +msgstr "" +"\n" +"Dosya erişimini yönet" + +#: app/flatpak-builtins-info.c:61 app/flatpak-builtins-install.c:68 +#: app/flatpak-builtins-update.c:64 +msgid "PATH" +msgstr "VERİYOLU" + +#: app/flatpak-builtins-info.c:62 msgid "Show extensions" msgstr "Eklentileri göster" -#: app/flatpak-builtins-info.c:97 +#: app/flatpak-builtins-info.c:118 msgid "NAME [BRANCH] - Get info about installed app and/or runtime" msgstr "" "İSİM [DAL] - Yüklü uygulamalar ve/veya çalışma ortamları hakkında bilgi edin" -#: app/flatpak-builtins-info.c:157 +#: app/flatpak-builtins-info.c:189 msgid "ref not present in origin" msgstr "" -#: app/flatpak-builtins-info.c:159 +#: app/flatpak-builtins-info.c:202 app/flatpak-builtins-info-remote.c:177 +msgid "Warning: Commit has no flatpak metadata\n" +msgstr "" + +#: app/flatpak-builtins-info.c:209 app/flatpak-builtins-info-remote.c:200 msgid "Ref:" msgstr "" -#: app/flatpak-builtins-info.c:160 app/flatpak-builtins-info.c:270 +#: app/flatpak-builtins-info.c:210 app/flatpak-builtins-info.c:364 +#: app/flatpak-builtins-info-remote.c:201 msgid "ID:" msgstr "" -#: app/flatpak-builtins-info.c:161 +#: app/flatpak-builtins-info.c:211 app/flatpak-builtins-info-remote.c:202 msgid "Arch:" msgstr "" -#: app/flatpak-builtins-info.c:162 +#: app/flatpak-builtins-info.c:212 app/flatpak-builtins-info-remote.c:203 msgid "Branch:" msgstr "Dal:" -#: app/flatpak-builtins-info.c:163 app/flatpak-builtins-info.c:271 +#: app/flatpak-builtins-info.c:213 app/flatpak-builtins-info.c:365 msgid "Origin:" msgstr "" -#: app/flatpak-builtins-info.c:166 +#: app/flatpak-builtins-info.c:215 app/flatpak-builtins-info-remote.c:205 +#, fuzzy +msgid "Collection ID:" +msgstr "Bir uygulama çalıştır" + +#: app/flatpak-builtins-info.c:217 app/flatpak-builtins-info-remote.c:206 +msgid "Date:" +msgstr "" + +#: app/flatpak-builtins-info.c:219 app/flatpak-builtins-info-remote.c:207 +msgid "Subject:" +msgstr "" + +#: app/flatpak-builtins-info.c:223 msgid "Active commit:" msgstr "" -#: app/flatpak-builtins-info.c:167 +#: app/flatpak-builtins-info.c:224 msgid "Latest commit:" msgstr "" -#: app/flatpak-builtins-info.c:170 app/flatpak-builtins-info.c:272 +#: app/flatpak-builtins-info.c:227 app/flatpak-builtins-info.c:366 +#: app/flatpak-builtins-info-remote.c:208 msgid "Commit:" msgstr "" -#: app/flatpak-builtins-info.c:172 +#: app/flatpak-builtins-info.c:229 msgid "alt-id:" msgstr "" -#: app/flatpak-builtins-info.c:173 +#: app/flatpak-builtins-info.c:230 app/flatpak-builtins-info-remote.c:209 +msgid "Parent:" +msgstr "" + +#: app/flatpak-builtins-info.c:231 msgid "Location:" msgstr "" -#: app/flatpak-builtins-info.c:174 app/flatpak-builtins-info.c:273 +#: app/flatpak-builtins-info.c:232 app/flatpak-builtins-info.c:367 +#: app/flatpak-builtins-info-remote.c:211 msgid "Installed size:" msgstr "Yüklü boyut:" -#: app/flatpak-builtins-info.c:179 +#: app/flatpak-builtins-info.c:237 app/flatpak-builtins-info-remote.c:216 msgid "Runtime:" msgstr "Çalışma zamanı:" -#: app/flatpak-builtins-info.c:184 +#: app/flatpak-builtins-info.c:242 msgid "Installed subdirectories:" msgstr "" -#: app/flatpak-builtins-info.c:269 +#: app/flatpak-builtins-info.c:363 msgid "Extension:" msgstr "Uzantı:" -#: app/flatpak-builtins-info.c:280 +#: app/flatpak-builtins-info.c:374 msgid "Subpaths:" msgstr "" -#: app/flatpak-builtins-install.c:57 -msgid "Don't pull, only install from local cache" -msgstr "Çekme, sadece yerel önbellekten yükle" +#: app/flatpak-builtins-info-remote.c:49 +msgid "Commit to show info for" +msgstr "" -#: app/flatpak-builtins-install.c:58 app/flatpak-builtins-update.c:57 -msgid "Don't deploy, only download to local cache" -msgstr "Dağıtma, sadece yerel önbelleğe indir" - -#: app/flatpak-builtins-install.c:59 -msgid "Don't install related refs" -msgstr "İlişkili referansları yükleme" - -#: app/flatpak-builtins-install.c:60 app/flatpak-builtins-update.c:59 -msgid "Don't verify/install runtime dependencies" -msgstr "Çalışma ortamı bağımlılıklarını doğrulama/yükleme" - -#: app/flatpak-builtins-install.c:61 app/flatpak-builtins-update.c:60 -msgid "Don't use static deltas" -msgstr "Dural deltaları kullanma" - -#: app/flatpak-builtins-install.c:63 app/flatpak-builtins-uninstall.c:49 -#: app/flatpak-builtins-update.c:62 +#: app/flatpak-builtins-info-remote.c:51 app/flatpak-builtins-install.c:64 +#: app/flatpak-builtins-uninstall.c:49 app/flatpak-builtins-update.c:62 msgid "Look for app with the specified name" msgstr "Belirtilmiş isimle uygulama ara" -#: app/flatpak-builtins-install.c:64 +#: app/flatpak-builtins-info-remote.c:52 +msgid "Display log" +msgstr "" + +#: app/flatpak-builtins-info-remote.c:55 +#, fuzzy +msgid "Show parent" +msgstr "Referansı göster" + +#: app/flatpak-builtins-info-remote.c:122 +msgid "" +" REMOTE REF - Show information about an application or runtime in a remote" +msgstr "" + +#: app/flatpak-builtins-info-remote.c:133 app/flatpak-builtins-install.c:499 +msgid "REMOTE and REF must be specified" +msgstr "UZAK ve REFERANS belirtilmelidir" + +#: app/flatpak-builtins-info-remote.c:210 +#, fuzzy +msgid "Download size:" +msgstr "İndirme boyutu" + +#: app/flatpak-builtins-info-remote.c:223 +msgid "History:\n" +msgstr "" + +#: app/flatpak-builtins-info-remote.c:244 +msgid " Subject:" +msgstr "" + +#: app/flatpak-builtins-info-remote.c:245 +msgid " Date:" +msgstr "" + +#: app/flatpak-builtins-info-remote.c:246 +#, fuzzy +msgid " Commit:" +msgstr "Değişikliği göster" + +#: app/flatpak-builtins-info-remote.c:292 +#, c-format +msgid "Warning: Commit %s has no flatpak metadata\n" +msgstr "" + +#: app/flatpak-builtins-install.c:58 +msgid "Don't pull, only install from local cache" +msgstr "Çekme, sadece yerel önbellekten yükle" + +#: app/flatpak-builtins-install.c:59 app/flatpak-builtins-update.c:57 +msgid "Don't deploy, only download to local cache" +msgstr "Dağıtma, sadece yerel önbelleğe indir" + +#: app/flatpak-builtins-install.c:60 +msgid "Don't install related refs" +msgstr "İlişkili referansları yükleme" + +#: app/flatpak-builtins-install.c:61 app/flatpak-builtins-update.c:59 +msgid "Don't verify/install runtime dependencies" +msgstr "Çalışma ortamı bağımlılıklarını doğrulama/yükleme" + +#: app/flatpak-builtins-install.c:62 app/flatpak-builtins-update.c:60 +msgid "Don't use static deltas" +msgstr "Dural deltaları kullanma" + +#: app/flatpak-builtins-install.c:65 msgid "Assume LOCATION is a .flatpak single-file bundle" msgstr "KONUM'un bir .flatpak tek dosya paketi olduğunu varsay" -#: app/flatpak-builtins-install.c:65 +#: app/flatpak-builtins-install.c:66 msgid "Assume LOCATION is a .flatpakref application description" msgstr "KONUM'un bir .flatpakref uygulama açıklaması olduğunu varsay" -#: app/flatpak-builtins-install.c:66 +#: app/flatpak-builtins-install.c:67 msgid "Check bundle signatures with GPG key from FILE (- for stdin)" msgstr "Paket imzalarını DOSYA'daki (stdin için -) GPG anahtarıyla kontrol et" -#: app/flatpak-builtins-install.c:67 +#: app/flatpak-builtins-install.c:68 msgid "Only install this subpath" msgstr "Sadece bu alt yolunu yükle " -#: app/flatpak-builtins-install.c:67 app/flatpak-builtins-update.c:64 -msgid "PATH" -msgstr "VERİYOLU" - -#: app/flatpak-builtins-install.c:68 app/flatpak-builtins-update.c:65 +#: app/flatpak-builtins-install.c:69 app/flatpak-builtins-update.c:65 msgid "Automatically answer yes for all questions" msgstr "Tüm soruları otomatik olarak evetle cevapla" -#: app/flatpak-builtins-install.c:210 +#: app/flatpak-builtins-install.c:70 +#, fuzzy +msgid "Uninstall first if already installed" +msgstr "%s değişikliği %s zaten yüklü" + +#: app/flatpak-builtins-install.c:212 #, c-format msgid "" "This application depends on runtimes from:\n" @@ -1101,149 +1368,146 @@ msgstr "" " %s\n" "Bunu yeni uzak '%s' olarak yapılandır" -#: app/flatpak-builtins-install.c:214 app/flatpak-builtins-install.c:340 +#: app/flatpak-builtins-install.c:216 app/flatpak-builtins-install.c:342 #, c-format msgid "Configuring %s as new remote '%s'" msgstr "%s yeni uzak %s olarak yapılandırılıyor" -#: app/flatpak-builtins-install.c:262 +#: app/flatpak-builtins-install.c:264 msgid "Bundle filename must be specified" msgstr "Paket dosya adı belirtilmelidir" -#: app/flatpak-builtins-install.c:272 +#: app/flatpak-builtins-install.c:274 msgid "Remote bundles are not supported" msgstr "Uzak paketler desteklenmemektedir" -#: app/flatpak-builtins-install.c:336 +#: app/flatpak-builtins-install.c:338 #, c-format msgid "" "The remote '%s', at location %s contains additional applications.\n" -"Do you want to install other applications from here?" +"Should the remote be kept for future installations?" msgstr "" -#: app/flatpak-builtins-install.c:396 +#: app/flatpak-builtins-install.c:398 msgid "Filename or uri must be specified" msgstr "Dosya adı veya uri belirtilmelidir" -#: app/flatpak-builtins-install.c:440 +#: app/flatpak-builtins-install.c:442 #, c-format msgid "Installing: %s\n" msgstr "Yükleniyor: %s\n" -#: app/flatpak-builtins-install.c:470 +#: app/flatpak-builtins-install.c:474 msgid "LOCATION/REMOTE [REF...] - Install applications or runtimes" msgstr "KONUM/UZAK [REFERANS...] - Uygulamalar veya çalışma ortamları yükle" -#: app/flatpak-builtins-install.c:491 -msgid "REMOTE and REF must be specified" -msgstr "UZAK ve REFERANS belirtilmelidir" - -#: app/flatpak-builtins-list.c:49 +#: app/flatpak-builtins-list.c:43 msgid "Show extra information" msgstr "Ek bilgi göster" -#: app/flatpak-builtins-list.c:50 +#: app/flatpak-builtins-list.c:44 msgid "List installed runtimes" msgstr "Yüklü çalışma ortamlarını listele" -#: app/flatpak-builtins-list.c:51 +#: app/flatpak-builtins-list.c:45 msgid "List installed applications" msgstr "Yüklü uygulamaları listele" -#: app/flatpak-builtins-list.c:52 +#: app/flatpak-builtins-list.c:46 msgid "Arch to show" msgstr "Gösterilecek mimari" -#: app/flatpak-builtins-list.c:53 app/flatpak-builtins-ls-remote.c:49 +#: app/flatpak-builtins-list.c:47 app/flatpak-builtins-ls-remote.c:50 msgid "List all refs (including locale/debug)" msgstr "" -#: app/flatpak-builtins-list.c:131 app/flatpak-builtins-ls-remote.c:129 +#: app/flatpak-builtins-list.c:125 app/flatpak-builtins-ls-remote.c:174 #: app/flatpak-builtins-repo.c:98 msgid "Ref" msgstr "Referans" -#: app/flatpak-builtins-list.c:134 app/flatpak-builtins-ls-remote.c:131 +#: app/flatpak-builtins-list.c:128 app/flatpak-builtins-ls-remote.c:176 msgid "Origin" msgstr "" -#: app/flatpak-builtins-list.c:135 +#: app/flatpak-builtins-list.c:129 msgid "Active commit" msgstr "" -#: app/flatpak-builtins-list.c:136 +#: app/flatpak-builtins-list.c:130 msgid "Latest commit" msgstr "" -#: app/flatpak-builtins-list.c:137 app/flatpak-builtins-ls-remote.c:133 +#: app/flatpak-builtins-list.c:131 app/flatpak-builtins-ls-remote.c:178 msgid "Installed size" msgstr "Yüklü boyut" -#: app/flatpak-builtins-list.c:139 app/flatpak-builtins-list-remotes.c:112 +#: app/flatpak-builtins-list.c:133 app/flatpak-builtins-list-remotes.c:73 msgid "Options" msgstr "" -#: app/flatpak-builtins-list.c:375 +#: app/flatpak-builtins-list.c:305 msgid " - List installed apps and/or runtimes" msgstr " - Yüklü uygulamaları ve/veya çalışma ortamlarını listele" -#: app/flatpak-builtins-list-remotes.c:46 +#: app/flatpak-builtins-list-remotes.c:40 msgid "Show remote details" msgstr "Uzak detaylarını göster" -#: app/flatpak-builtins-list-remotes.c:47 +#: app/flatpak-builtins-list-remotes.c:41 msgid "Show disabled remotes" msgstr "Devredışı bırakılmış uzakları göster" -#: app/flatpak-builtins-list-remotes.c:59 +#: app/flatpak-builtins-list-remotes.c:53 msgid " - List remote repositories" msgstr " - Uzak arşivleri listele" -#: app/flatpak-builtins-list-remotes.c:105 +#: app/flatpak-builtins-list-remotes.c:66 msgid "Name" msgstr "" -#: app/flatpak-builtins-list-remotes.c:108 +#: app/flatpak-builtins-list-remotes.c:69 msgid "Title" msgstr "" -#: app/flatpak-builtins-list-remotes.c:110 +#: app/flatpak-builtins-list-remotes.c:71 msgid "Priority" msgstr "" -#: app/flatpak-builtins-ls-remote.c:44 +#: app/flatpak-builtins-ls-remote.c:45 msgid "Show arches and branches" msgstr "Mimarileri ve dalları göster" -#: app/flatpak-builtins-ls-remote.c:45 +#: app/flatpak-builtins-ls-remote.c:46 msgid "Show only runtimes" msgstr "Sadece çalışma ortamlarını göster" -#: app/flatpak-builtins-ls-remote.c:46 +#: app/flatpak-builtins-ls-remote.c:47 msgid "Show only apps" msgstr "Sadece uygulamaları göster" -#: app/flatpak-builtins-ls-remote.c:47 +#: app/flatpak-builtins-ls-remote.c:48 msgid "Show only those where updates are available" msgstr "Sadece güncellemeleri olanları göster" -#: app/flatpak-builtins-ls-remote.c:48 +#: app/flatpak-builtins-ls-remote.c:49 msgid "Limit to this arch (* for all)" msgstr "Bu mimariyle kısıtla (hepsi için *)" -#: app/flatpak-builtins-ls-remote.c:74 -msgid " REMOTE - Show available runtimes and applications" +#: app/flatpak-builtins-ls-remote.c:96 +#, fuzzy +msgid " [REMOTE] - Show available runtimes and applications" msgstr " UZAK - Kullanılabilir çalışma ortamlarını ve uygulamaları listele" -#: app/flatpak-builtins-ls-remote.c:132 +#: app/flatpak-builtins-ls-remote.c:177 msgid "Commit" msgstr "" -#: app/flatpak-builtins-ls-remote.c:134 +#: app/flatpak-builtins-ls-remote.c:179 msgid "Download size" msgstr "İndirme boyutu" -#: app/flatpak-builtins-ls-remote.c:245 +#: app/flatpak-builtins-ls-remote.c:304 #, fuzzy msgid "No ref information available in repository" msgstr "Arşiv hakkında genel bilgileri yazdır" @@ -1252,28 +1516,63 @@ msgstr "Arşiv hakkında genel bilgileri yazdır" msgid "Arch to make current for" msgstr "Mevcutun yapılacağı mimariler" -#: app/flatpak-builtins-make-current.c:57 +#: app/flatpak-builtins-make-current.c:58 msgid "APP BRANCH - Make branch of application current" msgstr "UYGULAMA DAL - Uygulamanın dalını mevcut yap" -#: app/flatpak-builtins-make-current.c:64 app/flatpak-builtins-override.c:63 -#: app/flatpak-builtins-run.c:105 +#: app/flatpak-builtins-make-current.c:69 app/flatpak-builtins-run.c:105 msgid "APP must be specified" msgstr "UYGULAMA belirtilmelidir" -#: app/flatpak-builtins-make-current.c:79 +#: app/flatpak-builtins-make-current.c:84 msgid "BRANCH must be specified" msgstr "DAL belirtilmelidir" -#: app/flatpak-builtins-make-current.c:92 +#: app/flatpak-builtins-make-current.c:97 #, c-format msgid "App %s branch %s is not installed" msgstr "Uygulama %s dal %s yüklenmemiş" -#: app/flatpak-builtins-override.c:53 -msgid "APP - Override settings for application" +#: app/flatpak-builtins-override.c:54 +#, fuzzy +msgid "[APP] - Override settings [for application]" msgstr "UYGULAMA - Uygulama için ayarları geçersiz kıl" +#: app/flatpak-builtins-repo.c:48 +#, c-format +msgid "Title: %s\n" +msgstr "" + +#: app/flatpak-builtins-repo.c:51 +#, c-format +msgid "Collection ID: %s\n" +msgstr "" + +#: app/flatpak-builtins-repo.c:54 +#, c-format +msgid "Default branch: %s\n" +msgstr "" + +#: app/flatpak-builtins-repo.c:57 +#, c-format +msgid "Redirect URL: %s\n" +msgstr "" + +#: app/flatpak-builtins-repo.c:60 +#, c-format +msgid "Redirect collection ID: %s\n" +msgstr "" + +#: app/flatpak-builtins-repo.c:68 +#, c-format +msgid "GPG key hash: %s\n" +msgstr "" + +#: app/flatpak-builtins-repo.c:77 +#, c-format +msgid "%zd branches\n" +msgstr "" + #: app/flatpak-builtins-repo.c:99 msgid "Installed" msgstr "Yüklü" @@ -1294,7 +1593,7 @@ msgstr "Arşivdeki dalları listele" msgid "Print metadata for a branch" msgstr "Dal için üst veriyi yazdır" -#: app/flatpak-builtins-repo.c:167 +#: app/flatpak-builtins-repo.c:168 msgid "LOCATION - Repository maintenance" msgstr "KONUM - Arşiv bakım" @@ -1406,14 +1705,6 @@ msgstr "Kullanılacak çalışma ortamı" msgid "Runtime version to use" msgstr "Kullanılacak çalışma ortamı sürümü" -#: app/flatpak-builtins-run.c:58 -msgid "Log session bus calls" -msgstr "Oturum veri yolu çağrılarını günlükle" - -#: app/flatpak-builtins-run.c:59 -msgid "Log system bus calls" -msgstr "Sistem veri yolu çağrılarını günlükle" - #: app/flatpak-builtins-run.c:60 #, fuzzy msgid "Log accessibility bus calls" @@ -1427,6 +1718,44 @@ msgstr "" msgid "APP [args...] - Run an app" msgstr "UYGULAMA [arg...] - Bir uygulamayı çalıştır" +#: app/flatpak-builtins-search.c:239 +msgid "TEXT - Search remote apps/runtimes for text" +msgstr "" + +#: app/flatpak-builtins-search.c:249 +#, fuzzy +msgid "TEXT must be specified" +msgstr "UZAK belirtilmelidir" + +#: app/flatpak-builtins-search.c:305 +#, fuzzy +msgid "Application ID" +msgstr "Bir uygulama çalıştır" + +#: app/flatpak-builtins-search.c:306 +msgid "Version" +msgstr "" + +#: app/flatpak-builtins-search.c:308 +#, fuzzy +msgid "Branch" +msgstr "Dal:" + +#: app/flatpak-builtins-search.c:310 +#, fuzzy +msgid "Remotes" +msgstr "%s uzak yok" + +#: app/flatpak-builtins-search.c:311 +#, fuzzy +msgid "Description" +msgstr "Tam açıklama" + +#: app/flatpak-builtins-search.c:320 +#, fuzzy +msgid "No matches found" +msgstr "%s için eşleşme yok" + #: app/flatpak-builtins-uninstall.c:44 msgid "Arch to uninstall" msgstr "Silinecek mimari" @@ -1443,19 +1772,24 @@ msgstr "İlişkili referansları sil" msgid "Remove files even if running" msgstr "Dosyaları çalışıyor olsalar da kaldır" -#: app/flatpak-builtins-uninstall.c:69 +#: app/flatpak-builtins-uninstall.c:70 msgid "REF... - Uninstall an application" msgstr "REFERANS... - Bir uygulamayı sil" -#: app/flatpak-builtins-uninstall.c:76 +#: app/flatpak-builtins-uninstall.c:81 msgid "Must specify at least one REF" msgstr "En az bir REFERANS belirtilmelidir" -#: app/flatpak-builtins-uninstall.c:129 app/flatpak-transaction.c:340 +#: app/flatpak-builtins-uninstall.c:134 app/flatpak-transaction.c:355 #, c-format msgid "Warning: Problem looking for related refs: %s\n" msgstr "Uyarı: İlişkili referansları ararken sorun: %s\n" +#: app/flatpak-builtins-uninstall.c:164 +#, fuzzy, c-format +msgid "Uninstalling: %s\n" +msgstr "Yükleniyor: %s\n" + #: app/flatpak-builtins-update.c:53 msgid "Arch to update for" msgstr "Güncelleneceği mimari" @@ -1464,10 +1798,6 @@ msgstr "Güncelleneceği mimari" msgid "Commit to deploy" msgstr "Dağıtılacak değişiklik" -#: app/flatpak-builtins-update.c:54 -msgid "COMMIT" -msgstr "DEĞİŞİKLİK" - #: app/flatpak-builtins-update.c:55 msgid "Remove old files even if running" msgstr "Eski dosyaları çalışıyor olsalar da kaldır" @@ -1488,42 +1818,94 @@ msgstr "Appstream'i uzak için güncelle" msgid "Only update this subpath" msgstr "Sadece bu alt yolu güncelle" -#: app/flatpak-builtins-update.c:95 -#, c-format -msgid "Updating appstream for remote %s\n" -msgstr "Appstream uzak %s için güncelleniyor\n" - -#: app/flatpak-builtins-update.c:133 +#: app/flatpak-builtins-update.c:83 msgid "[REF...] - Update applications or runtimes" msgstr "[REFERANS...] - Uygulamaları veya çalışma ortamlarını güncelle" +#: app/flatpak-builtins-update.c:119 +#, fuzzy +msgid "Looking for updates...\n" +msgstr "Güncelleme yok.\n" + +#: app/flatpak-builtins-utils.c:365 +#, c-format +msgid "Remote ‘%s’ found in multiple installations:\n" +msgstr "" + +#: app/flatpak-builtins-utils.c:372 +#, fuzzy +msgid "Which do you want to use (0 to abort)?" +msgstr "Hangisini yüklemek istiyorsunuz (iptal etmek için 0)?" + +#: app/flatpak-builtins-utils.c:374 +#, c-format +msgid "No remote chosen to resolve ‘%s’ which exists in multiple installations" +msgstr "" + +#: app/flatpak-builtins-utils.c:479 app/flatpak-builtins-utils.c:481 +#, fuzzy, c-format +msgid "Updating appstream data for user remote %s\n" +msgstr "Appstream uzak %s için güncelleniyor\n" + +#: app/flatpak-builtins-utils.c:486 app/flatpak-builtins-utils.c:488 +#, fuzzy, c-format +msgid "Updating appstream data for remote %s\n" +msgstr "Appstream uzak %s için güncelleniyor\n" + +#: app/flatpak-builtins-utils.c:493 +#, fuzzy, c-format +msgid "Error updating: %s\n" +msgstr "Özet güncelleniyor\n" + +#: app/flatpak-builtins-utils.c:526 +#, c-format +msgid "Remote \"%s\" not found" +msgstr "" + #. translators: please keep the leading space -#: app/flatpak-main.c:61 +#: app/flatpak-main.c:62 msgid " Manage installed apps and runtimes" msgstr " Yüklü uygulamaları ve çalışma ortamlarını yönet" -#: app/flatpak-main.c:62 +#: app/flatpak-main.c:63 msgid "Install an application or runtime" msgstr "Bir uygulama veya çalışma ortamı yükle" -#: app/flatpak-main.c:63 +#: app/flatpak-main.c:64 msgid "Update an installed application or runtime" msgstr "Yüklü bir uygulamayı veya çalışma ortamını güncelle" -#: app/flatpak-main.c:64 +#: app/flatpak-main.c:65 msgid "Uninstall an installed application or runtime" msgstr "Yüklü bir uygulama veya çalışma ortamını kaldır" -#: app/flatpak-main.c:65 +#: app/flatpak-main.c:66 msgid "List installed apps and/or runtimes" msgstr "Yüklü uygulama ve/veya çalışma ortamlarını listele" -#: app/flatpak-main.c:66 +#: app/flatpak-main.c:67 msgid "Show info for installed app or runtime" msgstr "Yüklü uygulama veya çalışma ortamı için bilgi göster" +#: app/flatpak-main.c:68 +#, fuzzy +msgid "Configure flatpak" +msgstr "Uzak Yapılandır" + #. translators: please keep the leading newline and space -#: app/flatpak-main.c:69 +#: app/flatpak-main.c:71 +#, fuzzy +msgid "" +"\n" +" Finding applications and runtimes" +msgstr "Bir uygulamayı veya çalışma ortamını imzala" + +#: app/flatpak-main.c:72 +msgid "Search for remote apps/runtimes" +msgstr "" + +#. translators: please keep the leading newline and space +#: app/flatpak-main.c:75 msgid "" "\n" " Running applications" @@ -1531,24 +1913,24 @@ msgstr "" "\n" " Çalışan uygulamalar" -#: app/flatpak-main.c:70 +#: app/flatpak-main.c:76 msgid "Run an application" msgstr "Bir uygulama çalıştır" -#: app/flatpak-main.c:71 +#: app/flatpak-main.c:77 msgid "Override permissions for an application" msgstr "Bir uygulama için izinleri geçersiz kıl" -#: app/flatpak-main.c:72 +#: app/flatpak-main.c:78 msgid "Specify default version to run" msgstr "Çalıştırılacak öntanımlı sürümü belirt" -#: app/flatpak-main.c:73 +#: app/flatpak-main.c:79 msgid "Enter the namespace of a running application" msgstr "Çalışan bir uygulamanın ad alanına gir" #. translators: please keep the leading newline and space -#: app/flatpak-main.c:76 +#: app/flatpak-main.c:82 msgid "" "\n" " Manage file access" @@ -1556,24 +1938,24 @@ msgstr "" "\n" "Dosya erişimini yönet" -#: app/flatpak-main.c:77 +#: app/flatpak-main.c:83 msgid "Grant an application access to a specific file" msgstr "Bir uygulamaya belirli bir dosyaya erişim tanı" -#: app/flatpak-main.c:78 +#: app/flatpak-main.c:84 msgid "Revoke access to a specific file" msgstr "Belirli bir dosyaya erişimi geri çek" -#: app/flatpak-main.c:79 +#: app/flatpak-main.c:85 msgid "Show information about a specific file" msgstr "Belirli bir dosya hakkında bilgi göster" -#: app/flatpak-main.c:80 +#: app/flatpak-main.c:86 msgid "List exported files" msgstr "Dışa aktarılmış dosyaları listele" #. translators: please keep the leading newline and space -#: app/flatpak-main.c:83 +#: app/flatpak-main.c:89 msgid "" "\n" " Manage remote repositories" @@ -1581,28 +1963,33 @@ msgstr "" "\n" " Uzak arşivleri yönet" -#: app/flatpak-main.c:84 +#: app/flatpak-main.c:90 msgid "List all configured remotes" msgstr "Tüm yapılandırılmış uzakları listele" -#: app/flatpak-main.c:85 +#: app/flatpak-main.c:91 msgid "Add a new remote repository (by URL)" msgstr "Yeni bir uzak arşiv ekle (URL'yle)" -#: app/flatpak-main.c:86 +#: app/flatpak-main.c:92 msgid "Modify properties of a configured remote" msgstr "Yapılandırılmış bir uzağın niteliklerini düzenle" -#: app/flatpak-main.c:87 +#: app/flatpak-main.c:93 msgid "Delete a configured remote" msgstr "Yapılandırılmış bir uzağı sil" -#: app/flatpak-main.c:89 +#: app/flatpak-main.c:95 msgid "List contents of a configured remote" msgstr "Yapılandırılmış bir uzağın içeriklerini listele" +#: app/flatpak-main.c:96 +#, fuzzy +msgid "Show information about a remote app or runtime" +msgstr "Yüklü uygulama veya çalışma ortamı için bilgi göster" + #. translators: please keep the leading newline and space -#: app/flatpak-main.c:92 +#: app/flatpak-main.c:99 msgid "" "\n" " Build applications" @@ -1610,504 +1997,283 @@ msgstr "" "\n" " Uygulamaları inşa et" -#: app/flatpak-main.c:93 +#: app/flatpak-main.c:100 msgid "Initialize a directory for building" msgstr "İnşa için bir dizini ilklendir" -#: app/flatpak-main.c:94 +#: app/flatpak-main.c:101 msgid "Run a build command inside the build dir" msgstr "İnşa dizininde bir inşa komutu çalıştır" -#: app/flatpak-main.c:95 +#: app/flatpak-main.c:102 msgid "Finish a build dir for export" msgstr "Bir inşa dizinini dışa aktarma için bitir" -#: app/flatpak-main.c:96 +#: app/flatpak-main.c:103 msgid "Export a build dir to a repository" msgstr "Bir inşa dizinini bir arşive dışa aktar" -#: app/flatpak-main.c:97 -msgid "Create a bundle file from a build directory" +#: app/flatpak-main.c:104 +#, fuzzy +msgid "Create a bundle file from a ref in a local repository" msgstr "Bir inşa dizininden paket dosyası oluştur" -#: app/flatpak-main.c:98 +#: app/flatpak-main.c:105 msgid "Import a bundle file" msgstr "Bir paket dosyası içe aktar" -#: app/flatpak-main.c:99 +#: app/flatpak-main.c:106 msgid "Sign an application or runtime" msgstr "Bir uygulamayı veya çalışma ortamını imzala" -#: app/flatpak-main.c:100 +#: app/flatpak-main.c:107 msgid "Update the summary file in a repository" msgstr "Bir arşivdeki özet dosyasını güncelle" -#: app/flatpak-main.c:101 +#: app/flatpak-main.c:108 msgid "Create new commit based on existing ref" msgstr "Var olan referansa dayalı yeni değişiklik yarat" -#: app/flatpak-main.c:102 +#: app/flatpak-main.c:109 msgid "Print information about a repo" msgstr "Bir arşiv hakkında bilgi yazdır" -#: app/flatpak-main.c:119 +#: app/flatpak-main.c:126 #, fuzzy msgid "Print debug information during command processing, -vv for more detail" msgstr "Komut işleme sırasında hata ayıklama bilgisini yaz" -#: app/flatpak-main.c:120 +#: app/flatpak-main.c:127 msgid "Print OSTree debug information during command processing" msgstr "Komut işleme sırasında OSTree hata ayıklama bilgisini yaz" -#: app/flatpak-main.c:121 +#: app/flatpak-main.c:128 msgid "Show help options" msgstr "Yardım seçeneklerini göster" -#: app/flatpak-main.c:126 +#: app/flatpak-main.c:133 msgid "Print version information and exit" msgstr "Sürüm bilgisini yaz ve çık" -#: app/flatpak-main.c:127 +#: app/flatpak-main.c:134 msgid "Print default arch and exit" msgstr "Öntanımlı mimariyi yaz ve çık" -#: app/flatpak-main.c:128 +#: app/flatpak-main.c:135 msgid "Print supported arches and exit" msgstr "Desteklenen mimarileri yaz ve çık" -#: app/flatpak-main.c:129 +#: app/flatpak-main.c:136 msgid "Print active gl drivers and exit" msgstr "Etkin gl sürücülerini yazdır ve çık" -#: app/flatpak-main.c:134 +#: app/flatpak-main.c:141 msgid "Work on user installations" msgstr "Kullanıcı yüklemeleri üzerinde çalış" -#: app/flatpak-main.c:135 +#: app/flatpak-main.c:142 msgid "Work on system-wide installations (default)" msgstr "Sistem geneli yüklemeler üzerinde çalış (öntanımlı)" -#: app/flatpak-main.c:136 -msgid "Work on a specific system-wide installation" +#: app/flatpak-main.c:143 +#, fuzzy +msgid "Work on specific system-wide installation(s)" msgstr "Belirli bir sistem geneli yükleme üzerinde çalış" -#: app/flatpak-main.c:136 +#: app/flatpak-main.c:143 msgid "NAME" msgstr "İSİM" -#: app/flatpak-main.c:162 +#: app/flatpak-main.c:169 msgid "Builtin Commands:" msgstr "Yerleşik Komutlar:" -#: app/flatpak-main.c:388 +#: app/flatpak-main.c:370 +msgid "" +"The --installation option was used multiple times for a command that works " +"on one installation" +msgstr "" + +#: app/flatpak-main.c:489 #, c-format msgid "Unknown command '%s'" msgstr "Bilinmeyen komut '%s'" -#: app/flatpak-main.c:396 +#: app/flatpak-main.c:497 msgid "No command specified" msgstr "Komut belirtilmemiş" -#: app/flatpak-main.c:514 +#: app/flatpak-main.c:615 msgid "error:" msgstr "hata:" -#: app/flatpak-transaction.c:302 +#: app/flatpak-transaction.c:313 +#, fuzzy, c-format +msgid "Found in remote %s\n" +msgstr "Birkaç farklı uzakta bulundu:\n" + +#: app/flatpak-transaction.c:317 #, c-format msgid "Found in remote %s, do you want to install it?" msgstr "Uzak %s'te bulundu, yüklemek ister misiniz?" -#: app/flatpak-transaction.c:307 +#: app/flatpak-transaction.c:322 msgid "Found in several remotes:\n" msgstr "Birkaç farklı uzakta bulundu:\n" -#: app/flatpak-transaction.c:312 +#: app/flatpak-transaction.c:327 msgid "Which do you want to install (0 to abort)?" msgstr "Hangisini yüklemek istiyorsunuz (iptal etmek için 0)?" -#: app/flatpak-transaction.c:402 +#: app/flatpak-transaction.c:417 #, c-format msgid "Required runtime for %s (%s) is not installed, searching...\n" msgstr "%s için gerekli çalışma ortamı (%s) yüklü değil, aranıyor...\n" -#: app/flatpak-transaction.c:408 +#: app/flatpak-transaction.c:423 #, c-format msgid "The required runtime %s was not found in a configured remote.\n" msgstr "Gerekli çalışma ortamı %s yapılandırılmış uzaklarda bulunamadı.\n" -#: app/flatpak-transaction.c:469 common/flatpak-dir.c:1127 -#: common/flatpak-dir.c:1433 common/flatpak-dir.c:1456 -#: common/flatpak-dir.c:1478 common/flatpak-dir.c:10136 -#: common/flatpak-utils.c:1272 common/flatpak-utils.c:1366 +#: app/flatpak-transaction.c:506 common/flatpak-dir.c:1160 +#: common/flatpak-dir.c:1479 common/flatpak-dir.c:1502 +#: common/flatpak-dir.c:1524 common/flatpak-dir.c:10655 +#: common/flatpak-utils.c:1312 common/flatpak-utils.c:1406 #, c-format msgid "%s not installed" msgstr "%s yüklü değil" -#: app/flatpak-transaction.c:475 +#: app/flatpak-transaction.c:512 #, c-format msgid "Remote %s disabled, ignoring %s update" msgstr "Uzak %s devredışı, %s güncellemesi yok sayılıyor" -#: app/flatpak-transaction.c:485 +#: app/flatpak-transaction.c:525 #, c-format msgid "%s already installed, skipping\n" msgstr "%s zaten yüklü, atlanıyor\n" -#: app/flatpak-transaction.c:529 +#: app/flatpak-transaction.c:531 +#, fuzzy, c-format +msgid "%s is already installed from other remote (%s)" +msgstr "%s değişikliği %s zaten yüklü" + +#: app/flatpak-transaction.c:543 +#, c-format +msgid "Warning: Can't find dependencies: %s\n" +msgstr "" + +#: app/flatpak-transaction.c:570 +#, c-format +msgid "Invalid require-flatpak argument %s\n" +msgstr "" + +#: app/flatpak-transaction.c:576 #, c-format msgid "%s needs a later flatpak version (%s)" msgstr "%s daha üst bir flatpak versiyonu gerektiriyor (%s)" -#: app/flatpak-transaction.c:704 +#: app/flatpak-transaction.c:688 +#, fuzzy, c-format +msgid "Error updating remote metadata for '%s': %s\n" +msgstr "'%s' için ek üst veri güncellenirken hata: %s\n" + +#: app/flatpak-transaction.c:744 msgid "install" msgstr "yükle" -#: app/flatpak-transaction.c:705 +#: app/flatpak-transaction.c:746 +#, fuzzy, c-format +msgid "Installing for user: %s from %s\n" +msgstr "Yükleniyor: %2$s'ten %1$s\n" + +#: app/flatpak-transaction.c:748 #, c-format msgid "Installing: %s from %s\n" msgstr "Yükleniyor: %2$s'ten %1$s\n" -#: app/flatpak-transaction.c:721 +#: app/flatpak-transaction.c:765 msgid "update" msgstr "güncelle" -#: app/flatpak-transaction.c:729 +#: app/flatpak-transaction.c:774 +#, fuzzy, c-format +msgid "Updating for user: %s from %s\n" +msgstr "Güncelleniyor: %2$s'ten %1$s\n" + +#: app/flatpak-transaction.c:776 #, c-format msgid "Updating: %s from %s\n" msgstr "Güncelleniyor: %2$s'ten %1$s\n" -#: app/flatpak-transaction.c:749 +#: app/flatpak-transaction.c:796 #, c-format msgid "Now at %s.\n" msgstr "Şimdi %s'te\n" -#: app/flatpak-transaction.c:755 +#: app/flatpak-transaction.c:802 msgid "No updates.\n" msgstr "Güncelleme yok.\n" -#: app/flatpak-transaction.c:773 +#: app/flatpak-transaction.c:820 msgid "install bundle" msgstr "paket yükle" -#: app/flatpak-transaction.c:774 +#: app/flatpak-transaction.c:822 +#, fuzzy, c-format +msgid "Installing for user: %s from bundle %s\n" +msgstr "Yükleniyor: paket %2$s'ten %1$s\n" + +#: app/flatpak-transaction.c:824 #, c-format msgid "Installing: %s from bundle %s\n" msgstr "Yükleniyor: paket %2$s'ten %1$s\n" -#: app/flatpak-transaction.c:786 +#: app/flatpak-transaction.c:836 #, c-format msgid "Warning: Failed to %s %s: %s\n" msgstr "Uyarı: %2$s'i %1$s başarılamadı: %3$s\n" -#: app/flatpak-transaction.c:791 +#: app/flatpak-transaction.c:841 #, c-format msgid "Error: Failed to %s %s: %s\n" msgstr "Hata: %2$s'i %1$s başarılamadı: %3$s\n" -#: app/flatpak-transaction.c:796 +#: app/flatpak-transaction.c:846 msgid "One or more operations failed" msgstr "Bir veya daha fazla seçenek başarılamadı" -#: common/flatpak-dir.c:1015 -#, c-format -msgid "No overrides found for %s" -msgstr "%s için geçersiz kılma bulunamadı" - -#: common/flatpak-dir.c:1611 -#, c-format -msgid "While opening repository %s: " -msgstr "Arşiv %s'i açarken:" - -#: common/flatpak-dir.c:1770 common/flatpak-dir.c:5109 -msgid "Can't create deploy directory" -msgstr "Dağıtım dizini oluşturulamadı" - -#: common/flatpak-dir.c:2450 -#, c-format -msgid "Invalid sha256 for extra data uri %s" -msgstr "Ek veri uri'si %s için geçersiz sha256 " - -#: common/flatpak-dir.c:2455 -#, c-format -msgid "Empty name for extra data uri %s" -msgstr "Ek veri uri'si %s için boş isim" - -#: common/flatpak-dir.c:2462 -#, c-format -msgid "Unsupported extra data uri %s" -msgstr "Desteklenmeyen ek veri uri'si %s" - -#: common/flatpak-dir.c:2476 -#, fuzzy, c-format -msgid "Failed to load local extra-data %s: %s" -msgstr "Değişiklik %s okunamadı:" - -#: common/flatpak-dir.c:2479 -#, fuzzy, c-format -msgid "Wrong size for extra-data %s" -msgstr "Ek veri %s için yanlış boyut" - -#: common/flatpak-dir.c:2494 -#, c-format -msgid "While downloading %s: " -msgstr "%s indirilirken:" - -#: common/flatpak-dir.c:2501 -#, c-format -msgid "Wrong size for extra data %s" -msgstr "Ek veri %s için yanlış boyut" - -#: common/flatpak-dir.c:2512 -#, c-format -msgid "Invalid checksum for extra data %s" -msgstr "Ek veri %s için geçeresiz sağlama toplamı" - -#: common/flatpak-dir.c:2768 -#, c-format -msgid "%s commit %s already installed" -msgstr "%s değişikliği %s zaten yüklü" - -#: common/flatpak-dir.c:3097 common/flatpak-dir.c:3411 -#, c-format -msgid "While pulling %s from remote %s: " -msgstr "Uzak %2$s'ten %1$s çekerken:" - -#: common/flatpak-dir.c:3296 -#, c-format -msgid "Can't find %s in remote %s" -msgstr "Uzak %2$s'te %1$s bulunamadı" - -#: common/flatpak-dir.c:3969 -msgid "Not enough memory" -msgstr "Yeterli bellek yok" - -#: common/flatpak-dir.c:3988 -msgid "Failed to read from exported file" -msgstr "Dışa aktarılmış dosyadan okunamadı" - -#: common/flatpak-dir.c:4179 -msgid "Error reading mimetype xml file" -msgstr "" - -#: common/flatpak-dir.c:4184 -msgid "Invalid mimetype xml file" -msgstr "" - -#: common/flatpak-dir.c:4726 -msgid "While getting detached metadata: " -msgstr "Ayrık üst veri alınırken:" - -#: common/flatpak-dir.c:4744 -msgid "While creating extradir: " -msgstr "Ek dizin oluşturulurken:" - -#: common/flatpak-dir.c:4765 -msgid "Invalid sha256 for extra data" -msgstr "Ek veri için geçersiz sha256" - -#: common/flatpak-dir.c:4794 -msgid "Wrong size for extra data" -msgstr "Ek veri için yanlış boyut" - -#: common/flatpak-dir.c:4798 -msgid "Invalid checksum for extra data" -msgstr "Ek veri için geçersiz sağlama toplamı" - -#: common/flatpak-dir.c:4807 -#, c-format -msgid "While writing extra data file '%s': " -msgstr "Ek veri dosyası '%s' yazılırken:" - -#: common/flatpak-dir.c:4991 -#, fuzzy, c-format -msgid "apply_extra script failed, exit status %d" -msgstr "apply_extra betiği başarısız oldu" - -#: common/flatpak-dir.c:5068 -#, c-format -msgid "While trying to resolve ref %s: " -msgstr "Referans %s çözülmeye çalışılırken:" - -#: common/flatpak-dir.c:5083 -#, c-format -msgid "%s is not available" -msgstr "%s mevcut değil" - -#: common/flatpak-dir.c:5098 common/flatpak-dir.c:5436 -#: common/flatpak-dir.c:6204 common/flatpak-dir.c:6217 -#: common/flatpak-dir.c:6293 -#, c-format -msgid "%s branch %s already installed" -msgstr "%s dalı %s zaten yüklü" - -#: common/flatpak-dir.c:5117 -#, c-format -msgid "Failed to read commit %s: " -msgstr "Değişiklik %s okunamadı:" - -#: common/flatpak-dir.c:5137 -#, c-format -msgid "While trying to checkout %s into %s: " -msgstr "%s'i %s'e geçirmeye çalışırken:" - -#: common/flatpak-dir.c:5162 common/flatpak-dir.c:5193 -msgid "While trying to checkout metadata subpath: " -msgstr "Üst veri alt dizini geçirilmeye çalışılırken:" - -#: common/flatpak-dir.c:5203 -msgid "While trying to remove existing extra dir: " -msgstr "Var olan ek dizini kaldırmaya çalışırken:" - -#: common/flatpak-dir.c:5214 -msgid "While trying to apply extra data: " -msgstr "Ek veriyi uygulamaya çalışırken:" - -#: common/flatpak-dir.c:5241 -#, fuzzy, c-format -msgid "Invalid deployed ref %s: " -msgstr "Geçersiz pid %s" - -#: common/flatpak-dir.c:5248 -#, fuzzy, c-format -msgid "Invalid commit ref %s: " -msgstr "Geçersiz pid %s" - -#: common/flatpak-dir.c:5256 -#, c-format -msgid "Deployed ref %s kind does not match commit (%s)" -msgstr "" - -#: common/flatpak-dir.c:5264 -#, c-format -msgid "Deployed ref %s name does not match commit (%s)" -msgstr "" - -#: common/flatpak-dir.c:5272 -#, c-format -msgid "Deployed ref %s arch does not match commit (%s)" -msgstr "" - -#: common/flatpak-dir.c:5278 -#, c-format -msgid "Deployed ref %s branch does not match commit (%s)" -msgstr "" - -#: common/flatpak-dir.c:5284 -#, c-format -msgid "Deployed ref %s does not match commit (%s)" -msgstr "" - -#: common/flatpak-dir.c:5303 -msgid "Deployed metadata does not match commit" -msgstr "" - -#: common/flatpak-dir.c:6065 -#, c-format -msgid "This version of %s is already installed" -msgstr "%s'in bu sürümü zaten yüklü" - -#: common/flatpak-dir.c:6072 -msgid "Can't change remote during bundle install" -msgstr "Paket yüklemesi sırasında uzak değiştirilemedi" - -#: common/flatpak-dir.c:6615 -#, c-format -msgid "%s branch %s is not installed" -msgstr "%s dalı %s yüklü değil" - -#: common/flatpak-dir.c:6859 -#, c-format -msgid "%s branch %s not installed" -msgstr "%s dalı %s yüklü değil" - -#: common/flatpak-dir.c:7818 -#, c-format -msgid "Nothing matches %s" -msgstr "%s için eşleşme yok" - -#: common/flatpak-dir.c:7900 -#, fuzzy, c-format -msgid "Can't find ref %s%s%s%s%s" -msgstr "%s%s%s%s%s uzak %s'te bulunamadı" - -#: common/flatpak-dir.c:7942 -#, fuzzy, c-format -msgid "Error searching remote %s: %s" -msgstr "Hata: %2$s'i %1$s başarılamadı: %3$s\n" - -#: common/flatpak-dir.c:7987 -#, fuzzy, c-format -msgid "Error searching local repository: %s" -msgstr "Referansı yerel arşivde sakla" - -#: common/flatpak-dir.c:8113 -#, c-format -msgid "%s %s not installed" -msgstr "%s %s yüklü değil" - -#: common/flatpak-dir.c:8280 -#, c-format -msgid "Could not find installation %s" -msgstr "Yükleme %s bulunamadı" - -#: common/flatpak-dir.c:8809 -#, c-format -msgid "Runtime %s, branch %s is already installed" -msgstr "Çalışma ortamı %s, dal %s zaten yüklü" - -#: common/flatpak-dir.c:8810 -#, c-format -msgid "App %s, branch %s is already installed" -msgstr "Uygulama %s, dal %s zaten yüklü" - -#: common/flatpak-dir.c:9269 -msgid "Remote title not set" -msgstr "Uzak başlığı ayarlı değil" - -#: common/flatpak-dir.c:9291 -msgid "Remote default-branch not set" -msgstr "Uzak öntanımlı dalı ayarlı değil" - -#: common/flatpak-dir.c:9785 -msgid "No flatpak cache in remote summary" -msgstr "Uzak özetinde flatpak önbelleği yok" - -#: common/flatpak-dir.c:9795 -#, c-format -msgid "No entry for %s in remote summary flatpak cache " -msgstr "Uzak özeti flatpak önbelleğinde %s için girdi yok" - -#: common/flatpak-run.c:258 +#: common/flatpak-context.c:175 #, c-format msgid "Unknown share type %s, valid types are: %s" msgstr "Bilinmeyen paylaşım tipi %s, geçerli tipler: %s" -#: common/flatpak-run.c:293 +#: common/flatpak-context.c:210 #, c-format msgid "Unknown policy type %s, valid types are: %s" msgstr "Bilinmeyen ilke tipi %s, geçerli tipler: %s" -#: common/flatpak-run.c:331 +#: common/flatpak-context.c:248 #, c-format msgid "Invalid dbus name %s\n" msgstr "Geçersiz dbus ismi %s\n" -#: common/flatpak-run.c:344 +#: common/flatpak-context.c:261 #, c-format msgid "Unknown socket type %s, valid types are: %s" msgstr "Bilinmeyen soket tipi %s, geçerli tipler: %s" -#: common/flatpak-run.c:373 +#: common/flatpak-context.c:290 #, c-format msgid "Unknown device type %s, valid types are: %s" msgstr "Bilinmeyen cihaz tiği %s, geçerli tipler: %s" -#: common/flatpak-run.c:401 +#: common/flatpak-context.c:318 #, c-format msgid "Unknown feature type %s, valid types are: %s" msgstr "Bilinmeyen özellik tipi %s, geçerli tipler: %s" -#: common/flatpak-run.c:774 +#: common/flatpak-context.c:691 #, c-format msgid "" "Unknown filesystem location %s, valid locations are: host, home, xdg-" @@ -2116,161 +2282,480 @@ msgstr "" "Bilinmeyen dosya sistemi konumu %s, geçerli konumlar: makina, home, xdg-" "*[/...], ~/dir, /dir" -#: common/flatpak-run.c:1040 +#: common/flatpak-context.c:963 #, c-format msgid "Invalid env format %s" msgstr "Geçersiz env formatı %s" -#: common/flatpak-run.c:1180 +#: common/flatpak-context.c:1103 msgid "Share with host" msgstr "Makinayla paylaş" -#: common/flatpak-run.c:1180 common/flatpak-run.c:1181 +#: common/flatpak-context.c:1103 common/flatpak-context.c:1104 msgid "SHARE" msgstr "PAYLAŞ" -#: common/flatpak-run.c:1181 +#: common/flatpak-context.c:1104 msgid "Unshare with host" msgstr "Makinayla paylaşma" -#: common/flatpak-run.c:1182 +#: common/flatpak-context.c:1105 msgid "Expose socket to app" msgstr "Soketi uygulamaya göster" -#: common/flatpak-run.c:1182 common/flatpak-run.c:1183 +#: common/flatpak-context.c:1105 common/flatpak-context.c:1106 msgid "SOCKET" msgstr "SOKET" -#: common/flatpak-run.c:1183 +#: common/flatpak-context.c:1106 msgid "Don't expose socket to app" msgstr "Soketi uygulamaya gösterme" -#: common/flatpak-run.c:1184 +#: common/flatpak-context.c:1107 msgid "Expose device to app" msgstr "Cihazı uygulamaya göster" -#: common/flatpak-run.c:1184 common/flatpak-run.c:1185 +#: common/flatpak-context.c:1107 common/flatpak-context.c:1108 msgid "DEVICE" msgstr "CİHAZ" -#: common/flatpak-run.c:1185 +#: common/flatpak-context.c:1108 msgid "Don't expose device to app" msgstr "Cihazı uygulamaya gösterme" -#: common/flatpak-run.c:1186 +#: common/flatpak-context.c:1109 msgid "Allow feature" msgstr "Özelliğe izin ver" -#: common/flatpak-run.c:1186 common/flatpak-run.c:1187 +#: common/flatpak-context.c:1109 common/flatpak-context.c:1110 msgid "FEATURE" msgstr "ÖZELLİK" -#: common/flatpak-run.c:1187 +#: common/flatpak-context.c:1110 msgid "Don't allow feature" msgstr "Özelliğe izin verme" -#: common/flatpak-run.c:1188 +#: common/flatpak-context.c:1111 msgid "Expose filesystem to app (:ro for read-only)" msgstr "Dosya sistemini uygulamaya göster (salt-okuma için :ro)" -#: common/flatpak-run.c:1188 +#: common/flatpak-context.c:1111 msgid "FILESYSTEM[:ro]" msgstr "DOSYASİSTEMİ[:ro]" -#: common/flatpak-run.c:1189 +#: common/flatpak-context.c:1112 msgid "Don't expose filesystem to app" msgstr "Dosya sistemini uygulamaya gösterme" -#: common/flatpak-run.c:1189 +#: common/flatpak-context.c:1112 msgid "FILESYSTEM" msgstr "DOSYASİSTEMİ" -#: common/flatpak-run.c:1190 +#: common/flatpak-context.c:1113 msgid "Set environment variable" msgstr "Ortam değişkeni tanımla" -#: common/flatpak-run.c:1190 +#: common/flatpak-context.c:1113 msgid "VAR=VALUE" msgstr "DEĞİŞKEN=DEĞER" -#: common/flatpak-run.c:1191 +#: common/flatpak-context.c:1114 msgid "Allow app to own name on the session bus" msgstr "Uygulamanın oturum veri yolunda kendi adı olmasına izin ver" -#: common/flatpak-run.c:1191 common/flatpak-run.c:1192 -#: common/flatpak-run.c:1193 common/flatpak-run.c:1194 +#: common/flatpak-context.c:1114 common/flatpak-context.c:1115 +#: common/flatpak-context.c:1116 common/flatpak-context.c:1117 msgid "DBUS_NAME" msgstr "DBUS_İSMİ" -#: common/flatpak-run.c:1192 +#: common/flatpak-context.c:1115 msgid "Allow app to talk to name on the session bus" msgstr "Uygulamanın oturum veri yolunda isme konuşmasına izin ver" -#: common/flatpak-run.c:1193 +#: common/flatpak-context.c:1116 msgid "Allow app to own name on the system bus" msgstr "Uygulamanın sistem veri yolunda kendi adı olmasına izin ver" -#: common/flatpak-run.c:1194 +#: common/flatpak-context.c:1117 msgid "Allow app to talk to name on the system bus" msgstr "Uygulamanın sistem veri yolunda isme konuşmasına izin ver" -#: common/flatpak-run.c:1195 +#: common/flatpak-context.c:1118 msgid "Add generic policy option" msgstr "Genel ilke seçeneği ekle" -#: common/flatpak-run.c:1195 common/flatpak-run.c:1196 +#: common/flatpak-context.c:1118 common/flatpak-context.c:1119 msgid "SUBSYSTEM.KEY=VALUE" msgstr "ALTSİSTEM.ANAHTAR=DEĞER" -#: common/flatpak-run.c:1196 +#: common/flatpak-context.c:1119 msgid "Remove generic policy option" msgstr "Genel ilke seçeneğini kaldır" -#: common/flatpak-run.c:1197 +#: common/flatpak-context.c:1120 msgid "Persist home directory" msgstr "Ev dizinini koru" -#: common/flatpak-run.c:1197 +#: common/flatpak-context.c:1120 msgid "FILENAME" msgstr "DOSYAİSMİ" #. This is not needed/used anymore, so hidden, but we accept it for backwards compat -#: common/flatpak-run.c:1199 +#: common/flatpak-context.c:1122 msgid "Don't require a running session (no cgroups creation)" msgstr "Çalışan oturum gerektirme (cgroups yaratımı yok)" -#: common/flatpak-run.c:3830 +#: common/flatpak-dir.c:1044 +#, c-format +msgid "No overrides found for %s" +msgstr "%s için geçersiz kılma bulunamadı" + +#: common/flatpak-dir.c:1674 +#, c-format +msgid "While opening repository %s: " +msgstr "Arşiv %s'i açarken:" + +#: common/flatpak-dir.c:1908 common/flatpak-dir.c:5460 +msgid "Can't create deploy directory" +msgstr "Dağıtım dizini oluşturulamadı" + +#: common/flatpak-dir.c:2122 common/flatpak-dir.c:2125 +#, c-format +msgid "Failed to find latest revision for ref %s from remote %s: %s\n" +msgstr "" + +#: common/flatpak-dir.c:2761 +#, c-format +msgid "Invalid sha256 for extra data uri %s" +msgstr "Ek veri uri'si %s için geçersiz sha256 " + +#: common/flatpak-dir.c:2766 +#, c-format +msgid "Empty name for extra data uri %s" +msgstr "Ek veri uri'si %s için boş isim" + +#: common/flatpak-dir.c:2773 +#, c-format +msgid "Unsupported extra data uri %s" +msgstr "Desteklenmeyen ek veri uri'si %s" + +#: common/flatpak-dir.c:2787 +#, fuzzy, c-format +msgid "Failed to load local extra-data %s: %s" +msgstr "Değişiklik %s okunamadı:" + +#: common/flatpak-dir.c:2790 +#, fuzzy, c-format +msgid "Wrong size for extra-data %s" +msgstr "Ek veri %s için yanlış boyut" + +#: common/flatpak-dir.c:2805 +#, c-format +msgid "While downloading %s: " +msgstr "%s indirilirken:" + +#: common/flatpak-dir.c:2812 +#, c-format +msgid "Wrong size for extra data %s" +msgstr "Ek veri %s için yanlış boyut" + +#: common/flatpak-dir.c:2823 +#, c-format +msgid "Invalid checksum for extra data %s" +msgstr "Ek veri %s için geçeresiz sağlama toplamı" + +#: common/flatpak-dir.c:2882 +#, fuzzy +msgid "Remote OCI index has no registry uri" +msgstr "KONUM'un bir oci sicili olduğunu varsay " + +#: common/flatpak-dir.c:3100 +#, c-format +msgid "%s commit %s already installed" +msgstr "%s değişikliği %s zaten yüklü" + +#: common/flatpak-dir.c:3442 common/flatpak-dir.c:3773 +#, c-format +msgid "While pulling %s from remote %s: " +msgstr "Uzak %2$s'ten %1$s çekerken:" + +#: common/flatpak-dir.c:3658 +#, c-format +msgid "Can't find %s in remote %s" +msgstr "Uzak %2$s'te %1$s bulunamadı" + +#: common/flatpak-dir.c:4331 +msgid "Not enough memory" +msgstr "Yeterli bellek yok" + +#: common/flatpak-dir.c:4350 +msgid "Failed to read from exported file" +msgstr "Dışa aktarılmış dosyadan okunamadı" + +#: common/flatpak-dir.c:4541 +msgid "Error reading mimetype xml file" +msgstr "" + +#: common/flatpak-dir.c:4546 +msgid "Invalid mimetype xml file" +msgstr "" + +#: common/flatpak-dir.c:5089 +msgid "While getting detached metadata: " +msgstr "Ayrık üst veri alınırken:" + +#: common/flatpak-dir.c:5107 +msgid "While creating extradir: " +msgstr "Ek dizin oluşturulurken:" + +#: common/flatpak-dir.c:5128 +msgid "Invalid sha256 for extra data" +msgstr "Ek veri için geçersiz sha256" + +#: common/flatpak-dir.c:5157 +msgid "Wrong size for extra data" +msgstr "Ek veri için yanlış boyut" + +#: common/flatpak-dir.c:5161 +msgid "Invalid checksum for extra data" +msgstr "Ek veri için geçersiz sağlama toplamı" + +#: common/flatpak-dir.c:5170 +#, c-format +msgid "While writing extra data file '%s': " +msgstr "Ek veri dosyası '%s' yazılırken:" + +#: common/flatpak-dir.c:5340 +#, fuzzy, c-format +msgid "apply_extra script failed, exit status %d" +msgstr "apply_extra betiği başarısız oldu" + +#: common/flatpak-dir.c:5419 +#, c-format +msgid "While trying to resolve ref %s: " +msgstr "Referans %s çözülmeye çalışılırken:" + +#: common/flatpak-dir.c:5434 +#, c-format +msgid "%s is not available" +msgstr "%s mevcut değil" + +#: common/flatpak-dir.c:5449 common/flatpak-dir.c:5881 +#: common/flatpak-dir.c:6671 common/flatpak-dir.c:6681 +#: common/flatpak-dir.c:6713 +#, c-format +msgid "%s branch %s already installed" +msgstr "%s dalı %s zaten yüklü" + +#: common/flatpak-dir.c:5468 +#, c-format +msgid "Failed to read commit %s: " +msgstr "Değişiklik %s okunamadı:" + +#: common/flatpak-dir.c:5488 +#, c-format +msgid "While trying to checkout %s into %s: " +msgstr "%s'i %s'e geçirmeye çalışırken:" + +#: common/flatpak-dir.c:5513 common/flatpak-dir.c:5544 +msgid "While trying to checkout metadata subpath: " +msgstr "Üst veri alt dizini geçirilmeye çalışılırken:" + +#: common/flatpak-dir.c:5554 +msgid "While trying to remove existing extra dir: " +msgstr "Var olan ek dizini kaldırmaya çalışırken:" + +#: common/flatpak-dir.c:5565 +msgid "While trying to apply extra data: " +msgstr "Ek veriyi uygulamaya çalışırken:" + +#: common/flatpak-dir.c:5592 +#, fuzzy, c-format +msgid "Invalid deployed ref %s: " +msgstr "Geçersiz pid %s" + +#: common/flatpak-dir.c:5599 +#, fuzzy, c-format +msgid "Invalid commit ref %s: " +msgstr "Geçersiz pid %s" + +#: common/flatpak-dir.c:5607 +#, c-format +msgid "Deployed ref %s kind does not match commit (%s)" +msgstr "" + +#: common/flatpak-dir.c:5615 +#, c-format +msgid "Deployed ref %s name does not match commit (%s)" +msgstr "" + +#: common/flatpak-dir.c:5623 +#, c-format +msgid "Deployed ref %s arch does not match commit (%s)" +msgstr "" + +#: common/flatpak-dir.c:5629 +#, c-format +msgid "Deployed ref %s branch does not match commit (%s)" +msgstr "" + +#: common/flatpak-dir.c:5635 +#, c-format +msgid "Deployed ref %s does not match commit (%s)" +msgstr "" + +#: common/flatpak-dir.c:5654 +msgid "Deployed metadata does not match commit" +msgstr "" + +#: common/flatpak-dir.c:6533 +#, c-format +msgid "This version of %s is already installed" +msgstr "%s'in bu sürümü zaten yüklü" + +#: common/flatpak-dir.c:6540 +msgid "Can't change remote during bundle install" +msgstr "Paket yüklemesi sırasında uzak değiştirilemedi" + +#: common/flatpak-dir.c:7059 +#, c-format +msgid "%s branch %s is not installed" +msgstr "%s dalı %s yüklü değil" + +#: common/flatpak-dir.c:7304 +#, c-format +msgid "%s branch %s not installed" +msgstr "%s dalı %s yüklü değil" + +#: common/flatpak-dir.c:7628 +#, c-format +msgid "Pruning repo failed: %s" +msgstr "" + +#: common/flatpak-dir.c:8155 +#, c-format +msgid "Multiple branches available for %s, you must specify one of: " +msgstr "" + +#: common/flatpak-dir.c:8176 +#, c-format +msgid "Nothing matches %s" +msgstr "%s için eşleşme yok" + +#: common/flatpak-dir.c:8258 +#, fuzzy, c-format +msgid "Can't find ref %s%s%s%s%s" +msgstr "%s%s%s%s%s uzak %s'te bulunamadı" + +#: common/flatpak-dir.c:8300 +#, fuzzy, c-format +msgid "Error searching remote %s: %s" +msgstr "Hata: %2$s'i %1$s başarılamadı: %3$s\n" + +#: common/flatpak-dir.c:8345 +#, fuzzy, c-format +msgid "Error searching local repository: %s" +msgstr "Referansı yerel arşivde sakla" + +#: common/flatpak-dir.c:8471 +#, c-format +msgid "%s %s not installed" +msgstr "%s %s yüklü değil" + +#: common/flatpak-dir.c:8638 +#, c-format +msgid "Could not find installation %s" +msgstr "Yükleme %s bulunamadı" + +#: common/flatpak-dir.c:9236 +#, c-format +msgid "Runtime %s, branch %s is already installed" +msgstr "Çalışma ortamı %s, dal %s zaten yüklü" + +#: common/flatpak-dir.c:9237 +#, c-format +msgid "App %s, branch %s is already installed" +msgstr "Uygulama %s, dal %s zaten yüklü" + +#: common/flatpak-dir.c:9717 +msgid "Remote title not set" +msgstr "Uzak başlığı ayarlı değil" + +#: common/flatpak-dir.c:9739 +msgid "Remote default-branch not set" +msgstr "Uzak öntanımlı dalı ayarlı değil" + +#: common/flatpak-dir.c:10332 +msgid "No flatpak cache in remote summary" +msgstr "Uzak özetinde flatpak önbelleği yok" + +#: common/flatpak-dir.c:10342 +#, c-format +msgid "No entry for %s in remote summary flatpak cache " +msgstr "Uzak özeti flatpak önbelleğinde %s için girdi yok" + +#: common/flatpak-run.c:1456 #, c-format msgid "Failed to open flatpak-info temp file: %s" msgstr "Flatpak-info geçici dosyası açılamadı: %s" -#: common/flatpak-run.c:3904 common/flatpak-run.c:3914 +#: common/flatpak-run.c:1530 common/flatpak-run.c:1540 #, c-format msgid "Failed to open temp file: %s" msgstr "Geçici dosya açılamadı: %s" -#: common/flatpak-run.c:4253 +#: common/flatpak-run.c:1883 msgid "Unable to create sync pipe" msgstr "Eşzamanlama veri yolu yaratılamadı" -#: common/flatpak-run.c:4280 +#: common/flatpak-run.c:1910 #, c-format msgid "Failed to open app info file: %s" msgstr "Uygulama bilgi dosyası açılamadı: %s" -#: common/flatpak-run.c:4310 +#: common/flatpak-run.c:1940 msgid "Failed to sync with dbus proxy" msgstr "Dbus vekiliyle eşzamanlanamadı" -#: common/flatpak-run.c:5069 +#: common/flatpak-run.c:2700 #, fuzzy, c-format msgid "ldconfig failed, exit status %d" msgstr "apply_extra betiği başarısız oldu" -#: common/flatpak-utils.c:2900 +#: common/flatpak-utils.c:624 +#, fuzzy, c-format +msgid "Migrating %s to %s\n" +msgstr "Güncelleniyor: %2$s'ten %1$s\n" + +#: common/flatpak-utils.c:630 +#, fuzzy, c-format +msgid "Error during migration: %s\n" +msgstr "Hata: %2$s'i %1$s başarılamadı: %3$s\n" + +#: common/flatpak-utils.c:2988 msgid "No extra data sources" msgstr "Ek veri kaynağı yok" +#: common/flatpak-utils.c:6576 +#, c-format +msgid "Downloading metadata: %u/(estimating) %s" +msgstr "" + +#: common/flatpak-utils.c:6600 +#, fuzzy, c-format +msgid "Downloading: %s/%s" +msgstr "İndirme boyutu" + +#: common/flatpak-utils.c:6620 +#, fuzzy, c-format +msgid "Downloading extra data: %s/%s" +msgstr "İndirme boyutu" + +#: common/flatpak-utils.c:6625 +#, fuzzy, c-format +msgid "Downloading files: %d/%d %s" +msgstr "İndirme boyutu" + #. SECURITY: #. - Normal users do not need authentication to install signed applications #. from signed repositories, as this cannot exploit a system. @@ -2307,7 +2792,7 @@ msgstr "İmzalı uygulama güncelle" #: system-helper/org.freedesktop.Flatpak.policy.in:59 #: system-helper/org.freedesktop.Flatpak.policy.in:77 -#: system-helper/org.freedesktop.Flatpak.policy.in:169 +#: system-helper/org.freedesktop.Flatpak.policy.in:180 msgid "Authentication is required to update software" msgstr "Uygulama güncellemek için kimlik denetimi gerekli" @@ -2371,16 +2856,41 @@ msgstr "Uzak Yapılandır" msgid "Authentication is required to configure software repositories" msgstr "Yazılım arşivlerini yapılandırmak için kimlik denetimi gerekli" +#: system-helper/org.freedesktop.Flatpak.policy.in:161 +#, fuzzy +msgid "Configure" +msgstr "Uzak Yapılandır" + +#: system-helper/org.freedesktop.Flatpak.policy.in:162 +#, fuzzy +msgid "Authentication is required to configure software installation" +msgstr "Yazılım arşivlerini yapılandırmak için kimlik denetimi gerekli" + #. SECURITY: #. - Normal users do not require admin authentication to update #. appstream data as it will be signed, and the action is required #. to update the system when unattended. #. - Changing this to anything other than 'yes' will break unattended #. updates. -#: system-helper/org.freedesktop.Flatpak.policy.in:168 +#: system-helper/org.freedesktop.Flatpak.policy.in:179 msgid "Update appstream" msgstr "Appstream'i güncelle" +#~ msgid "No remote %s" +#~ msgstr "%s uzak yok" + +#, fuzzy +#~ msgid "Search only user installations" +#~ msgstr "Kullanıcı yüklemelerini göster" + +#, fuzzy +#~ msgid "Search only system-wide installations" +#~ msgstr "Sistem-geneli yüklemeleri göster" + +#, fuzzy +#~ msgid "Search specific system-wide installations" +#~ msgstr "Belirli sistem-geneli yüklemeleri göster" + #~ msgid "Failed to create temporary file" #~ msgstr "Geçici dosya oluşturulamadı" @@ -2390,13 +2900,6 @@ msgstr "Appstream'i güncelle" #~ msgid "Failed to write to temporary file" #~ msgstr "Geçici dosyaya yazılamadı" -#~ msgid "REMOTE must be specified" -#~ msgstr "UZAK belirtilmelidir" - -#, fuzzy -#~ msgid "Downloading %s" -#~ msgstr "İndirme boyutu" - #, fuzzy #~ msgid "Installing %s" #~ msgstr "Yükleniyor: %s\n" @@ -2405,16 +2908,6 @@ msgstr "Appstream'i güncelle" #~ msgid "Post-Install %s" #~ msgstr "Yükleniyor: %s\n" -#, fuzzy -#~ msgid "Updating %s" -#~ msgstr "Özet güncelleniyor\n" - -#~ msgid "Metadata:" -#~ msgstr "Üst veri:" - -#~ msgid "Assume LOCATION is an oci registry" -#~ msgstr "KONUM'un bir oci sicili olduğunu varsay " - #~ msgid "OCI repo Filename or uri must be specified" #~ msgstr "OCI depo Dosya Adı veya uri belirtilmelidir" diff --git a/po/uk.po b/po/uk.po index b88f2295..4cc1527e 100644 --- a/po/uk.po +++ b/po/uk.po @@ -2,13 +2,13 @@ # Copyright (C) 2016 flatpak's COPYRIGHT HOLDER # This file is distributed under the same license as the flatpak package. # -# Yuri Chornoivan , 2016, 2017. +# Yuri Chornoivan , 2016, 2017, 2018. msgid "" msgstr "" "Project-Id-Version: flatpak master\n" "Report-Msgid-Bugs-To: https://github.com/flatpak/flatpak/issues\n" -"POT-Creation-Date: 2017-10-23 15:24+0000\n" -"PO-Revision-Date: 2017-10-23 20:15+0200\n" +"POT-Creation-Date: 2018-03-18 03:24+0000\n" +"PO-Revision-Date: 2018-03-18 11:16+0200\n" "Last-Translator: Yuri Chornoivan \n" "Language-Team: Ukrainian \n" "Language: uk\n" @@ -44,10 +44,9 @@ msgstr "" msgid "Set a new url" msgstr "Встановити нову адресу" -#: app/flatpak-builtins-add-remote.c:66 app/flatpak-builtins-build-bundle.c:57 -#: app/flatpak-builtins-build-bundle.c:58 -#: app/flatpak-builtins-list-remotes.c:109 -#: app/flatpak-builtins-repo-update.c:52 +#: app/flatpak-builtins-add-remote.c:66 app/flatpak-builtins-build-bundle.c:58 +#: app/flatpak-builtins-build-bundle.c:59 +#: app/flatpak-builtins-list-remotes.c:70 app/flatpak-builtins-repo-update.c:52 msgid "URL" msgstr "АДРЕСА" @@ -94,12 +93,12 @@ msgid "Default branch to use for this remote" msgstr "Типова гілка для цього віддаленого сховища" #: app/flatpak-builtins-add-remote.c:78 app/flatpak-builtins-repo.c:153 -#: app/flatpak-builtins-repo-update.c:54 app/flatpak-builtins-run.c:54 +#: app/flatpak-builtins-repo-update.c:54 app/flatpak-builtins-run.c:55 msgid "BRANCH" msgstr "ГІЛКА" #: app/flatpak-builtins-add-remote.c:80 app/flatpak-builtins-build-export.c:67 -#: app/flatpak-builtins-repo-update.c:56 +#: app/flatpak-builtins-list-remotes.c:72 app/flatpak-builtins-repo-update.c:56 msgid "Collection ID" msgstr "Ідентифікатор збірки" @@ -111,9 +110,9 @@ msgstr "ІД-ЗБІРКИ" msgid "Import GPG key from FILE (- for stdin)" msgstr "Імпортувати ключ GPG з ФАЙЛА (- — імпортувати із stdin)" -#: app/flatpak-builtins-add-remote.c:82 app/flatpak-builtins-build-bundle.c:59 -#: app/flatpak-builtins-build.c:50 app/flatpak-builtins-build-export.c:60 -#: app/flatpak-builtins-install.c:66 app/flatpak-builtins-repo-update.c:59 +#: app/flatpak-builtins-add-remote.c:82 app/flatpak-builtins-build-bundle.c:60 +#: app/flatpak-builtins-build.c:54 app/flatpak-builtins-build-export.c:60 +#: app/flatpak-builtins-install.c:67 app/flatpak-builtins-repo-update.c:59 msgid "FILE" msgstr "ФАЙЛ" @@ -125,155 +124,147 @@ msgstr "Вимкнути віддалене сховище" msgid "Add OCI registry" msgstr "Додати реєстр OCI" -#: app/flatpak-builtins-add-remote.c:211 app/flatpak-builtins-add-remote.c:218 +#: app/flatpak-builtins-add-remote.c:218 app/flatpak-builtins-add-remote.c:225 #, c-format msgid "Can't load uri %s: %s\n" msgstr "Не вдалося завантажити адресу %s: %s\n" -#: app/flatpak-builtins-add-remote.c:226 +#: app/flatpak-builtins-add-remote.c:233 #, c-format -#| msgid "Can't open %s namespace: %s" msgid "Can't load file %s: %s\n" msgstr "Не вдалося завантажити файл %s: %s\n" -#: app/flatpak-builtins-add-remote.c:234 +#: app/flatpak-builtins-add-remote.c:241 msgid "Invalid file format" msgstr "Некоректний формат файла" -#: app/flatpak-builtins-add-remote.c:242 +#: app/flatpak-builtins-add-remote.c:249 #, c-format -#| msgid "Invalid uri type %s, only http/https supported" msgid "Invalid version %s, only 1 supported" msgstr "Некоректна версія %s, передбачено підтримку лише версії 1" -#: app/flatpak-builtins-add-remote.c:286 -#| msgid "Invalid pid %s" +#: app/flatpak-builtins-add-remote.c:293 msgid "Invalid gpg key" msgstr "Некоректний ключ gpg" -#: app/flatpak-builtins-add-remote.c:312 +#: app/flatpak-builtins-add-remote.c:320 msgid "NAME LOCATION - Add a remote repository" msgstr "НАЗВА РОЗТАШУВАННЯ - Додати віддалене сховище" -#: app/flatpak-builtins-add-remote.c:321 -#: app/flatpak-builtins-delete-remote.c:58 app/flatpak-builtins-info.c:104 +#: app/flatpak-builtins-add-remote.c:333 +#: app/flatpak-builtins-delete-remote.c:61 app/flatpak-builtins-info.c:125 msgid "NAME must be specified" msgstr "Має бути вказано НАЗВУ" -#: app/flatpak-builtins-add-remote.c:324 app/flatpak-builtins-build-sign.c:71 -#: app/flatpak-builtins-repo.c:174 app/flatpak-builtins-repo-update.c:429 +#: app/flatpak-builtins-add-remote.c:336 app/flatpak-builtins-build-sign.c:71 +#: app/flatpak-builtins-repo.c:175 app/flatpak-builtins-repo-update.c:429 msgid "LOCATION must be specified" msgstr "Слід вказати РОЗТАШУВАННЯ" -#: app/flatpak-builtins-add-remote.c:327 -#: app/flatpak-builtins-build-bundle.c:479 +#: app/flatpak-builtins-add-remote.c:339 +#: app/flatpak-builtins-build-bundle.c:461 #: app/flatpak-builtins-build-export.c:676 #: app/flatpak-builtins-build-import-bundle.c:182 #: app/flatpak-builtins-build-init.c:181 app/flatpak-builtins-build-sign.c:74 -#: app/flatpak-builtins-delete-remote.c:63 +#: app/flatpak-builtins-delete-remote.c:66 #: app/flatpak-builtins-document-export.c:102 #: app/flatpak-builtins-document-info.c:75 #: app/flatpak-builtins-document-list.c:70 -#: app/flatpak-builtins-document-unexport.c:67 app/flatpak-builtins-info.c:111 -#: app/flatpak-builtins-install.c:265 app/flatpak-builtins-install.c:399 -#: app/flatpak-builtins-list.c:382 app/flatpak-builtins-list-remotes.c:66 -#: app/flatpak-builtins-ls-remote.c:84 app/flatpak-builtins-make-current.c:67 -#: app/flatpak-builtins-override.c:66 +#: app/flatpak-builtins-document-unexport.c:67 app/flatpak-builtins-info.c:132 +#: app/flatpak-builtins-install.c:267 app/flatpak-builtins-install.c:401 +#: app/flatpak-builtins-list.c:314 app/flatpak-builtins-list-remotes.c:61 +#: app/flatpak-builtins-ls-remote.c:107 app/flatpak-builtins-make-current.c:72 +#: app/flatpak-builtins-override.c:68 msgid "Too many arguments" msgstr "Забагато аргументів" -#: app/flatpak-builtins-add-remote.c:332 +#: app/flatpak-builtins-add-remote.c:344 #: app/flatpak-builtins-build-export.c:692 #, c-format msgid "‘%s’ is not a valid collection ID: %s" msgstr "«%s» не є коректним ідентифікатором збірки: %s" -#: app/flatpak-builtins-add-remote.c:336 +#: app/flatpak-builtins-add-remote.c:348 msgid "GPG verification is required if collections are enabled" msgstr "Якщо увімкнено збірку, слід пройти перевірку GPG" #. Do nothing -#: app/flatpak-builtins-add-remote.c:351 +#: app/flatpak-builtins-add-remote.c:363 #, c-format msgid "Remote %s already exists" msgstr "Запис віддаленого сховища %s вже існує" -#: app/flatpak-builtins-add-remote.c:359 +#: app/flatpak-builtins-add-remote.c:371 msgid "No url specified in flatpakrepo file" msgstr "У файлі flatpakrepo не вказано адреси" -#: app/flatpak-builtins-add-remote.c:403 +#: app/flatpak-builtins-add-remote.c:415 #, c-format msgid "Warning: Could not update extra metadata for '%s': %s\n" msgstr "Попередження: не вдалося оновити додаткові метадані для «%s»: %s\n" -#: app/flatpak-builtins-add-remote.c:451 +#: app/flatpak-builtins-add-remote.c:464 msgid "NAME - Modify a remote repository" msgstr "НАЗВА - Змінити віддалене сховище" -#: app/flatpak-builtins-add-remote.c:460 +#: app/flatpak-builtins-add-remote.c:474 msgid "Remote NAME must be specified" msgstr "Має бути вказано НАЗВУ віддаленого сховища" -#: app/flatpak-builtins-add-remote.c:465 -#, c-format -msgid "No remote %s" -msgstr "Немає сховища %s" - -#: app/flatpak-builtins-add-remote.c:471 +#: app/flatpak-builtins-add-remote.c:485 #, c-format msgid "Updating extra metadata from remote summary for %s\n" msgstr "Оновлюємо додаткові метадані з резюме віддаленого сховища для %s\n" -#: app/flatpak-builtins-add-remote.c:474 +#: app/flatpak-builtins-add-remote.c:488 #, c-format msgid "Error updating extra metadata for '%s': %s\n" msgstr "Помилка під час оновлення додаткових метаданих для «%s»: %s\n" -#: app/flatpak-builtins-add-remote.c:475 +#: app/flatpak-builtins-add-remote.c:489 #, c-format msgid "Could not update extra metadata for %s" msgstr "Не вдалося оновити додаткові метадані для %s" -#: app/flatpak-builtins-build-bundle.c:55 +#: app/flatpak-builtins-build-bundle.c:56 msgid "Export runtime instead of app" msgstr "Експортувати середовище виконання замість програми" -#: app/flatpak-builtins-build-bundle.c:56 +#: app/flatpak-builtins-build-bundle.c:57 msgid "Arch to bundle for" msgstr "Архітектура для пакунка" -#: app/flatpak-builtins-build-bundle.c:56 +#: app/flatpak-builtins-build-bundle.c:57 #: app/flatpak-builtins-build-export.c:55 app/flatpak-builtins-build-init.c:49 -#: app/flatpak-builtins-build-sign.c:41 app/flatpak-builtins-info.c:48 -#: app/flatpak-builtins-install.c:56 app/flatpak-builtins-list.c:52 -#: app/flatpak-builtins-ls-remote.c:48 app/flatpak-builtins-make-current.c:38 -#: app/flatpak-builtins-run.c:52 app/flatpak-builtins-uninstall.c:44 -#: app/flatpak-builtins-update.c:53 +#: app/flatpak-builtins-build-sign.c:41 app/flatpak-builtins-info.c:51 +#: app/flatpak-builtins-info-remote.c:48 app/flatpak-builtins-install.c:57 +#: app/flatpak-builtins-list.c:46 app/flatpak-builtins-ls-remote.c:49 +#: app/flatpak-builtins-make-current.c:38 app/flatpak-builtins-run.c:53 +#: app/flatpak-builtins-uninstall.c:44 app/flatpak-builtins-update.c:53 msgid "ARCH" msgstr "АРХ" -#: app/flatpak-builtins-build-bundle.c:57 +#: app/flatpak-builtins-build-bundle.c:58 msgid "Url for repo" msgstr "Адреса сховища" -#: app/flatpak-builtins-build-bundle.c:58 +#: app/flatpak-builtins-build-bundle.c:59 msgid "Url for runtime flatpakrepo file" msgstr "Адреса файла flatpakrepo середовища виконання" -#: app/flatpak-builtins-build-bundle.c:59 +#: app/flatpak-builtins-build-bundle.c:60 msgid "Add GPG key from FILE (- for stdin)" msgstr "Додати ключ GPG з ФАЙЛА (- якщо дані слід взяти з stdin)" -#: app/flatpak-builtins-build-bundle.c:60 +#: app/flatpak-builtins-build-bundle.c:61 msgid "Export oci image instead of flatpak bundle" msgstr "Експортувати образ OCI замість пакунка flatpak" -#: app/flatpak-builtins-build-bundle.c:61 +#: app/flatpak-builtins-build-bundle.c:62 msgid "GPG Key ID to sign the OCI image with" msgstr "Ідентифікатор ключа GPG для підписування образу OCI" -#: app/flatpak-builtins-build-bundle.c:61 +#: app/flatpak-builtins-build-bundle.c:62 #: app/flatpak-builtins-build-commit-from.c:55 #: app/flatpak-builtins-build-export.c:61 #: app/flatpak-builtins-build-import-bundle.c:46 @@ -281,7 +272,7 @@ msgstr "Ідентифікатор ключа GPG для підписуванн msgid "KEY-ID" msgstr "ІД КЛЮЧА" -#: app/flatpak-builtins-build-bundle.c:62 +#: app/flatpak-builtins-build-bundle.c:63 #: app/flatpak-builtins-build-commit-from.c:56 #: app/flatpak-builtins-build-export.c:64 #: app/flatpak-builtins-build-import-bundle.c:47 @@ -289,7 +280,7 @@ msgstr "ІД КЛЮЧА" msgid "GPG Homedir to use when looking for keyrings" msgstr "Домашній каталог GPG, яким слід користуватися для пошуку сховищ ключів" -#: app/flatpak-builtins-build-bundle.c:62 +#: app/flatpak-builtins-build-bundle.c:63 #: app/flatpak-builtins-build-commit-from.c:56 #: app/flatpak-builtins-build-export.c:64 #: app/flatpak-builtins-build-import-bundle.c:47 @@ -297,7 +288,16 @@ msgstr "Домашній каталог GPG, яким слід користув msgid "HOMEDIR" msgstr "ДОМАШНІЙ-КАТАЛОГ" -#: app/flatpak-builtins-build-bundle.c:469 +#: app/flatpak-builtins-build-bundle.c:64 +msgid "OSTree commit to create a delta bundle from" +msgstr "Внесок OSTree для створення пакунка відмінностей від" + +#: app/flatpak-builtins-build-bundle.c:64 app/flatpak-builtins-info-remote.c:49 +#: app/flatpak-builtins-update.c:54 +msgid "COMMIT" +msgstr "COMMIT" + +#: app/flatpak-builtins-build-bundle.c:451 msgid "" "LOCATION FILENAME NAME [BRANCH] - Create a single file bundle from a local " "repository" @@ -305,96 +305,108 @@ msgstr "" "РОЗТАШУВАННЯ НАЗВА_ФАЙЛА НАЗВА [ГІЛКА] - Створити пакунок з одного файла на " "основі локального сховища" -#: app/flatpak-builtins-build-bundle.c:476 +#: app/flatpak-builtins-build-bundle.c:458 msgid "LOCATION, FILENAME and NAME must be specified" msgstr "Слід вказати РОЗТАШУВАННЯ, НАЗВУ_ФАЙЛА та НАЗВУ" -#: app/flatpak-builtins-build-bundle.c:494 -#: app/flatpak-builtins-build-commit-from.c:103 -#: app/flatpak-builtins-build-commit-from.c:113 +#: app/flatpak-builtins-build-bundle.c:476 +#: app/flatpak-builtins-build-commit-from.c:253 +#: app/flatpak-builtins-build-commit-from.c:263 #: app/flatpak-builtins-build-import-bundle.c:191 #, c-format msgid "'%s' is not a valid repository" msgstr "«%s» не є коректним сховищем" -#: app/flatpak-builtins-build-bundle.c:506 app/flatpak-builtins-build-sign.c:86 +#: app/flatpak-builtins-build-bundle.c:488 app/flatpak-builtins-build-sign.c:86 #, c-format msgid "'%s' is not a valid name: %s" msgstr "«%s» не є коректною назвою: %s" -#: app/flatpak-builtins-build-bundle.c:509 +#: app/flatpak-builtins-build-bundle.c:491 #: app/flatpak-builtins-build-export.c:699 app/flatpak-builtins-build-sign.c:89 #, c-format msgid "'%s' is not a valid branch name: %s" msgstr "«%s» не є коректною назвою гілки: %s" -#: app/flatpak-builtins-build.c:46 +#: app/flatpak-builtins-build.c:49 msgid "Use Platform runtime rather than Sdk" msgstr "Використовувати середовище виконання платформи замість SDK" -#: app/flatpak-builtins-build.c:47 +#: app/flatpak-builtins-build.c:50 +msgid "Make destination readonly" +msgstr "Зробити призначення придатним лише для читання" + +#: app/flatpak-builtins-build.c:51 msgid "Add bind mount" msgstr "Додати монтування прив’язки" -#: app/flatpak-builtins-build.c:47 +#: app/flatpak-builtins-build.c:51 msgid "DEST=SRC" msgstr "ПРИЗН=ДЖЕР" -#: app/flatpak-builtins-build.c:48 +#: app/flatpak-builtins-build.c:52 msgid "Start build in this directory" msgstr "Почати збирання у цьому каталозі" -#: app/flatpak-builtins-build.c:48 app/flatpak-builtins-build.c:49 +#: app/flatpak-builtins-build.c:52 app/flatpak-builtins-build.c:53 #: app/flatpak-builtins-build-init.c:58 msgid "DIR" msgstr "КАТАЛОГ" -#: app/flatpak-builtins-build.c:49 +#: app/flatpak-builtins-build.c:53 msgid "Where to look for custom sdk dir (defaults to 'usr')" msgstr "Місце, де слід шукати нетиповий каталог sdk (типовим є каталог usr)" -#: app/flatpak-builtins-build.c:50 app/flatpak-builtins-build-export.c:60 +#: app/flatpak-builtins-build.c:54 app/flatpak-builtins-build-export.c:60 msgid "Use alternative file for the metadata" msgstr "Використовувати альтернативний файл для метаданих" -#: app/flatpak-builtins-build.c:51 +#: app/flatpak-builtins-build.c:55 msgid "Kill processes when the parent process dies" msgstr "Вбивати процеси, якщо завершив роботу батьківський процес" -#: app/flatpak-builtins-build.c:52 +#: app/flatpak-builtins-build.c:56 msgid "Export application homedir directory to build" msgstr "Експортувати домашній каталог програми до каталогу збирання" -#: app/flatpak-builtins-build.c:139 +#: app/flatpak-builtins-build.c:57 app/flatpak-builtins-run.c:59 +msgid "Log session bus calls" +msgstr "Записувати до журналу виклики до каналу сеансу" + +#: app/flatpak-builtins-build.c:58 app/flatpak-builtins-run.c:60 +msgid "Log system bus calls" +msgstr "Записувати до журналу виклики до каналу системи" + +#: app/flatpak-builtins-build.c:126 msgid "DIRECTORY [COMMAND [args...]] - Build in directory" msgstr "КАТАЛОГ [КОМАНДА [аргументи...]] - Зібрати у каталозі" -#: app/flatpak-builtins-build.c:162 app/flatpak-builtins-build-finish.c:533 +#: app/flatpak-builtins-build.c:149 app/flatpak-builtins-build-finish.c:533 msgid "DIRECTORY must be specified" msgstr "Слід вказати КАТАЛОГ" -#: app/flatpak-builtins-build.c:173 app/flatpak-builtins-build-export.c:721 +#: app/flatpak-builtins-build.c:160 app/flatpak-builtins-build-export.c:721 #, c-format msgid "Build directory %s not initialized, use flatpak build-init" msgstr "" "Каталог збирання %s не ініціалізовано, скористайтеся командою flatpak build-" "init" -#: app/flatpak-builtins-build.c:192 +#: app/flatpak-builtins-build.c:179 msgid "metadata invalid, not application or runtime" msgstr "некоректні метадані, немає програми або середовища виконання" -#: app/flatpak-builtins-build.c:292 +#: app/flatpak-builtins-build.c:283 #, c-format msgid "No extension point matching %s in %s" msgstr "Немає точки розширення, яка відповідає %s у %s" -#: app/flatpak-builtins-build.c:432 +#: app/flatpak-builtins-build.c:433 #, c-format msgid "Missing '=' in bind mount option '%s'" msgstr "Пропущено «=» у параметрі монтування прив’язки «%s»" -#: app/flatpak-builtins-build.c:460 common/flatpak-run.c:5416 +#: app/flatpak-builtins-build.c:462 common/flatpak-run.c:3038 msgid "Unable to start app" msgstr "Не вдалося запустити програму" @@ -453,35 +465,35 @@ msgstr "Не оновлювати резюме" msgid "GPG Key ID to sign the commit with" msgstr "Ідентифікатор ключа GPG для підписування внеску" -#: app/flatpak-builtins-build-commit-from.c:78 +#: app/flatpak-builtins-build-commit-from.c:228 msgid "DST-REPO [DST-REF]... - Make a new commit based on existing commit(s)" msgstr "СХОВ-ПР [ПОС-ПР]... - створити новий внесок на основі наявних внесків" -#: app/flatpak-builtins-build-commit-from.c:85 +#: app/flatpak-builtins-build-commit-from.c:235 msgid "DST-REPO must be specified" msgstr "Слід вказати СХОВ-ПР" -#: app/flatpak-builtins-build-commit-from.c:93 +#: app/flatpak-builtins-build-commit-from.c:243 msgid "" "If --src-repo is not specified, exactly one destination ref must be specified" msgstr "" "Якщо не вказано --src-repo, має бути вказано точно одне посилання призначення" -#: app/flatpak-builtins-build-commit-from.c:96 +#: app/flatpak-builtins-build-commit-from.c:246 msgid "" "If --src-ref is specified, exactly one destination ref must be specified" msgstr "" "Якщо вказано --src-ref, має бути вказано точно одне посилання призначення" -#: app/flatpak-builtins-build-commit-from.c:99 +#: app/flatpak-builtins-build-commit-from.c:249 msgid "Either --src-repo or --src-ref must be specified." msgstr "Слід вказати або --src-repo, або --src-ref." -#: app/flatpak-builtins-build-commit-from.c:251 +#: app/flatpak-builtins-build-commit-from.c:402 msgid "Can't commit from partial source commit." msgstr "Неможливо створити внесок на основі часткового внеску до джерела." -#: app/flatpak-builtins-build-commit-from.c:256 +#: app/flatpak-builtins-build-commit-from.c:407 #, c-format msgid "%s: no change\n" msgstr "%s: без змін\n" @@ -533,12 +545,11 @@ msgstr "" #, c-format msgid "WARNING: Error reading from desktop-file-validate: %s\n" msgstr "" -"ПОПЕРЕДЖЕННЯ: помилка під час спроби прочитати дані від" -" desktop-file-validate: %s\n" +"ПОПЕРЕДЖЕННЯ: помилка під час спроби прочитати дані від desktop-file-" +"validate: %s\n" #: app/flatpak-builtins-build-export.c:355 #, c-format -#| msgid "Failed to open temp file: %s" msgid "WARNING: Failed to validate desktop file %s: %s\n" msgstr "ПОПЕРЕДЖЕННЯ: не вдалося перевірити файл desktop %s: %s\n" @@ -563,8 +574,8 @@ msgstr "" #, c-format msgid "WARNING: Icon referenced in desktop file but not exported: %s\n" msgstr "" -"ПОПЕРЕДЖЕННЯ: у файлі desktop є посилання на піктограму, але її не" -" експортовано: %s\n" +"ПОПЕРЕДЖЕННЯ: у файлі desktop є посилання на піктограму, але її не " +"експортовано: %s\n" #: app/flatpak-builtins-build-export.c:551 #, c-format @@ -604,33 +615,32 @@ msgstr "Слід вказати РОЗТАШУВАННЯ і КАТАЛОГ" msgid "No name specified in the metadata" msgstr "У метаданих не вказано назви" -#: app/flatpak-builtins-build-export.c:970 +#: app/flatpak-builtins-build-export.c:976 #, c-format -#| msgid "Commit:" msgid "Commit: %s\n" msgstr "Внесок: %s\n" -#: app/flatpak-builtins-build-export.c:971 +#: app/flatpak-builtins-build-export.c:977 #, c-format msgid "Metadata Total: %u\n" msgstr "Загалом метаданих: %u\n" -#: app/flatpak-builtins-build-export.c:972 +#: app/flatpak-builtins-build-export.c:978 #, c-format msgid "Metadata Written: %u\n" msgstr "Записано метаданих: %u\n" -#: app/flatpak-builtins-build-export.c:973 +#: app/flatpak-builtins-build-export.c:979 #, c-format msgid "Content Total: %u\n" msgstr "Загалом даних: %u\n" -#: app/flatpak-builtins-build-export.c:974 +#: app/flatpak-builtins-build-export.c:980 #, c-format msgid "Content Written: %u\n" msgstr "Записано даних: %u\n" -#: app/flatpak-builtins-build-export.c:975 +#: app/flatpak-builtins-build-export.c:981 msgid "Content Bytes Written:" msgstr "Записано байтів даних:" @@ -638,8 +648,8 @@ msgstr "Записано байтів даних:" msgid "Command to set" msgstr "Команда для встановлення" -#: app/flatpak-builtins-build-finish.c:48 app/flatpak-builtins-run.c:53 -#: app/flatpak-main.c:160 +#: app/flatpak-builtins-build-finish.c:48 app/flatpak-builtins-run.c:54 +#: app/flatpak-main.c:166 msgid "COMMAND" msgstr "КОМАНДА" @@ -688,7 +698,7 @@ msgid "Change the runtime used for the app" msgstr "Змінити середовище виконання, що використовується для програми" #: app/flatpak-builtins-build-finish.c:55 app/flatpak-builtins-build-init.c:50 -#: app/flatpak-builtins-run.c:56 +#: app/flatpak-builtins-run.c:57 msgid "RUNTIME" msgstr "СЕРЕДОВИЩЕ ВИКОНАННЯ" @@ -788,7 +798,6 @@ msgstr "У реєстрі декілька образів, вкажіть пос #: app/flatpak-builtins-build-import-bundle.c:123 #: app/flatpak-builtins-build-import-bundle.c:151 #, c-format -#| msgid "Updating: %s from %s\n" msgid "Importing %s (%s)\n" msgstr "Імпортуємо %s (%s)\n" @@ -801,8 +810,8 @@ msgstr "" msgid "LOCATION and FILENAME must be specified" msgstr "Слід вказати РОЗТАШУВАННЯ і НАЗВУ ФАЙЛА" -#: app/flatpak-builtins-build-init.c:49 app/flatpak-builtins-info.c:48 -#: app/flatpak-builtins-run.c:52 +#: app/flatpak-builtins-build-init.c:49 app/flatpak-builtins-info.c:51 +#: app/flatpak-builtins-run.c:53 msgid "Arch to use" msgstr "Архітектура, яку слід використовувати" @@ -822,7 +831,7 @@ msgstr "ПРОГРАМА" msgid "Specify version for --base" msgstr "Вказати версію для --base" -#: app/flatpak-builtins-build-init.c:52 app/flatpak-builtins-run.c:57 +#: app/flatpak-builtins-build-init.c:52 app/flatpak-builtins-run.c:58 msgid "VERSION" msgstr "ВЕРСІЯ" @@ -896,7 +905,7 @@ msgstr "" "«%s» не є коректною назвою типу збирання; коректними є такі назви: app, " "runtime і extension" -#: app/flatpak-builtins-build-init.c:205 app/flatpak-builtins-override.c:71 +#: app/flatpak-builtins-build-init.c:205 app/flatpak-builtins-override.c:74 #, c-format msgid "'%s' is not a valid application name: %s" msgstr "«%s» не є коректною назвою програми: %s" @@ -906,12 +915,14 @@ msgstr "«%s» не є коректною назвою програми: %s" msgid "Build directory %s already initialized" msgstr "Каталог збирання %s вже ініціалізовано" -#: app/flatpak-builtins-build-sign.c:41 app/flatpak-builtins-install.c:56 +#: app/flatpak-builtins-build-sign.c:41 app/flatpak-builtins-info-remote.c:48 +#: app/flatpak-builtins-install.c:57 msgid "Arch to install for" msgstr "Архітектура для встановлення" -#: app/flatpak-builtins-build-sign.c:42 app/flatpak-builtins-install.c:62 -#: app/flatpak-builtins-uninstall.c:48 app/flatpak-builtins-update.c:61 +#: app/flatpak-builtins-build-sign.c:42 app/flatpak-builtins-info-remote.c:50 +#: app/flatpak-builtins-install.c:63 app/flatpak-builtins-uninstall.c:48 +#: app/flatpak-builtins-update.c:61 msgid "Look for runtime with the specified name" msgstr "Шукати середовище виконання із вказаною назвою" @@ -942,12 +953,10 @@ msgstr "Скасувати налаштовування для ключа КЛЮ #: app/flatpak-builtins-config.c:95 #, c-format -#| msgid "Unknown command '%s'" msgid "Unknown configure key '%s'" msgstr "Невідомий ключ налаштовування «%s»" #: app/flatpak-builtins-config.c:144 app/flatpak-builtins-config.c:185 -#| msgid "APP must be specified" msgid "You must specify key" msgstr "Вам слід вказати ключ" @@ -955,20 +964,20 @@ msgstr "Вам слід вказати ключ" msgid "You must specify both key and value" msgstr "Вам слід вказати і ключ, і значення" -#: app/flatpak-builtins-config.c:203 +#: app/flatpak-builtins-config.c:204 msgid "[KEY [VALUE]] - Manage configuration" msgstr "[КЛЮЧ [ЗНАЧЕННЯ]] - керувати налаштуваннями" -#: app/flatpak-builtins-config.c:218 -msgid "Must specify one on --list, --get, --set or --unset" +#: app/flatpak-builtins-config.c:223 +msgid "Must specify one of --list, --get, --set or --unset" msgstr "" "Слід вказати один із таких параметрів: --list, --get, --set або --unset" -#: app/flatpak-builtins-delete-remote.c:37 +#: app/flatpak-builtins-delete-remote.c:38 msgid "Remove remote even if in use" msgstr "Вилучити віддалене сховища, навіть якщо воно використовується" -#: app/flatpak-builtins-delete-remote.c:49 +#: app/flatpak-builtins-delete-remote.c:51 msgid "NAME - Delete a remote repository" msgstr "НАЗВА - Вилучити віддалене сховище" @@ -1121,167 +1130,248 @@ msgstr "Не вдалося перемкнути gid" msgid "Can't switch uid" msgstr "Не вдалося перемкнути uid" -#: app/flatpak-builtins-info.c:49 app/flatpak-builtins-list.c:46 -#: app/flatpak-builtins-list-remotes.c:43 +#: app/flatpak-builtins-info.c:52 msgid "Show user installations" msgstr "Показати встановлення користувача" -#: app/flatpak-builtins-info.c:50 app/flatpak-builtins-list.c:47 -#: app/flatpak-builtins-list-remotes.c:44 +#: app/flatpak-builtins-info.c:53 msgid "Show system-wide installations" msgstr "Показати загальносистемні встановлення" -#: app/flatpak-builtins-info.c:51 app/flatpak-builtins-list.c:48 -#: app/flatpak-builtins-list-remotes.c:45 +#: app/flatpak-builtins-info.c:54 msgid "Show specific system-wide installations" msgstr "Показати вказані загальносистемні встановлення" -#: app/flatpak-builtins-info.c:52 +#: app/flatpak-builtins-info.c:55 app/flatpak-builtins-info-remote.c:53 msgid "Show ref" msgstr "Показати посилання" -#: app/flatpak-builtins-info.c:53 +#: app/flatpak-builtins-info.c:56 app/flatpak-builtins-info-remote.c:54 msgid "Show commit" msgstr "Показати внесок" -#: app/flatpak-builtins-info.c:54 +#: app/flatpak-builtins-info.c:57 msgid "Show origin" msgstr "Показ початку координат" -#: app/flatpak-builtins-info.c:55 +#: app/flatpak-builtins-info.c:58 msgid "Show size" msgstr "Показ розміру" -#: app/flatpak-builtins-info.c:56 +#: app/flatpak-builtins-info.c:59 app/flatpak-builtins-info-remote.c:56 msgid "Show metadata" msgstr "Показ метаданих" -#: app/flatpak-builtins-info.c:57 +#: app/flatpak-builtins-info.c:60 +msgid "Show permissions" +msgstr "Показати права доступу" + +#: app/flatpak-builtins-info.c:61 +msgid "Query file access" +msgstr "Запит щодо доступу до файла" + +#: app/flatpak-builtins-info.c:61 app/flatpak-builtins-install.c:68 +#: app/flatpak-builtins-update.c:64 +msgid "PATH" +msgstr "ШЛЯХ" + +#: app/flatpak-builtins-info.c:62 msgid "Show extensions" msgstr "Показати розширення" -#: app/flatpak-builtins-info.c:97 +#: app/flatpak-builtins-info.c:118 msgid "NAME [BRANCH] - Get info about installed app and/or runtime" msgstr "" "НАЗВА [ГІЛКА] - Отримати інформацію щодо встановленої програми і/або " "середовища виконання" -#: app/flatpak-builtins-info.c:157 +#: app/flatpak-builtins-info.c:189 msgid "ref not present in origin" msgstr "посилання немає у джерелі" -#: app/flatpak-builtins-info.c:159 +#: app/flatpak-builtins-info.c:202 app/flatpak-builtins-info-remote.c:177 +msgid "Warning: Commit has no flatpak metadata\n" +msgstr "Попередження: у внеску немає метаданих flatpak\n" + +#: app/flatpak-builtins-info.c:209 app/flatpak-builtins-info-remote.c:200 msgid "Ref:" msgstr "Джерело:" -#: app/flatpak-builtins-info.c:160 app/flatpak-builtins-info.c:270 +#: app/flatpak-builtins-info.c:210 app/flatpak-builtins-info.c:364 +#: app/flatpak-builtins-info-remote.c:201 msgid "ID:" msgstr "Ід.:" -#: app/flatpak-builtins-info.c:161 +#: app/flatpak-builtins-info.c:211 app/flatpak-builtins-info-remote.c:202 msgid "Arch:" msgstr "Арх.:" -#: app/flatpak-builtins-info.c:162 +#: app/flatpak-builtins-info.c:212 app/flatpak-builtins-info-remote.c:203 msgid "Branch:" msgstr "Гілка:" -#: app/flatpak-builtins-info.c:163 app/flatpak-builtins-info.c:271 +#: app/flatpak-builtins-info.c:213 app/flatpak-builtins-info.c:365 msgid "Origin:" msgstr "Походження:" -#: app/flatpak-builtins-info.c:166 +#: app/flatpak-builtins-info.c:215 app/flatpak-builtins-info-remote.c:205 +msgid "Collection ID:" +msgstr "Ід. збірки:" + +#: app/flatpak-builtins-info.c:217 app/flatpak-builtins-info-remote.c:206 +msgid "Date:" +msgstr "Дата:" + +#: app/flatpak-builtins-info.c:219 app/flatpak-builtins-info-remote.c:207 +msgid "Subject:" +msgstr "Тема:" + +#: app/flatpak-builtins-info.c:223 msgid "Active commit:" msgstr "Активний внесок:" -#: app/flatpak-builtins-info.c:167 +#: app/flatpak-builtins-info.c:224 msgid "Latest commit:" msgstr "Останній внесок:" -#: app/flatpak-builtins-info.c:170 app/flatpak-builtins-info.c:272 +#: app/flatpak-builtins-info.c:227 app/flatpak-builtins-info.c:366 +#: app/flatpak-builtins-info-remote.c:208 msgid "Commit:" msgstr "Внесок:" -#: app/flatpak-builtins-info.c:172 +#: app/flatpak-builtins-info.c:229 msgid "alt-id:" msgstr "альт-ід.:" -#: app/flatpak-builtins-info.c:173 +#: app/flatpak-builtins-info.c:230 app/flatpak-builtins-info-remote.c:209 +msgid "Parent:" +msgstr "Батьківський:" + +#: app/flatpak-builtins-info.c:231 msgid "Location:" msgstr "Місце:" -#: app/flatpak-builtins-info.c:174 app/flatpak-builtins-info.c:273 +#: app/flatpak-builtins-info.c:232 app/flatpak-builtins-info.c:367 +#: app/flatpak-builtins-info-remote.c:211 msgid "Installed size:" msgstr "Розмір встановленого:" -#: app/flatpak-builtins-info.c:179 +#: app/flatpak-builtins-info.c:237 app/flatpak-builtins-info-remote.c:216 msgid "Runtime:" msgstr "Середовище виконання:" -#: app/flatpak-builtins-info.c:184 +#: app/flatpak-builtins-info.c:242 msgid "Installed subdirectories:" msgstr "Встановлені підкаталоги:" -#: app/flatpak-builtins-info.c:269 +#: app/flatpak-builtins-info.c:363 msgid "Extension:" msgstr "Суфікс:" -#: app/flatpak-builtins-info.c:280 +#: app/flatpak-builtins-info.c:374 msgid "Subpaths:" msgstr "Підшляхи:" -#: app/flatpak-builtins-install.c:57 -msgid "Don't pull, only install from local cache" -msgstr "Не отримувати зі сховища, встановити лише з локального кешу" +#: app/flatpak-builtins-info-remote.c:49 +msgid "Commit to show info for" +msgstr "Внесок, щодо якого слід показати відомості" -#: app/flatpak-builtins-install.c:58 app/flatpak-builtins-update.c:57 -msgid "Don't deploy, only download to local cache" -msgstr "Не розгортати, лише отримати дані до локального кешу" - -#: app/flatpak-builtins-install.c:59 -msgid "Don't install related refs" -msgstr "Не встановлювати пов’язані посилання" - -#: app/flatpak-builtins-install.c:60 app/flatpak-builtins-update.c:59 -msgid "Don't verify/install runtime dependencies" -msgstr "Не перевіряти або не встановлювати залежності для виконання" - -#: app/flatpak-builtins-install.c:61 app/flatpak-builtins-update.c:60 -msgid "Don't use static deltas" -msgstr "Не використовувати статичні різниці" - -#: app/flatpak-builtins-install.c:63 app/flatpak-builtins-uninstall.c:49 -#: app/flatpak-builtins-update.c:62 +#: app/flatpak-builtins-info-remote.c:51 app/flatpak-builtins-install.c:64 +#: app/flatpak-builtins-uninstall.c:49 app/flatpak-builtins-update.c:62 msgid "Look for app with the specified name" msgstr "Шукати програму із вказаною назвою" -#: app/flatpak-builtins-install.c:64 +#: app/flatpak-builtins-info-remote.c:52 +msgid "Display log" +msgstr "Показати журнал" + +#: app/flatpak-builtins-info-remote.c:55 +msgid "Show parent" +msgstr "Показати батьківський запис" + +#: app/flatpak-builtins-info-remote.c:122 +msgid "" +" REMOTE REF - Show information about an application or runtime in a remote" +msgstr "" +" СХОВИЩЕ НАЗВА - Показати відомості щодо програми або середовища у" +" віддаленому сховищі" + +#: app/flatpak-builtins-info-remote.c:133 app/flatpak-builtins-install.c:499 +msgid "REMOTE and REF must be specified" +msgstr "Має бути вказано СХОВИЩЕ і НАЗВУ" + +#: app/flatpak-builtins-info-remote.c:210 +msgid "Download size:" +msgstr "Розмір отриманого:" + +#: app/flatpak-builtins-info-remote.c:223 +msgid "History:\n" +msgstr "Журнал:\n" + +#: app/flatpak-builtins-info-remote.c:244 +msgid " Subject:" +msgstr " Тема:" + +#: app/flatpak-builtins-info-remote.c:245 +msgid " Date:" +msgstr " Дата:" + +#: app/flatpak-builtins-info-remote.c:246 +msgid " Commit:" +msgstr " Внесок:" + +#: app/flatpak-builtins-info-remote.c:292 +#, c-format +msgid "Warning: Commit %s has no flatpak metadata\n" +msgstr "Попередження: у внеску %s немає метаданих flatpak\n" + +#: app/flatpak-builtins-install.c:58 +msgid "Don't pull, only install from local cache" +msgstr "Не отримувати зі сховища, встановити лише з локального кешу" + +#: app/flatpak-builtins-install.c:59 app/flatpak-builtins-update.c:57 +msgid "Don't deploy, only download to local cache" +msgstr "Не розгортати, лише отримати дані до локального кешу" + +#: app/flatpak-builtins-install.c:60 +msgid "Don't install related refs" +msgstr "Не встановлювати пов’язані посилання" + +#: app/flatpak-builtins-install.c:61 app/flatpak-builtins-update.c:59 +msgid "Don't verify/install runtime dependencies" +msgstr "Не перевіряти або не встановлювати залежності для виконання" + +#: app/flatpak-builtins-install.c:62 app/flatpak-builtins-update.c:60 +msgid "Don't use static deltas" +msgstr "Не використовувати статичні різниці" + +#: app/flatpak-builtins-install.c:65 msgid "Assume LOCATION is a .flatpak single-file bundle" msgstr "Вважати значенням параметра МІСЦЕ однофайловий пакунок .flatpak" -#: app/flatpak-builtins-install.c:65 +#: app/flatpak-builtins-install.c:66 msgid "Assume LOCATION is a .flatpakref application description" msgstr "Вважати значенням параметра МІСЦЕ опис програми .flatpakref" -#: app/flatpak-builtins-install.c:66 +#: app/flatpak-builtins-install.c:67 msgid "Check bundle signatures with GPG key from FILE (- for stdin)" msgstr "" "Перевірити підписи пакунків за допомогою ключа GPG з ФАЙЛА (- якщо слід дані " "слід взяти з stdin)" -#: app/flatpak-builtins-install.c:67 +#: app/flatpak-builtins-install.c:68 msgid "Only install this subpath" msgstr "Встановити лише цей підшлях" -#: app/flatpak-builtins-install.c:67 app/flatpak-builtins-update.c:64 -msgid "PATH" -msgstr "ШЛЯХ" - -#: app/flatpak-builtins-install.c:68 app/flatpak-builtins-update.c:65 +#: app/flatpak-builtins-install.c:69 app/flatpak-builtins-update.c:65 msgid "Automatically answer yes for all questions" msgstr "Автоматично відповідати «так» на усі питання" -#: app/flatpak-builtins-install.c:210 +#: app/flatpak-builtins-install.c:70 +msgid "Uninstall first if already installed" +msgstr "Спочатку вилучити, якщо вже встановлено" + +#: app/flatpak-builtins-install.c:212 #, c-format msgid "" "This application depends on runtimes from:\n" @@ -1292,151 +1382,147 @@ msgstr "" " %s\n" "Налаштуйте як нове сховище «%s»" -#: app/flatpak-builtins-install.c:214 app/flatpak-builtins-install.c:340 +#: app/flatpak-builtins-install.c:216 app/flatpak-builtins-install.c:342 #, c-format msgid "Configuring %s as new remote '%s'" msgstr "Налаштовуємо %s як нове віддалене сховище «%s»" -#: app/flatpak-builtins-install.c:262 +#: app/flatpak-builtins-install.c:264 msgid "Bundle filename must be specified" msgstr "Слід вказати назву файла пакунка" -#: app/flatpak-builtins-install.c:272 +#: app/flatpak-builtins-install.c:274 msgid "Remote bundles are not supported" msgstr "Підтримки віддалених пакунків не передбачено" -#: app/flatpak-builtins-install.c:336 +#: app/flatpak-builtins-install.c:338 #, c-format msgid "" "The remote '%s', at location %s contains additional applications.\n" -"Do you want to install other applications from here?" +"Should the remote be kept for future installations?" msgstr "" "У віддаленому сховищі «%s», розміщеному у %s, містяться додаткові програми.\n" -"Хочете встановити інші програми звідти?" +"Хочете зберегти віддалено сховище для наступних встановлень?" -#: app/flatpak-builtins-install.c:396 +#: app/flatpak-builtins-install.c:398 msgid "Filename or uri must be specified" msgstr "Слід вказати назву файла або адресу" -#: app/flatpak-builtins-install.c:440 +#: app/flatpak-builtins-install.c:442 #, c-format msgid "Installing: %s\n" msgstr "Встановлюємо: %s\n" -#: app/flatpak-builtins-install.c:470 +#: app/flatpak-builtins-install.c:474 msgid "LOCATION/REMOTE [REF...] - Install applications or runtimes" msgstr "МІСЦЕ/СХОВИЩЕ [НАЗВА…] - Встановити програму або середовища виконання" -#: app/flatpak-builtins-install.c:491 -msgid "REMOTE and REF must be specified" -msgstr "Має бути вказано СХОВИЩЕ і НАЗВУ" - -#: app/flatpak-builtins-list.c:49 +#: app/flatpak-builtins-list.c:43 msgid "Show extra information" msgstr "Показати додаткову інформацію" -#: app/flatpak-builtins-list.c:50 +#: app/flatpak-builtins-list.c:44 msgid "List installed runtimes" msgstr "Вивести список встановлених середовищ виконання" -#: app/flatpak-builtins-list.c:51 +#: app/flatpak-builtins-list.c:45 msgid "List installed applications" msgstr "Вивести список встановлених програм" -#: app/flatpak-builtins-list.c:52 +#: app/flatpak-builtins-list.c:46 msgid "Arch to show" msgstr "Архітектура для показу" -#: app/flatpak-builtins-list.c:53 app/flatpak-builtins-ls-remote.c:49 +#: app/flatpak-builtins-list.c:47 app/flatpak-builtins-ls-remote.c:50 msgid "List all refs (including locale/debug)" msgstr "Вивести список усіх джерел (включно з locale/debug)" -#: app/flatpak-builtins-list.c:131 app/flatpak-builtins-ls-remote.c:129 +#: app/flatpak-builtins-list.c:125 app/flatpak-builtins-ls-remote.c:177 #: app/flatpak-builtins-repo.c:98 msgid "Ref" msgstr "Джерело" -#: app/flatpak-builtins-list.c:134 app/flatpak-builtins-ls-remote.c:131 +#: app/flatpak-builtins-list.c:128 app/flatpak-builtins-ls-remote.c:179 msgid "Origin" msgstr "Походження" -#: app/flatpak-builtins-list.c:135 +#: app/flatpak-builtins-list.c:129 msgid "Active commit" msgstr "Активний внесок" -#: app/flatpak-builtins-list.c:136 +#: app/flatpak-builtins-list.c:130 msgid "Latest commit" msgstr "Останній внесок" -#: app/flatpak-builtins-list.c:137 app/flatpak-builtins-ls-remote.c:133 +#: app/flatpak-builtins-list.c:131 app/flatpak-builtins-ls-remote.c:181 msgid "Installed size" msgstr "Розмір встановленого" -#: app/flatpak-builtins-list.c:139 app/flatpak-builtins-list-remotes.c:112 +#: app/flatpak-builtins-list.c:133 app/flatpak-builtins-list-remotes.c:76 msgid "Options" msgstr "Параметри" -#: app/flatpak-builtins-list.c:375 +#: app/flatpak-builtins-list.c:305 msgid " - List installed apps and/or runtimes" msgstr " - Вивести список встановлених програм і/або середовищ виконання" -#: app/flatpak-builtins-list-remotes.c:46 +#: app/flatpak-builtins-list-remotes.c:40 msgid "Show remote details" msgstr "Показати подробиці щодо віддаленого сховища" -#: app/flatpak-builtins-list-remotes.c:47 +#: app/flatpak-builtins-list-remotes.c:41 msgid "Show disabled remotes" msgstr "Показати вимкнені віддалені сховища" -#: app/flatpak-builtins-list-remotes.c:59 +#: app/flatpak-builtins-list-remotes.c:53 msgid " - List remote repositories" msgstr " - Вивести список віддалених сховищ" -#: app/flatpak-builtins-list-remotes.c:105 +#: app/flatpak-builtins-list-remotes.c:66 msgid "Name" msgstr "Назва" -#: app/flatpak-builtins-list-remotes.c:108 +#: app/flatpak-builtins-list-remotes.c:69 msgid "Title" msgstr "Заголовок" -#: app/flatpak-builtins-list-remotes.c:110 +#: app/flatpak-builtins-list-remotes.c:74 msgid "Priority" msgstr "Пріоритетність" -#: app/flatpak-builtins-ls-remote.c:44 +#: app/flatpak-builtins-ls-remote.c:45 msgid "Show arches and branches" msgstr "Показати архітектури і гілки" -#: app/flatpak-builtins-ls-remote.c:45 +#: app/flatpak-builtins-ls-remote.c:46 msgid "Show only runtimes" msgstr "Показати лише середовища виконання" -#: app/flatpak-builtins-ls-remote.c:46 +#: app/flatpak-builtins-ls-remote.c:47 msgid "Show only apps" msgstr "Показати лише програми" -#: app/flatpak-builtins-ls-remote.c:47 +#: app/flatpak-builtins-ls-remote.c:48 msgid "Show only those where updates are available" msgstr "Показати лише ті, для яких доступні оновлення" -#: app/flatpak-builtins-ls-remote.c:48 +#: app/flatpak-builtins-ls-remote.c:49 msgid "Limit to this arch (* for all)" msgstr "Обмежитися вказаною архітектурою (* для усіх)" -#: app/flatpak-builtins-ls-remote.c:74 -msgid " REMOTE - Show available runtimes and applications" -msgstr " СХОВИЩЕ - Показати доступні середовища виконання і програми" +#: app/flatpak-builtins-ls-remote.c:96 +msgid " [REMOTE] - Show available runtimes and applications" +msgstr " [СХОВИЩЕ] - Показати доступні середовища виконання і програми" -#: app/flatpak-builtins-ls-remote.c:132 +#: app/flatpak-builtins-ls-remote.c:180 msgid "Commit" msgstr "Внесок" -#: app/flatpak-builtins-ls-remote.c:134 +#: app/flatpak-builtins-ls-remote.c:182 msgid "Download size" msgstr "Розмір отриманого" -#: app/flatpak-builtins-ls-remote.c:245 +#: app/flatpak-builtins-ls-remote.c:307 msgid "No ref information available in repository" msgstr "У сховищі немає даних щодо джерела" @@ -1444,31 +1530,29 @@ msgstr "У сховищі немає даних щодо джерела" msgid "Arch to make current for" msgstr "Архітектура, яку слід зробити поточною" -#: app/flatpak-builtins-make-current.c:57 +#: app/flatpak-builtins-make-current.c:58 msgid "APP BRANCH - Make branch of application current" msgstr "ПРОГРАМА ГІЛКА - Зробити гілку програми поточною" -#: app/flatpak-builtins-make-current.c:64 app/flatpak-builtins-override.c:63 -#: app/flatpak-builtins-run.c:105 +#: app/flatpak-builtins-make-current.c:69 app/flatpak-builtins-run.c:107 msgid "APP must be specified" msgstr "Слід вказати ПРОГРАМУ" -#: app/flatpak-builtins-make-current.c:79 +#: app/flatpak-builtins-make-current.c:84 msgid "BRANCH must be specified" msgstr "Слід вказати ГІЛКУ" -#: app/flatpak-builtins-make-current.c:92 +#: app/flatpak-builtins-make-current.c:97 #, c-format msgid "App %s branch %s is not installed" msgstr "Програму %s, гілка %s не встановлено" -#: app/flatpak-builtins-override.c:53 -msgid "APP - Override settings for application" -msgstr "ПРОГРАМА - Перевизначити параметри програми" +#: app/flatpak-builtins-override.c:54 +msgid "[APP] - Override settings [for application]" +msgstr "[ПРОГРАМА] - Перевизначити параметри [для програми]" #: app/flatpak-builtins-repo.c:48 #, c-format -#| msgid "Title" msgid "Title: %s\n" msgstr "Назва: %s\n" @@ -1522,7 +1606,7 @@ msgstr "Вивести список гілок у сховищі" msgid "Print metadata for a branch" msgstr "Вивести метадані для гілки" -#: app/flatpak-builtins-repo.c:167 +#: app/flatpak-builtins-repo.c:168 msgid "LOCATION - Repository maintenance" msgstr "РОЗТАШУВАННЯ - Супровід сховища" @@ -1541,8 +1625,8 @@ msgstr "Типова гілка для цього сховища" #: app/flatpak-builtins-repo-update.c:57 msgid "Permanently deploy collection ID to client remote configurations" msgstr "" -"Остаточно розгорнути ідентифікатор збірки у налаштуваннях віддалених сховищ" -" клієнта" +"Остаточно розгорнути ідентифікатор збірки у налаштуваннях віддалених сховищ " +"клієнта" #: app/flatpak-builtins-repo-update.c:59 msgid "Import new default GPG public key from FILE" @@ -1616,46 +1700,75 @@ msgstr "Немає недосяжних об’єктів\n" msgid "Deleted %u objects, %s freed\n" msgstr "Вилучено %u об’єктів, вивільнено %s\n" -#: app/flatpak-builtins-run.c:53 +#: app/flatpak-builtins-run.c:54 msgid "Command to run" msgstr "Команда, яку слід виконати" -#: app/flatpak-builtins-run.c:54 +#: app/flatpak-builtins-run.c:55 msgid "Branch to use" msgstr "Гілка, яку слід використовувати" -#: app/flatpak-builtins-run.c:55 +#: app/flatpak-builtins-run.c:56 msgid "Use development runtime" msgstr "Використовувати розробницьке середовище виконання" -#: app/flatpak-builtins-run.c:56 +#: app/flatpak-builtins-run.c:57 msgid "Runtime to use" msgstr "Середовище виконання, яке слід використовувати" -#: app/flatpak-builtins-run.c:57 +#: app/flatpak-builtins-run.c:58 msgid "Runtime version to use" msgstr "Версія середовища виконання, яку слід використовувати" -#: app/flatpak-builtins-run.c:58 -msgid "Log session bus calls" -msgstr "Записувати до журналу виклики до каналу сеансу" - -#: app/flatpak-builtins-run.c:59 -msgid "Log system bus calls" -msgstr "Записувати до журналу виклики до каналу системи" - -#: app/flatpak-builtins-run.c:60 +#: app/flatpak-builtins-run.c:61 msgid "Log accessibility bus calls" msgstr "Записувати до журналу виклики до каналу доступності" -#: app/flatpak-builtins-run.c:61 +#: app/flatpak-builtins-run.c:62 +#| msgid "Log accessibility bus calls" +msgid "Don't proxy accessibility bus calls" +msgstr "Не використовувати проксі для викликів до каналу доступності" + +#: app/flatpak-builtins-run.c:63 msgid "Enable file forwarding" msgstr "Увімкнути переспрямовування файлів" -#: app/flatpak-builtins-run.c:82 +#: app/flatpak-builtins-run.c:84 msgid "APP [args...] - Run an app" msgstr "ПРОГРАМА [аргументи...] - Виконати програму" +#: app/flatpak-builtins-search.c:239 +msgid "TEXT - Search remote apps/runtimes for text" +msgstr "ТЕКСТ - шукати у віддалених програмах або середовищах текст" + +#: app/flatpak-builtins-search.c:249 +msgid "TEXT must be specified" +msgstr "Має бути вказано ТЕКСТ" + +#: app/flatpak-builtins-search.c:305 +msgid "Application ID" +msgstr "Ід. програми" + +#: app/flatpak-builtins-search.c:306 +msgid "Version" +msgstr "Версія" + +#: app/flatpak-builtins-search.c:308 +msgid "Branch" +msgstr "Гілка" + +#: app/flatpak-builtins-search.c:310 +msgid "Remotes" +msgstr "Сховища" + +#: app/flatpak-builtins-search.c:311 +msgid "Description" +msgstr "Опис" + +#: app/flatpak-builtins-search.c:320 +msgid "No matches found" +msgstr "Відповідників не знайдено" + #: app/flatpak-builtins-uninstall.c:44 msgid "Arch to uninstall" msgstr "Архітектура для вилучення" @@ -1672,19 +1785,24 @@ msgstr "Не встановлювати пов’язані посилання" msgid "Remove files even if running" msgstr "Вилучити файли, навіть якщо роботу ще не завершено" -#: app/flatpak-builtins-uninstall.c:69 +#: app/flatpak-builtins-uninstall.c:70 msgid "REF... - Uninstall an application" msgstr "ПОСИЛАННЯ… - Вилучити програму" -#: app/flatpak-builtins-uninstall.c:76 +#: app/flatpak-builtins-uninstall.c:81 msgid "Must specify at least one REF" msgstr "Слід вказати принаймні одне посилання" -#: app/flatpak-builtins-uninstall.c:129 app/flatpak-transaction.c:336 +#: app/flatpak-builtins-uninstall.c:134 app/flatpak-transaction.c:355 #, c-format msgid "Warning: Problem looking for related refs: %s\n" msgstr "Попередження: проблема під час пошуку пов’язаних посилань: %s\n" +#: app/flatpak-builtins-uninstall.c:164 +#, c-format +msgid "Uninstalling: %s\n" +msgstr "Вилучаємо: %s\n" + #: app/flatpak-builtins-update.c:53 msgid "Arch to update for" msgstr "Архітектура для оновлення" @@ -1693,10 +1811,6 @@ msgstr "Архітектура для оновлення" msgid "Commit to deploy" msgstr "Внесок для розгортання" -#: app/flatpak-builtins-update.c:54 -msgid "COMMIT" -msgstr "COMMIT" - #: app/flatpak-builtins-update.c:55 msgid "Remove old files even if running" msgstr "Вилучити застарілі файли, навіть якщо роботу ще не завершено" @@ -1717,58 +1831,95 @@ msgstr "Оновити дані appstream для віддаленого схов msgid "Only update this subpath" msgstr "Оновити лише вказаний підшлях" -#: app/flatpak-builtins-update.c:95 -#, c-format -msgid "Updating appstream for remote %s\n" -msgstr "Оновлюємо appstream для віддаленого сховища %s\n" +#: app/flatpak-builtins-update.c:83 +msgid "[REF...] - Update applications or runtimes" +msgstr "[НАЗВА…] - Оновити програми або середовища виконання" -#: app/flatpak-builtins-update.c:99 +#: app/flatpak-builtins-update.c:119 +msgid "Looking for updates...\n" +msgstr "Шукаємо оновлення...\n" + +#: app/flatpak-builtins-utils.c:365 +#, c-format +msgid "Remote ‘%s’ found in multiple installations:\n" +msgstr "Віддалене сховище «%s» знайдено у декількох встановленнях:\n" + +#: app/flatpak-builtins-utils.c:372 +msgid "Which do you want to use (0 to abort)?" +msgstr "Яким скористатися (0 — перервати)?" + +#: app/flatpak-builtins-utils.c:374 +#, c-format +msgid "No remote chosen to resolve ‘%s’ which exists in multiple installations" +msgstr "" +"Не вибрано віддаленого сховища для визначення «%s», що існує у декількох" +" встановленнях" + +#: app/flatpak-builtins-utils.c:479 app/flatpak-builtins-utils.c:481 +#, c-format +msgid "Updating appstream data for user remote %s\n" +msgstr "Оновлюємо дані appstream для віддаленого сховища користувача %s\n" + +#: app/flatpak-builtins-utils.c:486 app/flatpak-builtins-utils.c:488 +#, c-format +msgid "Updating appstream data for remote %s\n" +msgstr "Оновлюємо дані appstream для віддаленого сховища %s\n" + +#: app/flatpak-builtins-utils.c:493 #, c-format msgid "Error updating: %s\n" msgstr "Помилка під час спроби оновлення: %s\n" -#: app/flatpak-builtins-update.c:133 -msgid "[REF...] - Update applications or runtimes" -msgstr "[НАЗВА…] - Оновити програми або середовища виконання" - -#: app/flatpak-builtins-update.c:156 -#| msgid "No updates.\n" -msgid "Looking for updates...\n" -msgstr "Шукаємо оновлення...\n" +#: app/flatpak-builtins-utils.c:526 +#, c-format +msgid "Remote \"%s\" not found" +msgstr "Не знайдено віддаленого сховища «%s»" #. translators: please keep the leading space -#: app/flatpak-main.c:61 +#: app/flatpak-main.c:62 msgid " Manage installed apps and runtimes" msgstr " Керування встановленими програмами і середовищами виконання" -#: app/flatpak-main.c:62 +#: app/flatpak-main.c:63 msgid "Install an application or runtime" msgstr "Встановити програму або середовище виконання" -#: app/flatpak-main.c:63 +#: app/flatpak-main.c:64 msgid "Update an installed application or runtime" msgstr "Оновити встановлену програму або середовище виконання" -#: app/flatpak-main.c:64 +#: app/flatpak-main.c:65 msgid "Uninstall an installed application or runtime" msgstr "Вилучити встановлену програму або середовище виконання" -#: app/flatpak-main.c:65 +#: app/flatpak-main.c:66 msgid "List installed apps and/or runtimes" msgstr "Вивести список встановлених програм і/або середовищ виконання" -#: app/flatpak-main.c:66 +#: app/flatpak-main.c:67 msgid "Show info for installed app or runtime" msgstr "" "Показати інформацію щодо встановленої програми або середовища виконання" -#: app/flatpak-main.c:67 -#| msgid "Configure Remote" +#: app/flatpak-main.c:68 msgid "Configure flatpak" msgstr "Налаштувати flatpak" #. translators: please keep the leading newline and space -#: app/flatpak-main.c:70 +#: app/flatpak-main.c:71 +msgid "" +"\n" +" Finding applications and runtimes" +msgstr "" +"\n" +" Пошук програм і середовищ" + +#: app/flatpak-main.c:72 +msgid "Search for remote apps/runtimes" +msgstr "Шукати віддалені програми або сховища" + +#. translators: please keep the leading newline and space +#: app/flatpak-main.c:75 msgid "" "\n" " Running applications" @@ -1776,24 +1927,24 @@ msgstr "" "\n" " Запущені програми" -#: app/flatpak-main.c:71 +#: app/flatpak-main.c:76 msgid "Run an application" msgstr "Запустити програму" -#: app/flatpak-main.c:72 +#: app/flatpak-main.c:77 msgid "Override permissions for an application" msgstr "Перевизначити права доступу для програми" -#: app/flatpak-main.c:73 +#: app/flatpak-main.c:78 msgid "Specify default version to run" msgstr "Вказати типову версію для запуску" -#: app/flatpak-main.c:74 +#: app/flatpak-main.c:79 msgid "Enter the namespace of a running application" msgstr "Введіть простір назв для запущеної програми" #. translators: please keep the leading newline and space -#: app/flatpak-main.c:77 +#: app/flatpak-main.c:82 msgid "" "\n" " Manage file access" @@ -1801,24 +1952,24 @@ msgstr "" "\n" " Керування доступом до файлів" -#: app/flatpak-main.c:78 +#: app/flatpak-main.c:83 msgid "Grant an application access to a specific file" msgstr "Надати програмі доступ до вказаного файла" -#: app/flatpak-main.c:79 +#: app/flatpak-main.c:84 msgid "Revoke access to a specific file" msgstr "Відкликати доступ до вказаного файла" -#: app/flatpak-main.c:80 +#: app/flatpak-main.c:85 msgid "Show information about a specific file" msgstr "Показати інформацію щодо вказаного файла" -#: app/flatpak-main.c:81 +#: app/flatpak-main.c:86 msgid "List exported files" msgstr "Вивести список експортованих файлів" #. translators: please keep the leading newline and space -#: app/flatpak-main.c:84 +#: app/flatpak-main.c:89 msgid "" "\n" " Manage remote repositories" @@ -1826,28 +1977,32 @@ msgstr "" "\n" " Керування віддаленими сховищами" -#: app/flatpak-main.c:85 +#: app/flatpak-main.c:90 msgid "List all configured remotes" msgstr "Вивести список усіх налаштованих віддалених сховищ" -#: app/flatpak-main.c:86 +#: app/flatpak-main.c:91 msgid "Add a new remote repository (by URL)" msgstr "Додати нове віддалене сховище (за адресою)" -#: app/flatpak-main.c:87 +#: app/flatpak-main.c:92 msgid "Modify properties of a configured remote" msgstr "Змінити властивості налаштованого віддаленого сховища" -#: app/flatpak-main.c:88 +#: app/flatpak-main.c:93 msgid "Delete a configured remote" msgstr "Вилучити налаштоване віддалене сховище" -#: app/flatpak-main.c:90 +#: app/flatpak-main.c:95 msgid "List contents of a configured remote" msgstr "Вивести список вмісту налаштованого віддаленого сховища" +#: app/flatpak-main.c:96 +msgid "Show information about a remote app or runtime" +msgstr "Показати відомості щодо віддаленої програми або середовища" + #. translators: please keep the leading newline and space -#: app/flatpak-main.c:93 +#: app/flatpak-main.c:99 msgid "" "\n" " Build applications" @@ -1855,540 +2010,286 @@ msgstr "" "\n" " Зібрати програми" -#: app/flatpak-main.c:94 +#: app/flatpak-main.c:100 msgid "Initialize a directory for building" msgstr "Ініціалізувати каталог для збирання" -#: app/flatpak-main.c:95 +#: app/flatpak-main.c:101 msgid "Run a build command inside the build dir" msgstr "Виконати команду збирання у каталозі збирання" -#: app/flatpak-main.c:96 +#: app/flatpak-main.c:102 msgid "Finish a build dir for export" msgstr "Завершити каталог збирання для експортування" -#: app/flatpak-main.c:97 +#: app/flatpak-main.c:103 msgid "Export a build dir to a repository" msgstr "Експортувати каталог збирання до сховища" -#: app/flatpak-main.c:98 -msgid "Create a bundle file from a build directory" -msgstr "Створити файл пакунка з каталогу збирання" +#: app/flatpak-main.c:104 +msgid "Create a bundle file from a ref in a local repository" +msgstr "Створити файл пакунка з посилання у локальному сховищі" -#: app/flatpak-main.c:99 +#: app/flatpak-main.c:105 msgid "Import a bundle file" msgstr "Імпортувати файл пакунка" -#: app/flatpak-main.c:100 +#: app/flatpak-main.c:106 msgid "Sign an application or runtime" msgstr "Підписати програму або середовище виконання" -#: app/flatpak-main.c:101 +#: app/flatpak-main.c:107 msgid "Update the summary file in a repository" msgstr "Оновити файл резюме у сховищі" -#: app/flatpak-main.c:102 +#: app/flatpak-main.c:108 msgid "Create new commit based on existing ref" msgstr "Створити внесок на основі наявного посилання" -#: app/flatpak-main.c:103 +#: app/flatpak-main.c:109 msgid "Print information about a repo" msgstr "Вивести інформація щодо сховища" -#: app/flatpak-main.c:120 +#: app/flatpak-main.c:126 msgid "Print debug information during command processing, -vv for more detail" msgstr "" -"Вивести діагностичні дані під час обробки команди, -vv для збільшення" -" докладності" +"Вивести діагностичні дані під час обробки команди, -vv для збільшення " +"докладності" -#: app/flatpak-main.c:121 +#: app/flatpak-main.c:127 msgid "Print OSTree debug information during command processing" msgstr "Вивести діагностичні дані OSTree під час обробки команди" -#: app/flatpak-main.c:122 +#: app/flatpak-main.c:128 msgid "Show help options" msgstr "Показати параметри доступ до довідки" -#: app/flatpak-main.c:127 +#: app/flatpak-main.c:133 msgid "Print version information and exit" msgstr "Показати дані щодо версії і завершити роботу" -#: app/flatpak-main.c:128 +#: app/flatpak-main.c:134 msgid "Print default arch and exit" msgstr "Вивести дані щодо типової архітектури і завершити роботу" -#: app/flatpak-main.c:129 +#: app/flatpak-main.c:135 msgid "Print supported arches and exit" msgstr "Вивести список підтримуваних архітектур і завершити роботу" -#: app/flatpak-main.c:130 +#: app/flatpak-main.c:136 msgid "Print active gl drivers and exit" msgstr "Вивести дані щодо активних драйверів gl і завершити роботу" -#: app/flatpak-main.c:135 +#: app/flatpak-main.c:141 msgid "Work on user installations" msgstr "Працювати над встановленим користувачем" -#: app/flatpak-main.c:136 +#: app/flatpak-main.c:142 msgid "Work on system-wide installations (default)" msgstr "Працювати над загальносистемними встановленими даними (типово)" -#: app/flatpak-main.c:137 -msgid "Work on a specific system-wide installation" -msgstr "Працювати із вказаним загальносистемним встановленням" +#: app/flatpak-main.c:143 +msgid "Work on specific system-wide installation(s)" +msgstr "Працювати із вказаними загальносистемними встановленнями" -#: app/flatpak-main.c:137 +#: app/flatpak-main.c:143 msgid "NAME" msgstr "НАЗВА" -#: app/flatpak-main.c:163 +#: app/flatpak-main.c:169 msgid "Builtin Commands:" msgstr "Вбудовані команди:" -#: app/flatpak-main.c:389 +#: app/flatpak-main.c:370 +msgid "" +"The --installation option was used multiple times for a command that works " +"on one installation" +msgstr "" +"Параметр --installation використано декілька разів для команди, яка працює" +" для одного встановлення" + +#: app/flatpak-main.c:489 #, c-format msgid "Unknown command '%s'" msgstr "Невідома команда «%s»" -#: app/flatpak-main.c:397 +#: app/flatpak-main.c:497 msgid "No command specified" msgstr "Команду не вказано" -#: app/flatpak-main.c:515 +#: app/flatpak-main.c:615 msgid "error:" msgstr "помилка:" -#: app/flatpak-transaction.c:294 +#: app/flatpak-transaction.c:313 #, c-format -#| msgid "Found in several remotes:\n" msgid "Found in remote %s\n" msgstr "Знайдено у віддаленому сховищі %s\n" -#: app/flatpak-transaction.c:298 +#: app/flatpak-transaction.c:317 #, c-format msgid "Found in remote %s, do you want to install it?" msgstr "Знайдено у сховищі %s, хочете встановити?" -#: app/flatpak-transaction.c:303 +#: app/flatpak-transaction.c:322 msgid "Found in several remotes:\n" msgstr "Знайдено у декількох сховищах:\n" -#: app/flatpak-transaction.c:308 +#: app/flatpak-transaction.c:327 msgid "Which do you want to install (0 to abort)?" msgstr "Який з пакунків встановити (0 — перервати)?" -#: app/flatpak-transaction.c:398 +#: app/flatpak-transaction.c:417 #, c-format msgid "Required runtime for %s (%s) is not installed, searching...\n" msgstr "Потрібне середовище бібліотек для %s (%s) не встановлено, шукаємо…\n" -#: app/flatpak-transaction.c:404 +#: app/flatpak-transaction.c:423 #, c-format msgid "The required runtime %s was not found in a configured remote.\n" msgstr "" "Потрібного середовища виконання %s у налаштованому віддаленому сховищі не " "знайдено.\n" -#: app/flatpak-transaction.c:465 common/flatpak-dir.c:1131 -#: common/flatpak-dir.c:1437 common/flatpak-dir.c:1460 -#: common/flatpak-dir.c:1482 common/flatpak-dir.c:10181 -#: common/flatpak-utils.c:1272 common/flatpak-utils.c:1366 +#: app/flatpak-transaction.c:506 common/flatpak-dir.c:1160 +#: common/flatpak-dir.c:1479 common/flatpak-dir.c:1502 +#: common/flatpak-dir.c:1524 common/flatpak-dir.c:10696 +#: common/flatpak-utils.c:1319 common/flatpak-utils.c:1413 #, c-format msgid "%s not installed" msgstr "%s не встановлено" -#: app/flatpak-transaction.c:471 +#: app/flatpak-transaction.c:512 #, c-format msgid "Remote %s disabled, ignoring %s update" msgstr "Сховище %s вимкнено, ігноруємо оновлення %s" -#: app/flatpak-transaction.c:481 +#: app/flatpak-transaction.c:525 #, c-format msgid "%s already installed, skipping\n" msgstr "%s вже встановлено, пропускаємо\n" -#: app/flatpak-transaction.c:492 +#: app/flatpak-transaction.c:531 +#, c-format +msgid "%s is already installed from other remote (%s)" +msgstr "%s вже встановлено із іншого віддаленого сховища (%s)" + +#: app/flatpak-transaction.c:543 #, c-format msgid "Warning: Can't find dependencies: %s\n" msgstr "Попередження: не вдалося знайти залежності: %s\n" -#: app/flatpak-transaction.c:519 +#: app/flatpak-transaction.c:570 #, c-format msgid "Invalid require-flatpak argument %s\n" msgstr "Некоректний аргумент require-flatpak %s\n" -#: app/flatpak-transaction.c:525 +#: app/flatpak-transaction.c:576 #, c-format msgid "%s needs a later flatpak version (%s)" msgstr "%s потребує новішої версії flatpak (%s)" -#: app/flatpak-transaction.c:637 +#: app/flatpak-transaction.c:688 #, c-format -#| msgid "Error updating extra metadata for '%s': %s\n" msgid "Error updating remote metadata for '%s': %s\n" msgstr "Помилка під час оновлення віддалених метаданих для «%s»: %s\n" -#: app/flatpak-transaction.c:692 +#: app/flatpak-transaction.c:744 msgid "install" msgstr "встановити" -#: app/flatpak-transaction.c:693 +#: app/flatpak-transaction.c:746 +#, c-format +msgid "Installing for user: %s from %s\n" +msgstr "Встановлюємо для користувача %s з %s\n" + +#: app/flatpak-transaction.c:748 #, c-format msgid "Installing: %s from %s\n" msgstr "Встановлюємо: %s з %s\n" -#: app/flatpak-transaction.c:709 +#: app/flatpak-transaction.c:765 msgid "update" msgstr "оновити" -#: app/flatpak-transaction.c:717 +#: app/flatpak-transaction.c:774 +#, c-format +msgid "Updating for user: %s from %s\n" +msgstr "Оновлюємо для користувача %s з %s\n" + +#: app/flatpak-transaction.c:776 #, c-format msgid "Updating: %s from %s\n" msgstr "Оновлюємо: %s з %s\n" -#: app/flatpak-transaction.c:737 +#: app/flatpak-transaction.c:796 #, c-format msgid "Now at %s.\n" msgstr "Зараз %s.\n" -#: app/flatpak-transaction.c:743 +#: app/flatpak-transaction.c:802 msgid "No updates.\n" msgstr "Немає оновлень.\n" -#: app/flatpak-transaction.c:761 +#: app/flatpak-transaction.c:820 msgid "install bundle" msgstr "встановити пакунок" -#: app/flatpak-transaction.c:762 +#: app/flatpak-transaction.c:822 +#, c-format +msgid "Installing for user: %s from bundle %s\n" +msgstr "Встановлюємо для користувача %s з пакунка %s\n" + +#: app/flatpak-transaction.c:824 #, c-format msgid "Installing: %s from bundle %s\n" msgstr "Встановлюємо: %s з пакунка %s\n" -#: app/flatpak-transaction.c:774 +#: app/flatpak-transaction.c:836 #, c-format msgid "Warning: Failed to %s %s: %s\n" msgstr "Попередження: не вдалося виконати дію %s %s: %s\n" -#: app/flatpak-transaction.c:779 +#: app/flatpak-transaction.c:841 #, c-format msgid "Error: Failed to %s %s: %s\n" msgstr "Помилка: не вдалося виконати дію %s %s: %s\n" -#: app/flatpak-transaction.c:784 +#: app/flatpak-transaction.c:846 msgid "One or more operations failed" msgstr "Помилка під час виконання однієї або декількох дій" -#: common/flatpak-dir.c:1019 -#, c-format -msgid "No overrides found for %s" -msgstr "Не знайдено перевизначень для %s" - -#: common/flatpak-dir.c:1615 -#, c-format -msgid "While opening repository %s: " -msgstr "Під час спроби відкрити сховище %s: " - -#: common/flatpak-dir.c:1833 common/flatpak-dir.c:5181 -msgid "Can't create deploy directory" -msgstr "Не вдалося створити каталог розгортання" - -#: common/flatpak-dir.c:2513 -#, c-format -msgid "Invalid sha256 for extra data uri %s" -msgstr "Некоректна сума sha256 для адреси додаткових даних %s" - -#: common/flatpak-dir.c:2518 -#, c-format -msgid "Empty name for extra data uri %s" -msgstr "Порожня назва для адреси додаткових даних %s" - -#: common/flatpak-dir.c:2525 -#, c-format -msgid "Unsupported extra data uri %s" -msgstr "Непідтримувана адреса додаткових даних %s" - -#: common/flatpak-dir.c:2539 -#, c-format -msgid "Failed to load local extra-data %s: %s" -msgstr "Не вдалося завантажити локальні додаткові дані %s: %s" - -#: common/flatpak-dir.c:2542 -#, c-format -msgid "Wrong size for extra-data %s" -msgstr "Помилковий розмір додаткових даних %s" - -#: common/flatpak-dir.c:2557 -#, c-format -msgid "While downloading %s: " -msgstr "Під час спроби отримання %s: " - -#: common/flatpak-dir.c:2564 -#, c-format -msgid "Wrong size for extra data %s" -msgstr "Помилковий розмір додаткових даних %s" - -#: common/flatpak-dir.c:2575 -#, c-format -msgid "Invalid checksum for extra data %s" -msgstr "Некоректна контрольна сума додаткових даних, %s" - -#: common/flatpak-dir.c:2831 -#, c-format -msgid "%s commit %s already installed" -msgstr "%s, внесок %s вже встановлено" - -#: common/flatpak-dir.c:3160 common/flatpak-dir.c:3474 -#, c-format -msgid "While pulling %s from remote %s: " -msgstr "Під час отримання %s з віддаленого сховища %s: " - -#: common/flatpak-dir.c:3359 -#, c-format -msgid "Can't find %s in remote %s" -msgstr "Не вдалося знайти %s у віддаленому сховищі %s" - -#: common/flatpak-dir.c:4032 -msgid "Not enough memory" -msgstr "Не вистачає пам'яті" - -#: common/flatpak-dir.c:4051 -msgid "Failed to read from exported file" -msgstr "Не вдалося виконати читання з експортованого файла" - -#: common/flatpak-dir.c:4242 -msgid "Error reading mimetype xml file" -msgstr "Помилка під час читання файла xml типу MIME" - -#: common/flatpak-dir.c:4247 -msgid "Invalid mimetype xml file" -msgstr "Некоректний файл xml типу MIME" - -#: common/flatpak-dir.c:4789 -msgid "While getting detached metadata: " -msgstr "Під час спроби отримання від’єднаних метаданих: " - -#: common/flatpak-dir.c:4807 -msgid "While creating extradir: " -msgstr "Під час створення каталогу додаткових даних: " - -#: common/flatpak-dir.c:4828 -msgid "Invalid sha256 for extra data" -msgstr "Некоректна контрольна сума sha256 для додаткових даних" - -#: common/flatpak-dir.c:4857 -msgid "Wrong size for extra data" -msgstr "Помилковий розмір додаткових даних" - -#: common/flatpak-dir.c:4861 -msgid "Invalid checksum for extra data" -msgstr "Некоректна контрольна сума додаткових даних" - -#: common/flatpak-dir.c:4870 -#, c-format -msgid "While writing extra data file '%s': " -msgstr "Під час записування файла додаткових даних «%s»: " - -#: common/flatpak-dir.c:5063 -#, c-format -msgid "apply_extra script failed, exit status %d" -msgstr "Помилка скрипту apply_extra, стан виходу %d" - -#: common/flatpak-dir.c:5140 -#, c-format -msgid "While trying to resolve ref %s: " -msgstr "Під час спроби визначити посилання %s: " - -#: common/flatpak-dir.c:5155 -#, c-format -msgid "%s is not available" -msgstr "%s недоступний" - -#: common/flatpak-dir.c:5170 common/flatpak-dir.c:5508 -#: common/flatpak-dir.c:6276 common/flatpak-dir.c:6289 -#: common/flatpak-dir.c:6365 -#, c-format -msgid "%s branch %s already installed" -msgstr "Гілку %s %s вже встановлено" - -#: common/flatpak-dir.c:5189 -#, c-format -msgid "Failed to read commit %s: " -msgstr "Не вдалося прочитати внесок %s: " - -#: common/flatpak-dir.c:5209 -#, c-format -msgid "While trying to checkout %s into %s: " -msgstr "Під час спроби вивантаження %s до %s: " - -#: common/flatpak-dir.c:5234 common/flatpak-dir.c:5265 -msgid "While trying to checkout metadata subpath: " -msgstr "Під час спроби вивантаження підшляху метаданих: " - -#: common/flatpak-dir.c:5275 -msgid "While trying to remove existing extra dir: " -msgstr "Під час спроби вилучення наявного додаткового каталогу: " - -#: common/flatpak-dir.c:5286 -msgid "While trying to apply extra data: " -msgstr "Під час спроби застосування додаткових даних: " - -#: common/flatpak-dir.c:5313 -#, c-format -msgid "Invalid deployed ref %s: " -msgstr "Некоректне посилання на розгортання %s: " - -#: common/flatpak-dir.c:5320 -#, c-format -msgid "Invalid commit ref %s: " -msgstr "Некоректне посилання на внесок %s: " - -#: common/flatpak-dir.c:5328 -#, c-format -msgid "Deployed ref %s kind does not match commit (%s)" -msgstr "Тип розміщеного посилання %s не відповідає внеску (%s)" - -#: common/flatpak-dir.c:5336 -#, c-format -msgid "Deployed ref %s name does not match commit (%s)" -msgstr "Назва розміщеного посилання %s не відповідає внеску (%s)" - -#: common/flatpak-dir.c:5344 -#, c-format -msgid "Deployed ref %s arch does not match commit (%s)" -msgstr "Архітектура розміщеного посилання %s не відповідає внеску (%s)" - -#: common/flatpak-dir.c:5350 -#, c-format -msgid "Deployed ref %s branch does not match commit (%s)" -msgstr "Гілка розміщеного посилання %s не відповідає внеску (%s)" - -#: common/flatpak-dir.c:5356 -#, c-format -msgid "Deployed ref %s does not match commit (%s)" -msgstr "Розміщене джерело %s не відповідає внеску (%s)" - -#: common/flatpak-dir.c:5375 -msgid "Deployed metadata does not match commit" -msgstr "Розміщені метадані не відповідають внеску" - -#: common/flatpak-dir.c:6137 -#, c-format -msgid "This version of %s is already installed" -msgstr "Цю версію %s вже встановлено" - -#: common/flatpak-dir.c:6144 -msgid "Can't change remote during bundle install" -msgstr "Не можна змінювати сховище під час встановлення пакунка" - -#: common/flatpak-dir.c:6687 -#, c-format -msgid "%s branch %s is not installed" -msgstr "%s, гілка %s не встановлено" - -#: common/flatpak-dir.c:6931 -#, c-format -msgid "%s branch %s not installed" -msgstr "%s, гілка %s не встановлено" - -#: common/flatpak-dir.c:7249 -#, c-format -msgid "Pruning repo failed: %s" -msgstr "Не вдалося спорожнити сховище: %s" - -#: common/flatpak-dir.c:7869 -#, c-format -msgid "Multiple branches available for %s, you must specify one of: " -msgstr "" -"Доступними є декілька гілок %s, вам слід вказати одне з таких значень: " - -#: common/flatpak-dir.c:7890 -#, c-format -msgid "Nothing matches %s" -msgstr "Немає відповідників %s" - -#: common/flatpak-dir.c:7972 -#, c-format -msgid "Can't find ref %s%s%s%s%s" -msgstr "Не вдалося знайти посилання %s%s%s%s%s" - -#: common/flatpak-dir.c:8014 -#, c-format -msgid "Error searching remote %s: %s" -msgstr "Помилка під час пошуку у віддаленому сховищі %s: %s" - -#: common/flatpak-dir.c:8059 -#, c-format -msgid "Error searching local repository: %s" -msgstr "Помилка під час пошуку у локальному сховищі: %s" - -#: common/flatpak-dir.c:8185 -#, c-format -msgid "%s %s not installed" -msgstr "Не встановлено %s %s" - -#: common/flatpak-dir.c:8352 -#, c-format -msgid "Could not find installation %s" -msgstr "Не вдалося знайти встановлення %s" - -#: common/flatpak-dir.c:8882 -#, c-format -msgid "Runtime %s, branch %s is already installed" -msgstr "Середовище виконання %s, гілка %s вже встановлено" - -#: common/flatpak-dir.c:8883 -#, c-format -msgid "App %s, branch %s is already installed" -msgstr "Програму %s, гілка %s вже встановлено" - -#: common/flatpak-dir.c:9342 -msgid "Remote title not set" -msgstr "Заголовок віддаленого сховища не встановлено" - -#: common/flatpak-dir.c:9364 -msgid "Remote default-branch not set" -msgstr "Не встановлено типову гілку віддаленого сховища" - -#: common/flatpak-dir.c:9858 -msgid "No flatpak cache in remote summary" -msgstr "У резюме сховища немає кешу flatpak" - -#: common/flatpak-dir.c:9868 -#, c-format -msgid "No entry for %s in remote summary flatpak cache " -msgstr "Немає запису %s у кеші flatpak резюме сховища " - -#: common/flatpak-run.c:258 +#: common/flatpak-context.c:175 #, c-format msgid "Unknown share type %s, valid types are: %s" msgstr "Невідомий тип спільного ресурсу %s, коректними типами є такі: %s" -#: common/flatpak-run.c:293 +#: common/flatpak-context.c:210 #, c-format msgid "Unknown policy type %s, valid types are: %s" msgstr "Невідомий тип правил %s, коректними типами є такі: %s" -#: common/flatpak-run.c:331 +#: common/flatpak-context.c:248 #, c-format msgid "Invalid dbus name %s\n" msgstr "Некоректна назва D-Bus, %s\n" -#: common/flatpak-run.c:344 +#: common/flatpak-context.c:261 #, c-format msgid "Unknown socket type %s, valid types are: %s" msgstr "Невідомий тип сокета, %s, коректними типами є такі: %s" -#: common/flatpak-run.c:373 +#: common/flatpak-context.c:290 #, c-format msgid "Unknown device type %s, valid types are: %s" msgstr "Невідомий тип пристрою, %s. Коректними типами є %s" -#: common/flatpak-run.c:401 +#: common/flatpak-context.c:318 #, c-format msgid "Unknown feature type %s, valid types are: %s" msgstr "Невідомий тип можливості %s, коректними типами є такі: %s" -#: common/flatpak-run.c:774 +#: common/flatpak-context.c:691 #, c-format msgid "" "Unknown filesystem location %s, valid locations are: host, home, xdg-" @@ -2397,188 +2298,478 @@ msgstr "" "Невідоме розташування файлової системи, %s, коректними розташуваннями є " "такі: host, home, xdg-*[/...], ~/dir, /dir" -#: common/flatpak-run.c:1040 +#: common/flatpak-context.c:963 #, c-format msgid "Invalid env format %s" msgstr "Некоректне форматування середовища, %s" -#: common/flatpak-run.c:1180 +#: common/flatpak-context.c:1103 msgid "Share with host" msgstr "Надати спільний доступ вузлу" -#: common/flatpak-run.c:1180 common/flatpak-run.c:1181 +#: common/flatpak-context.c:1103 common/flatpak-context.c:1104 msgid "SHARE" msgstr "СПІЛЬНИЙ РЕСУРС" -#: common/flatpak-run.c:1181 +#: common/flatpak-context.c:1104 msgid "Unshare with host" msgstr "Скасувати надання спільного ресурсу вузлу" -#: common/flatpak-run.c:1182 +#: common/flatpak-context.c:1105 msgid "Expose socket to app" msgstr "Відкрити сокет програмі" -#: common/flatpak-run.c:1182 common/flatpak-run.c:1183 +#: common/flatpak-context.c:1105 common/flatpak-context.c:1106 msgid "SOCKET" msgstr "СОКЕТ" -#: common/flatpak-run.c:1183 +#: common/flatpak-context.c:1106 msgid "Don't expose socket to app" msgstr "Не відкривати сокет програми" -#: common/flatpak-run.c:1184 +#: common/flatpak-context.c:1107 msgid "Expose device to app" msgstr "Відкрити пристрій програмі" -#: common/flatpak-run.c:1184 common/flatpak-run.c:1185 +#: common/flatpak-context.c:1107 common/flatpak-context.c:1108 msgid "DEVICE" msgstr "ПРИСТРІЙ" -#: common/flatpak-run.c:1185 +#: common/flatpak-context.c:1108 msgid "Don't expose device to app" msgstr "Не відкривати пристрій програмі" -#: common/flatpak-run.c:1186 +#: common/flatpak-context.c:1109 msgid "Allow feature" msgstr "Увімкнути можливість" -#: common/flatpak-run.c:1186 common/flatpak-run.c:1187 +#: common/flatpak-context.c:1109 common/flatpak-context.c:1110 msgid "FEATURE" msgstr "МОЖЛИВІСТЬ" -#: common/flatpak-run.c:1187 +#: common/flatpak-context.c:1110 msgid "Don't allow feature" msgstr "Вимкнути можливість" -#: common/flatpak-run.c:1188 +#: common/flatpak-context.c:1111 msgid "Expose filesystem to app (:ro for read-only)" msgstr "Відкрити файлову систему програмі (:ro — лише для читання)" -#: common/flatpak-run.c:1188 +#: common/flatpak-context.c:1111 msgid "FILESYSTEM[:ro]" msgstr "ФАЙЛОВА_СИСТЕМА[:ro]" -#: common/flatpak-run.c:1189 +#: common/flatpak-context.c:1112 msgid "Don't expose filesystem to app" msgstr "Не відкривати файлову систему програмі" -#: common/flatpak-run.c:1189 +#: common/flatpak-context.c:1112 msgid "FILESYSTEM" msgstr "ФАЙЛОВА СИСТЕМА" -#: common/flatpak-run.c:1190 +#: common/flatpak-context.c:1113 msgid "Set environment variable" msgstr "Встановити змінну середовища" -#: common/flatpak-run.c:1190 +#: common/flatpak-context.c:1113 msgid "VAR=VALUE" msgstr "ЗМІННА=ЗНАЧЕННЯ" -#: common/flatpak-run.c:1191 +#: common/flatpak-context.c:1114 msgid "Allow app to own name on the session bus" msgstr "Дозволити програмі бути власником назви на каналі сеансу" -#: common/flatpak-run.c:1191 common/flatpak-run.c:1192 -#: common/flatpak-run.c:1193 common/flatpak-run.c:1194 +#: common/flatpak-context.c:1114 common/flatpak-context.c:1115 +#: common/flatpak-context.c:1116 common/flatpak-context.c:1117 msgid "DBUS_NAME" msgstr "НАЗВА_DBUS" -#: common/flatpak-run.c:1192 +#: common/flatpak-context.c:1115 msgid "Allow app to talk to name on the session bus" msgstr "Дозволити програмі обмінюватися даними з назвою на каналі сеансу" -#: common/flatpak-run.c:1193 +#: common/flatpak-context.c:1116 msgid "Allow app to own name on the system bus" msgstr "Дозволити програмі бути власником назви на каналі системи" -#: common/flatpak-run.c:1194 +#: common/flatpak-context.c:1117 msgid "Allow app to talk to name on the system bus" msgstr "Дозволити програмі обмінюватися даними з назвою на каналі системи" -#: common/flatpak-run.c:1195 +#: common/flatpak-context.c:1118 msgid "Add generic policy option" msgstr "Додати параметр загальних правил" -#: common/flatpak-run.c:1195 common/flatpak-run.c:1196 +#: common/flatpak-context.c:1118 common/flatpak-context.c:1119 msgid "SUBSYSTEM.KEY=VALUE" msgstr "ПІДСИСТЕМА.КЛЮЧ=ЗНАЧЕННЯ" -#: common/flatpak-run.c:1196 +#: common/flatpak-context.c:1119 msgid "Remove generic policy option" msgstr "Вилучити параметр загальних правил" -#: common/flatpak-run.c:1197 +#: common/flatpak-context.c:1120 msgid "Persist home directory" msgstr "Примусово встановити домашній каталог" -#: common/flatpak-run.c:1197 +#: common/flatpak-context.c:1120 msgid "FILENAME" msgstr "НАЗВА ФАЙЛА" #. This is not needed/used anymore, so hidden, but we accept it for backwards compat -#: common/flatpak-run.c:1199 +#: common/flatpak-context.c:1122 msgid "Don't require a running session (no cgroups creation)" msgstr "Не вимагати запущеного сеансу (без створення cgroup)" -#: common/flatpak-run.c:3831 +#: common/flatpak-dir.c:1044 +#, c-format +msgid "No overrides found for %s" +msgstr "Не знайдено перевизначень для %s" + +#: common/flatpak-dir.c:1674 +#, c-format +msgid "While opening repository %s: " +msgstr "Під час спроби відкрити сховище %s: " + +#: common/flatpak-dir.c:1908 common/flatpak-dir.c:5477 +msgid "Can't create deploy directory" +msgstr "Не вдалося створити каталог розгортання" + +#: common/flatpak-dir.c:2123 common/flatpak-dir.c:2126 +#, c-format +msgid "Failed to find latest revision for ref %s from remote %s: %s\n" +msgstr "" +"Не вдалося знайти найсвіжішу модифікацію для %s з віддаленого сховища %s: %s\n" + +#: common/flatpak-dir.c:2778 +#, c-format +msgid "Invalid sha256 for extra data uri %s" +msgstr "Некоректна сума sha256 для адреси додаткових даних %s" + +#: common/flatpak-dir.c:2783 +#, c-format +msgid "Empty name for extra data uri %s" +msgstr "Порожня назва для адреси додаткових даних %s" + +#: common/flatpak-dir.c:2790 +#, c-format +msgid "Unsupported extra data uri %s" +msgstr "Непідтримувана адреса додаткових даних %s" + +#: common/flatpak-dir.c:2804 +#, c-format +msgid "Failed to load local extra-data %s: %s" +msgstr "Не вдалося завантажити локальні додаткові дані %s: %s" + +#: common/flatpak-dir.c:2807 +#, c-format +msgid "Wrong size for extra-data %s" +msgstr "Помилковий розмір додаткових даних %s" + +#: common/flatpak-dir.c:2822 +#, c-format +msgid "While downloading %s: " +msgstr "Під час спроби отримання %s: " + +#: common/flatpak-dir.c:2829 +#, c-format +msgid "Wrong size for extra data %s" +msgstr "Помилковий розмір додаткових даних %s" + +#: common/flatpak-dir.c:2840 +#, c-format +msgid "Invalid checksum for extra data %s" +msgstr "Некоректна контрольна сума додаткових даних, %s" + +#: common/flatpak-dir.c:2899 +msgid "Remote OCI index has no registry uri" +msgstr "У покажчику віддаленого OCI немає адреси реєстру" + +#: common/flatpak-dir.c:3117 +#, c-format +msgid "%s commit %s already installed" +msgstr "%s, внесок %s вже встановлено" + +#: common/flatpak-dir.c:3459 common/flatpak-dir.c:3790 +#, c-format +msgid "While pulling %s from remote %s: " +msgstr "Під час отримання %s з віддаленого сховища %s: " + +#: common/flatpak-dir.c:3675 +#, c-format +msgid "Can't find %s in remote %s" +msgstr "Не вдалося знайти %s у віддаленому сховищі %s" + +#: common/flatpak-dir.c:4348 +msgid "Not enough memory" +msgstr "Не вистачає пам'яті" + +#: common/flatpak-dir.c:4367 +msgid "Failed to read from exported file" +msgstr "Не вдалося виконати читання з експортованого файла" + +#: common/flatpak-dir.c:4558 +msgid "Error reading mimetype xml file" +msgstr "Помилка під час читання файла xml типу MIME" + +#: common/flatpak-dir.c:4563 +msgid "Invalid mimetype xml file" +msgstr "Некоректний файл xml типу MIME" + +#: common/flatpak-dir.c:5106 +msgid "While getting detached metadata: " +msgstr "Під час спроби отримання від’єднаних метаданих: " + +#: common/flatpak-dir.c:5124 +msgid "While creating extradir: " +msgstr "Під час створення каталогу додаткових даних: " + +#: common/flatpak-dir.c:5145 +msgid "Invalid sha256 for extra data" +msgstr "Некоректна контрольна сума sha256 для додаткових даних" + +#: common/flatpak-dir.c:5174 +msgid "Wrong size for extra data" +msgstr "Помилковий розмір додаткових даних" + +#: common/flatpak-dir.c:5178 +msgid "Invalid checksum for extra data" +msgstr "Некоректна контрольна сума додаткових даних" + +#: common/flatpak-dir.c:5187 +#, c-format +msgid "While writing extra data file '%s': " +msgstr "Під час записування файла додаткових даних «%s»: " + +#: common/flatpak-dir.c:5357 +#, c-format +msgid "apply_extra script failed, exit status %d" +msgstr "Помилка скрипту apply_extra, стан виходу %d" + +#: common/flatpak-dir.c:5436 +#, c-format +msgid "While trying to resolve ref %s: " +msgstr "Під час спроби визначити посилання %s: " + +#: common/flatpak-dir.c:5451 +#, c-format +msgid "%s is not available" +msgstr "%s недоступний" + +#: common/flatpak-dir.c:5466 common/flatpak-dir.c:5898 +#: common/flatpak-dir.c:6695 common/flatpak-dir.c:6705 +#: common/flatpak-dir.c:6737 +#, c-format +msgid "%s branch %s already installed" +msgstr "Гілку %s %s вже встановлено" + +#: common/flatpak-dir.c:5485 +#, c-format +msgid "Failed to read commit %s: " +msgstr "Не вдалося прочитати внесок %s: " + +#: common/flatpak-dir.c:5505 +#, c-format +msgid "While trying to checkout %s into %s: " +msgstr "Під час спроби вивантаження %s до %s: " + +#: common/flatpak-dir.c:5530 common/flatpak-dir.c:5561 +msgid "While trying to checkout metadata subpath: " +msgstr "Під час спроби вивантаження підшляху метаданих: " + +#: common/flatpak-dir.c:5571 +msgid "While trying to remove existing extra dir: " +msgstr "Під час спроби вилучення наявного додаткового каталогу: " + +#: common/flatpak-dir.c:5582 +msgid "While trying to apply extra data: " +msgstr "Під час спроби застосування додаткових даних: " + +#: common/flatpak-dir.c:5609 +#, c-format +msgid "Invalid deployed ref %s: " +msgstr "Некоректне посилання на розгортання %s: " + +#: common/flatpak-dir.c:5616 +#, c-format +msgid "Invalid commit ref %s: " +msgstr "Некоректне посилання на внесок %s: " + +#: common/flatpak-dir.c:5624 +#, c-format +msgid "Deployed ref %s kind does not match commit (%s)" +msgstr "Тип розміщеного посилання %s не відповідає внеску (%s)" + +#: common/flatpak-dir.c:5632 +#, c-format +msgid "Deployed ref %s name does not match commit (%s)" +msgstr "Назва розміщеного посилання %s не відповідає внеску (%s)" + +#: common/flatpak-dir.c:5640 +#, c-format +msgid "Deployed ref %s arch does not match commit (%s)" +msgstr "Архітектура розміщеного посилання %s не відповідає внеску (%s)" + +#: common/flatpak-dir.c:5646 +#, c-format +msgid "Deployed ref %s branch does not match commit (%s)" +msgstr "Гілка розміщеного посилання %s не відповідає внеску (%s)" + +#: common/flatpak-dir.c:5652 +#, c-format +msgid "Deployed ref %s does not match commit (%s)" +msgstr "Розміщене джерело %s не відповідає внеску (%s)" + +#: common/flatpak-dir.c:5671 +msgid "Deployed metadata does not match commit" +msgstr "Розміщені метадані не відповідають внеску" + +#: common/flatpak-dir.c:6557 +#, c-format +msgid "This version of %s is already installed" +msgstr "Цю версію %s вже встановлено" + +#: common/flatpak-dir.c:6564 +msgid "Can't change remote during bundle install" +msgstr "Не можна змінювати сховище під час встановлення пакунка" + +#: common/flatpak-dir.c:7090 +#, c-format +msgid "%s branch %s is not installed" +msgstr "%s, гілка %s не встановлено" + +#: common/flatpak-dir.c:7335 +#, c-format +msgid "%s branch %s not installed" +msgstr "%s, гілка %s не встановлено" + +#: common/flatpak-dir.c:7659 +#, c-format +msgid "Pruning repo failed: %s" +msgstr "Не вдалося спорожнити сховище: %s" + +#: common/flatpak-dir.c:8186 +#, c-format +msgid "Multiple branches available for %s, you must specify one of: " +msgstr "" +"Доступними є декілька гілок %s, вам слід вказати одне з таких значень: " + +#: common/flatpak-dir.c:8207 +#, c-format +msgid "Nothing matches %s" +msgstr "Немає відповідників %s" + +#: common/flatpak-dir.c:8289 +#, c-format +msgid "Can't find ref %s%s%s%s%s" +msgstr "Не вдалося знайти посилання %s%s%s%s%s" + +#: common/flatpak-dir.c:8331 +#, c-format +msgid "Error searching remote %s: %s" +msgstr "Помилка під час пошуку у віддаленому сховищі %s: %s" + +#: common/flatpak-dir.c:8376 +#, c-format +msgid "Error searching local repository: %s" +msgstr "Помилка під час пошуку у локальному сховищі: %s" + +#: common/flatpak-dir.c:8502 +#, c-format +#| msgid "%s %s not installed" +msgid "%s/%s/%s not installed" +msgstr "%s/%s/%s не встановлено" + +#: common/flatpak-dir.c:8672 +#, c-format +msgid "Could not find installation %s" +msgstr "Не вдалося знайти встановлення %s" + +#: common/flatpak-dir.c:9270 +#, c-format +msgid "Runtime %s, branch %s is already installed" +msgstr "Середовище виконання %s, гілка %s вже встановлено" + +#: common/flatpak-dir.c:9271 +#, c-format +msgid "App %s, branch %s is already installed" +msgstr "Програму %s, гілка %s вже встановлено" + +#: common/flatpak-dir.c:9751 +msgid "Remote title not set" +msgstr "Заголовок віддаленого сховища не встановлено" + +#: common/flatpak-dir.c:9773 +msgid "Remote default-branch not set" +msgstr "Не встановлено типову гілку віддаленого сховища" + +#: common/flatpak-dir.c:10373 +msgid "No flatpak cache in remote summary" +msgstr "У резюме сховища немає кешу flatpak" + +#: common/flatpak-dir.c:10383 +#, c-format +msgid "No entry for %s in remote summary flatpak cache " +msgstr "Немає запису %s у кеші flatpak резюме сховища " + +#: common/flatpak-run.c:1456 #, c-format msgid "Failed to open flatpak-info temp file: %s" msgstr "Не вдалося відкрити тимчасовий файл flatpak-info: %s" -#: common/flatpak-run.c:3905 common/flatpak-run.c:3915 +#: common/flatpak-run.c:1530 common/flatpak-run.c:1540 #, c-format msgid "Failed to open temp file: %s" msgstr "Не вдалося відкрити тимчасовий файл: %s" -#: common/flatpak-run.c:4255 +#: common/flatpak-run.c:1883 msgid "Unable to create sync pipe" msgstr "Не вдалося створити канал синхронізації" -#: common/flatpak-run.c:4282 +#: common/flatpak-run.c:1910 #, c-format msgid "Failed to open app info file: %s" msgstr "Не вдалося відкрити файл інформації щодо програми: %s" -#: common/flatpak-run.c:4312 +#: common/flatpak-run.c:1940 msgid "Failed to sync with dbus proxy" msgstr "Не вдалося виконати синхронізацію із проміжним D-Bus" -#: common/flatpak-run.c:5080 +#: common/flatpak-run.c:2700 #, c-format msgid "ldconfig failed, exit status %d" msgstr "Помилка ldconfig, стан виходу %d" -#: common/flatpak-utils.c:584 +#: common/flatpak-utils.c:631 #, c-format -#| msgid "Updating: %s from %s\n" msgid "Migrating %s to %s\n" msgstr "Переносимо %s на %s\n" -#: common/flatpak-utils.c:590 +#: common/flatpak-utils.c:637 #, c-format msgid "Error during migration: %s\n" msgstr "Помилка під час перенесення: %s\n" -#: common/flatpak-utils.c:2900 +#: common/flatpak-utils.c:2995 msgid "No extra data sources" msgstr "Немає джерел додаткових даних" -#: common/flatpak-utils.c:6517 +#: common/flatpak-utils.c:6583 #, c-format msgid "Downloading metadata: %u/(estimating) %s" msgstr "Отримуємо метадані: %u/(оцінка) %s" -#: common/flatpak-utils.c:6541 +#: common/flatpak-utils.c:6607 #, c-format msgid "Downloading: %s/%s" msgstr "Отримуємо: %s/%s" -#: common/flatpak-utils.c:6561 +#: common/flatpak-utils.c:6627 #, c-format msgid "Downloading extra data: %s/%s" msgstr "Отримуємо додаткові дані: %s з %s" -#: common/flatpak-utils.c:6566 +#: common/flatpak-utils.c:6632 #, c-format msgid "Downloading files: %d/%d %s" msgstr "Отримуємо файли: %d з %d %s" @@ -2682,16 +2873,14 @@ msgstr "" "Для налаштовування сховищ програмного забезпечення слід пройти розпізнавання" #: system-helper/org.freedesktop.Flatpak.policy.in:161 -#| msgid "Configure Remote" msgid "Configure" msgstr "Налаштувати" #: system-helper/org.freedesktop.Flatpak.policy.in:162 -#| msgid "Authentication is required to configure software repositories" msgid "Authentication is required to configure software installation" msgstr "" -"Для налаштовування встановлення програмного забезпечення слід пройти" -" розпізнавання" +"Для налаштовування встановлення програмного забезпечення слід пройти " +"розпізнавання" #. SECURITY: #. - Normal users do not require admin authentication to update @@ -2703,6 +2892,21 @@ msgstr "" msgid "Update appstream" msgstr "Оновлення appstream" +#~ msgid "No remote %s" +#~ msgstr "Немає сховища %s" + +#, fuzzy +#~ msgid "Search only user installations" +#~ msgstr "Показати встановлення користувача" + +#, fuzzy +#~ msgid "Search only system-wide installations" +#~ msgstr "Показати загальносистемні встановлення" + +#, fuzzy +#~ msgid "Search specific system-wide installations" +#~ msgstr "Показати вказані загальносистемні встановлення" + #~ msgid "Failed to create temporary file" #~ msgstr "Не вдалося створити тимчасовий файл" @@ -2712,9 +2916,6 @@ msgstr "Оновлення appstream" #~ msgid "Failed to write to temporary file" #~ msgstr "Не вдалося виконати запис до тимчасового файла" -#~ msgid "REMOTE must be specified" -#~ msgstr "Має бути вказано СХОВИЩЕ" - #, fuzzy #~ msgid "Installing %s" #~ msgstr "Встановлюємо: %s\n" @@ -2732,17 +2933,10 @@ msgstr "Оновлення appstream" #~ msgid "'%s' is not a valid sdk name: %s" #~ msgstr "«%s» не є коректною назвою sdk: %s" -#, fuzzy -#~ msgid "Assume LOCATION is an oci registry" -#~ msgstr "НАЗВА [РОЗТАШУВАННЯ] - Додати віддалене сховище" - #, fuzzy #~ msgid "OCI repo Filename or uri must be specified" #~ msgstr "Слід вказати назву файла або адресу" -#~ msgid "Data not found" -#~ msgstr "Дані не знайдено" - #~ msgid "Data not found for ref %s" #~ msgstr "Дані для посилання %s не знайдено" @@ -2752,9 +2946,6 @@ msgstr "Оновлення appstream" #~ msgid "Load options from file or uri" #~ msgstr "Завантажити параметри з файла або адресу" -#~ msgid "Install an application or runtime from a remote" -#~ msgstr "Встановити програму або середовище виконання із віддаленого сховища" - #, fuzzy #~ msgid "Invalid ref, no digest" #~ msgstr "Некоректне форматування середовища, %s" diff --git a/session-helper/flatpak-session-helper.c b/session-helper/flatpak-session-helper.c index 5019f381..2c766b3d 100644 --- a/session-helper/flatpak-session-helper.c +++ b/session-helper/flatpak-session-helper.c @@ -403,6 +403,36 @@ on_name_lost (GDBusConnection *connection, exit (1); } +/* + * In the case that the monitored file is a symlink, we set up a separate + * GFileMonitor for the real target of the link so that we don't miss updates + * to the linked file contents. This is critical in the case of resolv.conf + * which on stateless systems is often a symlink to a dyamically-generated + * or updated file in /run. + */ +typedef struct { + const gchar *source; + char *real; + GFileMonitor *monitor_source; + GFileMonitor *monitor_real; +} MonitorData; + +static void +monitor_data_free (MonitorData *data) +{ + free (data->real); + g_signal_handlers_disconnect_by_data (data->monitor_source, data); + g_object_unref (data->monitor_source); + if (data->monitor_real) + { + g_signal_handlers_disconnect_by_data (data->monitor_real, data); + g_object_unref (data->monitor_real); + } + g_free (data); +} + +G_DEFINE_AUTOPTR_CLEANUP_FUNC (MonitorData, monitor_data_free) + static void copy_file (const char *source, const char *target_dir) @@ -425,24 +455,104 @@ file_changed (GFileMonitor *monitor, GFile *file, GFile *other_file, GFileMonitorEvent event_type, - char *source) + MonitorData *data); + +static void +update_real_monitor (MonitorData *data) { - if (event_type == G_FILE_MONITOR_EVENT_CHANGES_DONE_HINT || - event_type == G_FILE_MONITOR_EVENT_CREATED) - copy_file (source, monitor_dir); + char *real = realpath (data->source, NULL); + if (real == NULL) + { + g_debug ("unable to get real path to monitor host file %s: %s", data->source, + g_strerror (errno)); + return; + } + + /* source path matches real path, second monitor is not required, but an old + * one may still exist. set to NULL and compare to what we have. */ + if (!g_strcmp0 (data->source, real)) + { + free (real); + real = NULL; + } + + /* no more work needed if the monitor we have matches the additional monitor + we need (including NULL == NULL) */ + if (!g_strcmp0 (data->real, real)) + { + free (real); + return; + } + + /* otherwise we're not monitoring the right thing and need to remove + any old monitor and make a new one if needed */ + free (data->real); + data->real = real; + + if (data->monitor_real) + { + g_signal_handlers_disconnect_by_data (data->monitor_real, data); + g_clear_object (&(data->monitor_real)); + } + + if (!real) + return; + + g_autoptr(GFile) r = g_file_new_for_path (real); + g_autoptr(GError) err = NULL; + data->monitor_real = g_file_monitor_file (r, G_FILE_MONITOR_NONE, NULL, &err); + if (!data->monitor_real) + { + g_debug ("failed to monitor host file %s (real path of %s): %s", + real, data->source, err->message); + return; + } + + g_signal_connect (data->monitor_real, "changed", G_CALLBACK (file_changed), data); } static void +file_changed (GFileMonitor *monitor, + GFile *file, + GFile *other_file, + GFileMonitorEvent event_type, + MonitorData *data) +{ + if (event_type != G_FILE_MONITOR_EVENT_CHANGES_DONE_HINT) + return; + + update_real_monitor (data); + + copy_file (data->source, monitor_dir); +} + +static MonitorData * setup_file_monitor (const char *source) { - GFile *s = g_file_new_for_path (source); - GFileMonitor *monitor; + g_autoptr(GFile) s = g_file_new_for_path (source); + g_autoptr(GError) err = NULL; + GFileMonitor *monitor = NULL; + MonitorData *data = NULL; + + data = g_new0 (MonitorData, 1); + data->source = source; + + monitor = g_file_monitor_file (s, G_FILE_MONITOR_NONE, NULL, &err); + if (monitor) + { + data->monitor_source = monitor; + g_signal_connect (monitor, "changed", G_CALLBACK (file_changed), data); + } + else + { + g_debug ("failed to monitor host file %s: %s", source, err->message); + } + + update_real_monitor (data); copy_file (source, monitor_dir); - monitor = g_file_monitor_file (s, G_FILE_MONITOR_NONE, NULL, NULL); - if (monitor) - g_signal_connect (monitor, "changed", G_CALLBACK (file_changed), (char *) source); + return data; } static void @@ -453,7 +563,7 @@ message_handler (const gchar *log_domain, { /* Make this look like normal console output */ if (log_level & G_LOG_LEVEL_DEBUG) - g_printerr ("XA: %s\n", message); + g_printerr ("F: %s\n", message); else g_printerr ("%s: %s\n", g_get_prgname (), message); } @@ -476,6 +586,7 @@ main (int argc, { "version", 0, 0, G_OPTION_ARG_NONE, &show_version, "Show program version.", NULL}, { NULL } }; + g_autoptr(MonitorData) m_resolv_conf = NULL, m_host_conf = NULL, m_hosts = NULL, m_localtime = NULL; setlocale (LC_ALL, ""); @@ -532,10 +643,10 @@ main (int argc, exit (1); } - setup_file_monitor ("/etc/resolv.conf"); - setup_file_monitor ("/etc/host.conf"); - setup_file_monitor ("/etc/hosts"); - setup_file_monitor ("/etc/localtime"); + m_resolv_conf = setup_file_monitor ("/etc/resolv.conf"); + m_host_conf = setup_file_monitor ("/etc/host.conf"); + m_hosts = setup_file_monitor ("/etc/hosts"); + m_localtime = setup_file_monitor ("/etc/localtime"); flags = G_BUS_NAME_OWNER_FLAGS_ALLOW_REPLACEMENT; if (replace) diff --git a/system-helper/flatpak-system-helper.c b/system-helper/flatpak-system-helper.c index 629b1f6a..dc069b91 100644 --- a/system-helper/flatpak-system-helper.c +++ b/system-helper/flatpak-system-helper.c @@ -135,6 +135,11 @@ dir_get_system (const char *installation, GError **error) return system; } +static void +no_progress_cb (OstreeAsyncProgress *progress, gpointer user_data) +{ +} + static gboolean handle_deploy (FlatpakSystemHelper *object, GDBusMethodInvocation *invocation, @@ -149,10 +154,12 @@ handle_deploy (FlatpakSystemHelper *object, g_autoptr(GFile) path = g_file_new_for_path (arg_repo_path); g_autoptr(GError) error = NULL; g_autoptr(GFile) deploy_dir = NULL; + g_autoptr(OstreeAsyncProgress) ostree_progress = NULL; gboolean is_update; gboolean is_oci; gboolean no_deploy; gboolean local_pull; + gboolean reinstall; g_autoptr(GMainContext) main_context = NULL; g_autofree char *url = NULL; @@ -181,27 +188,32 @@ handle_deploy (FlatpakSystemHelper *object, is_update = (arg_flags & FLATPAK_HELPER_DEPLOY_FLAGS_UPDATE) != 0; no_deploy = (arg_flags & FLATPAK_HELPER_DEPLOY_FLAGS_NO_DEPLOY) != 0; local_pull = (arg_flags & FLATPAK_HELPER_DEPLOY_FLAGS_LOCAL_PULL) != 0; + reinstall = (arg_flags & FLATPAK_HELPER_DEPLOY_FLAGS_REINSTALL) != 0; - deploy_dir = flatpak_dir_get_if_deployed (system, arg_ref, - NULL, NULL); + deploy_dir = flatpak_dir_get_if_deployed (system, arg_ref, NULL, NULL); if (deploy_dir) { g_autofree char *real_origin = NULL; if (!is_update) { - /* Can't install already installed app */ - g_dbus_method_invocation_return_error (invocation, FLATPAK_ERROR, FLATPAK_ERROR_ALREADY_INSTALLED, - "%s is already installed", arg_ref); - return TRUE; + if (!reinstall) + { + /* Can't install already installed app */ + g_dbus_method_invocation_return_error (invocation, FLATPAK_ERROR, FLATPAK_ERROR_ALREADY_INSTALLED, + "%s is already installed", arg_ref); + return TRUE; + } } - - real_origin = flatpak_dir_get_origin (system, arg_ref, NULL, NULL); - if (g_strcmp0 (real_origin, arg_origin) != 0) + else { - g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR, G_DBUS_ERROR_INVALID_ARGS, - "Wrong origin %s for update", arg_origin); - return TRUE; + real_origin = flatpak_dir_get_origin (system, arg_ref, NULL, NULL); + if (g_strcmp0 (real_origin, arg_origin) != 0) + { + g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR, G_DBUS_ERROR_INVALID_ARGS, + "Wrong origin %s for update", arg_origin); + return TRUE; + } } } else if (!deploy_dir && is_update) @@ -230,7 +242,20 @@ handle_deploy (FlatpakSystemHelper *object, const FlatpakOciManifestDescriptor *desc; g_autoptr(FlatpakOciVersioned) versioned = NULL; g_autofree char *checksum = NULL; - const char *signature_digest; + g_autofree char *upstream_url = NULL; + g_autoptr(SoupSession) soup_session = NULL; + + ostree_repo_remote_get_url (flatpak_dir_get_repo (system), + arg_origin, + &upstream_url, + NULL); + + if (upstream_url == NULL) + { + g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR, G_DBUS_ERROR_FAILED, + "Remote %s is disabled", arg_origin); + return TRUE; + } registry = flatpak_oci_registry_new (registry_uri, FALSE, -1, NULL, &error); if (registry == NULL) @@ -256,9 +281,7 @@ handle_deploy (FlatpakSystemHelper *object, return TRUE; } - signature_digest = g_hash_table_lookup (desc->parent.annotations, "org.flatpak.signature-digest"); - - versioned = flatpak_oci_registry_load_versioned (registry, desc->parent.digest, NULL, + versioned = flatpak_oci_registry_load_versioned (registry, NULL, desc->parent.digest, NULL, NULL, &error); if (versioned == NULL || !FLATPAK_IS_OCI_MANIFEST (versioned)) { @@ -267,8 +290,19 @@ handle_deploy (FlatpakSystemHelper *object, return TRUE; } - checksum = flatpak_pull_from_oci (flatpak_dir_get_repo (system), registry, desc->parent.digest, FLATPAK_OCI_MANIFEST (versioned), - arg_origin, arg_ref, signature_digest, NULL, NULL, NULL, &error); + soup_session = flatpak_create_soup_session (PACKAGE_STRING); + if (!flatpak_oci_index_verify_ref (soup_session, + upstream_url, + arg_ref, + desc->parent.digest, + NULL, &error)) + { + g_dbus_method_invocation_return_gerror (invocation, error); + return TRUE; + } + + checksum = flatpak_pull_from_oci (flatpak_dir_get_repo (system), registry, NULL, desc->parent.digest, FLATPAK_OCI_MANIFEST (versioned), + arg_origin, arg_ref, NULL, NULL, NULL, &error); if (checksum == NULL) { g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR, G_DBUS_ERROR_FAILED, @@ -282,11 +316,13 @@ handle_deploy (FlatpakSystemHelper *object, main_context = g_main_context_new (); g_main_context_push_thread_default (main_context); + ostree_progress = ostree_async_progress_new_and_connect (no_progress_cb, NULL); + if (!flatpak_dir_pull_untrusted_local (system, arg_repo_path, arg_origin, arg_ref, (const char **) arg_subpaths, - NULL, + ostree_progress, NULL, &error)) { g_main_context_pop_thread_default (main_context); @@ -295,6 +331,9 @@ handle_deploy (FlatpakSystemHelper *object, return TRUE; } g_main_context_pop_thread_default (main_context); + + if (ostree_progress) + ostree_async_progress_finish (ostree_progress); } else if (local_pull) { @@ -319,8 +358,10 @@ handle_deploy (FlatpakSystemHelper *object, main_context = g_main_context_new (); g_main_context_push_thread_default (main_context); + ostree_progress = ostree_async_progress_new_and_connect (no_progress_cb, NULL); + if (!flatpak_dir_pull (system, arg_origin, arg_ref, NULL, NULL, (const char **)arg_subpaths, NULL, - FLATPAK_PULL_FLAGS_NONE, OSTREE_REPO_PULL_FLAGS_UNTRUSTED, NULL, + FLATPAK_PULL_FLAGS_NONE, OSTREE_REPO_PULL_FLAGS_UNTRUSTED, ostree_progress, NULL, &error)) { g_main_context_pop_thread_default (main_context); @@ -328,7 +369,11 @@ handle_deploy (FlatpakSystemHelper *object, "Error pulling from repo: %s", error->message); return TRUE; } + g_main_context_pop_thread_default (main_context); + + if (ostree_progress) + ostree_async_progress_finish (ostree_progress); } if (!no_deploy) @@ -351,6 +396,7 @@ handle_deploy (FlatpakSystemHelper *object, { if (!flatpak_dir_deploy_install (system, arg_ref, arg_origin, (const char **) arg_subpaths, + reinstall, NULL, &error)) { g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR, G_DBUS_ERROR_FAILED, @@ -415,7 +461,6 @@ handle_deploy_appstream (FlatpakSystemHelper *object, const FlatpakOciManifestDescriptor *desc; g_autoptr(FlatpakOciVersioned) versioned = NULL; g_autofree char *checksum = NULL; - const char *signature_digest; registry = flatpak_oci_registry_new (registry_uri, FALSE, -1, NULL, &error); if (registry == NULL) @@ -441,9 +486,7 @@ handle_deploy_appstream (FlatpakSystemHelper *object, return TRUE; } - signature_digest = g_hash_table_lookup (desc->parent.annotations, "org.flatpak.signature-digest"); - - versioned = flatpak_oci_registry_load_versioned (registry, desc->parent.digest, NULL, + versioned = flatpak_oci_registry_load_versioned (registry, NULL, desc->parent.digest, NULL, NULL, &error); if (versioned == NULL || !FLATPAK_IS_OCI_MANIFEST (versioned)) { @@ -452,8 +495,8 @@ handle_deploy_appstream (FlatpakSystemHelper *object, return TRUE; } - checksum = flatpak_pull_from_oci (flatpak_dir_get_repo (system), registry, desc->parent.digest, FLATPAK_OCI_MANIFEST (versioned), - arg_origin, branch, signature_digest, NULL, NULL, NULL, &error); + checksum = flatpak_pull_from_oci (flatpak_dir_get_repo (system), registry, NULL, desc->parent.digest, FLATPAK_OCI_MANIFEST (versioned), + arg_origin, branch, NULL, NULL, NULL, &error); if (checksum == NULL) { g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR, G_DBUS_ERROR_FAILED, @@ -1172,7 +1215,7 @@ message_handler (const gchar *log_domain, { /* Make this look like normal console output */ if (log_level & G_LOG_LEVEL_DEBUG) - g_printerr ("XA: %s\n", message); + g_printerr ("F: %s\n", message); else g_printerr ("%s: %s\n", g_get_prgname (), message); } diff --git a/tests/Makefile.am.inc b/tests/Makefile.am.inc index 2aef5d5a..e49e9ec8 100644 --- a/tests/Makefile.am.inc +++ b/tests/Makefile.am.inc @@ -12,27 +12,6 @@ else AM_TESTS_ENVIRONMENT += FLATPAK_BWRAP=$$(cd $(top_builddir) && pwd)/flatpak-bwrap endif -testdb_CFLAGS = $(AM_CFLAGS) $(BASE_CFLAGS) -testdb_LDADD = \ - $(AM_LDADD) \ - $(BASE_LIBS) \ - $(OSTREE_LIBS) \ - libglnx.la \ - libflatpak-common.la \ - $(NULL) -testdb_SOURCES = tests/testdb.c - -test_doc_portal_CFLAGS = $(AM_CFLAGS) $(BASE_CFLAGS) -test_doc_portal_LDADD = \ - $(AM_LDADD) \ - $(BASE_LIBS) \ - $(OSTREE_LIBS) \ - libglnx.la \ - libflatpak-common.la \ - $(NULL) -test_doc_portal_SOURCES = tests/test-doc-portal.c -nodist_test_doc_portal_SOURCES = $(xdp_dbus_built_sources) - testlibrary_CFLAGS = $(AM_CFLAGS) $(BASE_CFLAGS) testlibrary_LDADD = \ $(AM_LDADD) \ @@ -42,16 +21,6 @@ testlibrary_LDADD = \ $(NULL) testlibrary_SOURCES = tests/testlibrary.c -EXTRA_test_doc_portal_DEPENDENCIES = tests/services/org.freedesktop.impl.portal.PermissionStore.service tests/services/org.freedesktop.portal.Documents.service tests/services/org.freedesktop.Flatpak.service tests/services/org.freedesktop.Flatpak.SystemHelper.service - -tests/services/org.freedesktop.portal.Documents.service: document-portal/org.freedesktop.portal.Documents.service.in - mkdir -p tests/services - $(AM_V_GEN) $(SED) -e "s|\@libexecdir\@|$(abs_top_builddir)|" $< > $@ - -tests/services/org.freedesktop.impl.portal.PermissionStore.service: permission-store/org.freedesktop.impl.portal.PermissionStore.service.in - mkdir -p tests/services - $(AM_V_GEN) $(SED) -e "s|\@libexecdir\@|$(abs_top_builddir)|" $< > $@ - tests/services/org.freedesktop.Flatpak.service: session-helper/org.freedesktop.Flatpak.service.in mkdir -p tests/services $(AM_V_GEN) $(SED) -e "s|\@libexecdir\@|$(abs_top_builddir)|" $< > $@ @@ -60,14 +29,12 @@ tests/services/org.freedesktop.Flatpak.SystemHelper.service: system-helper/org.f mkdir -p tests/services $(AM_V_GEN) $(SED) -e "s|\@libexecdir\@|$(abs_top_builddir)|" -e "s|\@extraargs\@| --session --no-idle-exit|" $< > $@ -tests/libtest.sh: tests/services/org.freedesktop.impl.portal.PermissionStore.service tests/services/org.freedesktop.portal.Documents.service tests/services/org.freedesktop.Flatpak.service +tests/libtest.sh: tests/services/org.freedesktop.Flatpak.service tests/services/org.freedesktop.Flatpak.SystemHelper.service install-test-data-hook: if ENABLE_INSTALLED_TESTS mkdir -p $(DESTDIR)$(installed_testdir)/services ln -sf $(dbus_servicedir)/org.freedesktop.Flatpak.service $(DESTDIR)$(installed_testdir)/services/ - ln -sf $(dbus_servicedir)/org.freedesktop.portal.Documents.service $(DESTDIR)$(installed_testdir)/services/ - ln -sf $(dbus_servicedir)/org.freedesktop.impl.portal.PermissionStore.service $(DESTDIR)$(installed_testdir)/services/ $(AM_V_GEN) $(SED) -e "s|\@libexecdir\@|$(libexecdir)|" -e "s|\@extraargs\@| --session --no-idle-exit|" $(top_srcdir)/system-helper/org.freedesktop.Flatpak.SystemHelper.service.in > $(DESTDIR)$(installed_testdir)/services/org.freedesktop.Flatpak.SystemHelper.service endif @@ -93,7 +60,6 @@ dist_installed_test_data = \ installed_test_keyringdir = $(installed_testdir)/test-keyring installed_test_keyring2dir = $(installed_testdir)/test-keyring2 -installed_test_dbsdir = $(installed_testdir)/dbs if ENABLE_INSTALLED_TESTS dist_installed_test_keyring_DATA = \ @@ -106,7 +72,6 @@ dist_installed_test_keyring2_DATA = \ tests/test-keyring2/pubring.gpg \ tests/test-keyring2/secring.gpg \ $(NULL) -dist_installed_test_dbs_DATA = tests/dbs/no_tables endif dist_test_scripts = \ @@ -127,15 +92,13 @@ dist_test_scripts = \ tests/test-update-remote-configuration.sh \ $(NULL) -test_programs = testdb test-doc-portal testlibrary +test_programs = testlibrary @VALGRIND_CHECK_RULES@ VALGRIND_SUPPRESSIONS_FILES=tests/flatpak.supp tests/glib.supp EXTRA_DIST += tests/flatpak.supp tests/glib.supp DISTCLEANFILES += \ tests/services/org.freedesktop.Flatpak.service \ - tests/services/org.freedesktop.portal.Documents.service \ - tests/services/org.freedesktop.impl.portal.PermissionStore.service \ tests/services/org.freedesktop.Flatpak.SystemHelper.service \ tests/package_version.txt \ $(NULL) diff --git a/tests/dbs/no_tables b/tests/dbs/no_tables deleted file mode 100644 index c700bdb1..00000000 Binary files a/tests/dbs/no_tables and /dev/null differ diff --git a/tests/test-doc-portal.c b/tests/test-doc-portal.c deleted file mode 100644 index ff08316f..00000000 --- a/tests/test-doc-portal.c +++ /dev/null @@ -1,505 +0,0 @@ -#include "config.h" - -#include -#include -#include -#include -#include - -#include "libglnx/libglnx.h" - -#include -#include - -#include "document-portal/xdp-dbus.h" - -#include "flatpak-dbus.h" - -char outdir[] = "/tmp/xdp-test-XXXXXX"; - -GTestDBus *dbus; -GDBusConnection *session_bus; -XdpDbusDocuments *documents; -char *mountpoint; -static gboolean have_fuse; - -static char * -make_doc_dir (const char *id, const char *app) -{ - if (app) - return g_build_filename (mountpoint, "by-app", app, id, NULL); - else - return g_build_filename (mountpoint, id, NULL); -} - -static char * -make_doc_path (const char *id, const char *basename, const char *app) -{ - g_autofree char *dir = make_doc_dir (id, app); - - return g_build_filename (dir, basename, NULL); -} - -static void -assert_host_has_contents (const char *basename, const char *expected_contents) -{ - g_autofree char *path = g_build_filename (outdir, basename, NULL); - g_autofree char *real_contents = NULL; - gsize real_contents_length; - GError *error = NULL; - - g_file_get_contents (path, &real_contents, &real_contents_length, &error); - g_assert_no_error (error); - g_assert_cmpstr (real_contents, ==, expected_contents); - g_assert_cmpuint (real_contents_length, ==, strlen (expected_contents)); -} - -static void -assert_doc_has_contents (const char *id, const char *basename, const char *app, const char *expected_contents) -{ - g_autofree char *path = make_doc_path (id, basename, app); - g_autofree char *real_contents = NULL; - gsize real_contents_length; - GError *error = NULL; - - g_file_get_contents (path, &real_contents, &real_contents_length, &error); - g_assert_no_error (error); - g_assert_cmpstr (real_contents, ==, expected_contents); - g_assert_cmpuint (real_contents_length, ==, strlen (expected_contents)); -} - -static void -assert_doc_not_exist (const char *id, const char *basename, const char *app) -{ - g_autofree char *path = make_doc_path (id, basename, app); - struct stat buf; - int res, fd; - - res = stat (path, &buf); - g_assert_cmpint (res, ==, -1); - g_assert_cmpint (errno, ==, ENOENT); - - fd = open (path, O_RDONLY); - g_assert_cmpint (fd, ==, -1); - g_assert_cmpint (errno, ==, ENOENT); -} - -static char * -export_file (const char *path, gboolean unique) -{ - int fd, fd_id; - GUnixFDList *fd_list = NULL; - - g_autoptr(GVariant) reply = NULL; - GError *error = NULL; - char *doc_id; - - fd = open (path, O_PATH | O_CLOEXEC); - g_assert (fd >= 0); - - fd_list = g_unix_fd_list_new (); - fd_id = g_unix_fd_list_append (fd_list, fd, &error); - g_assert_no_error (error); - close (fd); - - reply = g_dbus_connection_call_with_unix_fd_list_sync (session_bus, - "org.freedesktop.portal.Documents", - "/org/freedesktop/portal/documents", - "org.freedesktop.portal.Documents", - "Add", - g_variant_new ("(hbb)", fd_id, !unique, FALSE), - G_VARIANT_TYPE ("(s)"), - G_DBUS_CALL_FLAGS_NONE, - 30000, - fd_list, NULL, - NULL, - &error); - g_object_unref (fd_list); - g_assert_no_error (error); - g_assert (reply != NULL); - - g_variant_get (reply, "(s)", &doc_id); - g_assert (doc_id != NULL); - return doc_id; -} - -static char * -export_new_file (const char *basename, const char *contents, gboolean unique) -{ - g_autofree char *path = NULL; - GError *error = NULL; - - path = g_build_filename (outdir, basename, NULL); - - g_file_set_contents (path, contents, -1, &error); - g_assert_no_error (error); - - return export_file (path, unique); -} - -static gboolean -update_doc (const char *id, const char *basename, const char *app, const char *contents, GError **error) -{ - g_autofree char *path = make_doc_path (id, basename, app); - - return g_file_set_contents (path, contents, -1, error); -} - -static gboolean -update_from_host (const char *basename, const char *contents, GError **error) -{ - g_autofree char *path = g_build_filename (outdir, basename, NULL); - - return g_file_set_contents (path, contents, -1, error); -} - - -static void -grant_permissions (const char *id, const char *app, gboolean write) -{ - g_autoptr(GPtrArray) permissions = g_ptr_array_new (); - GError *error = NULL; - - g_ptr_array_add (permissions, "read"); - if (write) - g_ptr_array_add (permissions, "write"); - g_ptr_array_add (permissions, NULL); - - xdp_dbus_documents_call_grant_permissions_sync (documents, - id, - app, - (const char **) permissions->pdata, - NULL, - &error); - g_assert_no_error (error); -} - -static void -test_create_doc (void) -{ - g_autofree char *doc_path = NULL; - g_autofree char *doc_app_path = NULL; - g_autofree char *host_path = NULL; - g_autofree char *id = NULL; - g_autofree char *id2 = NULL; - g_autofree char *id3 = NULL; - g_autofree char *id4 = NULL; - g_autofree char *id5 = NULL; - const char *basename = "a-file"; - GError *error = NULL; - - if (!have_fuse) - { - g_test_skip ("this test requires FUSE"); - return; - } - - /* Export a document */ - id = export_new_file (basename, "content", FALSE); - - /* Ensure its there and not viewable by apps */ - assert_doc_has_contents (id, basename, NULL, "content"); - assert_host_has_contents (basename, "content"); - assert_doc_not_exist (id, basename, "com.test.App1"); - assert_doc_not_exist (id, basename, "com.test.App2"); - assert_doc_not_exist (id, "another-file", NULL); - assert_doc_not_exist ("anotherid", basename, NULL); - - /* Create a tmp file in same dir, ensure it works and can't be seen by other apps */ - assert_doc_not_exist (id, "tmp1", NULL); - update_doc (id, "tmp1", NULL, "tmpdata1", &error); - g_assert_no_error (error); - assert_doc_has_contents (id, "tmp1", NULL, "tmpdata1"); - assert_doc_not_exist (id, "tmp1", "com.test.App1"); - - /* Let App 1 see the document (but not write) */ - grant_permissions (id, "com.test.App1", FALSE); - - /* Ensure App 1 and only it can see the document and tmpfile */ - assert_doc_has_contents (id, basename, "com.test.App1", "content"); - assert_doc_not_exist (id, basename, "com.test.App2"); - assert_doc_not_exist (id, "tmp1", "com.test.App1"); - - /* Make sure App 1 can't create a tmpfile */ - assert_doc_not_exist (id, "tmp2", "com.test.App1"); - update_doc (id, "tmp2", "com.test.App1", "tmpdata2", &error); - g_assert_error (error, G_FILE_ERROR, G_FILE_ERROR_ACCES); - g_clear_error (&error); - assert_doc_not_exist (id, "tmp2", "com.test.App1"); - - /* Update the document contents, ensure this is propagater */ - update_doc (id, basename, NULL, "content2", &error); - g_assert_no_error (error); - assert_host_has_contents (basename, "content2"); - assert_doc_has_contents (id, basename, NULL, "content2"); - assert_doc_has_contents (id, basename, "com.test.App1", "content2"); - assert_doc_not_exist (id, basename, "com.test.App2"); - assert_doc_not_exist (id, "tmp1", "com.test.App2"); - - /* Update the document contents outside fuse fd, ensure this is propagater */ - update_from_host (basename, "content3", &error); - g_assert_no_error (error); - assert_host_has_contents (basename, "content3"); - assert_doc_has_contents (id, basename, NULL, "content3"); - assert_doc_has_contents (id, basename, "com.test.App1", "content3"); - assert_doc_not_exist (id, basename, "com.test.App2"); - assert_doc_not_exist (id, "tmp1", "com.test.App2"); - - /* Try to update the doc from an app that can't write to it */ - update_doc (id, basename, "com.test.App1", "content4", &error); - g_assert_error (error, G_FILE_ERROR, G_FILE_ERROR_ACCES); - g_clear_error (&error); - - /* Try to create a tmp file for an app that is not allowed */ - assert_doc_not_exist (id, "tmp2", "com.test.App1"); - update_doc (id, "tmp2", "com.test.App1", "tmpdata2", &error); - g_assert_error (error, G_FILE_ERROR, G_FILE_ERROR_ACCES); - g_clear_error (&error); - assert_doc_not_exist (id, "tmp2", "com.test.App1"); - assert_doc_not_exist (id, "tmp2", NULL); - - /* Grant write permissions to App1 */ - grant_permissions (id, "com.test.App1", TRUE); - - /* update the doc from an app with write access */ - update_doc (id, basename, "com.test.App1", "content5", &error); - g_assert_no_error (error); - assert_host_has_contents (basename, "content5"); - assert_doc_has_contents (id, basename, NULL, "content5"); - assert_doc_has_contents (id, basename, "com.test.App1", "content5"); - assert_doc_not_exist (id, basename, "com.test.App2"); - - /* Try to create a tmp file for an app */ - assert_doc_not_exist (id, "tmp3", "com.test.App1"); - update_doc (id, "tmp3", "com.test.App1", "tmpdata3", &error); - g_assert_no_error (error); - assert_doc_has_contents (id, "tmp3", "com.test.App1", "tmpdata3"); - assert_doc_not_exist (id, "tmp3", NULL); - - /* Re-Create a file from a fuse document file, in various ways */ - doc_path = make_doc_path (id, basename, NULL); - doc_app_path = make_doc_path (id, basename, "com.test.App1"); - host_path = g_build_filename (outdir, basename, NULL); - id2 = export_file (doc_path, FALSE); - g_assert_cmpstr (id, ==, id2); - id3 = export_file (doc_app_path, FALSE); - g_assert_cmpstr (id, ==, id3); - id4 = export_file (host_path, FALSE); - g_assert_cmpstr (id, ==, id4); - - /* Ensure we can make a unique document */ - id5 = export_file (host_path, TRUE); - g_assert_cmpstr (id, !=, id5); -} - -static void -test_recursive_doc (void) -{ - g_autofree char *id = NULL; - g_autofree char *id2 = NULL; - g_autofree char *id3 = NULL; - const char *basename = "recursive-file"; - g_autofree char *path = NULL; - g_autofree char *app_path = NULL; - - if (!have_fuse) - { - g_test_skip ("this test requires FUSE"); - return; - } - - id = export_new_file (basename, "recursive-content", FALSE); - - assert_doc_has_contents (id, basename, NULL, "recursive-content"); - - path = make_doc_path (id, basename, NULL); - g_print ("path: %s\n", path); - - id2 = export_file (path, FALSE); - - g_assert_cmpstr (id, ==, id2); - - grant_permissions (id, "com.test.App1", FALSE); - - app_path = make_doc_path (id, basename, "com.test.App1"); - - id3 = export_file (app_path, FALSE); - - g_assert_cmpstr (id, ==, id3); -} - -static void -test_create_docs (void) -{ - GError *error = NULL; - g_autofree char *path1 = NULL; - g_autofree char *path2 = NULL; - int fd1, fd2; - guint32 fd_ids[2]; - GUnixFDList *fd_list = NULL; - gboolean res; - char **out_doc_ids; - g_autoptr(GVariant) out_extra = NULL; - const char *permissions[] = { "read", NULL }; - const char *basenames[] = { "doc1", "doc2" }; - int i; - - if (!have_fuse) - { - g_test_skip ("this test requires FUSE"); - return; - } - - path1 = g_build_filename (outdir, basenames[0], NULL); - g_file_set_contents (path1, basenames[0], -1, &error); - g_assert_no_error (error); - - fd1 = open (path1, O_PATH | O_CLOEXEC); - g_assert (fd1 >= 0); - - path2 = g_build_filename (outdir, basenames[1], NULL); - g_file_set_contents (path2, basenames[1], -1, &error); - g_assert_no_error (error); - - fd2 = open (path2, O_PATH | O_CLOEXEC); - g_assert (fd2 >= 0); - - fd_list = g_unix_fd_list_new (); - fd_ids[0] = g_unix_fd_list_append (fd_list, fd1, &error); - g_assert_no_error (error); - close (fd1); - fd_ids[1] = g_unix_fd_list_append (fd_list, fd2, &error); - g_assert_no_error (error); - close (fd2); - - res = xdp_dbus_documents_call_add_full_sync (documents, - g_variant_new_fixed_array (G_VARIANT_TYPE_HANDLE, - fd_ids, 2, sizeof (guint32)), - 0, - "org.other.App", - permissions, - fd_list, - &out_doc_ids, - &out_extra, - NULL, - NULL, &error); - g_assert_no_error (error); - g_assert (res); - - g_assert (g_strv_length (out_doc_ids) == 2); - for (i = 0; i < 2; i++) - { - const char *id = out_doc_ids[i]; - - /* Ensure its there and not viewable by apps */ - assert_doc_has_contents (id, basenames[i], NULL, basenames[i]); - assert_host_has_contents (basenames[i], basenames[i]); - assert_doc_not_exist (id, basenames[i], "com.test.App1"); - assert_doc_not_exist (id, basenames[i], "com.test.App2"); - assert_doc_not_exist (id, "another-file", NULL); - assert_doc_not_exist ("anotherid", basenames[i], NULL); - - assert_doc_has_contents (id, basenames[i], "org.other.App", basenames[i]); - update_doc (id, basenames[i], "org.other.App", "tmpdata2", &error); - g_assert_error (error, G_FILE_ERROR, G_FILE_ERROR_ACCES); - g_clear_error (&error); - } - g_assert (g_variant_lookup_value (out_extra, "mountpoint", G_VARIANT_TYPE_VARIANT) == 0); -} - - -static void -global_setup (void) -{ - gboolean inited; - g_autofree gchar *fusermount = NULL; - GError *error = NULL; - g_autofree gchar *services = NULL; - - fusermount = g_find_program_in_path ("fusermount"); - /* cache result so subsequent tests can be marked as skipped */ - have_fuse = (access ("/dev/fuse", W_OK) == 0 && - fusermount != NULL && - g_file_test (fusermount, G_FILE_TEST_IS_EXECUTABLE)); - - if (!have_fuse) - return; - - g_mkdtemp (outdir); - g_print ("outdir: %s\n", outdir); - - g_setenv ("XDG_RUNTIME_DIR", outdir, TRUE); - g_setenv ("XDG_DATA_HOME", outdir, TRUE); - - dbus = g_test_dbus_new (G_TEST_DBUS_NONE); - services = g_test_build_filename (G_TEST_BUILT, "services", NULL); - g_test_dbus_add_service_dir (dbus, services); - g_test_dbus_up (dbus); - - /* g_test_dbus_up unsets this, so re-set */ - g_setenv ("XDG_RUNTIME_DIR", outdir, TRUE); - - session_bus = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, &error); - g_assert_no_error (error); - - documents = xdp_dbus_documents_proxy_new_sync (session_bus, 0, - "org.freedesktop.portal.Documents", - "/org/freedesktop/portal/documents", - NULL, &error); - g_assert_no_error (error); - g_assert (documents != NULL); - - inited = xdp_dbus_documents_call_get_mount_point_sync (documents, &mountpoint, - NULL, &error); - g_assert_no_error (error); - g_assert (inited); - g_assert (mountpoint != NULL); -} - -static void -global_teardown (void) -{ - GError *error = NULL; - - if (!have_fuse) - return; - - g_free (mountpoint); - - g_object_unref (documents); - - g_dbus_connection_close_sync (session_bus, NULL, &error); - g_assert_no_error (error); - - g_object_unref (session_bus); - - g_test_dbus_down (dbus); - - g_object_unref (dbus); - - /* We race on the unmount of the fuse fs, which causes the rm -rf to stop at the doc dir. - This makes the chance of completely removing the directory higher */ - sleep (1); - - glnx_shutil_rm_rf_at (-1, outdir, NULL, NULL); -} - -int -main (int argc, char **argv) -{ - int res; - - g_test_init (&argc, &argv, NULL); - - g_test_add_func ("/db/create_doc", test_create_doc); - g_test_add_func ("/db/recursive_doc", test_recursive_doc); - g_test_add_func ("/db/create_docs", test_create_docs); - - global_setup (); - - res = g_test_run (); - - global_teardown (); - - return res; -} diff --git a/tests/test-oci.sh b/tests/test-oci.sh index 15275f27..916e533c 100755 --- a/tests/test-oci.sh +++ b/tests/test-oci.sh @@ -26,7 +26,7 @@ export FLATPAK_ENABLE_EXPERIMENTAL_OCI=1 skip_without_bwrap [ x${USE_SYSTEMDIR-} != xyes ] || skip_without_user_xattrs -echo "1..6" +echo "1..2" setup_repo @@ -56,48 +56,4 @@ assert_has_dir checked-out/files assert_has_file checked-out/files/bin/hello.sh assert_has_file checked-out/metadata -echo "ok commit oci" - -${FLATPAK} remote-add ${U} --oci --gpg-import=${FL_GPG_HOMEDIR}/pubring.gpg oci-remote oci/registry -${FLATPAK} install ${U} -v oci-remote org.test.Hello - -run org.test.Hello > hello_out -assert_file_has_content hello_out '^Hello world, from a sandbox$' - -echo "ok install oci" - -sleep 1 # Make sure the index.json mtime is changed -make_updated_app -${FLATPAK} build-bundle -v --oci $FL_GPGARGS repos/test oci/registry org.test.Hello - -${FLATPAK} update ${U} -v org.test.Hello -run org.test.Hello > hello_out -assert_file_has_content hello_out '^Hello world, from a sandboxUPDATED$' - -echo "ok update oci" - -flatpak uninstall ${U} org.test.Hello - -make_updated_app test org.test.Collection.test HTTP -${FLATPAK} build-bundle --oci $FL_GPGARGS repos/test oci/registry org.test.Hello - -$(dirname $0)/test-webserver.sh `pwd`/oci -ociport=$(cat httpd-port) -FLATPAK_HTTP_PID="${FLATPAK_HTTP_PID} $(cat httpd-pid)" - -${FLATPAK} remote-add ${U} --oci --gpg-import=${FL_GPG_HOMEDIR}/pubring.gpg oci-remote-http http://127.0.0.1:${ociport}/registry -${FLATPAK} install -v ${U} oci-remote-http org.test.Hello - -run org.test.Hello > hello_out -assert_file_has_content hello_out '^Hello world, from a sandboxHTTP$' - -echo "ok install oci http" - -make_updated_app test org.test.Collection.test UPDATEDHTTP -${FLATPAK} build-bundle --oci $FL_GPGARGS repos/test oci/registry org.test.Hello - -${FLATPAK} update ${U} org.test.Hello -run org.test.Hello > hello_out -assert_file_has_content hello_out '^Hello world, from a sandboxUPDATEDHTTP$' - -echo "ok update oci http" +echo "ok import oci" diff --git a/tests/test-repo.sh b/tests/test-repo.sh index 76371955..2628c87b 100755 --- a/tests/test-repo.sh +++ b/tests/test-repo.sh @@ -28,7 +28,7 @@ if [ x${USE_COLLECTIONS_IN_CLIENT-} == xyes ] || [ x${USE_COLLECTIONS_IN_SERVER- skip_without_p2p fi -echo "1..6" +echo "1..12" #Regular repo setup_repo @@ -76,6 +76,14 @@ fi install_repo test-gpg2 echo "ok with alternative gpg key" +if ${FLATPAK} ${U} install test-repo org.test.Platform 2> install-error-log; then + assert_not_reached "Should not be able to install again from different remote without reinstall" +fi +echo "ok failed to install again from different remote" + +${FLATPAK} ${U} install --reinstall test-repo org.test.Platform +echo "ok re-install" + ${FLATPAK} ${U} uninstall org.test.Platform org.test.Hello if ${FLATPAK} ${U} install test-missing-gpg-repo org.test.Platform 2> install-error-log; then @@ -131,4 +139,158 @@ update_repo test-gpg3 org.test.Collection.test ${FLATPAK} ${U} install test-repo org.test.Hello assert_file_has_content $FL_DIR/app/org.test.Hello/$ARCH/master/active/files/bin/hello.sh UPDATED +${FLATPAK} ${U} uninstall org.test.Platform org.test.Hello + echo "ok redirect url and gpg key" + +# Test that remote-ls works in all of the following cases: +# * system remote, and --system is used +# * system remote, and --system is omitted +# * user remote, and --user is used +# * user remote, and --user is omitted +# and fails in the following cases: +# * system remote, and --user is used +# * user remote, and --system is used +if [ x${USE_SYSTEMDIR-} == xyes ]; then + ${FLATPAK} --system remote-ls test-repo > repo-list + assert_file_has_content repo-list "org.test.Hello" + + ${FLATPAK} remote-ls test-repo > repo-list + assert_file_has_content repo-list "org.test.Hello" + + if ${FLATPAK} --user remote-ls test-repo 2> remote-ls-error-log; then + assert_not_reached "flatpak --user remote-ls should not work for system remotes" + fi + assert_file_has_content remote-ls-error-log "Remote \"test-repo\" not found" +else + ${FLATPAK} --user remote-ls test-repo > repo-list + assert_file_has_content repo-list "org.test.Hello" + + ${FLATPAK} remote-ls test-repo > repo-list + assert_file_has_content repo-list "org.test.Hello" + + if ${FLATPAK} --system remote-ls test-repo 2> remote-ls-error-log; then + assert_not_reached "flatpak --system remote-ls should not work for user remotes" + fi + assert_file_has_content remote-ls-error-log "Remote \"test-repo\" not found" +fi + +echo "ok remote-ls" + +# Test that remote-modify works in all of the following cases: +# * system remote, and --system is used +# * system remote, and --system is omitted +# * user remote, and --user is used +# * user remote, and --user is omitted +# and fails in the following cases: +# * system remote, and --user is used +# * user remote, and --system is used +if [ x${USE_SYSTEMDIR-} == xyes ]; then + ${FLATPAK} --system remote-modify --title=NewTitle test-repo + ${FLATPAK} remotes -d | grep ^test-repo > repo-info + assert_file_has_content repo-info "NewTitle" + ${FLATPAK} --system remote-modify --title=OldTitle test-repo + + ${FLATPAK} remote-modify --title=NewTitle test-repo + ${FLATPAK} remotes -d | grep ^test-repo > repo-info + assert_file_has_content repo-info "NewTitle" + ${FLATPAK} --system remote-modify --title=OldTitle test-repo + + if ${FLATPAK} --user remote-modify --title=NewTitle test-repo 2> remote-modify-error-log; then + assert_not_reached "flatpak --user remote-modify should not work for system remotes" + fi + assert_file_has_content remote-modify-error-log "Remote \"test-repo\" not found" +else + ${FLATPAK} --user remote-modify --title=NewTitle test-repo + ${FLATPAK} remotes -d | grep ^test-repo > repo-info + assert_file_has_content repo-info "NewTitle" + ${FLATPAK} --user remote-modify --title=OldTitle test-repo + + ${FLATPAK} remote-modify --title=NewTitle test-repo + ${FLATPAK} remotes -d | grep ^test-repo > repo-info + assert_file_has_content repo-info "NewTitle" + ${FLATPAK} remote-modify --title=OldTitle test-repo + + if ${FLATPAK} --system remote-modify --title=NewTitle test-repo 2> remote-modify-error-log; then + assert_not_reached "flatpak --system remote-modify should not work for user remotes" + fi + assert_file_has_content remote-modify-error-log "Remote \"test-repo\" not found" +fi + +echo "ok remote-modify" + +# Test that remote-delete works in all of the following cases: +# * system remote, and --system is used +# * system remote, and --system is omitted +# * user remote, and --user is used +# * user remote, and --user is omitted +# and fails in the following cases: +# * system remote, and --user is used +# * user remote, and --system is used +if [ x${USE_SYSTEMDIR-} == xyes ]; then + ${FLATPAK} --system remote-delete test-repo + ${FLATPAK} remotes > repo-info + assert_not_file_has_content repo-info "test-repo" + setup_repo + + ${FLATPAK} remote-delete test-repo + ${FLATPAK} remotes > repo-list + assert_not_file_has_content repo-info "test-repo" + setup_repo + + if ${FLATPAK} --user remote-delete test-repo 2> remote-delete-error-log; then + assert_not_reached "flatpak --user remote-delete should not work for system remotes" + fi + assert_file_has_content remote-delete-error-log "Remote \"test-repo\" not found" +else + ${FLATPAK} --user remote-delete test-repo + ${FLATPAK} remotes > repo-info + assert_not_file_has_content repo-info "test-repo" + setup_repo + + ${FLATPAK} remote-delete test-repo + ${FLATPAK} remotes > repo-info + assert_not_file_has_content repo-info "test-repo" + setup_repo + + if ${FLATPAK} --system remote-delete test-repo 2> remote-delete-error-log; then + assert_not_reached "flatpak --system remote-delete should not work for user remotes" + fi + assert_file_has_content remote-delete-error-log "Remote \"test-repo\" not found" +fi + +echo "ok remote-delete" + +# Test that remote-info works in all of the following cases: +# * system remote, and --system is used +# * system remote, and --system is omitted +# * user remote, and --user is used +# * user remote, and --user is omitted +# and fails in the following cases: +# * system remote, and --user is used +# * user remote, and --system is used +if [ x${USE_SYSTEMDIR-} == xyes ]; then + ${FLATPAK} --system remote-info test-repo org.test.Hello > remote-ref-info + assert_file_has_content remote-ref-info "ID: org.test.Hello" + + ${FLATPAK} remote-info test-repo org.test.Hello > remote-ref-info + assert_file_has_content remote-ref-info "ID: org.test.Hello" + + if ${FLATPAK} --user remote-info test-repo org.test.Hello 2> remote-info-error-log; then + assert_not_reached "flatpak --user remote-info should not work for system remotes" + fi + assert_file_has_content remote-info-error-log "Remote \"test-repo\" not found" +else + ${FLATPAK} --user remote-info test-repo org.test.Hello > remote-ref-info + assert_file_has_content remote-ref-info "ID: org.test.Hello" + + ${FLATPAK} remote-info test-repo org.test.Hello > remote-ref-info + assert_file_has_content remote-ref-info "ID: org.test.Hello" + + if ${FLATPAK} --system remote-info test-repo org.test.Hello 2> remote-info-error-log; then + assert_not_reached "flatpak --system remote-info should not work for user remotes" + fi + assert_file_has_content remote-info-error-log "Remote \"test-repo\" not found" +fi + +echo "ok remote-info" diff --git a/tests/test-unsigned-summaries.sh b/tests/test-unsigned-summaries.sh index 40f6c336..9f89cbfc 100755 --- a/tests/test-unsigned-summaries.sh +++ b/tests/test-unsigned-summaries.sh @@ -127,17 +127,9 @@ assert_file_has_content metadata "'ostree.ref-binding': <\['ostree-metadata'\]>" echo "ok 6 update repo metadata" -# Try to update the app, which should pull the updated repository metadata as a -# side effect. Before doing that, drop xa.title from the summary to check that -# it’s actually coming from ostree-metadata. -ostree --repo=repos/test summary --update -assert_not_has_file repos/test/summary.sig -ostree --repo=repos/test summary --view > summary -assert_not_file_has_content summary '^xa.title: ' - -#${FLATPAK} ${U} update org.test.App +# Try to install the app again, which should pull the updated repository +# metadata as a side effect. ${FLATPAK} ${U} install test-repo org.test.App master assert_file_has_content ${FL_DIR}/repo/config '^xa.title=New title$' -# TODO: More echo "ok 7 pull updated repo metadata" diff --git a/tests/testdb.c b/tests/testdb.c deleted file mode 100644 index 92d2bd88..00000000 --- a/tests/testdb.c +++ /dev/null @@ -1,359 +0,0 @@ -#include "config.h" - -#include -#include - -/* -static void -dump_db (FlatpakDb *db) -{ - g_autofree char *s = flatpak_db_print (db); - g_printerr ("\n%s\n", s); -} -*/ - -static FlatpakDb * -create_test_db (gboolean serialized) -{ - FlatpakDb *db; - - g_autoptr(FlatpakDbEntry) entry1 = NULL; - g_autoptr(FlatpakDbEntry) entry2 = NULL; - g_autoptr(FlatpakDbEntry) entry3 = NULL; - g_autoptr(FlatpakDbEntry) entry4 = NULL; - g_autoptr(FlatpakDbEntry) entry5 = NULL; - g_autoptr(FlatpakDbEntry) entry6 = NULL; - g_autoptr(FlatpakDbEntry) entry7 = NULL; - GError *error = NULL; - const char *permissions1[] = { "read", "write", NULL }; - const char *permissions2[] = { "read", NULL }; - const char *permissions3[] = { "write", NULL }; - - db = flatpak_db_new (NULL, FALSE, &error); - g_assert_no_error (error); - g_assert (db != NULL); - - { - g_auto(GStrv) ids = flatpak_db_list_ids (db); - g_assert (ids != NULL); - g_assert (ids[0] == NULL); - } - - { - g_auto(GStrv) apps = flatpak_db_list_apps (db); - g_assert (apps != NULL); - g_assert (apps[0] == NULL); - } - - entry1 = flatpak_db_entry_new (g_variant_new_string ("foo-data")); - entry2 = flatpak_db_entry_set_app_permissions (entry1, "org.test.bapp", permissions2); - entry3 = flatpak_db_entry_set_app_permissions (entry2, "org.test.app", permissions1); - entry4 = flatpak_db_entry_set_app_permissions (entry3, "org.test.capp", permissions1); - - flatpak_db_set_entry (db, "foo", entry4); - - entry5 = flatpak_db_entry_new (g_variant_new_string ("bar-data")); - entry6 = flatpak_db_entry_set_app_permissions (entry5, "org.test.app", permissions2); - entry7 = flatpak_db_entry_set_app_permissions (entry6, "org.test.dapp", permissions3); - - flatpak_db_set_entry (db, "bar", entry7); - - if (serialized) - flatpak_db_update (db); - - return db; -} - -static void -verify_test_db (FlatpakDb *db) -{ - g_auto(GStrv) ids; - g_autofree const char **apps1 = NULL; - g_autofree const char **apps2 = NULL; - g_auto(GStrv) all_apps = NULL; - - ids = flatpak_db_list_ids (db); - g_assert (g_strv_length (ids) == 2); - g_assert (g_strv_contains ((const char **) ids, "foo")); - g_assert (g_strv_contains ((const char **) ids, "bar")); - - { - g_autoptr(FlatpakDbEntry) entry = NULL; - g_autofree const char **permissions1 = NULL; - g_autofree const char **permissions2 = NULL; - g_autofree const char **permissions3 = NULL; - g_autofree const char **permissions4 = NULL; - g_autoptr(GVariant) data1 = NULL; - - entry = flatpak_db_lookup (db, "foo"); - g_assert (entry != NULL); - data1 = flatpak_db_entry_get_data (entry); - g_assert (data1 != NULL); - g_assert_cmpstr (g_variant_get_type_string (data1), ==, "s"); - g_assert_cmpstr (g_variant_get_string (data1, NULL), ==, "foo-data"); - apps1 = flatpak_db_entry_list_apps (entry); - g_assert (g_strv_length ((char **) apps1) == 3); - g_assert (g_strv_contains (apps1, "org.test.app")); - g_assert (g_strv_contains (apps1, "org.test.bapp")); - g_assert (g_strv_contains (apps1, "org.test.capp")); - permissions1 = flatpak_db_entry_list_permissions (entry, "org.test.app"); - g_assert (g_strv_length ((char **) permissions1) == 2); - g_assert (g_strv_contains (permissions1, "read")); - g_assert (g_strv_contains (permissions1, "write")); - permissions2 = flatpak_db_entry_list_permissions (entry, "org.test.bapp"); - g_assert (g_strv_length ((char **) permissions2) == 1); - g_assert (g_strv_contains (permissions2, "read")); - permissions3 = flatpak_db_entry_list_permissions (entry, "org.test.capp"); - g_assert (g_strv_length ((char **) permissions3) == 2); - g_assert (g_strv_contains (permissions3, "read")); - g_assert (g_strv_contains (permissions3, "write")); - permissions4 = flatpak_db_entry_list_permissions (entry, "org.test.noapp"); - g_assert (permissions4 != NULL); - g_assert (g_strv_length ((char **) permissions4) == 0); - } - - { - g_autoptr(FlatpakDbEntry) entry = NULL; - g_autofree const char **permissions5 = NULL; - g_autofree const char **permissions6 = NULL; - g_autoptr(GVariant) data2 = NULL; - - entry = flatpak_db_lookup (db, "bar"); - g_assert (entry != NULL); - data2 = flatpak_db_entry_get_data (entry); - g_assert (data2 != NULL); - g_assert_cmpstr (g_variant_get_type_string (data2), ==, "s"); - g_assert_cmpstr (g_variant_get_string (data2, NULL), ==, "bar-data"); - apps2 = flatpak_db_entry_list_apps (entry); - g_assert (g_strv_length ((char **) apps2) == 2); - g_assert (g_strv_contains (apps2, "org.test.app")); - g_assert (g_strv_contains (apps2, "org.test.dapp")); - permissions5 = flatpak_db_entry_list_permissions (entry, "org.test.app"); - g_assert (g_strv_length ((char **) permissions5) == 1); - g_assert (g_strv_contains (permissions5, "read")); - permissions6 = flatpak_db_entry_list_permissions (entry, "org.test.dapp"); - g_assert (g_strv_length ((char **) permissions6) == 1); - g_assert (g_strv_contains (permissions6, "write")); - } - - { - g_autoptr(FlatpakDbEntry) entry = NULL; - entry = flatpak_db_lookup (db, "gazonk"); - g_assert (entry == NULL); - } - - all_apps = flatpak_db_list_apps (db); - g_assert (g_strv_length (all_apps) == 4); - g_assert (g_strv_contains ((const char **) all_apps, "org.test.app")); - g_assert (g_strv_contains ((const char **) all_apps, "org.test.bapp")); - g_assert (g_strv_contains ((const char **) all_apps, "org.test.capp")); - g_assert (g_strv_contains ((const char **) all_apps, "org.test.dapp")); -} - -static void -test_db_open (void) -{ - GError *error = NULL; - FlatpakDb *db; - - db = flatpak_db_new (g_test_get_filename (G_TEST_DIST, "dbs", "does_not_exist", NULL), TRUE, &error); - g_assert_error (error, G_FILE_ERROR, G_FILE_ERROR_NOENT); - g_assert (db == NULL); - g_clear_error (&error); - - db = flatpak_db_new (g_test_get_filename (G_TEST_DIST, "dbs", "does_not_exist", NULL), FALSE, &error); - g_assert_no_error (error); - g_assert (db != NULL); - g_clear_error (&error); - g_object_unref (db); - - db = flatpak_db_new (g_test_get_filename (G_TEST_DIST, "dbs", "no_tables", NULL), TRUE, &error); - g_assert_error (error, G_FILE_ERROR, G_FILE_ERROR_INVAL); - g_assert (db == NULL); - g_clear_error (&error); -} - -static void -test_serialize (void) -{ - g_autoptr(FlatpakDb) db = NULL; - g_autoptr(FlatpakDb) db2 = NULL; - g_autofree char *dump1 = NULL; - g_autofree char *dump2 = NULL; - g_autofree char *dump3 = NULL; - GError *error = NULL; - char tmpfile[] = "/tmp/testdbXXXXXX"; - int fd; - - db = create_test_db (FALSE); - - verify_test_db (db); - - dump1 = flatpak_db_print (db); - - g_assert (flatpak_db_is_dirty (db)); - - flatpak_db_update (db); - - verify_test_db (db); - - g_assert (!flatpak_db_is_dirty (db)); - - dump2 = flatpak_db_print (db); - - g_assert_cmpstr (dump1, ==, dump2); - - fd = g_mkstemp (tmpfile); - close (fd); - - flatpak_db_set_path (db, tmpfile); - - flatpak_db_save_content (db, &error); - g_assert_no_error (error); - - db2 = flatpak_db_new (tmpfile, TRUE, &error); - g_assert_no_error (error); - g_assert (db2 != NULL); - - dump3 = flatpak_db_print (db2); - - g_assert_cmpstr (dump1, ==, dump3); - - unlink (tmpfile); -} - -static void -test_modify (void) -{ - g_autoptr(FlatpakDb) db = NULL; - const char *permissions[] = { "read", "write", "execute", NULL }; - const char *no_permissions[] = { NULL }; - - db = create_test_db (FALSE); - - /* Add permission */ - { - g_autoptr(FlatpakDbEntry) entry1 = NULL; - g_autoptr(FlatpakDbEntry) entry2 = NULL; - - entry1 = flatpak_db_lookup (db, "foo"); - entry2 = flatpak_db_entry_set_app_permissions (entry1, "org.test.app", permissions); - flatpak_db_set_entry (db, "foo", entry2); - } - - /* Add entry */ - { - g_autoptr(FlatpakDbEntry) entry1 = NULL; - g_autoptr(FlatpakDbEntry) entry2 = NULL; - - entry1 = flatpak_db_entry_new (g_variant_new_string ("gazonk-data")); - entry2 = flatpak_db_entry_set_app_permissions (entry1, "org.test.eapp", permissions); - flatpak_db_set_entry (db, "gazonk", entry2); - } - - /* Remove permission */ - { - g_autoptr(FlatpakDbEntry) entry1 = NULL; - g_autoptr(FlatpakDbEntry) entry2 = NULL; - - entry1 = flatpak_db_lookup (db, "bar"); - entry2 = flatpak_db_entry_set_app_permissions (entry1, "org.test.dapp", no_permissions); - flatpak_db_set_entry (db, "bar", entry2); - } - - /* Verify */ - { - g_autoptr(FlatpakDbEntry) entry5 = NULL; - g_autoptr(FlatpakDbEntry) entry6 = NULL; - g_autoptr(FlatpakDbEntry) entry7 = NULL; - g_autofree const char **apps2 = NULL; - g_auto(GStrv) apps3 = NULL; - g_autofree const char **permissions1 = NULL; - g_autofree const char **permissions2 = NULL; - g_autofree const char **permissions3 = NULL; - - entry5 = flatpak_db_lookup (db, "foo"); - permissions1 = flatpak_db_entry_list_permissions (entry5, "org.test.app"); - g_assert (g_strv_length ((char **) permissions1) == 3); - g_assert (g_strv_contains (permissions1, "read")); - g_assert (g_strv_contains (permissions1, "write")); - g_assert (g_strv_contains (permissions1, "execute")); - - entry6 = flatpak_db_lookup (db, "bar"); - permissions2 = flatpak_db_entry_list_permissions (entry6, "org.test.dapp"); - g_assert (g_strv_length ((char **) permissions2) == 0); - - entry7 = flatpak_db_lookup (db, "gazonk"); - permissions3 = flatpak_db_entry_list_permissions (entry7, "org.test.eapp"); - g_assert (g_strv_length ((char **) permissions3) == 3); - g_assert (g_strv_contains (permissions3, "read")); - g_assert (g_strv_contains (permissions3, "write")); - g_assert (g_strv_contains (permissions3, "execute")); - - apps2 = flatpak_db_entry_list_apps (entry6); - g_assert_cmpint (g_strv_length ((char **) apps2), ==, 1); - g_assert (g_strv_contains (apps2, "org.test.app")); - - apps3 = flatpak_db_list_apps (db); - g_assert_cmpint (g_strv_length (apps3), ==, 4); - g_assert (g_strv_contains ((const char **) apps3, "org.test.app")); - g_assert (g_strv_contains ((const char **) apps3, "org.test.bapp")); - g_assert (g_strv_contains ((const char **) apps3, "org.test.capp")); - g_assert (g_strv_contains ((const char **) apps3, "org.test.eapp")); - } - - flatpak_db_update (db); - - /* Verify after serialize */ - { - g_autoptr(FlatpakDbEntry) entry5 = NULL; - g_autoptr(FlatpakDbEntry) entry6 = NULL; - g_autoptr(FlatpakDbEntry) entry7 = NULL; - g_autofree const char **apps2 = NULL; - g_auto(GStrv) apps3 = NULL; - g_autofree const char **permissions1 = NULL; - g_autofree const char **permissions2 = NULL; - g_autofree const char **permissions3 = NULL; - - entry5 = flatpak_db_lookup (db, "foo"); - permissions1 = flatpak_db_entry_list_permissions (entry5, "org.test.app"); - g_assert (g_strv_length ((char **) permissions1) == 3); - g_assert (g_strv_contains (permissions1, "read")); - g_assert (g_strv_contains (permissions1, "write")); - g_assert (g_strv_contains (permissions1, "execute")); - - entry6 = flatpak_db_lookup (db, "bar"); - permissions2 = flatpak_db_entry_list_permissions (entry6, "org.test.dapp"); - g_assert (g_strv_length ((char **) permissions2) == 0); - - entry7 = flatpak_db_lookup (db, "gazonk"); - permissions3 = flatpak_db_entry_list_permissions (entry7, "org.test.eapp"); - g_assert (g_strv_length ((char **) permissions3) == 3); - g_assert (g_strv_contains (permissions3, "read")); - g_assert (g_strv_contains (permissions3, "write")); - g_assert (g_strv_contains (permissions3, "execute")); - - apps2 = flatpak_db_entry_list_apps (entry6); - g_assert_cmpint (g_strv_length ((char **) apps2), ==, 1); - g_assert (g_strv_contains (apps2, "org.test.app")); - - apps3 = flatpak_db_list_apps (db); - g_assert_cmpint (g_strv_length (apps3), ==, 4); - g_assert (g_strv_contains ((const char **) apps3, "org.test.app")); - g_assert (g_strv_contains ((const char **) apps3, "org.test.bapp")); - g_assert (g_strv_contains ((const char **) apps3, "org.test.capp")); - g_assert (g_strv_contains ((const char **) apps3, "org.test.eapp")); - } -} - -int -main (int argc, char **argv) -{ - g_test_init (&argc, &argv, NULL); - - g_test_add_func ("/db/open", test_db_open); - g_test_add_func ("/db/serialize", test_serialize); - g_test_add_func ("/db/modify", test_modify); - - return g_test_run (); -}